Skip to content

相机标定与二维核验

把每一个三维立方体投影到各个已标定的相机图像上,让标注者在三维中编辑、在二维中核验。以及为什么缺了这一步,三维标注就没有反馈回路。

在点云中画一个三维框,然后看着它落在拍到该物体的那张照片上的对应位置。 按条目提供的相机标定,会把每一个立方体投影到每一个相机视图中,并随框的移动实时重绘。

yaml
annotation_schemes:
  - annotation_type: spatial_annotation
    name: objects
    source_field: point_cloud
    calibration_field: calibration    # 存放相机装置信息的条目字段
    tools: [cuboid_3d]
    labels:
      - {name: car, color: "#FF6B6B"}

可运行示例:examples/spatial/kitti-cuboids/

为什么这比听起来更重要

40 米外的一辆车只有几十个激光雷达回波点。框贴得紧不紧、长度对不对、旋转是否正确,仅凭点云几乎都无法回答,而在相机图像中却一目了然。

因此标注者是在三维中编辑、在二维中核验的。视口下方的面板会显示每个相机的视图,并把各个框投影其上。

没有这一步,三维标注就没有反馈回路。一个从环绕相机看起来正确的框,可能沿视线方向偏差数米,而三维视图中没有任何东西会提示你。

坐标系是最容易出错的地方

标定是一条变换链,每一环都有可能悄悄出错:

  • 参考坐标系与相机坐标系。 在本应使用校正后参考坐标系的地方用了某一台相机的变换,会让每个框都平移该相机的双目基线距离。几厘米,且是系统性的,很容易被误以为是标注者不够细致。
  • 位置约定。 KITTI 的三维位置指的是框底面的中点。若按中心来读,会把每个物体埋进地下半个自身高度。
  • 尺寸顺序与坐标轴分配。 KITTI 的尺寸是 h w l,并且在框自身的坐标系中,长度沿 X 轴,高度沿 Y 轴向下,宽度沿 Z 轴。若假定长度沿相机的前向轴——这看起来是最自然的选择——就会得到一个恰好旋转了 90° 的框。

最后这一条最具启发性:往返测试抓不到它,因为逆向转换做了同样的假设,两者彼此自洽。只有与官方开发工具包自己的角点公式作比对才能发现,而针对这一点确实有一项测试。

相关内容