PTAMの改良 - 2 マーカーの認識

|
PTAMの問題点の1つに、「マップの3D座標空間が勝手に決められてしまう」というものがあります。

3D座標空間は、初期化完了時に出るグリッド平面で表されます。
これはCGにとっては「地面」を意味しているので、地面が正しい位置にないとCG表示もおかしくなってしまいます。
(例えば、垂直な壁が地面になってしまう等)


この問題を解決するには、地面の決定に別な方法を使う必要があります。例えば、
  • ユーザーのコントロールによって、地面の位置や方向を再調整する。
  • 加速度センサーでカメラの下方向を認識、そのベクトルにほぼ垂直で、面を形作っている特徴点の集合を探す
  • 地面の位置に目印を置いて、それを認識させる。
などが考えられます。


ここで、上記の項目に何か見覚えがあるものが入っています。それは、「目印」の認識です。
これは、今まで散々使ってきたARToolKitを使えば簡単にできそうです。



----- < ライセンスの問題 > -----

ですが、ARToolKitの利用には、ライセンス面で大きな問題があります。
ARToolKitのライセンスはGPLになっています。
そして、PTAMのライセンスもGPLに近く、しかしこれとは異なるライセンスとなっています。

この2つのソースを一緒にし、そして実行ファイルやソースコードを公開した場合には、2つのライセンスが完全に重なってしまい、ライセンス違反となる危険性があります。
なので、現在のバージョンでは、実行ファイルやソースコードの公開は行えません。


では、出力結果のみを公開する場合はどうでしょうか?
GPLでは、出力結果のみの公開で(条件はありますが)ソースコードの公開義務は発生せず、問題は起きません。
PTAMの、出力結果を公開する場合では、それがPTAMから出力されたことを明記する必要があるようです。

これならば、PTAM+ARToolKitを実行し、その動画を公開した場合には問題がないように思えます。



----- < PTAMでのマーカー認識 > -----

さて、PTAMにてマーカーの認識処理を加える場合、どういった処理が考えられるでしょうか?
  1. PTAMのマップ座標系を、マーカーから得られた3Dワールド座標系に合わせる
  2. 2次元画像内で、マーカーの四角の頂点位置を計算して、特徴点のリストに追加する
1の場合は、マーカー座標系をマップ座標系にうまく変形し、合わせてやる必要があります。こちらの方が正確ですが、座標系の違いを調査するのに手間がかかります。
2の場合は、マーカーの頂点だけ、他の特徴点とは別な処理を行う必要があります。こちらは逆に簡単ですが、正確性に欠ける場合があります。

理想的には1番なのですが、とりあえず最初に2番で実装してみます。



----- < 実際の変更点 > -----

PTAMのソースにARToolKitの処理を入れます。
2番では、ARToolKitマーカーの認識処理であるarDetectMarkerをPTAM内で呼ぶことになります。

  • PTAMプロジェクトにARToolKitの必要なプロジェクトを追加する

  • PTAMのループ内で、arDetectMarkerを呼ぶようにする。

  • arDetectMarkerの実行結果から、マーカーの頂点座標の値を取得する。

  • 取得した頂点座標を、Tracker::TrackForInitialMap()内の特徴点のステレオペアを格納しているところに入れてやる。

  • さらにその中で、MapMaker::InitFromStereo()が呼ばれているので、そこでステレオ計算させる。

  • ステレオ計算され、3次元情報の点になったら、その4点から基準となる座標系を作成する。

  • 作成したマーカー座標系使って、MapMaker::CalcPlaneAligner()内でグリッド平面の位置合わせを行う。

  • 変形されたグリッド座標系に合わせるように、MapMaker::ApplyGlobalTransformationToMap()でマップ上の点が変形させられる。
といったような修正内容になります。



追記(2009/03/31 22:56)

目印は平面であることが分かれば十分なので、SIFTなどの特徴点認識が利用できるかもしれません。
さらに、初期化を行うときの特徴点を平面に固定してしまうなど、いろいろ考えられます。

まぁ目印があればとても分かりやすく、場合によってはPTAMの初期化がいらなくなるので、楽かもしれません。



このブログ記事について

このページは、PipeRが2009年3月31日 20:07に書いたブログ記事です。

ひとつ前のブログ記事は「PTAMの改良 - 1 ユーザ操作によるマップ更新」です。

次のブログ記事は「PTAMの改良 - 3 ユーザー間での座標系の共有」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01a