fc2ブログ

複数マーカー位置推定

multi_marker2


残念...あまり、うまく行かなかったアイディア。
マーカーが部分的に見えている場合に単独のマーカーでは、変換行列を求めることができない。

かといって、マーカーを小さくしすぎると、誤差が多くのるためぷるぷるする。
そこで、複数のマーカーと相対位置をあらかじめ入力しておき、一つでもマーカーが見えていれば、変換行列が求まる方法を考えた。

手順は以下の通り

1.マーカーを複数登録。登録方法は下記サイト参照。
ARToolKitで複数のマーカを同時に認識する

2.認識結果(マーカーAとする)から変換行列を算出。

3.マーカーAから求めた変換行列で、他のマーカーの対応点(世界座標はあらかじめ設定、カメラ座標は検出位置)を変換。

4.変換行列が合っているほど、一定範囲内に投影される点が多くなるので、それをスコアとする。

5.2?4を繰り返して、毎フレーム最適な変換行列を求める。


これで、一個でも見えていれば、変換行列が求まり、複数見えている場合には最適な行列が求まるはずだったんだが...

あまり、うまくいかない。。。。

↓うまく行く例もあるんだけど...

multi_marker


とりあえず、保留中。
スポンサーサイト



テーマ : 真剣に考えてみた
ジャンル : サブカル

描画と認識の分離


分離


とりあえず、ARToolKit_MMDをベースに開発をスタートしてみる。

まず、MMDの描画系とARToolKitの認識系の処理を分離する。

ARToolKit_MMDでは、ARToolKitを用いて画像取得&マーカー認識&姿勢推定をおこなっている。
その情報を用いてMMDを適切に表示している。

今回はARToolKitで認識したカメラ座標系ではなく、別のカメラ座標系から見た場合のMMDを表示したいので、まずは分離する。

ARToolKitMMDの開発者が非常にキレイなソースコードを書く方なので、これは比較的簡単に分離できる。

キーポイントとなる処理:
1.arVideoGetImageで画像取得
2.Scene::CopyBackGroundImageでCG描画側に画像描画(準備)

1で取得した画像を2でCG描画側に渡さずに、独自の処理を組込めばCG描画(MMD描画)と認識処理を分離できる。

tktkは認識系処理の描画・確認はOpenCVを使用しておこなっている。

なんか、カッコいいことを書いてみたものの今回は結局、CG表示と画像表示を分離しただけ。

以上。

テーマ : 真剣に考えてみた
ジャンル : サブカル

キャリブレーション

画像処理において、キャリブレーションは非常に重要。
というわけで、今回はキャリブレーションをおこなう。

基本的にはいつも通り、「工学ナビ」さんを参考にする。
http://kougaku-navi.net/ARToolKit.html

注意点:点の選択は「クリック」ではなく、「ドラッグ」でおこなう。

よくよく読むと「工学ナビ」さんにも書いてあるのだが、tktkは勘違いして、クリックでやっていた。
ドラッグでやると簡単なので、ドラッグをお勧めする。

成功例:

キャリブレーション01
キャリブレーション02


ドラッグで指定する場合、ドラッグした領域のニ値画像が作成され(上画像)、重心が登録点として登録される(下画像)。自分でクリックで中心を選択するより、ずっと楽で正確。

しかし、カメラの設定によっては下のようになってしまう。

キャリブレーション00


