我正在尝试从几对两个视点计算 3D 坐标。
首先,我使用了matlab函数 estimateFundamentalMatrix() 得到 F 匹配点的数量(数量 > 8),即:

F1 =[-0.000000221102386   0.000000127212463  -0.003908602702784
     -0.000000703461004  -0.000000008125894  -0.010618266198273
      0.003811584026121   0.012887141181108   0.999845683961494]

我的相机 - 拍摄了这两张照片 - 使用内在矩阵进行了预先校准:

K = [12636.6659110566, 0, 2541.60550098958
     0, 12643.3249022486, 1952.06628069233
     0, 0, 1]

根据这些信息,我使用以下方法计算了基本矩阵:

E = K'*F*K

通过SVD的方法,最终得到了射影变换矩阵:

P1 = K*[ I | 0 ] 

P2 = K*[ R | t ]

在哪里 Rt 是:

R = [ 0.657061402787646 -0.419110137500056  -0.626591577992727
     -0.352566614260743 -0.905543541110692   0.235982367268031
     -0.666308558758964  0.0658603659069099 -0.742761951588233]

t = [-0.940150699101422
      0.320030970080146
      0.117033504470591]

我知道应该有 4 种可能的解决方案,但是,我计算的 3D 坐标似乎不正确。
我用相机拍摄了带有标记点的平面物体的照片。我是手工匹配的(这意味着原材料不应该存在明显的错误)。但结果却是表面有一点条带。
我想这可能是由于图片没有经过扭曲处理(但实际上我记得我做了)。

我只是想知道这个方法是否可以解决3D重建问题?特别是当我们已经知道相机内参矩阵时。

JCraft 于 8 月 4 日编辑:我已经重做了这个过程并得到了一些显示问题的图片,我将详细写另一个问题,然后发布链接。

JCraft 于 8 月 4 日编辑:我发布了一个新问题: 校准相机获得 3D 重建的匹配点,理想测试失败. 。@Schorsch 非常感谢您帮助格式化我的问题。我会尝试学习如何在 SO 中进行输入,并尝试改进我的语法。谢谢!

有帮助吗?

解决方案

如果您只有基本矩阵和内在函数,则只能获得按比例的重建。这就是你的平移向量 t 的单位是未知的。您可以通过多种方式获取实际单位的 3D 点:

  • 您需要在世界上有一些参考点,并且它们之间的距离已知。这样您就可以以未知单位计算它们的坐标,并计算比例因子以将未知单位转换为实际单位。
  • 您需要了解每个相机相对于公共坐标系的外参。例如,您可以在场景中的某个位置有一个棋盘校准图案,您可以从中检测和计算外部因素。看到这个 例子. 。顺便说一句,如果您知道外参,您可以直接计算基本矩阵和相机投影矩阵,而无需匹配点。
  • 您可以进行立体校准来估计相机之间的 R 和 t,这也将为您提供基本矩阵和基本矩阵。看到这个 例子.

其他提示

平面物体是关键表面,不可能通过它们实现您的目标。尝试在平面上添加两个(或更多)点(如果仍然感兴趣,请参阅 Hartley 和 Zisserman 或有关此事的其他文本)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top