You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KITTI数据集下相机2像素坐标到相机3的坐标转换问题求助

KITTI 相机2到相机3像素坐标转换问题解决方案

核心错误点

  • 直接对3×4的P_rect_02求逆完全错误:投影矩阵不是方阵,不存在严格的逆矩阵;且2D像素点没有深度信息时,逆投影只能得到一条射线,无法得到唯一3D空间点,必须先给定对应像素点的深度值才能完成转换。
  • KITTI官方提供的P_rect_0X矩阵的作用是将校正后相机0坐标系下的3D齐次点(X,Y,Z,1) 投影到对应X号相机的像素平面,不支持直接逆运算得到相机0的3D点。

正确转换步骤

前提:已获取相机2上待转换像素点(x_pixel_c2, y_pixel_c2)对应的深度值d(即该点在相机2坐标系下的Z轴坐标,单位为米,可通过雷达点云匹配、双目深度估计等方式获取);使用的是KITTI官方发布的已校正图像,无需额外处理畸变。

方法1:利用校正后相机特性直接计算(效率更高)

KITTI完成极线校正后,相机2和相机3的光轴平行、成像平面共面,仅在X轴方向存在约0.54m的基线偏移,且两个相机的校正内参的fx、fy、cy完全一致,仅cx有差异,可直接通过以下步骤计算:

  1. 从KITTI标定文件中获取相机2的校正内参:fx2(X方向焦距)、cx2(X方向主点坐标)、cy2(Y方向主点坐标),相机3的cx3(X方向主点坐标),以及双目标定的基线长度b(约0.54m)
  2. 计算该点在相机2坐标系下的3D坐标:
z_c2 = d
x_c2 = (x_pixel_c2 - cx2) * z_c2 / fx2
y_c2 = (y_pixel_c2 - cy2) * z_c2 / fx2
  1. 转换到相机3坐标系下的3D坐标(仅X轴有偏移):
x_c3 = x_c2 - b
y_c3 = y_c2
z_c3 = z_c2
  1. 投影到相机3的像素平面:
x_pixel_c3 = fx2 * x_c3 / z_c3 + cx3
y_pixel_c3 = fx2 * y_c3 / z_c3 + cy2

极线校正后转换得到的y_pixel_c3应该和原始的y_pixel_c2差异极小,一般误差不超过1个像素,可以用这个特性验证转换是否正确。


方法2:使用官方P_rect矩阵计算

如果需要严格对齐官方标定逻辑,可以按以下步骤操作:

  1. 从标定文件中读取P_rect_02和P_rect_03两个3×4的投影矩阵,以及待转换点的深度值d
  2. 解析P_rect_02的参数:
fx2 = P_rect_02[0, 0]
cx2 = P_rect_02[0, 2]
fy2 = P_rect_02[1, 1]
cy2 = P_rect_02[1, 2]
b02 = -P_rect_02[0, 3] / fx2  # 相机2相对校正后相机0的X轴基线
  1. 计算校正后相机0坐标系下的3D齐次点:
z0 = d
y0 = (y_pixel_c2 - cy2) * z0 / fy2
x0 = (x_pixel_c2 - cx2) * z0 / fx2 + b02
pt_3d_cam0 = np.array([x0, y0, z0, 1])
  1. 投影到相机3像素平面:
pt_c3_hom = P_rect_03 @ pt_3d_cam0
x_pixel_c3 = pt_c3_hom[0] / pt_c3_hom[2]
y_pixel_c3 = pt_c3_hom[1] / pt_c3_hom[2]

内容的提问来源于stack exchange,提问作者johndoe87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:24:03