これは明るさが足りないためにおこる。
usbカメラの場合には、AMCap(http://amcap.en.softonic.com/)やふぬああ(http://www.moemoe.gr.jp/~hunuaa/)などを使用して、「画質調整」の「明るさ」の項目を大きくしたり、「カメラ制御」の「露出」を大きくすることで、解決する。もちろん、照明を増やしてもOK。

キャリブレーションは根気のいる作業だが、やった場合とやらない場合で精度が大きく変わるので、実施することをお勧めする。

また、ARToolKit_MMDでキャリブレーションパラメータを使用するには例のごとくsetting.iniでCameraParamFileNameを書き換える。カメラの歪みを考慮した撮影が可能になる。

テーマ : 真剣に考えてみた
ジャンル : サブカル

オリジナルのパターンを作ってみる


mk_patt03


ARToolKitでオリジナルのパターンを使用するコトはそれほど難しいことじゃない。


初音ミクARパターン鏡音リン&レンARパターンはちゅねARパターン


今回は、オリジナルのパターンをARToolKitで作成する手順を紹介する。


手順:
1.マーカーを作る。
2.ARToolKitに付属(binディレクトリの中)しているmk_patt.exeを使用して、patt.*を作成。



1.マーカーを作る。

これは別に絵が描ければ、何でもOK。ペイントでもOK。tktkはgimpで作った。
ここで注意しなくちゃいけないのは、黒と白の領域が1:2:1になっていること。

1-2-1.jpg

これはARToolKitに入っているpatterns\blankPatt.gifを使用すればOK。

2.patt.*を作成。
カメラを接続し、bin\mk_patt.exeを起動すると、コマンドプロンプトが立ち上がって、こんな画面が出る。


mk_patt00


カメラパラメータを要求しているので、別途キャリブレーションをした場合はそのファイルを指定。
デフォルトでいいなら、そのまま[Enter]。

すると、カメラの設定画面が表示後、カメラの映像が表示される。
その状態で新しく作成したいマーカを撮影する。


mk_patt01


マーカーを認識して、マーカーが赤と緑の枠で囲まれるので、カメラ映像の画面をクリックする。
すると、コマンドプロンプトで、保存ファイル名を聞かれるので、保存ファイル名を入力する。

mk_patt02


続けて、複数のマーカーが登録できるのでドンドン登録していく。
マーカーのファイル名はmk_pattの直下にできる。

作成したデータはARToolKit_MMDでも使用することができる。
patt.*(今回はpatt.miku)のパスをsetting.iniのMarkerPatternFileNameに指定。
これでexeファイルを起動すれば、作成したパターンを認識して、表示することができるようになる。


mk_patt03


以上。

今回参考にしたサイト:
「工学ナビ」
http://kougaku-navi.net/ARToolKit.html

テーマ : 真剣に考えてみた
ジャンル : サブカル

ARToolKit_MMD?先達に学ぶ?



まず、何か新しいことを学ぶときに、この分野の先輩から学ぶというのは非常に良い。

今回はCG(正確にはMMDで作成したpmmデータ)の描画技術を学ぶために、ARToolKit_MMDというツールをダウンロードして、解析する。

ARToolKit_MMD

ソースコードは上記のサイトでダウンロードできるし、一体このツールで何ができるかについても、上記のサイトで詳しく説明されている。

ちょっと、遊んでみたけど...

AR_MMD03
AR_MMD02
AR_MMD01
(動画をあげる技術が無いので、画像で...このプロジェクト中には、動画をあげる技術を身につける予定。)

予想以上にテンションが上がる。
プログラムの知識さえあれば、簡単に遊べるので是非遊んで欲しい。

次回以降の更新では、少しずつプログラムを組んでいきたいと思う。


注意:
掲示板にもあるが、DirectX SDKのバージョンによってはエラーがでることがある。
*.fxファイルが原因のようなので、そんな場合も落ち着いて対処して欲しい。

テーマ : 真剣に考えてみた
ジャンル : サブカル

FC2カウンター


プロフィール

tktk

Author:tktk
職業:召還士見習い

2次元世界と3次元世界をつなぐ方法を研究中

------------

参考にさせて頂いたサイト様にリンクを貼らせて頂いています。問題等ございましたら、2Dto3D.tktk_at_gmail.com
(_at_→@に変換)までおねがいします。ご意見等もお待ちしております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2ブログランキング

FC2Blog Ranking