基本矩阵的投影矩阵

amo*_*uri 3 matlab opencv computer-vision camera-calibration

我已经获得了两台相机之间的基本矩阵.我也将其内部参数放在3 X 3我之前通过国际象棋棋盘获得的矩阵中.使用基本矩阵,我已经获得P1并P2通过

P1 = [I | 0] 和 P2 = [ [e']x * F | e']

这些投影矩阵在获取精确的3D位置方面并不真正有用.因为,我有内部参数K1和K2,我改变P1和P2作为

P1 = K1 * [I | 0] 和 P2 = K2 * [ [e']x * F | e']

  • 这是获得真实投影矩阵的正确方法,它可以给出3D世界和图像之间的实际关系吗?
  • 如果没有,请帮助我了解正确的方法和我出错的地方.
  • 如果这是正确的方法,我该如何验证这些矩阵?

Dam*_*ien 10

一本好的参考书是Hartley和Zisserman的"计算机视觉中的多视图几何".首先,你的P公式是错误的.如果你想要K里面的公式,那就更确切了

P = K * [R | t]
Run Code Online (Sandbox Code Playgroud)

要么

P = [ [e']x * F | e']
Run Code Online (Sandbox Code Playgroud)

但不是两者兼而有之.

如果您从8点算法计算F,那么您只能恢复投影几何直到3D单应性(即4x4变换).

要升级到欧几里德空间,有两种可能性,都是从计算基本矩阵开始.

第一种可能性是从F计算基本矩阵:E =转置(K2)*F*K1.

第二种可能性是直接估计这两种观点的基本矩阵:

  • 通过预先乘以每个图像的K的倒数来标准化您的2D点("标准化图像坐标")
  • 在这些归一化点上应用(与F相同)8点算法
  • 通过SVD分解和强制对角线值,强制基本矩阵的2个奇异值等于1,最后为0.

一旦你有了基本矩阵,我们就可以计算出表格中的投影矩阵

P = K * [R | t]
Run Code Online (Sandbox Code Playgroud)

由于E的SVD元素,可以找到R和t(参见前面提到的书).但是,您将有4种可能性.其中只有一个项目指向两个摄像头前面,所以你应该测试一个点(如果你确定),以消除4中的模糊性.在这种情况下,你将能够放置相机及其方向(在3D场景中使用投影的R和t).

不是那么明显,的确......