这是标注平台最核心的一种工作方式。这一页讲它怎么转、它靠什么成立, 以及它最危险的那个地方:错误会被烧进结果里,而且看起来一切正常。
┌──────────────────────┬──────────────────────┐
│ 点云,3D 视图 │ 图像,2D 视图 │
│ │ │
│ ┌────┐ │ ┌────┐ │
│ │ ▓▓ │ 3D 框 │ │ ▓▓ │ 投影 │
│ └────┘ │ └────┘ │
│ │ │
└──────────────────────┴──────────────────────┘
↑ 人在左边拖框 ↑ 右边实时跟着变
两个视图是联动的。拖左边的 3D 框,右边立刻跟着变。
| 步 | 在哪做 | 为什么在这一边 |
|---|---|---|
| ① | 图像找目标 | 图像有语义,一眼看出"那是辆车"。点云里只有一堆点 |
| ② | 点云定几何 | 点云有深度和尺寸,激光量出来的 |
| ③ | 图像看反馈 | 系统把 3D 框投影过去 |
| ④ | 点云微调 | 投影没贴合,回去调位置、朝向、尺寸 |
| ⑤ | — | 投影贴合,提交 |
图像是反馈,点云是操作对象,投影是把两者连起来的桥。
所以投影不是产物,是校验手段。真正的产物是那个存在于点云坐标系里的 3D 框。
| 前提 | 不成立会怎样 |
|---|---|
| 外参准确 | 投影整体偏。而且旋转类误差不随距离衰减,远处照样错 |
| 内参与畸变准确 | 投影在边缘偏,中心可能还正常 |
| 时间对齐 | 运动目标偏得很厉害,静止目标却看不出 |
| 坐标约定一致 | 整体翻转或错位,而且两边各自都正常 |
图像丢掉了一整个维度。一个像素对应的是一条射线,你不知道点在这条线的哪个位置。 所以要让 3D 标注成立,深度必须由别处补上。
| 尺子 | 公式 | 还需要什么 |
|---|---|---|
| 点云测距 | 直接量,不用公式 | 激光打到了那个物体 |
| 物体高度 | Z = fy · H / h | 知道那是什么物体,也就是知道 H |
| 相机高度 | Z = fy · h_cam / (v − v_horizon) | 图像里能找到地平线 |
后两把尺子是同一个相似三角形,只是参照物不同。它们有一个共同点: 误差都按距离的平方放大,而且分母是那把尺子的长度。
|dZ/dv| = Z² / (fy · h_cam)
所以尺子越短,远处越不准。这也是为什么 100 米外一个像素能对应八九米。
h = fy · H / Z 里,h 是量得到的,H 和 Z 都不知道。
一个方程两个未知数,解不出来。
要算距离 → 得先知道车高
要知道车高 → 得先认出是什么车
要认出来 → 得看清它
远处看不清 → 算不出距离
越远越需要它,越远越做不到。而且它还会崩得很惨: 一辆 3.5 米高的卡车按 1.5 米算,距离会算成实际值的四成三。
① 相机外参错了 0.5 度 → 投影整体偏 8 像素
② 标注员看到投影偏了
③ 他去调那个 3D 框,让它对上图像
④ 他画出来的框,在点云里是歪的
但在图像上看起来完美贴合
⑤ 没有任何环节报错
标定误差不会让你发现它,它会让你把框调歪。
而且检查手段就是图像,而图像上看起来一切正常。所以错误被烧进了标注结果里, 而且从结果本身看不出来。
这也意味着:"投影框和车对不上"这个现象有两种解释: 标定错了,或者标注员跟着错的投影把框调歪了。光看标注结果分不出来。
| 纯 2D | 纯 3D | 3D 投 2D | |
|---|---|---|---|
| 深度从哪来 | 人猜 | 点云量 | 点云量 |
| 边界从哪来 | 图像,清楚 | 点云,稀疏靠脑补 | 图像 |
| 精度 | 图像上准,但没有深度和朝向 | 几何准,但边界不确定 | 两者都准 |
| 效率 | 快 | 慢,在稀疏点云里拖不好对 | 中,要来回切视图 |
| 可校验性 | 强,但只能校验看得见的 | 弱,点云没语义 | 最强 |
| 失败模式 | 深度系统性错 | 沿视线飘 | 标定错会被烧进结果 |
因为它把两件事分工了:几何来自点云,边界来自图像,各取所长。
而纯 3D 慢,不是操作难,是点云看不出"这是不是一辆完整的车", 人在里面拖了半天不知道自己画对没有。有了投影就立刻有反馈。
有反馈比操作简单更能提效率。
这个范式的核心是"两个视图互相当证物",所以它天然依赖标定和约定。 前提一旦不成立,错误不会报错,它会悄悄进到标注结果里。
深度必须来自 3D 侧。图像自己给不出来,这是投影的零空间决定的,不是精度问题。
所以验收的时候,不能只看"投影贴合不贴合", 还要能在另一个视图里检查同一件事。否则你检查的就是那个已经错了的通道。