Direct Sparse Odometry (DSO) の要点まとめ
過去のエントリではWindowsへのインストール方法をまとめたが、今回は論文から理解したことをまとめる。
数学的な細かな話は最小限に抑え、私なりに要点だけまとめる。
# 間違ってるところがあるかもしれないので随時修正していくつもり。
従来手法
従来のSFM/SLAMはざっくり次の3ステップ:
- 複数画像から対応する特徴点を抽出
- 各対応特徴点に対して三角測量を行い3D再構成
- 3D再構成した点やカメラ位置姿勢に対してバンドル調整 (Bundle Adjustment : BA)
- 3D点の画像上への再投影点と元の2D特徴点のx,yのズレ(再投影誤差)という空間的誤差 (geometric error) が最小化されるように、カメラ位置姿勢や3D点座標の微小修正を繰り返す
DSOの手法
これに対して、DSOは入力画像群に対して最初から直接バンドル調整(BA)を実施しているイメージ。特徴点は求めない。ざっくり次の3ステップ:
- 一方の画像の(勾配がある程度大きい)とある座標の画素値(A)はもう一方の画像のとある座標の画素値(B)に対応するはずという計算式を立てる
- その計算式から、画素値(A)と(B)の差の計算式を立てる
- その画素値誤差 (photometric error) が最小化されるようにカメラ位置姿勢や3D点(*1)の微小修正を繰り返す
- ここで、いわゆる疎バンドル調整 (Sparse BA : SBA) の考え方を導入するから処理が早くなる
- Gauss-Newton 法での誤差最小化にはヘッセ行列が必要(*2)だが、ヘッセ行列は疎行列になる(*3)ため、計算を省ける (Schur補行列の計算でOKになる)
- *1 : 従来手法では3D点1個につき座標(x,y,z)の3変数が存在したが、DSOでは逆深度 (inverse depth) 1変数で表しているので計算が効率的になっている
- *2:参考 CVIM#11 3. 最小化のための数値計算
- *3:参考 バンドルアジャストメント(情報処理学会電子図書館)
- ここで、いわゆる疎バンドル調整 (Sparse BA : SBA) の考え方を導入するから処理が早くなる
ちなみに、処理対象とする画像:キーフレーム(KF)や3D点群を随時不要になったら削除するなど上手に管理するところにもテクニックがありそうだ。
※画像/画質処理屋さんのセンスのままで考えると理解できないかも。DSOは数学の塊で成立しているイメージ。
前回エントリを例にとると、私のイメージでは(あくまで個人の感想):
- マッチング方式 … 画像処理屋さん的センス
- オプティカルフロー方式 … 数学屋さん的センス
DSOの嬉しいところ
- 従来の特徴点方式SFM/SLAMは所謂「コーナー」を3D化するに留まるが、DSOは処理方式の違いから「エッジ」も再構成しやすい
- つまり従来方式より多くの3D点を生成しやすい
今後より技術的に詳しく見ていこうと思う。