2. 畸变来源与类型:径向畸变、切向畸变、薄棱镜畸变

好,咱们直接进入正题。深度相机拍出来的图,为什么有时候看着像哈哈镜?说白了,就是镜头畸变在捣鬼。我刚开始接触深度相机时,就被这个坑过——明明标定好了RGB相机,结果深度图一出来,边缘的物体位置全偏了。嗯,今天咱们就把畸变的几个“罪魁祸首”彻底聊透。

2.1 径向畸变:桶形与枕形

这是最常见的一种畸变。你想想看,镜头本质上是个凸透镜,光线经过透镜边缘时,折射角度和中心区域不一样。这就导致了图像边缘的直线会变弯。

  • 桶形畸变:图像边缘向外膨胀,像木桶一样。我做过一个项目,用广角镜头拍棋盘格,角点检测死活对不上,后来发现是桶形畸变太严重了。
  • 枕形畸变:图像边缘向内收缩,像枕头一样。长焦镜头容易出现这个问题。

数学上怎么描述?我们用泰勒展开来近似。径向畸变模型通常用三个参数 k1、k2、k3 来表示:

// 径向畸变校正公式
x_corrected = x * (1 + k1 * r² + k2 * r⁴ + k3 * r⁶)
y_corrected = y * (1 + k1 * r² + k2 * r⁴ + k3 * r⁶)

其中 r 是像素点到图像中心的距离。k1 负责主要畸变,k2 和 k3 处理边缘更精细的变形。我个人习惯,对于普通镜头只标定 k1 和 k2 就够了,k3 容易过拟合。

深度图的影响:径向畸变会让深度图边缘的物体位置发生偏移。比如一个平面,在深度图上会变成曲面。我曾经遇到过,一个平整的墙面,深度图显示中间凸起——其实就是桶形畸变没校正。

2.2 切向畸变

这个畸变来自镜头和传感器不平行。你想想看,如果镜头装歪了,哪怕歪了一点点,光线投射到传感器上的位置就会偏移。

切向畸变有两个参数 p1 和 p2:

// 切向畸变校正公式
x_corrected = x + [2 * p1 * x * y + p2 * (r² + 2 * x²)]
y_corrected = y + [p1 * (r² + 2 * y²) + 2 * p2 * x * y]

这个公式看着复杂,其实核心就一句话:畸变量和像素位置有关,而且 x 和 y 方向会互相影响

我记得有一次,客户反馈深度相机拍出来的物体总是倾斜的。我排查了半天,最后发现是镜头座有个螺丝松了,导致传感器轻微倾斜。切向畸变参数 p1、p2 的值直接飙到了 0.01 以上——正常应该在 0.001 级别。

避坑指南:我曾经在标定时只用了中心区域的棋盘格图像,结果切向畸变参数完全没标出来。后来我学乖了——标定板一定要覆盖整个视场,尤其是四个角落。

2.3 薄棱镜畸变

这个比较冷门,但高精度场景下不能忽略。薄棱镜畸变来源于镜头组中镜片的微小倾斜或偏心。说白了,就是镜片没装正,像个薄棱镜一样把光线偏折了。

它的模型更复杂,通常用 s1、s2、s3、s4 四个参数:

// 薄棱镜畸变校正公式(简化版)
x_corrected = x + s1 * r² + s2 * r⁴
y_corrected = y + s3 * r² + s4 * r⁴

不过说实话,在消费级深度相机里,薄棱镜畸变的影响很小。我做工业检测项目时才会去标定它。普通场景下,标定径向和切向畸变就够了。

注意:薄棱镜畸变和切向畸变容易混淆。切向畸变是传感器和镜头不平行,薄棱镜畸变是镜片本身的光轴偏移。两者在数学上可以部分互相补偿,但物理成因不同。我建议:除非你的项目精度要求达到亚像素级别,否则别碰薄棱镜畸变。

2.4 三种畸变对深度图的影响对比

咱们用一张表来总结,这样更直观:

畸变类型 主要成因 对深度图的影响 校正优先级
径向畸变 透镜折射不均匀 深度图边缘物体位置偏移,平面变曲面 高(必须校正)
切向畸变 镜头与传感器不平行 深度图整体倾斜,物体高度测量不准 中(建议校正)
薄棱镜畸变 镜片偏心或倾斜 局部深度值偏差,高精度场景下明显 低(按需校正)

2.5 知识体系结构图

下面我用一张 SVG 图,把三种畸变的来源、类型和影响串起来。这样你一眼就能看明白整个知识脉络:

深度相机畸变知识体系 镜头畸变 径向畸变 切向畸变 薄棱镜畸变 桶形畸变 枕形畸变 镜头倾斜 镜片偏心 深度图精度下降 / 位置偏移

这张图把三种畸变的来源、子类型和最终影响串在了一起。你可以看到,无论畸变从哪来,最终都会反映到深度图的精度上。嗯,这就是为什么我们做深度相机标定时,畸变校正是绕不开的一步。

我的经验:实际项目中,径向畸变占了总畸变的 80% 以上。你只要把径向畸变校正好,深度图的质量就能提升一大截。切向畸变和薄棱镜畸变,属于锦上添花。别一开始就追求完美,先搞定大头再说。

专注资料整理