基础矩阵得出的投影矩阵

3
我已经得到两个相机之间的基础矩阵。此外,我还有它们的内部参数,这是一个 3 X 3 的矩阵,我之前通过棋盘获得的。使用基础矩阵,我通过以下方式得到了 P1P2

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

这些投影矩阵并不能真正地用于获取准确的三维位置。因此,由于我拥有内部参数 K1K2,我将 P1P2 更改为:

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

  • 这是获得实际投影矩阵的正确方法,以便给出三维世界和图像之间的实际关系吗?
  • 如果不是,请帮我理解正确的方法和我的错误之处。
  • 如果这是正确的方法,请问如何验证这些矩阵?
2个回答

15
一本好的参考书是Hartley和Zisserman的“计算机视觉中的多视角几何”。 首先,您的P公式是错误的。如果您想要包含K的公式,则应该是:
P = K * [R | t]

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

但不是两者混合。

如果您使用8点算法计算出F,那么您只能恢复到一个三维单应性(即4x4变换)的射影几何。

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

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

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

  • 通过对每个图像的K的逆进行预乘以规范化您的2D点(“规范化图像坐标”)
  • 在这些规范化点上应用(与F相同的)8点算法
  • 通过SVD分解并强制对角线值,强制本质矩阵具有其2个奇异值等于1且最后一个为0的事实。

一旦您有了本质矩阵,我们就可以计算投影矩阵,形式如下:

P = K * [R | t]

通过E的奇异值分解可以找到R和t(参见之前提到的书)。 然而,你将有4种可能性。只有一种情况可以将点投影到两个相机的前方,所以你需要测试一个点(如果你确定它),以消除4种可能性中的歧义。 在这种情况下,你将能够在你的3D场景中放置相机和其方向(使用投影的R和t)。

确实不太明显...


如果没有相机参数K1,K2怎么办? - john k
1
然后您需要计算基本矩阵 F。 - Simdi

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 是实数,v 是三维向量。此外,请注意,如果您想找到形如 P2' ~ K2 * [R, t] 的投影矩阵,其中 R 是旋转矩阵,则最好使用基于本质矩阵的算法,该算法由Damien概述并在Hartley&Zisserman(第2版)第9.6.2节中描述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接