2、畸变数学模型:径向畸变模型(Brown-Conrady模型)、切向畸变模型、薄棱镜畸变模型、多项式拟合与除法模型对比

聊完了畸变是什么,咱们得动真格的了——用数学把它描述出来。你想想看,没有数学模型,我们怎么去校正它?说白了,畸变校正本质上就是一个“反推”的过程:先建模,再求解逆变换。

我个人习惯把畸变模型分成两大类:物理模型经验模型。物理模型是从光学原理出发推导的,比如Brown-Conrady模型;经验模型则是用多项式或除法去“硬拟合”畸变曲线。两者各有千秋,咱们一个一个说。

2.1 径向畸变模型(Brown-Conrady模型)

这是最经典的模型,也是工业界用得最多的。我在项目中遇到过不少次,默认首选就是它。

径向畸变的本质是:光线通过镜头时,离光轴越远,折射角度偏差越大。用数学表达就是:

// 径向畸变模型(Brown-Conrady)
x_distorted = x * (1 + k1 * r^2 + k2 * r^4 + k3 * r^6)
y_distorted = y * (1 + k1 * r^2 + k2 * r^4 + k3 * r^6)

其中:
(x, y) —— 归一化后的理想坐标
(x_distorted, y_distorted) —— 畸变后的实际坐标
r^2 = x^2 + y^2
k1, k2, k3 —— 径向畸变系数

这里有个细节要注意:k1 控制主要畸变,k2 和 k3 是更高阶的修正项。一般情况下,只标定 k1 和 k2 就够了。但如果你用的是超广角镜头或者鱼眼镜头,那 k3 必须加上,否则边缘校正效果会很差。

核心要点:Brown-Conrady模型是OpenCV和MATLAB的默认畸变模型。它用三个径向系数(k1, k2, k3)和两个切向系数(p1, p2)来描述镜头畸变。我建议初学者先只标定k1和p1,看看效果再决定是否增加高阶项。

我的经验:曾经有一个项目,用普通工业镜头拍A4纸文档,我只标定了k1和k2,结果边缘文字还是有点弯曲。后来加上k3,问题就解决了。嗯,这里要注意:k3的数值通常很小(10^-5量级),但它的影响在图像边缘非常明显。

2.2 切向畸变模型

切向畸变,说白了就是镜头和成像平面不平行造成的。你想想看,如果镜头的光轴没有完美垂直于传感器平面,那图像就会像被“拧”了一下。

数学上,切向畸变用两个参数 p1 和 p2 来描述:

// 切向畸变模型
x_distorted = x + [2 * p1 * x * y + p2 * (r^2 + 2 * x^2)]
y_distorted = y + [p1 * (r^2 + 2 * y^2) + 2 * p2 * x * y]

其中:
p1, p2 —— 切向畸变系数

这个模型在工业相机标定中非常常见。我记得有一次,客户反馈说拍出来的电路板焊点位置总是偏一点,怎么调都调不准。后来一查,是镜头安装时有个微小的倾斜——切向畸变在作怪。标定出 p1 和 p2 后,校正完就完美了。

避坑指南:我曾经遇到过切向畸变系数特别大的情况,结果发现是镜头本身有物理损伤。所以,如果标定出来的p1、p2数值异常(比如超过0.1),先别急着校正,检查一下硬件更靠谱。

2.3 薄棱镜畸变模型

这个模型知道的人不多,但它在高精度测量中非常有用。薄棱镜畸变,说白了就是镜头内部镜片组之间的微小错位,导致光线像穿过一个薄棱镜一样发生偏折。

它的数学形式是:

// 薄棱镜畸变模型
x_distorted = x + s1 * r^2 + s2 * r^4
y_distorted = y + s3 * r^2 + s4 * r^4

其中:
s1, s2, s3, s4 —— 薄棱镜畸变系数

这个模型在普通消费级相机中很少用到,但在工业检测、医疗影像这些对精度要求极高的场景中,它往往是“压死骆驼的最后一根稻草”。我建议你把它当作一个“高级选项”——先用Brown-Conrady模型,如果校正后还有残余误差,再考虑加上薄棱镜项。

2.4 多项式拟合与除法模型对比

好了,咱们来对比一下这两种主流方法。我直接用一个表格来说明:

对比项 多项式拟合模型 除法模型
数学形式 r_distorted = r * (1 + k1*r^2 + k2*r^4 + ...) r_distorted = r / (1 + k1*r^2 + k2*r^4 + ...)
适用场景 普通镜头、中低畸变 鱼眼镜头、高畸变(>20%)
计算复杂度 低,直接多项式求值 中,需要除法运算
逆变换求解 需要迭代或近似 可以直接求解(二次方程)
稳定性 高阶项容易过拟合 对噪声更鲁棒

我个人习惯是:畸变率小于10%用多项式模型,大于10%用除法模型。为什么?因为多项式模型在高畸变区域会出现“回弯”现象——你想想看,一个五次多项式在边缘处可能会突然反向弯曲,这显然不符合物理规律。而除法模型天生就是单调的,不会出现这种问题。

我的建议:如果你用的是普通手机镜头或监控摄像头,直接用Brown-Conrady的多项式模型就够了。但如果你在搞VR/AR或者自动驾驶的鱼眼相机,那除法模型是你的不二之选。我曾经在车载环视项目中吃过亏——用多项式模型校正鱼眼镜头,边缘总是有残留畸变,换成除法模型后一次性搞定。

2.5 四种模型对比总结

咱们用一张图来总结这四种模型的关系:

畸变数学模型分类与对比 物理模型 经验模型 径向畸变 Brown-Conrady 切向畸变 p1, p2参数 薄棱镜畸变 s1~s4参数 多项式拟合 低畸变场景 除法模型 高畸变场景 核心建议:普通场景用Brown-Conrady(k1,k2,p1,p2),鱼眼场景用除法模型 高精度场景可叠加薄棱镜模型作为微调

最后说一句:模型选对了,校正就成功了一半。我个人建议你从最简单的Brown-Conrady模型开始,逐步增加复杂度。不要一上来就搞七参数、八参数的模型——过拟合会让你在校正时看起来很完美,但换一个场景就崩了。

嗯,这一章的内容就到这里。记住:数学模型是工具,不是目的。理解每种模型背后的物理含义,比死记硬背公式重要得多。


专注资料整理