3

我已经获得了两个相机之间的基本矩阵。我也将它们的内部参数放在3 X 3我之前通过棋盘获得的矩阵中。使用基本矩阵, 我得到P1P2

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

这些投影矩阵在获得准确的 3D 位置时并没有真正的用处。因为,我有内部参数K1K2,我改变了P1P2作为

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

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

2 回答 2

13

一本很好的参考书是 Hartley 和 Zisserman 的“计算机视觉中的多视图几何”。首先,您的 P 公式是错误的。如果你想要里面有 K 的公式,那就是

P = K * [R | t]

或者

P = [ [e']x * F | e']

但不是两者兼而有之。

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

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

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

第二种可能性,是直接估计这两个视图的基本矩阵:

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

一旦你有了基本矩阵,我们就可以计算投影矩阵的形式

P = K * [R | t]

由于 E 的 SVD 的元素,可以找到 R 和 t(参见前面提到的书)。但是,您将有 4 种可能性。其中只有一个在两个摄像头前面投射点,因此您应该测试一个点(如果您确定的话)以消除 4 个之间的歧义。在这种情况下,您将能够放置摄像头及其方向(投影的 R 和 t)在您的 3D 场景中。

不是很明显,确实...

于 2013-11-14T22:06:23.270 回答
0

刚刚遇到这个问题,想对这个问题给出更直接的答案。

什么时候P1 = [I, 0]是你的第一个投影矩阵,但它应该是P1 = K1 * [I, 0],那么你的“世界”被 4x4 矩阵扭曲了M = [K1, 0; 0, 1]X世界上的任何点投影到x1 = P1 * X = (P1 * M) * (M^-1 * X) = P1' * X'现在X'是“未扭曲世界”中的点(注意这X = M * X'又是“扭曲世界”中的点)并且P1' = P1 * M = [I, 0] * [K1, 0; 0, 1] = K1 * [I, 0]是未扭曲世界中的投影矩阵。

类似地,P2' = P1 * M是未失真世界中的投影矩阵,形式为P2' = [ [e']x * F | e'] * [K1, 0; 0, 1] = [ [e']x * F * K1 | e']

请注意,这P2 = [ [e']x * F | e']只是一种可能的投影矩阵,但通常具有P2 = [ [e']x * F + e' * v^T | s * e']一些实数s和 3-vector的形式v。进一步注意,如果你想找到P2' ~ K2 * [R, t]一些旋转矩阵形式的投影矩阵R,你最好使用基于 Damien 概述并在 Hartley&Zisserman(2.Ed) Sec 中描述的基本矩阵的算法。9.6.2.

于 2021-12-03T13:38:21.907 回答