PTAMの解析 - 2 処理プロセスの概要

|
2回目は、PTAMの処理プロセスの概要です。

また概要になります、すいません。
各プロセスの詳細は、後々解説していこうと思います。



--------- < 処理プロセスについて > ---------

PTAMでの処理は、大きく分けて次のようなものがあります。

1.マップの初期化
2.トラッキング
3.マップの更新


○1のマップの初期化は、一番最初に行われる作業です。
PTAMの動画を見ていると分かりますが、最初にバッチ処理っぽいことを行っています。
この時の画像を元にマップが構築されて、これが基本のマップになります。

○2のトラッキングでは、このマップを元にカメラの位置・姿勢(方向)の推定が行われます。
この処理はスレッドで行われ、coarse-to-fineという手法が用いられます。

coarse-to-fine:最初に大まかなマッチングを行い、大体の位置を確定できたら、次に細かいマイッチングを行って計測を確定するといったような手法です。

○3のマップの更新も別のスレッドで実行され、そのループの先頭では新しいキーフレームを探します。
キーフレームとは、トラッキングがうまくいって、より正確な特徴点が取得できたフレームのことです。たキーフレームは、それぞれある程度離れたものが選択されます。

キーフレームが見つかったら、それを使ってマップを更新します。
マップ上の各特徴点を修正し、新しい特徴点が見つかったらマップに追加します。

キーフレームがない場合は、マップの調整を行います。
バッチ処理でマップ内の特定の範囲を調べて、複数の特徴点で整合性が取れるようにします。


各処理の説明を行います。



--------- < 1.マップの初期化 > ---------
"Tracker::TrackFrame内の TrackForInitialMap()"

1.1.ユーザーがキーを押して、初期化スタート                    Tracker::GUICommandHandler
1.2.最初のキーフレームが決定される                              Tracker::TrailTracking_Start
1.3.特徴点1000個が検出※1される                          Tracker::TrailTracking_Start
1.4.特徴点周辺の画像を2Dのパッチにする                      Tracker::TrailTracking_Start
1.5.ユーザーがキーを押して、初期化終了                        Tracker::GUICommandHandler
1.6.2つ目のキーフレームが決定される                           MapMaker::InitFromStereo
1.7.5点アルゴリズムで※2で、特徴点マップを3Dにする MapMaker::InitFromStereo
1.8.3Dマップに対し、束調整を行う。                               MapMaker::BundleAdjustAll
1.9.RANSAC※3で不適切な点を除去                           MapMaker::CalcPlaneAligner



※1 徴点の検出
 特徴点の検出(corner detector)という方法がとられています。
※2 8点アルゴリズム(eight-point algorithm)(5点アルゴリズムは、まだ分かっていません)
・エピポーラ幾何:二つの画像間における幾何学的関係。
・エピポーラ拘束:2つのカメラ間の画像関係の条件、「基準カメラに写ったある点はもう一方の画像上のある直線(エピポーラライン)上に射影される」というもの
・8点アルゴリズム:2枚の画像の8組以上の対応点の組から画像間のエピポーラ拘束を表す行列を求める方法。
http://www.ric.titech.ac.jp/saneken/stereocamera.htm

※3 RANSAC(RANdom SAmple Consensus):
特徴点の検出で得られた対応点は、間違っている場合(外れ値"outlier")もあるので、これを除去するための処理。
(外れ値の反対は正対応"inlier")

ランダムに幾つかのサンプルを抽出し, 最小二乗法に当てはめることを繰り返す。
抽出したサンプルに外れ値が含まれなければより確からしい推定が得られ, 且つ外れ値の数が全測定数に比べて少なければ推定される誤差範囲内により多くの測定値が含まれる。このことから,もっとも多くの測定値が範囲内に含まれるときの推定を正しい推定とみなす. 



--------- < 2.トラッキング > ---------
"Tracker::TrackFrame内の TrackMap()等"

2.1.画像を取得する                                          KeyFrame::MakeKeyFrame_Lite
2.2.仮のカメラ姿勢位置※4を計算                   Tracker::ApplyMotionModel
2.3.それを使い、マップ上の点を画像に投影する   TrackerData::Project

○大まかなマッチング   Tracker::TrackMap()内の // ... coarse stage 以下
2.4.特徴が強い点50個を、画像から検索する
2.5.マップの点と50個の特徴点をマッチングする
2.6.マッチング結果からカメラの位置を修正

○詳細なマッチング   Tracker::TrackMap()内の // ... fine tracking stage 以下
2.7.1000個の点をマップから画像に再度投影
2.8.画像内からも通常の特徴点を検出
2.9.1000個の点と、画像の特徴点をマッチングする
2.10.最終的なカメラ位置を計算する

※4 仮のカメラの姿勢位置の計算には、運動モデルを用います。この運動モデルでは、カメラの動きが遅いという想定になっています。



--------- < 3.マップの更新 > ---------
MapMaker::run()

3.1.新しいキーフレームがあるかどうか調べる

○新しいキーフレームが見つからなかった場合                              QueueSize() == 0
3.2.キーフレームが見つからなかったら、マップの調整を行う。
3.2.1.マップが局所的でない場合は、局所的な束調整※5を行う。  MapMaker::BundleAdjustRecent
3.2.2.マップが全体的でない場合は、全体的な束調整を行う。         MapMaker::BundleAdjustAll
3.2.3.どちらもOKなら、データ間の関係を更新する。                      MapMaker::ReFindFromFailureQueue
○新しいキーフレームが見つかった場合                                        QueueSize() > 0
3.3.見つかったら、新しい特徴点追加する。                                  MapMaker::AddKeyFrameFromTopOfQueue
3.3.1.キーフレームのデータ関係を更新                                       MapMaker::ReFindInSingleKeyFrame
3.3.2.キーフレームを統合する                                                   MapMaker::ThinCandidates
3.3.3.新しい特徴点を追加する                                                   MapMaker::AddPointEpipolar

fig_6_1.gif

※5 束調整(bundle adjustment):

再投影誤差の平方和を最小化する方法

再投影誤差は、特徴点追跡に基づく外部パラメータ推定手法で、一般的に用いられる誤差関数であり。再投影誤差の二乗和を最小にすることでカメラパラメータを推定する手法は、バンドル調整法と呼ばれている。


このブログ記事について

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

ひとつ前のブログ記事は「PTAMの解析 - 1 概要」です。

次のブログ記事は「PTAMの解析 - 3 処理プロセスの遷移図」です。

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

Powered by Movable Type 4.01a