4、平移误差度量:欧氏距离、相对误差百分比、尺度无关的误差度量、方向分量误差

好,咱们接着聊外参标定精度验证。上一节我们把旋转误差聊透了,这一节轮到平移误差了。

平移误差,说白了就是看你的相机中心位置标得准不准。我见过不少团队,旋转误差控制得挺好,但平移一塌糊涂,结果建出来的地图全是歪的。嗯,平移误差的度量方式有好几种,每种都有它的适用场景。我个人习惯把这四种方法都跑一遍,然后综合判断。

4.1 欧氏距离:最直观的度量

欧氏距离,就是三维空间里两点之间的直线距离。公式很简单:

d = sqrt( (x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2 )

这个值直接告诉你,标定出来的相机中心和真值之间差了多少米。单位是毫米或者米,看你的应用场景。

我的经验:在自动驾驶场景中,如果欧氏距离超过5厘米,那基本就要重新标定了。但在室内AR场景中,10厘米以内都能接受。阈值怎么定?得看你的传感器精度和业务需求。

欧氏距离的好处是直观,坏处是它不告诉你误差的方向。你只知道差了多远,但不知道是前后、左右还是上下出了问题。

4.2 相对误差百分比:消除尺度影响

欧氏距离有个问题——它跟场景尺度有关。你想想看,在一个10米×10米的房间里,5厘米误差可能很严重。但在一个1公里×1公里的室外场景中,5厘米误差几乎可以忽略。

所以就有了相对误差百分比:

相对误差 = (欧氏距离 / 场景尺度) × 100%

这里的「场景尺度」怎么定义?我一般用相机到场景中心的距离,或者用场景中特征点分布的范围直径。

场景类型 典型尺度 可接受相对误差
室内桌面 1-2米 < 1%
室内房间 5-10米 < 0.5%
室外小范围 50-100米 < 0.1%
室外大范围 500-1000米 < 0.05%

避坑指南:我曾经在一个项目中直接用场景对角线作为尺度,结果发现误差百分比忽大忽小。后来改成用相机到场景中心的平均距离,稳定多了。记住,尺度的定义要跟你的应用场景匹配。

4.3 尺度无关的误差度量

有些时候,你根本不知道场景的真实尺度。比如你只有一张图片,没有深度信息。这时候怎么办?

尺度无关的误差度量就派上用场了。它的核心思想是:只关心平移的方向,不关心平移的大小。

具体做法是:

  1. 把真实平移向量和估计平移向量都归一化到单位长度
  2. 计算两个单位向量之间的夹角
  3. 这个夹角就是尺度无关的误差
t_gt_norm = t_gt / ||t_gt||
t_est_norm = t_est / ||t_est||
angle_error = arccos( t_gt_norm · t_est_norm )

这个度量在视觉SLAM中特别有用。我记得有一次做单目SLAM的外参标定,深度完全不确定,但用这个度量就能判断平移方向标得对不对。

注意:当真实平移量非常小(比如接近零)时,这个度量会失效。因为归一化本身就不稳定了。我建议在平移量大于1厘米时才使用这个度量。

4.4 方向分量误差

最后一种,方向分量误差。这个度量把平移误差分解到三个坐标轴上:

  • X方向误差:Δx = x_est - x_gt
  • Y方向误差:Δy = y_est - y_gt
  • Z方向误差:Δz = z_est - z_gt

为什么要分解?因为不同方向的误差对系统的影响完全不同。

举个例子:在车载相机标定中,Z方向(高度)的误差会影响地面检测,X方向(横向)的误差会影响车道线匹配,Y方向(纵向)的误差会影响距离估计。

我个人习惯在标定报告中同时给出三个方向的分量误差,而不是只给一个欧氏距离。这样调试的时候能快速定位问题出在哪个轴上。

实战建议:我曾经遇到一个案例,欧氏距离只有3厘米,看起来不错。但分解后发现Z方向误差达到了2.8厘米,X和Y方向几乎为零。这说明相机高度标错了,但水平位置是对的。如果不分解,根本发现不了这个问题。

4.5 四种度量的对比

好了,四种度量都讲完了。我画了一张图帮你理清思路:

平移误差度量方法对比 平移误差度量 欧氏距离 最直观,但无方向信息 单位:毫米/米 相对误差百分比 消除尺度影响 单位:% 尺度无关度量 只关心方向 单位:度(°) 方向分量误差 分解到X/Y/Z轴 单位:毫米/米 选择哪种度量,取决于你的应用场景和传感器配置

总结一下我的建议:

  • 日常标定验证:用欧氏距离 + 方向分量误差,两个一起看
  • 跨场景对比:用相对误差百分比,公平比较不同尺度的标定结果
  • 单目/尺度不确定场景:用尺度无关度量,只看方向对不对

嗯,平移误差的度量就这些。下一节我们聊聊怎么把这些度量方法组合起来,形成一个完整的标定验证流程。不过那是后话了,先把这四种方法吃透再说。

可可精品资料库