我试图模拟运动中的结构。
上一张图片协调
[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。 }
内在矩阵
6.2821272 + 002 0. 3.474665e + 002
0. 6.2886809e + 002 2.4486120e + 002
0. 0。1。
使用已知的内在矩阵,我使用opencv函数(cvFindFundamentalMatrix
)
int fm_count = cvFindFundamentalMat( pMatPtsImgPrev, pMatPtsImgCurr,
pFundMat,CV_FM_RANSAC ,0.2,0.99, status);
平均像素误差非常接近零。
然后使用下面给出的公式找到必要的矩阵
E = CameraMatrix^T * F * CameraMatrix.
具有X偏移的基本矩阵 -6.227048e-030,1.8018814e-014,4.30140591e-015 3.1235024e-014,2.7432764e-015,7.02982759 9.885755751e-015,-7.0298275,3.10862446e-015
然后使用SVD分解下面链接中给出的旋转和平移矩阵 - SVD decomp = SVD(E);
Extract Translation and Rotation from Fundamental Matrix
分解旋转角度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
4.3544169e-015,-0.039722588,0.99921074
] 1.78226326e-015,-0.999210746,-0.03972258
但旋转分解为Rx = -2.27653561deg Ry = 180,Rz = 0
我不理解的是,由于翻译在X和y方向,Rx有一些价值,我觉得旋转应该是0或180deg。
恩迪给我一些提示,以便在我的代码中出现任何问题。