【问题标题】:How to find the 3D point for 2 images如何找到 2 张图像的 3D 点
【发布时间】:2014-11-21 04:50:00
【问题描述】:

我在左图中有两个对应点 (x1,y1),在右图中有 (x2,y2)。两台摄像机之间的距离为 10 米。我想知道如何在正确的相机坐标中找到 3D 点?我有以下数据:

R=[ 1 0 0;
    0 0.9 -0.25;
    0 0.2 0.96]
t=[ 0.5; -10; 2.75];
Kleft= [-1000 0 511;
         0 -1000 383;
         0  0    1];
Kright=[-500 0 319;
         0 -500 119;
         0 0 1];
Essentail Matrix=[0   -5.2445   -8.9475;
                  2.7500   -0.1294   -0.4830;
                  10.0000    0.4830   -0.1294]

【问题讨论】:

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


    【解决方案1】:

    有关三角测量算法,请参阅 Hartley、Richard 和 Andrew Zisserman。计算机视觉中的多视图几何。第二版。剑桥,2000 年。 312.

    或者您可以使用 MATLAB 计算机视觉系统工具箱中的 triangulate 函数。

    【讨论】:

      【解决方案2】:

      如果你真的很期待追求视觉,你可以听从 Dima 的建议(多视图几何,这不是儿戏:P)。如果您只是在这里寻找问题的解决方案,

      首先,计算两个像素在公制坐标系中的坐标,这是通过将对应的K矩阵的逆乘以齐次像素坐标来完成的,

      X1_metric = (Kleft)^-1 * (x1, y1, 1)

      X2_metric = (Kright)^-1 * (x2, y2, 1)

      现在,计算向量 X2_metric 的偏斜矩阵,即如果 X2_metric = [a,b,c] 那么,

      skew(X2_metric) = [0 -c b ; c 0 -a ;-b a 0 ]

      现在,求比例因子 lambda = (skew(X2_metric)*t)/(skew(X2_metric) * R * X1_metric)

      我们差不多完成了,左图帧中点的3D坐标是,

      X1(3D) = (lambda * X1_metric)

      要计算右图帧内的3D坐标,只需做如下变换,

      X2(3D) = (R*X1(3D)) + t

      希望对你有帮助:)

      【讨论】:

      • 我有一个问题,最后一个方程是 t=10 吗?还是给定数据的翻译向量?
      • t 是您在问题中提到的翻译向量。
      • 那么,无论两个摄像头之间的距离如何,这种方法都有效?
      • 两个相机之间的距离,只不过是数据中向量“t”的大小(2 阶范数)。因此,两个摄像机之间的距离隐含在您的数据中。是的,这种方法总是有效的(除了 norm(t)=0):-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2012-02-20
      • 2012-03-04
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多