我使用功能匹配在左侧摄像头( 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
注意:
答案 0 :(得分:1)
您很可能会投影到经过纠正的相机中。需要应用整流扭曲的倒数来获得原始(未失真)线性相机坐标中的点,然后应用失真进入原始图像。