F行列から運動パラメータ推定
SVDを用いた方法
クォータニオンを用いた方法
同じ平面上の特徴点の対応付け
これも, あることをしようとして調べたのでメモ.
ステレオペアが1組与えられた時に, そこに写っている平面上の特徴点を対応付けすることを考える.
以下, 静止画の場合であって, 動画を使える場合はKLTトラッカ等で対応付けすればよい.
平面上のある点を2視点から見ると, 射影変換のため以下のような関係がある. 画像座標系での座標

をそれぞれ画像1, 画像2で得られた特徴点の射影位置とする. パラメータ

は射影変換行列の要素.
よって, 観測ノイズがなければ, 特徴点ペアは

を満たす.
実際には観測ノイズがあるため, 特徴点ペアは

が最小となるペアとみなすことができる. つまり,

が閾値以内である特徴点ペア(インライア)の個数が最も多くなるパラメータを求め, そのパラメータでのインライアが解となる.
ただし, すべての特徴点の組み合わせを用いて計算するのは大変なので, 最初にペア候補を求めておき, そのペアに対してRANSACを適用する. 手順は以下の通り.
- 2枚の画像からそれぞれ
個の特徴点を抽出
- ブロックマッチングによりペア候補を
個求める. すべてのペアに対して残差平方和を計算しておき, その値が小さいペアから
選択する
- RANSACにより正しいペアを求める
ここで, 特徴点座標の関係から, パラメータをすべて定数倍しても同じであることがわかる. よって, 重要なのは係数の比なので,

とすると,
となり, パラメータは8個となる. 1組のペアで2本の方程式が得られるので, 4個のペアがあればパラメータを決定できる.
よって, RANSACの処理は
- ランダムに4個のペアを選択してパラメータを計算
- そのパラメータで
となるペア(インライア)の個数を求める
- インライアの個数が最も多くなるパラメータと, そのときのインライアを解とする
やってみたらこんなかんじ
結構きれいにでるんだなー
OpenCVとOpenGLでARしてみる
ひまだったので作ってみた.
肝はcvFindChessboardCorners(), cvCalibrateCamera2(). あとは, 得られた内部, 外部パラメータを
OpenGLの行列に設定するだけ.
やっぱ
OpenCV便利だわ. そのうち作り方まとめる.
ユークリッド復元
FASTコーナー検出
ためしにActionscriptで実装. やっぱ軽い.
自校正
回転カメラから
同じ回転するカメラで撮影された画像がN>=3枚得られるとし, その画像から自校正を行う.
ただし撮影方法には以下の制約がある.
並進0と仮定すればホモグラフィ行列は
とみなせる. ここで,

はカメラ0-カメラ

間の画像間ホモグラフィ行列, 回転行列,

は内部行列. 上式を式変形し
を得る. ここで,

. 対称行列であることに注意.
あとは,

の要素を未知数とする斉次連立一次方程式を解き,

のコレスキー分解により内部行列

を得る.
まとめると
を求める(
となるように正規化)
の要素を未知数とする斉次連立一次方程式を解く
- 求めた
をコレスキー分解.
を得る
- 3.の解を初期値とし, 再投影誤差が最小になるように非線形最適化(マーカート法とか)
Richard I. Hartley, "Self-Calibration from Multiple Views with a Rotating Camera"
最終更新:2010年11月25日 17:54