VO, VSLAM, SfMの違い
SfM
- 時間的に連続していない画像セットからカメラposeと対象物の3D形状を推定。
- オフラインで動く
VO
- 時間的に連続した画像からlocally consistentなトラジェクトリを生成。
- 時間的に連続した画像には同じ静止物が継続して写っていることを想定。
- オンラインで動く
VSLAM
- 時間的に連続した画像からglobally consistentなトラジェクトリを生成。
- オンラインで動く
- 特徴点座標をずっとメモリに保存しておき、loop closureやグラフ最適化を行う。
VOとVSLAMを比較すると、VSLAMはglobally consistentな特徴点が得られるがその分計算量は多い。
VOの詳細
VOの目的は2つの連続する時刻との間でのカメラ姿勢の変換を求めることである。求め方は主に2つある。
Feature-based method
との画像で観測された同じ点とを比較し、その辻褄が合うようにを求める方法である。このとき、特徴点の3次元座標は既知であるとする。projection関数をとすると、
ただし深さ方向の自由度は決定できないので別手法で測定する必要がある。これはどういうことかというと、の観測された2点を使ってmatchingする場合、Aにおいて[tex: P{A1}]と[tex: P{A2}]の2点があったというケースと、Bにおいて[tex: P{B1}]と[tex: P{B2}]の2点があったというケースでどちらも画像における特徴点位置は同じであり、両者が区別できないからである。
メリット
- 2つの画像間のTransformが大きくても同じ点が観測される限り使える
Direct method
をピクセル強度(0から255までの値)として、
ここでは物体までの距離は別のセンサーなどで観測済みであるとした。
メリット
- フレームレートが大きいと前フレームからのTransform変位があまりないので前回値がほぼそのまま解として使える。
Matchingによるpose estimation
2D to 2D
最初の段階ではまだ特徴点の3次元座標が決まっていないので、異なるタイムスタンプの画像平面上で特徴点座標を比較する。
3D to 2D
ある程度時間が経って特徴点の3次元座標が決まってくると、その3次元座標と画像上の特徴点位置を比較する。
3D to 3D
ステレオカメラなどで三角測量により1タイムスタンプから3次元位置がわかるときは、異なるタイムスタンプ同士の3次元座標同士を比較する。
Adjustment
Pose adjustment
異なるフレーム間の相対Transformを拘束条件として全体のtrajectoryを調整すること
Bundle adjustment
異なるフレーム間の相対Transformだけでなく、feature pointsの3次元位置も合わせて調整(最適化)すること。Bundle adjustmentの方が精度が高いが計算コストが高い。自由度が多いので最適化に使う初期解の精度が重要。
Bundle adjustmentの定式化
問題設定
2つの点を3つの異なる位置から撮影した画像があるとし、その3次元点座標とカメラ位置姿勢を推定する問題とする。 world座標系にがあり、3つの位置から観測した画像位置をそれぞれ、、とする。\ このときおよびカメラ位置姿勢を求めたい。
コスト関数
画像平面上で実際に観測されたピクセル座標と、3次元座標の位置をprojectionしたピクセル座標の距離をコスト関数としこれを最小化する。例えば特徴点の位置におけるコスト関数は
と表される。ここで
はカメラ座標の点をピンホールカメラを使って画像上の点に射影する関数である。\ 全体としてのコスト関数は
一般的に誤差の重みが異なる場合も考慮して
ガウスニュートンによる最適化
最適化変数はの座標とのカメラ位置姿勢であるが、これをまとめてと記述することにする。の現在の値をとしこの値を反復的に更新していきたいので、その更新量を求めたい。をまわりでテーラー展開すると
これをコスト関数に代入して
はに対して極値となっている必要があるから、
となり、このようにを更新していけば良いことがわかった。
微分のチェーンルール定義
、に対して
と定義する。こうすると
となり、チェーンルールが使えることがわかる。
の求め方
ここからはどのようにを求めていけば良いかを考えていく。まず、
となる。ここで、関係式を整理しておくと、
これを用いると、特徴点座標に関するJは
であり、カメラの並進部分に関するJは
であり、カメラの回転部分に関するJは
となり、最後の項をどう計算すればよいかがわからない。ここで、が直行行列であることから、をあるパラメータによって連続的に変化する行列であるとすると、
となるので、 は交代行列であることがわかる。したがって
と定義されるを用いて
これを用いて、先ほどのの計算においてではなくで微分することを考えると、
と微分が計算できることがわかった。
Reference
https://www.rsj.or.jp/databox/international/iros16tutorial_2.pdf