【論文まとめ】Direct Sparse Odometry(DSO)をざっくりと読んだ

研究

DSOを読んだ。細かいところは色々間違っていると思う。キャリブレーションとか細かい話はせずに大まかな処理をざっくりとまとめる。

できればコメントなどをいただけると嬉しいです。ディスカッションなどもお待ちしております。よろしくお願いします。

処理の流れ

DSOは大きく分けて、「フレームのマネジメント」「フレームにのる点のマネジメント」の2つの処理を繰り返している。

フーレムのマネジメント

フレームのマネジメントとは、

  1. 「初期フレームのトラッキング」
  2. 「キーフレーム(KF)の生成」
  3. 「KFを減らす」

の一連の流れ。DSOでは常に7つのアクティブなKFが内部で保持され、新しいフレームはKFを参照して選ばれる。

初期フレームのトラッキング

殆ど同じものが写っているフレームを探すための処理。KFが生成された際にフレームにデプスが投影されて、デプスマップが作られる(後述)。このデプスマップと新しく入ってきたフーレムのデプスを重ね合わせて、その差が2倍以上なければそのフレームを採用する。うまくフレームが取得できないならばその場で回転して丁度良さそうなフレームを取得する

キーフレーム(KF)の生成

KFは毎秒5枚から10枚ほど生成され、不適切なKFは後段の処理で消される。KFの生成条件は3つ

  1. 「シーンが変わった時(オプティカルフローを計算)」
  2. 「オクルージョンが起きて今まで見えていたものが見えなくなった時(周辺ピクセルを使って計算)」
  3. 「明るさが急激に変わった場合(直近のフレームの明るさの差分を計算)」

これらの要素が閾値以上を超えたらKFを生成する。

KFを減らす

最新の2枚のKFと見えている個所が5%変わったら、最新のフレームを消す。もしもNフレームのKFがアクティブならユークリッド距離が一番離れているものを消す

Keyframe managementの処理の説明図。赤い点が現在見ているシーン。青い四角がアクティブなKF、黒い点が過去に見ていたシーン。

 

フレームにのる点のマネジメント

フレームにのる点のマネジメントとは、

  1. 「どのような点(候補点)を保持するか」
  2. 「どのように候補点をトラッキングするか」
  3. 「候補点のアクティベート」

という流れ。DSOでは各フレームで2000点の点を取得している

どのような点を保持するか

画像全体から均等に特徴量を抽出できるように画像を32×32のパッチに区切り、全体の平均輝度勾配を計算する。次に画像をdxdに区切る。そして閾値以上のブロックを取得する。もしも2000点に足りないようなら2dx2dに領域を増やして、それでも足りないなら4dx4dに領域を広げて点を取得する。

候補点の取得。緑色が最初に取得した点。青が領域を広げて取得した点。赤がさらに領域を広げて取得した点。

どのように候補点をトラッキングするか

エピポール幾何から候補点をトラッキングする。同一の特徴箇所を見ている点はエピポーラ線上にあるとしPhotometric errorを最小化する

最適化する関数。a、bはPhotometric calibrationで決まる値。パターンNpにのるピクセルのみ計算

パターンNp

投影関数を使用することで、p’を計算する。東映関数自体はキャリブレーションで求める

Rは回転、tは並進。これらが相対的なカメラの動きTになる

候補点のアクティベート

KFに候補点を投影する(一番最初に述べたデプスマップはこれ)。投影された候補点を用いて最初の方に書いた最新のフレームの処理をする。これらの処理が繰り返されることで自己位置とマップの更新をする。

 

動作