公開日:2011/6/21 0:00:00

ARマーカーの基本

About

ARToolKitを基本とした、NyARToolKit、FLARToolKit、FLARManagerにほぼ共通したマーカーについての基本知識となります。
また、検出方法についても一部触れているので、仕様を決める前には必ず内容を確認してください。

基本編

マーカーとは

正方形の黒枠で囲われた中に、何かしらのパターンが描かれているものです。
このマーカーには幾つかの制約があります。

About Marker

上記は基本的な事項になります。
実際には下記に続く説明を理解した上で、使用状況に応じて適切に作成することが必要です。
比較的自由度が高いように思えますが、仕様環境に応じて制約がついてまわります。マーカーを決める場合は、3~5パターン程度作成した上で、サンプルを用いて仕様想定環境下で試験することをお勧めします。

パターンファイル

パターンファイルとは、マーカーから作成するデータファイルで、白領域内の画像を0~255の数値でデータ化したものになります。
パターンファイルは、縦横の分割数……解像度を元にデータ化されます。例えば白領域内の画像を解像度4x4であるならば、全体を16分割して数値化します。

About Marker pattern file

基本数値は縦横ともに16を指定します。 解像度を上げることにより細かいパターンであっても認識率が上がりますが、負荷が高くなります。

パターンファイルの作り方

ARToolKitのツールを使うことも可能ですが、オンラインで検索を使うことをお勧めします。

かつてはFLASHで作成されたツールなどいろいろあったのですが、現在は動作しない、閉鎖したなど、簡単に作成できるツールがなくなってしまいました……

応用編

マーカー検出の原理を簡単に説明しつつ、どのような時に認識できないかなどを説明します。

検出の流れ

まずは基本原理をおさらいします。

ARToolKitは、カメラの映像を画像として取得、その画像をグレースケール化し、その後、しきい値に従って白黒の2値画像に変換します。 さらにその白黒画像を反転させてから、白い四角形の枠とその内部を切り出し、四角形から黒枠の割合分内側の四角形を切り出します。 切り出した四角形とパターンファイルの値を比較し、一致率を算出します。

マーカー検出の処理の流れ

マーカーと周囲の明るさとの関係

検出時、グレースケール->2値化する際に閾値(しきい値)を設定して実行します。この際に、適切な閾値でない場合、マーカーの検出が困難になります。

映像比較
カメラ映像
カメラ映像
2値化画像
閾値:80閾値:100閾値:120閾値:140
二値化画像:閾値=80二値化画像:閾値=100二値化画像:閾値=120二値化画像:閾値=140

図中の閾値:80~100では黒枠上にノイズが乗ってしまっていたりするため、黒枠が白く綺麗に表示されていません。 そのためマーカーとしては認識できませんでした。

基本的に標準的な~80mmマーカーで近距離(30cm程度)で使用することを想定する場合は、閾値は固定値でもほぼ問題ありません。
それ以上の距離で使用する場合は、周辺の明るさに応じて閾値を自動的に調整する機能をもちることをお勧めします。

光に応じて認識したりしなかったりという現象はよくありますが、同時に照り返しによって認識できない現象も発生します。 下図を見てください。

光沢による不認識現象

マーカーの一部が光によって白っぽくなっていると思います。このため認識できません。
二値化画像を見ればその理由がわかると思います。

光源直下や光源からの光が当たる場所において、マーカーが白っぽくなっている場合は黒枠が検出できない、または白領域のパターンが読み取れないなどの現象が発生し認識できません。
マーカーは光沢のある用紙を避け、マット加工されたものを使用することをお勧めします。

周囲の色との関係

マーカーの周囲には余白が必要となります。余白は2値化した際に黒枠(2値化した場合に白枠になる部分)を明確に判別するために使用します。 マーカーの大きさや白領域内の内容、カメラとマーカーとの距離によって必要な余白の大きさは変わります。

白枠あり+白背景

余白枠がありかつ白背景の場合は認識できます。

白枠あり+黒背景

余白枠がありかつ黒背景の場合も認識できます。

白枠無し+黒背景

余白枠がほとんど無く、一部かけている場合は、2値化した場合に枠ができないため認識できません。

マーカー周辺の色、余白をどうするかは、2値化した映像を確認してから決めることをお勧めします。

マーカーの色の拡張性

ここまで見てきたように、2値化した場合にどのように映るかによって変わることがわかると思います。
つまり、2値化した場合に、黒と同じように処理されれば、どのような色を用いても構わないことになります。

例えば、マーカー全体を濃い目の色で塗った場合にどうなるかを見てみましょう。

マーカーを濃い青で塗った場合

マーカーを濃い赤で塗った場合

2値化した際にきちんとマーカーの形が出ています。
試していませんが、黒枠部分をチェックや模様をつけても、色によっては問題がないことが考えられます。

次に白領域内の白い部分に薄い色をつけてみます。

白領域内の白い部分を薄い赤色で塗った場合

これも問題ありません。なお、この場合、マーカーを作るときには色をつけずに作成したほうが安定します。

必ずしも白黒でなければならないと決まっていないことが、この結果からわかります。
最も、印刷によって色は変わりやすいので、あまり汎用的ではないことも理解してください。

色をつけたものを用いる場合は、本番の印刷物を用いた場合と、家庭用プリンタやレーザープリンタで印刷したものなど、複数パターンで試してから使用してください。

まとめ

ARToolKitが白黒画像にしてから認識処理を行っていることが理解されたと思います。 今回はFLARToolKitを用いていることもあり、複雑なパターンまで試していませんが、二値化する前に色を入れ替えたり強調する様な画像処理を入れることによって、様々な応用が可能になります。

前段の画像処理を実装できれば、普通のマーカー式ARを超えることも可能です。 チャレンジしてみては如何でしょうか?