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。}

固有矩阵 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.0298276e-0153。

然后使用 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
4.3544169e-015, -0.039722588, 0.99921074] 1.78226326e-015, -0.99972107586, -02

但旋转分解为 Rx=-2.27653561deg Ry = 180, Rz = 0

我不明白的是为什么 Rx 有一些价值,因为平移是在 X 和 y 方向,我觉得旋转应该是 0 或 180 度。

如果我的代码有任何问题,请给我一些提示。

4

0 回答 0