我有一对从校正立体图像中提取的匹配二维特征。在 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
应该导致上面给出的公式。