FLARToolKitはどうやってマーカーを見つけているの?

  • このエントリーをはてなブックマークに追加
  • 0

最近、ARToolKit Marker Generator Onlineと言うコンテンツが
結構世界中で愛用されているようないないような、かすかな手応えを得ている訳だが、
俺がつけた新機能である、

  • マーカ枠サイズ変更機能
  • 分割数変更機能

について、原理を含めて細かく解説していきたいと思う。
つまり、

  • ARToolKit用のマーカの枠の役割は?
  • 分割数って何?

について解説する。

枠の部分に関してはFLARToolKit依存の部分もあるが、
基本的には全てのARToolKit派生ライブラリに適用できる話なので、
参考になればうれしい。
そして、間違っている部分に関しては指摘をいただきたい。

が、その前にまず用語の整理を行おう。
マーカは、枠と中の絵で出来ている。
この解説では、中の絵の事を「マーカ本体」、
枠とマーカ本体を合わせて「マーカ全体」と呼ぶ。


3Dキャラクターが現実世界に誕生! ARToolKit拡張現実感プログラミング入門

著者/訳者:橋本 直

出版社:アスキー・メディアワークス( 2008-09-17 )

定価:

Amazon価格:¥ 8,067

大型本 ( 240 ページ )

ISBN-10 : 4048673610

ISBN-13 : 9784048673617


あと、英語ブログで売れていた、AR関連と思われる本とか3冊。

Augmented Reality: A Practical Guide

著者/訳者:Stephen Cawood Mark, Ph.D. Fiala

出版社:Pragmatic Bookshelf( 2008-01 )

定価:¥ 4,291

Amazon価格:¥ 20,729

ペーパーバック ( 311 ページ )

ISBN-10 : 1934356034

ISBN-13 : 9781934356036



Physical Computing: Sensing and Controlling the Physical World with Computers

著者/訳者:Dan O'Sullivan Tommy Igoe

出版社:Course Technology Ptr( 2004-03 )

定価:¥ 3,655

Amazon価格:¥ 4,401

ペーパーバック ( 464 ページ )

ISBN-10 : 159200346X

ISBN-13 : 9781592003464



Spatial Augmented Reality: Merging Real and Virtual Worlds

著者/訳者:Oliver Bimber Ramesh Raskar

出版社:A K Peters/CRC Press( 2005-08-08 )

定価:¥ 10,333

Amazon価格:¥ 7,960

ハードカバー ( 392 ページ )

ISBN-10 : 1568812302

ISBN-13 : 9781568812304



マーカ検索の流れ

まず、基本的にARToolKit(及び派生ライブラリ)では、
マーカを検索するために2つのステップを踏んでいる。

  1. 画像内から、「これはマーカかも知れない」と判断できるような四角形(マーカ候補)をたくさん見つける
  2. マーカ候補内部のマーカ本体の位置をスキャンし、マーカかどうかを判断する

この2ステップによって、一番マーカっぽい四角形が見つけられ、
それをマーカとして扱っているのだ。
基本的にはこの2ステップを、入力画像に対して行う。
つまり、動画であれば全フレーム行うわけだ。

枠の役割

まず、マーカの枠の役割について説明する。

実は、この枠の役割は
「マーカ候補の四角形を、入力画像内から探す」
事である。

え?そんなこと?と思われるかもしれないが、
実際、マーカ候補の四角形がマーカかどうか調べる際には、
マーカ部分は除外されているので、他に役割は無いと言える。

逆に言うと、他の手段で四角形を探索できれば、
こんな阿呆みたいに太い枠は要らないということだ。

特にFLARToolKitでは、この部分で、
結構特殊な、かつActionScriptならではの方法を採用している。
まず、FLARRasterFilter_BitmapDataThreshold#doFilter内で、
BitmapData#applyFilterやらBitmapData#thresholdで画像を加工し、
その後FLARLabeling_BitmapData#labeling内で、
BitmapData#getColorBoundsRectで四角形を探している。
(細かい抜けがあるかもしれないので、実際にソースを見て確認してほしいが)

と言うことで、この「四角形を探す処理」の部分について
調査すれば、どんなマーカであれば認識できるのかがわかり、
結果的に枠の制限から飛び出すことが出来るかもしれない。

たとえばFLARToolKitでは、電脳フィギュアARisの
特殊なマーカを普通に認識することが出来る。

コラム

「枠の幅」は、ARToolKit Marker Generator Onlineで変更可能な値で、
一番細くて0にまで出来る。
0の場合、マーカ候補の四角形全体を、マーカとして扱うことが出来る。
枠が一切なくなるため、かなり表現に幅が出ると思われるが、
一応、四角形として認識可能にしておく必要がある。

