OpenCV立体视觉3D坐标到2D相机平面投影不同于将2D点三角测量到3D

时间:2016-05-01 12:41:03

标签: c++ opencv computer-vision stereo-3d

我使用功能匹配在左侧摄像头( pointL )和右侧摄像头( pointR )中的相应图像点获得了一个图像点。这两个摄像机是平行的,并且处于相同的高度#34;它们之间只有一个x翻译。

我也知道每个摄像机的投影矩阵( projL,projR ),这是我在使用initUndistortRectifyMap进行校准时得到的。

对于三角测量这一点,我打电话给: triangulatePoints(projL, projR, pointL, pointR, pos3D)documentation),其中 pos3D 是对象的输出3D位置。

现在,我想将3D坐标投影到左侧相机的2D图像

  

2Dpos = projL * 3dPos

得到的x坐标是正确的。但y-coodinate约错了20个像素。

我该如何解决这个问题?

修改 当然,我需要使用齐次坐标,以便将其与投影矩阵(3x4)相乘。出于这个原因,我设置了:

3dPos[0] = x;
3dPos[1] = y;
3dPos[2] = z;
3dPos[3] = 1;

3dPos[3]设置为1

是不对的

注意:

  1. 所有图像都被重新映射,我是在一种预处理步骤中完成的。
  2. 当然,我总是使用齐次坐标

1 个答案:

答案 0 :(得分:1)

您很可能会投影到经过纠正的相机中。需要应用整流扭曲的倒数来获得原始(未失真)线性相机坐标中的点,然后应用失真进入原始图像。