読者です 読者をやめる 読者になる 読者になる

元派遣プログラマの自称技術系ブログです。雑記とか自作のオープンソースプロジェクトの話とか。
Javaとか組込とかできます。お仕事ください。

ARToolKitの死角問題

ARToolKitのパターン認識処理部にある画像からパターンを抜き出す処理では、マーカーの頂点情報から逆行列計算を行う場所があります。

そのため、頂点情報の組合せによっては逆行列が求められず、マーカーを検出しているにも関わらず、マーカーパターンの取得が行えない事が原因で、認識処理が失敗する現象が発生します。

この現象は大き目の1個2個のマーカーの場合は余り気にならない現象ですが、多数の小さなマーカーを認識させた場合には、結構な確率で発生するようです。

そんなわけで、どんな形状のマーカーをカメラで写すと問題があるかを調べてみました。

この図は、10x10にマーカーを並べた紙を色々な角度から15分間くらい撮影し続けて、逆行列計算エラーが出たマーカー座標を記録したものです。

赤枠がQVGAのカメラ映像だと思ってください。黒い枠がマーカー位置を表しています。黒枠の中にぴったりとマーカーが入った場合に、逆行列が求められずにパターン一致処理が出来なくなって認識処理が失敗します。

見た感じ、16x16くらいのマーカー以下になると、頻繁に逆行列計算に失敗するようです。(中にはえらくでかいものも混じってますが…。)

この問題の対応はちょっと厄介で、逆行列を使わないパターン抽出コードを書いて、置き換えてあげる必要があるようです。

NyARToolKitでは近いうちに対応したいと思いますが、本家用も需要がありそうだな…。