なので、デザインを上手く使って、それなりの外枠を残す必要があると言える。
例えば、電脳フィギュアARisのマーカは、黒ベースになっているため
枠っぽいものが無くてもちゃんと認識できる。
このように、マーカの背景を黒にしておくと言うのは有効だ。

枠の幅

次に、枠の幅について解説。

さて、この枠は見てわかるとおり、凄く太い。
正確には、幅がマーカ本体の幅の半分になっている。
これは「暗黙の了解」らしい。

確かに、FLARToolKitですらソースを見るとそのようになっているのだが、
「特に仕様として明文化はされていない」
と言う意味なのだろうか?

(参考サイト)

前述の通り画像内からマーカを見つけ出すためだけに存在している枠は、
マーカ候補の四角形が見つかった時点で用無しになる。
コード上でも、マーカ候補がマーカかどうかを検査する際に、
枠部分はバッサリ切り取られている。

そして、この「枠をバッサリ切り取る」という処理が、
「枠と本体の比率が1:2:1である必要がある」
理由になっている。
と言うのも、実際には「枠を切り取る」のではなく、
上下左右25%ずつを、枠と決め付けて切り取っているからだ。

つまり、細い枠線を使ったとしても、ARToolKitは全く関係なく切り取ってしまう。
例えば、このサイトウサンマーカ、ちょっと枠が細いが、
ARToolKit的には枠の太さはやっぱり1:2:1で変わらない。

枠線が細いサイトウサンマーカ
実はこれと同じ。

時々、ARToolKitについて「マーカの枠は細くても大丈夫」
と言う解説があるが、実際のところは枠を細くしたとしても
プログラム上では太いままの扱いなので、本体中心部分でちゃんと差を出さないと
上手く認識してくれなくなるので注意が必要だ。

コラム

ちなみに、ソース上ではFLARColorPatt_O3#updateExtpatにて、以下のように表現されている。

ActionScript

  1. xw = 102.5 + 5.0 * (i + 0.5) / i_xdiv2;
  2. yw = 102.5 + 5.0 * (j + 0.5) / i_ydiv2;

この、「2.5」が、25%を意味している。
枠の幅(片方)がマーカ全体の幅の25%を占めていると言う意味だ。
次の「5.0」が50%を意味している。
マーカ本体の幅がマーカ全体の50%を占めている。
で、合計すると107.5になるので、残り2.5(25%)。
この最後の25%が、枠の幅(もう片方)だ。

俺が作ったFLARDynamicRatioColorPatt_O3では、
この2.5や5.0の値を可変にすることで、枠幅を変更することが出来ている。

マーカの分割数

ARToolKitの標準では、マーカは16分割されている。
パターンファイルを見ても、スペース区切りで1行に16個の数字が
並んでいるのがわかるが、アレが16分割の印だ。
なお、縦は食う業が出てくるまでに48行あるが、
アレは色成分が赤、青、緑の3色あるので、16×3で48になっている。

さて、ARToolKitにおける、マーカの分割数とは何か?
それは、マーカ本体の絵を見る際の粒度だ。
ARToolKitでは、マーカ本体の絵を縦16、横16に分割し、
そのエリア内の色の平均値を算出している。

こんな感じだ。

そして、その平均値の集合をパターンとして持っているのだ。
パターンファイルも、勿論その数値になっている。
(正確には少し加工してあるが)

当然、マーカ候補の四角形を見つけた時も、同じ事をしている。
この、マーカ本体を分割すると言う作業があることで、
どんな大きさのマーカ候補にも対応することが出来るのだ。
例えば、ARToolKitの標準マーカ、Hiroの場合、
この記事のデモ(ウチの英語ブログの記事。画像クリックすると開始)
FLARCodeImage:Utility for FLARToolKit << flash.tarotaro.org.blog
にあるような感じで認識されている。
このデモでは、パターンファイルを画像化して、ちゃんとマーカ認識を行わせている。
つまり、このモザイクのような画像でも、あの「Hiroマーカ」と同じ役割をするのだ。

このことから分かる様に、細い線のみで描かれた絵をマーカにしようとすると、
殆ど認識されない。
16×16の分割が上手く機能するように、考えてマーカをデザインする必要があると言うことだ。

コラム

さて、ARToolKit Marker Generator Onlineを使えば、
枠の幅を一番細くて0にまで変更することが出来る。
枠の幅が0の場合、マーカ候補の四角形全体を、16×16に分割することになるのだが、
1つのマスが面積的に言うと標準マーカの倍になる。
つまり、かなり大味な認識をすることになるのだ。

そこで、分割数を増やす必要がある。
そのために、ARToolKit Marker Generator Onlineでは
Segmentsの値を変更することでマーカの分割数を
最大64×64に変更することが出来るのだ。

スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク