動きから構造をシミュレートしようとしています。
- 動きが x 方向である場合を考えてみましょう。以下に示すように、x 方向にのみ 50 ピクセルの動きがあるマッチング ポイントを作成しました。
前の画像座標
[0] {x=50.000 y=50.00 } [1] {x=100.00 y=50.00 }
[2] {x=150.00 y=50.00 } [3] {x=200.00 y=50.00 }
[4] {x=250.00 y=50.00 } [5] {x=300.00 y=50.00 }
[6] {x=50.000 y=100.0 } [7] {x=100.00 y=100.0 }
[8] {x=150.00 y=100.0 } [9] {x=200.00 y=100.0 }
[10] {x=250.00 y=100.0 } [11] {x=300.00 y=100.0 }
[12] {x=50.000 y=150.0 } [13] {x=100.00 y=150.0 }
[14] {x=150.00 y=150.0 } [15] {x=200.00 y=150.0 }
現在の画像座標
[0] {x=100.0 y=50.0 } [1] {x=150.0 y=50.0 }
[2] {x=200.0 y=50.0 } [3] {x=250.0 y=50.0 } [ 4] {x=300.0 y=50.0} [5] {x=350.0 y=50.0} [6] {x=100.0 y=100. [7] {x=150.0 y=100. [8] {x=200.0 y=100. [9] {x=250.0 y=100. } [10] {x=300.0 y=100. } [11] {x=350.0 y=100. }
[12] {x=100.0 y=150. } [13] {x=150.0 y=150. } [14] {x=200.0 y=150. } [15] {x=250.0 y=150. }
Intrinsic MatrixcvFindFundamentalMatrix
6.2821272+002 0. 3.474665e+002 0. 6.2886809e+002 2.4486120e+002 0. 0. 1. 既知の Intrinsic 行列を使用 opencv function( )
を使用して基礎行列を計算しました
int fm_count = cvFindFundamentalMat( pMatPtsImgPrev, pMatPtsImgCurr,
pFundMat,CV_FM_RANSAC ,0.2,0.99, status);
平均ピクセル エラーはゼロに非常に近いです。
次に、以下の式を使用して必須マトリックスを見つけます
E = CameraMatrix^T * F * CameraMatrix.
X オフセットを含むエッセンシャル マトリックス
次に、SVD - SVD decomp = SVD(E); を使用して、以下のリンクに示されているように、回転行列と並進行列を分解します。
分解すると、回転角 Rx =0deg Ry =0deg と Rz =0deg になります。
回転は 0 度または 180 度のいずれかなので、これで問題ないようです。
y 方向の平行移動のみで座標を変更すると、次の座標のようになります。
前の座標
[0] {x=50.00 y=50.00 } [1] {x=100.0 y=50.00 }
[2] {x=150.0 y=50.00 } [3] {x=200.0 y=50.00 }
[4] {x=250.0 y=50.00 } [5] {x=300.0 y=50.00 }
[6] {x=50.00 y=100.0 } [7] {x=100.0 y=100.0 }
[8] {x=150.0 y=100.0 } [9] {x=200.0 y=100.0 }
[10] {x=250.0 y=100.0 } [11] {x=300.0 y=100.0 }
[12] {x=50.00 y=150.0 } [13] {x=100.0 y=150.0 }
[14] {x=150.0 y=150.0 } [15] {x=200.0 y=150.0 }
現在の座標
[0] {x=50.00 y=100.0 } [1] {x=100.0 y=100.0 }
[2] {x=150.0 y=100.0 } [3] {x=200.0 y=100.0 }
[4] {x=250.0 y=100.0 } [5] {x=300.0 y=100.0 }
[6] {x=50.00 y=150.0 } [7] {x=100.0 y=150.0 }
[8] {x=150.0 y=150.0 } [9] {x=200.0 y=150.0 }
[10] {x=250.0 y=150.0 } [11] {x=300.0 y=150.0 }
[12] {x=50.00 y=200.0 } [13] {x=100.0 y=200.0 }
[14] {x=150.0 y=200.0 } [15] {x=200.0 y=200.0 }
基本行列と本質行列を構築するために、同じ手順と同じ固有行列が使用されます。
Y オフセット -2.791314e-030、2.5449611e-015、5.095796479e-016 のエッセンシャル
マトリックス
しかし分解された回転は Rx=-2.27653561deg Ry = 180, Rz = 0
私が理解していないのは、変換が X 方向と y 方向のいずれかであるため、Rx に何らかの値がある理由です。
私のコードに問題がある場合は、ヒントを教えてください。