もさぷい

ゲーム、3D関連技術ついて

マーカー認識の自作

以前の記事では、mosapui.hatenablog.com

 

・カメラを固定し、プログラム開始時に四角形のマーカーを撮影する。

  ↓

・スクリーン座標における、そのマーカーの4点の座標を自分の目で確認して、その座標を使って、変換行列の計算をする。

  ↓

・カメラは固定したままで、計算した変換行列を使い続けて、3次元モデルを合成する。

 

という手法を行いました。

この方法では、モデル表示中にリアルタイムでマーカーの認識+変換行列の計算を行わずにすむので、プログラムの負荷を回避できます。しかし、カメラ固定なので、プログラム実行中にカメラを移動させることはできません。

 

ARToolkitみたいにマーカーの認識をやってみたかったので、自作のマーカ認識を行ってみました。

 

CMSとモバイルとフィードと四畳半社長: 24時間でつくるFlashで画像認識』

http://shi3z.cocolog-nifty.com/blog/2007/07/24flash_b64b.html

↑この社長さんのブログ記事を参考に、色を使ったマーカを作成し、ラベリング処理、輪郭抽出、コーナー抽出、色の識別処理を行って実現してみました。

 

orig_mark1.jpg orig_mark2.jpg orig_mark3.jpg

[色を使ったマーカ] [ラベリング]   [コーナーの認識 赤の部分のコーナを探す]

 

orig_mark0.jpg  orig_mark4.jpg

[モデルと画像の合成1] [モデルと画像の合成2 右上のコーナ位置の検出がおかしい]

 

これで、ARToolkitを使わずにDirectX+OpenCVを利用して、ARToolkitと似たようなことができるようになりましたが、ARToolKitに比べるとマーカーの認識率が良くないです・・・。さらに、プログラムの負荷もARToolkitに比べるとちょっと大きい(5msぐらいの差)。

なんとか改善したいです。

 

参考:

アルゴリズム入門 : 第 3 章 画像処理入門 1』

http://msdn.microsoft.com/ja-jp/academic/cc998604.aspx

ラベリングのアルゴリズムの解説が載っている。

C#のサンプルがある。

 

『視覚センサを用いた自律移動ロボットの行動決定(pdf)』

http://www.topic.ad.jp/sice/papers/231/231-4.pdf

ラベリング時の衝突について

 

『プログラミングのページ』

http://hirotake.jpn.org/

1パスでラベリングできるコードがあります。大変参考になりました!

 

『画像の特徴点を抽出する- 無作為研究所』

http://www.faicha.com/vision/01inter/

SUSAN

 

『SUSAN オペレータを用いた画像特徴点の抽出』

http://www.oita-ri.go.jp/report/2002/2002_12.pdf

簡単な方法。

 

『解説 コンピュータビジョンのための画像の特徴点の抽出』

http://www.suri.it.okayama-u.ac.jp/~kanatani/papers/harris.pdf

Harris 作用素についての解説。

 

『キャプチャテクスチャ + DXUT(November 2007版)』

http://www.shader.jp/xoops/html/modules/mydownloads/singlefile.php?cid=5&lid=14

 

[犬モデルについて]:

メタセコ素材! - メタセコイアで使える3D素材を公開 -』様

http://sakura.hippy.jp/meta/

の無料3D素材を改変し、xファイルに変換したものを使わせて頂いております。