電脳フィギュア ARisのキューブ探索アルゴリズムを考える。

最近すっかり話題も落ち着いた感のある電脳フィギュア ARisだが、俺は相変わらずあのキューブ型マーカを認識すべく頑張っている。で、認識中に凄く悩まされるのが、キューブの面を他の面と誤認識する事が多いと言う事。これは5面あるキューブ型マーカの内、「ARis」の面以外はほとんど同じであると言う事に起因している。
そこで気付いたんだが、もしかしてキューブ型のマーカに対しては、ARToolKitがやっているようなconfidence(一致度)を求めるような評価をするのではなく、もっと簡易的な方法でマーカ認識をやっているのではないだろうかと考えた。
今回は、その考察を行っていく。
広く意見を求めたい所だが、残念ながらARToolKit人口そのものが少ないので、「深く意見を求めたい」に変えよう。

もう一つ、今非常に知りたいことがある。
立方体の「面」を英語で何と言うか?
だ。
変数名につける英語が分からない、英語力の無い俺を許してくれー

マーカが似ている

まず、キューブ型のマーカを見つけ出すプログラムを書くために、キューブの各面を識別しなくてはならない。
現在は、プログラム中で「ARis」と書いてある面を「上」とし、「is」の下にある辺とつながってる面を「前」、その反対側を「後」としている。また、「前」を向いた時に左手方向がある面を「左」、反対側を「右」として、それぞれ英語名を与えている。

つまり下記の展開図の真ん中が「top」、下が「front」、上が「back」、右が「left」、左が「right」となる(左右は逆でややこしいが)。

で、ここで問題だ。見て分かるとおり、top以外のマーカはほとんど同じ形をしている。

違いはキューブ型にしたときに右上に来る長方形の部分だけで、その他の形は同一だ。
この、同じ部分だけのマーカを「基本マーカ」と呼ぼう。

ここで、展開図と基本マーカを図示する。

キューブ型マーカ
電脳キューブの「基本マーカ」

もしARToolKitの普通のアルゴリズムを使うならば、この「マーカが似ている」と言うのは誤認識が増えるだけで不利になるはずだ。
それなのに、ARisはあえて似た形のマーカを採用している。

このことから、
「実は電脳フィギュアは通常よりもっと簡単な方法でマーカを判定している」
と言う可能性が考えられる。そのために、この「似た形のマーカ」が必要となっているのではないだろうか?
俺なりにその可能性を考え、アルゴリズムを予測してみた。

  1. マーカ候補の四角形(以後Squareと表記)を「田」の形に4分割する。
  2. 「マーカ左上の真っ白い部分」(「マーカ左下真っ黒い部分」でも可)が「田」のどこにあるのかを調べ、マーカの向きを決定する。
  3. 「マーカ右上の長方形」がどのような向きをしているかを簡単に調べ、キューブの前後左右どの面であるかを決定する。

長方形の向きを簡単に調べるとは、例えば「右上4分の1をさらに「田」に分割して、何処が白で何処が黒かを調査する」など、すぐ済みそうなものだ。
また、右下の三角形についても、それなりに検査しているかもしれない。
つまり、マーカ全体の一致を評価していないのではなかろうか?
と言うより、評価する必要が無いのかもしれない。

もしくは、まず基本マーカとの一致を、Squareの右上に該当する部分を意図的に黒く塗って評価している可能性もある。
これなら、単一のマーカを検索するアルゴリズム(FLARToolKitならFLARSingleMarkerDetector)を少し改造する事で出来る。

ただし、この辺りは実際にARisを持っている人が色々なマーカを自作して
上のアルゴリズムが正しいかどうかを検証しないと分からないんだが、
ARToolKitterでARiserと言うのはあまりいない気がする。
何となくだが、Linuxユーザが
「Windowsなんか要らん!Linuxで出来る!」「Windowsなんて高価なだけで役に立たん!」
と叫ぶのと似た感情を持っている気がする。
俺は、少し持っている。特に後者を、だ。
正直、ARisは高い。手が出ない。

普通のARも併用している?

洋服選択カードや指示棒、などの認識には、普通のマーカベースのARも使っていると思われる。
ただし、カードの方は何故マーカを2つ、それも同じマーカの白黒反転バージョンを並べて使用しているかは不明。
その辺りにも、何か工夫があるのかもしれない。
さすがに、指示棒は普通のARっぽいが。

そもそも、ARToolKitの思想は、「全てのSquareに、マーカを割り当ててやる」と言うもののように思う。
Squareが10個あったら、その10個全てに
「あなたに一番そっくりなのは、このマーカですね。一致度は○○%です。」
と言う情報を与える。
そのため、マーカが3種、Square10個の場合、30回の比較が発生する。
正直、これは結構重いんじゃなかろうか、多分。

一方、ARisやキューブ方マーカに必要な思想はその全く逆で、「マーカにSquareを割り当てる」と言うものではないだろうかと考えた。
つまり、10個のSquareがあった時、こう判断する。
「洋服マーカ用のSquareはこれ、キューブの基準になるSquareはこれ。あとのSquareはゴミ」
この考え方だと、例えば「これはキューブ用だな」と判定されたSquareは洋服マーカと比較する必要がなくなる。
さらに、1個目でこれは洋服用マーカとの一致度が90%だとわかれば、もう他のSquareは見なくていいやって気になる。

この「なるべくSquareとマーカの比較回数を減らす」と言う発想が、
キューブ型マーカには不可欠なのでは?と感じた。
あと、キューブ型マーカを作ってて感じたのは、
「ある程度の一致度を叩き出したら、もう正解で良いや」
と言う決め付けの心が大事だと言う事だ。これも、Squareにマーカを割り当てる発想だと無理だ。

1つの画面にマーカは1個しか出てこない
と言う仮定がもてるかどうかの差だ。

まとめ

ここまでの考察によって、以下の結論が得られる。
キューブ型マーカの評価用のプログラムは、自分で作るしかない
これは多少面倒な作業だが、まぁ仕方ない。頑張ってみるか。

などと言う記事を書いてからA虎@Hatena::Diaryを見たら、
まさに同じようなネタが出ていてビックリした。今読んでるところ。

ARToolkitだとちょっとバラすのが面倒なので、NyARToolkitでやるときの方法と言うかメモ。他にも方法有ると思いますが、計算量と精度がそこそこ期待できるのを考えてみます。
NyARToolkitでのキューブ型マーカーの認識方法を考えてみた – A虎@Hatena::Diary

吼えろペン3巻の、プロレスの話を思い出す。

ちなみに、俺が今回述べた話は、完全に「ARis用電脳キューブ」に特化した話なので、
汎用的なキューブマーカだとA虎@さんの記事を見るほうが断然良い。
まぁ、ワザと似たマーカで判定速度を上げると言う試みも、本当に出来るならオススメって事になるか。

タイトルとURLをコピーしました