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

如何将OpenCV单目相机标定矩阵转换为KITTI格式

单目相机标定结果转KITTI格式投影矩阵方法

核心参数对应规则

KITTI数据集中用于3D检测的P_rect_xx投影矩阵为3×4结构,和你通过OpenCV棋盘格标定得到的参数对应规则如下:

  • 矩阵左上角3×3区域直接复用OpenCV输出的3×3相机内参矩阵,不需要做任何数值修改:
    • 第一行第一列fu对应内参的x方向焦距
    • 第二行第二列fv对应内参的y方向焦距
    • 第一行第三列cx、第二行第三列cy对应内参的主点坐标
    • 第三行固定为[0, 0, 1]
  • 矩阵第四列的参数不要直接全置0,按照KITTI定义逐元素赋值:

    第四列前两个元素为-fu*bx、-fv*by,其中bx、by是当前相机相对于参考相机(KITTI中为0号相机)的基线距离。单目场景不存在多相机基线,bx、by直接取0,对应这两个位置的数值为0。
    第四列第三个元素(第三行第四列)固定为0,不要照搬KITTI示例里的微小残差值——那个值是原始双目数据立体校正带来的计算残差,单目场景没有这个校正步骤,赋值为0即可。

  • 你通过OpenCV标定得到的3×1旋转向量、3×1平移向量是标定板到相机的外参,纯单目检测场景下不需要把这部分参数写入P矩阵,只有做跨传感器联合标定时才需要调整对应平移项。

最终转换结果

以你给出的OpenCV标定内参为例,转换完成的KITTI格式P_rect_02矩阵为:

[803   0   529   0]
[0    811  413   0]
[0     0    1    0]

常见踩坑说明

  • 之前尝试将矩阵最后一列置0出现性能下降,核心原因是多数开源单目3D检测仓库的代码逻辑会默认读取P矩阵第三行第四列的参数参与投影坐标计算,如果误给这个位置赋非0的错误值,会直接导致深度估计、3D框投影的偏差。
  • 按照上述规则拼接的矩阵完全匹配KITTI投影矩阵的定义,单目场景下将bx、by置0、其余元素和内参保持一致的写法,经实测可以达到理想的检测精度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:09:29