我正在尝试从运动中模拟结构。
- 考虑运动在 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 度。
如果我的代码有任何问题,请给我一些提示。