使用校准相机获得匹配点进行3D重建

时间:2014-07-31 08:58:28

标签: matlab computer-vision matlab-cvst 3d-reconstruction

我正在尝试从几对两个视点计算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坐标似乎不正确 我用相机拍摄了带有标记点的FLAT物体。我手工匹配点(这意味着原材料不应该存在明显的错误)。但结果却是一个带有一点点条纹的表面 我想这可能是由于图片没有处理失真的原因(但实际上我记得我做过)。

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

  
    

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

         

8月4日由JCraft编辑:我发布了一个新问题:Calibrated camera get matched points for 3D reconstruction, ideal test failed。 @Schorsch非常感谢您帮助格式化我的问题。我将尝试学习如何在SO中做输入,并尝试提高我的语法。谢谢!

  

2 个答案:

答案 0 :(得分:0)

如果您只有基本矩阵和内在函数,那么您只能按比例进行重建。那是你的翻译向量t是一些未知的单位。您可以通过多种方式获得实际单位的3D点数:

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

答案 1 :(得分:0)

扁平物体是关键的表面,不可能从它们中获得目标。尝试在飞机上添加两个(或更多)点(如果仍有兴趣,请参阅Hartley和Zisserman或其他有关此事的文本)