PTAMの論文と、スライドを読んだのだが、これがまぁびっくりするほど、ちんぷんかんぷん。連鎖的にいろいろな用語をググったり本を調べる羽目になった。
忘れないようにメモ。
以下の項目はすべてがPTAMで使われているかどうか確認したわけでもなく、ただ、自分の興味の続く限り芋づる式に調べただけ。
Parallel Tracking and Mapping for Small AR Workspaces (PTAM)
小さなAR領域のための並列追跡とマッピング。
SLAMをARに使っている研究はいろいろある。モデルベースの方が正確だけど、SLAMって難しいの?
SLAMは、特徴を見つけて、カメラの位置を検出、地図の更新、画面の更新で、構成されるけど、地図の更新が難しいらしい。
PTAMでは、地図の更新はキーフレームだけしましょ。それも別スレッドで。
地図スレッドでは、ステレオの初期化、キーフレーム待ち、新規点の追加、地図の最適化とメンテナンスをやります。
追跡スレッドでは、カメラの位置検出と画面の更新を30Hzでやります。ざっくりステージと調整ステージに分けてます。
それぞれのステージでは、4段の画像ピラミッドの作成とFASTコーナーの抽出、点の投影、点の計測、カメラの位置検出、をやります。
画面の描画では、ラジアルディストーションも考慮するよ。
Simultaneous Localisation and Mapping (SLAM)
位置決定と地図作成の同時進行。(かな?)
Real-Time Simultaneous Localisation and Mapping with a Single Cameraという論文が元。ロボットがよくわからない空間を進みながら地図を作成しつつ、自分の位置を追跡していく手法。
いろんな手法があるのか、http://openslam.org/なるものまである。
結局、こいつを高速にやるのがPTAMということか?
http://www.hi.mce.uec.ac.jp/~nsato/ronbun_M2first.files/frame.htm
カルマンフィルター (カルマンフィルター)
離散的な誤差のある観測から、時々刻々と時間変化する量を推定するために用いられる。
最小二乗法と直交原理に基づく方法と、ベイズ推定による導出と3種類あるらしい。(最小二乗法が一番わかりやすい)
http://omg.riam.kyushu-u.ac.jp/~nick/Assim/da_text_nick.pdf
http://www.symlab.sys.i.kyoto-u.ac.jp/lecture/prob/prob.pdf
Monte Carlo localization
ロボットの位置推定にモンテカルロ法を使ったやつ。
Harris corner detector
ハリスのコーナー検出。
としたとき、行列Mの2個の固有値が大きいときに、そこにコーナーがある。すなわち、
R=det M – k (tr M) ^2
detは行列式、trは対角成分の和を表す。
ディジタル画像処理 CG-ARTS協会 ISBN4-906665-47-0 p208
エピポーラ幾何
二つの画像間における幾何学的関係。
ディジタル画像処理 CG-ARTS協会 ISBN4-906665-47-0 p264
8点アルゴリズム (eight-point algorithm)
2枚の画像の8組以上の対応点の組から画像間のエピポーラ拘束を表す行列を求める方法。
要するに2枚の画像の8組以上の対応点の組があれば、3次元形状がスケールをのぞいて復元できると同時にカメラの動きも大きさを除いて復元できる。
ディジタル画像処理 CG-ARTS協会 ISBN4-906665-47-0 p266
カメラの内部パラメータ
カメラの内部パラメータとは、カメラ固有のパラメータを指す。
(X、Y, Z)をワールド座標系の3次元座標。(u, v)は画像平面に投影された座標。
次の行列がカメラ行列、またはカメラの内部パラメータ行列と言われる。
(cx, cy)は画像中心である主点、fx, fyは焦点距離でピクセル単位。(焦点距離は視野角ともいえるかも) r, tは外部パラメータ。カメラの動きを表す。
カメラキャリブレーションと呼ばれる操作を行い、カメラ固有の内部パラメータと、ワールド座標系における位置姿勢を意味する外部パラメータを求める。
先の8点アルゴリズムでも求める事ができる。
この式はピンホールカメラモデル。通常のカメラのレンズには、半径方向のひずみや、円周方向のひずみを持っている。
PTAMについているCameraCalibratorでは、ATANCameraクラスでこのあたりを実装している。camera.cfgでは、
// The parameters are:
// 0 – normalized x focal length
// 1 – normalized y focal length
// 2 – normalized x offset
// 3 – normalized y offset
// 4 – w (distortion parameter)
となっている。詳しくは、ATANCamera.hの頭のコメント。でもPTAMのプログラムだと、ワールド座標は既知じゃないんだよねぇ。
で、ここまで調べて、結局いくつかの事がわかった。
僕に、数学的知識が足らなすぎる。ぐぐって論文が出てきても、数式がぜんぜん意味わからん。もう、そりゃびっくりするほど。
ディジタル画像処理 CG-ARTS協会 ISBN4-906665-47-0が手元にあるわけだが、こいつをちゃんと理解できてない。こいつの先にPTAMがあるのに、こいつが理解できないと、先に進めないではないか。
PTAMのコメントにいろいろ説明が書かれている。こいつを理解するってのも重要なことかも。ちうか、カメラのキャリブレーションのコードすら、悪銭苦闘してるってのに。。。
結局のところ、PTAMは最適化の方法であって、僕はSLAMに興味があるらしい。
う~ん。先は長い。。。完全な勉強不足だ。
PTAM
概要 マーカー不要のAR技術(ライブラリ群?)らしい Parallel Tracking and Mapping for Small AR Works…
エピポーラを利用して写真から3次元形状を作成するプログラムを作っています。
作成した3次元形状CAD・CAM・CGに読み込めるDXF・IGES・STL・MQOやインターネットで公開できるVRMLに出力できます。
よろしければご覧ください。
http://www3.plala.or.jp/SolidFromPhoto