首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公制三维重建

公制三维重建
EN

Stack Overflow用户
提问于 2010-03-31 04:13:05
回答 3查看 1.7K关注 0票数 4

我试图从2D图像对应中重建三维点。我的相机被校准了。测试图像是一个方格立方体,对应是手工挑选的。径向畸变被消除。然而,在三角剖分之后,这个结构似乎是错误的。X和Y值似乎是正确的,但Z值大致相同,不沿立方体区分。这些三维点看起来就像沿着Z轴平放的点。

Z值出了什么问题?在计算基本矩阵之前,这些点是否需要在任何一点上进行归一化或从图像坐标中改变?(如果这太含糊,我可以解释我的一般程序或详细说明部分)

更新

给予:x1 = P1 * Xx2 = P2 * X

x1x2是第一和第二图像点,X是3d点。

然而,我发现x1并不接近实际手工选择的值,但是x2实际上是接近的。

如何计算投影矩阵:

代码语言:javascript
复制
P1 = [eye(3), zeros(3,1)];
P2 = K * [R, t];

更新II

优化后的校准结果(不确定因素)

代码语言:javascript
复制
% Focal Length:          fc = [ 699.13458   701.11196 ] ± [ 1.05092   1.08272 ]
% Principal point:       cc = [ 393.51797   304.05914 ] ± [ 1.61832   1.27604 ]
% Skew:             alpha_c = [ 0.00180 ] ± [ 0.00042  ]   => angle of pixel axes = 89.89661 ± 0.02379 degrees
% Distortion:            kc = [ 0.05867   -0.28214   0.00131   0.00244  0.35651 ] ± [ 0.01228   0.09805   0.00060   0.00083  0.22340 ]
% Pixel error:          err = [ 0.19975   0.23023 ]
% 
% Note: The numerical errors are approximately three times the standard
% deviations (for reference).

-

代码语言:javascript
复制
K =

  699.1346    1.2584  393.5180
         0  701.1120  304.0591
         0         0    1.0000


E =

    0.3692   -0.8351   -4.0017
    0.3881   -1.6743   -6.5774
    4.5508    6.3663    0.2764


R =

   -0.9852    0.0712   -0.1561
   -0.0967   -0.9820    0.1624
    0.1417   -0.1751   -0.9743


t =

    0.7942
   -0.5761
    0.1935


P1 =

     1     0     0     0
     0     1     0     0
     0     0     1     0


P2 =

 -633.1409  -20.3941 -492.3047  630.6410
  -24.6964 -741.7198 -182.3506 -345.0670
    0.1417   -0.1751   -0.9743    0.1935


C1 =

     0
     0
     0
     1


C2 =

    0.6993
   -0.5883
    0.4060
    1.0000


% new points using cpselect

%x1
input_points =

  422.7500  260.2500
  384.2500  238.7500
  339.7500  211.7500
  298.7500  186.7500
  452.7500  236.2500
  412.2500  214.2500
  368.7500  191.2500
  329.7500  165.2500
  482.7500  210.2500
  443.2500  189.2500
  402.2500  166.2500
  362.7500  143.2500
  510.7500  186.7500
  466.7500  165.7500
  425.7500  144.2500
  392.2500  125.7500
  403.2500  369.7500
  367.7500  345.2500
  330.2500  319.7500
  296.2500  297.7500
  406.7500  341.2500
  365.7500  316.2500
  331.2500  293.2500
  295.2500  270.2500
  414.2500  306.7500
  370.2500  281.2500
  333.2500  257.7500
  296.7500  232.7500
  434.7500  341.2500
  441.7500  312.7500
  446.2500  282.2500
  462.7500  311.2500
  466.7500  286.2500
  475.2500  252.2500
  481.7500  292.7500
  490.2500  262.7500
  498.2500  232.7500

%x2
base_points =

  393.2500  311.7500
  358.7500  282.7500
  319.7500  249.2500
  284.2500  216.2500
  431.7500  285.2500
  395.7500  256.2500
  356.7500  223.7500
  320.2500  194.2500
  474.7500  254.7500
  437.7500  226.2500
  398.7500  197.2500
  362.7500  168.7500
  511.2500  227.7500
  471.2500  196.7500
  432.7500  169.7500
  400.2500  145.7500
  388.2500  404.2500
  357.2500  373.2500
  326.7500  343.2500
  297.2500  318.7500
  387.7500  381.7500
  356.2500  351.7500
  323.2500  321.7500
  291.7500  292.7500
  390.7500  352.7500
  357.2500  323.2500
  320.2500  291.2500
  287.2500  258.7500
  427.7500  376.7500
  429.7500  351.7500
  431.7500  324.2500
  462.7500  345.7500
  463.7500  325.2500
  470.7500  295.2500
  491.7500  325.2500
  497.7500  298.2500
  504.7500  270.2500

更新III

更正见答案。上面计算的答案使用了错误的变量/值。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-16 17:34:19

**注所有参考资料均为Hartley和Zisserman的“计算机视觉中的多重视图几何”。

好吧,有几个bug:

  1. 在计算基本矩阵(第257-259页)时,作者提到了四个R的集合中正确的R,t对(结果9.19)是三维点位于两个摄像机前面的R,t对(图9.12,a),但没有提到如何计算这一点。我偶然地重读了第6章,发现6.2.3 (p.162)讨论了点的深度,结果6.1是得到正确的R和t.
  2. 所需的方程,在我实现最优三角剖分方法(算法12.1 (p.318))中,在第2步中,我有一个需要(T2^-1)' * F * T1^-1T2^-1' * F * T1^-1。前者翻译的是-1。我想要的,在后者中,翻译倒置的T2矩阵(再次被T2阻止,我没有正确计算P1,它应该是P1 = K * [eye(3),zeros(3,1)]; )。我忘了校准矩阵K.

的倍数

希望这对未来的过路人有帮助!

票数 5
EN

Stack Overflow用户

发布于 2010-03-31 12:22:24

这可能是因为您的点处于退化配置。试着从场景中添加几个不属于立方体的点,看看它是如何进行的。

票数 1
EN

Stack Overflow用户

发布于 2010-03-31 18:00:12

需要更多资料:

  • 是什么?基线可能太小,不适合视差。x2
  • Are和
  • 之间的差距是什么?您对校准的准确性有什么信心(我假设您使用了Bouguet的立体部分)?当您说对应点是手工挑选时,是指您在图像上选择了相应的点,还是在两幅图像上使用了感兴趣的点检测器,然后设置了correspondences?

我相信我们能解决这个问题:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2550458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档