我正在尝试将KITTI MOT dataset的地面真假分割蒙版从左到右转换为相机,并对其为何不起作用感到非常困惑。
分割蒙版在左侧框架中以像素形式给出。我从calib_cam_to_cam.txt
文件中获得了校准参数,据我了解,该校准参数对于所有KITTI数据集都是相同的。据我正确理解相应的paper而言,图像数据已得到校正,因此左(2)和右(3)RGB图像平面位于单个平面中,并且仅沿x轴平移,基线(在摄像机2和3之间,平移等于〜54厘米)。根据上述文件,从校准文件计算得出的结果是相同的:
bm_left = -P_rect_left[0, 3] / P_rect_left[0, 0]
bm_right = -P_rect_right[0, 3] / P_rect_right[0, 0]
bm_left_right = bm_right - bm_left
P_rect_...[0, 3]
是给定摄像机的基线,以像素为单位并乘以-1,即乘以像素焦距(fu
的-1倍,P_rect_...[0, 0]
为{ {1}}。
因此,从右摄像头到左摄像头的转换很简单:
fu
现在,为了从左侧图像平面到右侧图像平面获取某个图像点T_left_right = [[1, 0, 0, 0.54],
[0, 1, 0, 0 ],
[0, 0, 1, 0 ],
[0, 0, 0, 1 ]]
,我可以使用p_i=[u, v]
中经过校正的固有参数将其反向投影到单位矢量:
P_rect_left
然后我可以使用 mu = (u - cu) / fu
mv = (v - cv) / fv
vectorized = [u, v, 1]
vectorized_normed = vectorized / norm(vectorized)
将单位矢量转换为正确的相机坐标系,即:
T_left_right
最后,我可以将此点投影到正确的相机图像平面中以获得像素坐标:
vectorized_normed_right = dot_product(inverse(T_left_right), vectorized_normed)
However, this does not work well Yet, when I divide the baseline by ten, I get pretty good results
我的数学错了吗?还有其他提示吗? 我将非常感谢任何形式的帮助:)