1

動きから構造をシミュレートしようとしています。

  1. 動きが 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 に何らかの値がある理由です。

私のコードに問題がある場合は、ヒントを教えてください。

4

0 に答える 0