如何找到2个图像的3D点

时间:2014-11-21 04:50:01

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

我在左图像中有两个对应点(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]

2 个答案:

答案 0 :(得分:0)

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

或者您可以使用计算机视觉系统工具箱中的triangulate功能进行MATLAB。

答案 1 :(得分:0)

如果您真的很期待追求视觉(多视图几何,不是儿童游戏:P),您可以遵循Dima的建议。如果您只是在寻找问题的解决方案,那么

首先,计算公制坐标系中两个像素的坐标,这是通过将相应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

我希望它有所帮助:)。