【发布时间】:2012-11-09 10:27:14
【问题描述】:
我有一对从校正立体图像中提取的匹配 2D 特征。在 OpenCV 中使用 cvPerspectiveTransform 函数,我尝试在 3D 中重建这些特征。结果与现实世界中的实际对象尺寸不一致。我意识到 Matlab 校准工具箱中有一个功能可以将 2D 立体特征转换为 3D 点云。然而,这些特征是从原始图像中提取的。
如果我想使用校正后的图像,是否可以根据 2D 特征位置和视差信息重建 3D 位置。
【问题讨论】:
我有一对从校正立体图像中提取的匹配 2D 特征。在 OpenCV 中使用 cvPerspectiveTransform 函数,我尝试在 3D 中重建这些特征。结果与现实世界中的实际对象尺寸不一致。我意识到 Matlab 校准工具箱中有一个功能可以将 2D 立体特征转换为 3D 点云。然而,这些特征是从原始图像中提取的。
如果我想使用校正后的图像,是否可以根据 2D 特征位置和视差信息重建 3D 位置。
【问题讨论】:
如果您知道焦距 (f) 和基线宽度(b,两个相机的投影轴的距离)以及视差 (d)在校正立体图像对中 ,您可以使用以下公式计算距离(Z):
Z = f*(b/d);
这由以下等式得出:
x_l = f*(X/Z); // projecting a 3D point onto the left image
x_r = f*((X+b)/Z); // projecting the same 3D point onto the right image
d = x_r - x_l = f * (b/Z); // calculating the disparity
求解Z 的最后一个方程应该得到上面给出的公式。
【讨论】: