Hatena::ブログ(Diary)

flashrod このページをアンテナに追加 RSSフィード

2007-10-07 AS3でAR

AS3でAugmented Reality 22:04  AS3でAugmented Realityを含むブックマーク

電脳コイルがいよいよ佳境という感じですがいかがお過ごしでしょうか。404 Not Foundを見てすごく面白そうだけど、ちょっと難しそうなので逡巡してたところ、四畳半社長がページが見つかりません:@niftyで「1日で作って簡単」などというので悔しいのでやってみることにした。

no titleダウンロードしてソースを眺めてたところ、arDetectMarkerLite() が求めているやつらしい。中身は

  1. arsLabeling()
  2. arDetectMarker2()
  3. arGetMarkerInfo()

arsLabeling()がラベリング、arDetectMarker2()がマーカを認識、arGetMarkerInfo()はパターン認識の様子。

パターン認識は難しいので今回はやらない。正方形認識までなら簡単だと四畳半社長が言ってるのでそこまでやることにする。

AS3でのARはどういう作戦で行くかというと、

  1. Webカメラから入力画像を得る
  2. ラベリング
  3. マーカを認識
  4. カメラ画像に重ね合わせて表示

これでなんとなくARっぽいといえるのではないか。

カメラ画像

Flex2でWEBカメラから入力画像を得るのは簡単で一応復習しておくと flash.media.Cameraクラスの例のとおりでよい。

404 Not Found

あとはvideoをBitmapDataにdrawすればキャプチャできる。

ラベリング

前回ラベリングで素朴なアルゴリズムを出してたら超絶技巧な人たちに改善提案をいただいたので、ありがたくちょうだいする。

thresholdの"=="やgetColorBoundsRectはきっと自分だけではなかなか思いつかなかったと思う。ああいう気づきってのはたぶん引き出しの多さから来るのだろうなあと思った。さすがは超絶技巧

マーカ認識

arDetectMarker2()を読んでいると、マーカ認識は2段階あって、

  1. それぞれのラベルから輪郭抽出
  2. 輪郭から頂点を検出して、頂点が4つあればマーカと認識

なので、正方形に限らず四辺形ならなんでも認識してしまうようだ。たぶん四辺形が正方形かどうかを判定するのが必要だろうけど、今回はやらない。

輪郭抽出のアルゴリズムラベリング結果画像の境界線上を辿るやつで、@nifty:@homepage:エラーが似てるんじゃないかな。ちょっと違うかもしれない。

輪郭を四角形かどうか判断するには、次の4つの点が取得できたら四角形だと判断する。

  1. ラベリングしたときの開始点
  2. 輪郭上の点のうち、1から最も遠い点
  3. 1と2の間にある特徴点
  4. 2と1の間にある特徴点

特徴点の抽出は、これ何か名前のついたアルゴリズムだと思うのだけど、ちょっと調べただけでは見つけられなかった。

そのほか、本家のARToolkitはいろんなエラー処理やマーカが重なっている場合の処理が入っているけど、そういうのは一切やってない。

実行例

下図はテスト用の入力画像で、上がソースで下が認識後だ。認識した領域を半透明の赤で塗りつぶしてある。

f:id:flashrod:20071007215401p:image

下図はWebカメラの画像に重ね合わせて表示しているところ。

f:id:flashrod:20071007215425p:image

デモとソースは以下から。1秒間に3回認識、ステージをクリックすると一時停止する。

AR Toolkit for AS3

さて、やってみての感想だけど、ぜんぜん簡単じゃないよ。これが簡単だとは、四畳半社長おそるべし。

パターン認識もないし、3D表示もないし、輪郭抽出ならPotrAsのほうが高機能っぽいし、四畳半社長は色認識も追加して上下左右を判定しているし、ARというにはなんだかぜんぜん足りないけど、ま、やってみたということで。

shi3zshi3z 2007/10/08 11:23 どうもリンクありがとうございます。
色認識と方位認識は、正方形に限定すれば総当たり法でいとも簡単に出せます。
さらに二次元バーコード認識も、僕は時間がなかったのでやりませんでしたが、正方形に限定すれば、最も短い辺があるのが最も奥で、最も長い辺があるのが最も手前の辺と限定できるので、長さの違いから三次元空間上の2つのベクトルを割り出せます。この2つのベクトルの外積が残る一つのベクトルとなるので空間上の位置が把握できることになります。すると正方形の4つの頂点の空間座標が判明することになり、次に識別すべきパターンを座標変換しつつ順次テストする(要はテクスチャマッピングを行ってみる)ことによってそれがどのパターンなのかわかります。
ARToolkitのソースがあったので僕もすぐに原理が解りましたが、これがなかったらもっと時間がかかっていたと思います。

flashrodflashrod 2007/10/08 21:51 なんと! 社長からコメントをいただくなんて、しかも解説まで、ありがとうございます。
なるほど、なんとなくできそうな気がしてきました。四角形の向きにあわせて3Dのキャラクタを表示すればもっとそれっぽくなるかな。

Connection: close