4. 数学模型:Brown-Conrady畸变模型、除法模型、多项式模型
聊到镜头畸变校正,就绕不开数学模型。说白了,数学就是给畸变“拍X光片”——把肉眼看到的变形,用公式精确描述出来。
我最早接触畸变校正时,觉得公式特别吓人。后来发现,其实就三种主流模型:Brown-Conrady模型、除法模型、多项式模型。今天咱们一个一个拆开讲。
4.1 Brown-Conrady畸变模型
这个模型在工业视觉里用得最多。我习惯叫它“标准模型”。它把畸变拆成两部分:径向畸变和切向畸变。
径向畸变,就是镜头中心往外“鼓”或者往里“缩”。你想想看,广角镜头拍出来的照片,边缘的直线都弯了,这就是径向畸变。
切向畸变,是镜头和成像平面不平行造成的。我在项目中遇到过,相机固定支架稍微歪了一点,拍出来的矩形就变成了梯形。嗯,这就是切向畸变在捣鬼。
公式长这样:
x_distorted = x * (1 + k1*r^2 + k2*r^4 + k3*r^6) + [2*p1*x*y + p2*(r^2 + 2*x^2)]
y_distorted = y * (1 + k1*r^2 + k2*r^4 + k3*r^6) + [p1*(r^2 + 2*y^2) + 2*p2*x*y]
其中:
- (x, y) 是理想坐标
- r^2 = x^2 + y^2
- k1, k2, k3 是径向畸变系数
- p1, p2 是切向畸变系数
关键点:k3一般只在鱼眼镜头里用。普通工业镜头,k1和k2就够用了。加太多参数反而容易过拟合。
我的经验:标定时,先只算k1和p1。如果校正后边缘还有明显弯曲,再加k2。我曾经一次性把k1~k6全开了,结果校正完的图像比没校正还奇怪……
4.2 除法模型
这个模型比较“另类”。它把畸变放在分母上。公式很简单:
x_distorted = x / (1 + k * r^2)
y_distorted = y / (1 + k * r^2)
只有一个参数k。你想想看,一个参数就能描述畸变?没错,但前提是——畸变比较“干净”。
我在项目中用过除法模型。当时做的是手机镜头模组检测,畸变很小,用除法模型跑一遍,效果和Brown-Conrady差不多。但计算量小了一个数量级。
什么时候用除法模型?
- 畸变比较小(比如<1%)
- 对实时性要求高
- 只需要校正径向畸变
注意:除法模型对切向畸变无能为力。如果你的镜头安装有倾斜,千万别用这个模型。我曾经吃过这个亏,校正完图像中间是直的,边缘还是歪的。
4.3 多项式模型
多项式模型,说白了就是“万能公式”。它用多项式来拟合任意形状的畸变。公式长这样:
x_distorted = x + a0 + a1*x + a2*y + a3*x^2 + a4*x*y + a5*y^2 + ...
y_distorted = y + b0 + b1*x + b2*y + b3*x^2 + b4*x*y + b5*y^2 + ...
阶数越高,拟合越准。但要注意,阶数太高容易“过拟合”——对标定板上的点很准,换一个场景就崩了。
我个人习惯用3阶或4阶多项式。5阶以上基本不用,除非是特殊镜头。
| 模型 | 参数数量 | 适用场景 | 计算量 |
|---|---|---|---|
| Brown-Conrady | 5~8个 | 通用工业镜头 | 中等 |
| 除法模型 | 1个 | 小畸变、实时系统 | 低 |
| 多项式模型 | 可变(6~20个) | 特殊镜头、高精度 | 高 |
选型建议:
- 普通工业镜头 → Brown-Conrady(k1, k2, p1, p2)
- 手机镜头/小畸变 → 除法模型
- 鱼眼/广角镜头 → 多项式模型(4阶以上)
4.4 三种模型的对比与选择
我做个简单的总结。你想想看,选模型就像选工具:
- Brown-Conrady:瑞士军刀,什么都能干。我90%的项目都用它。
- 除法模型:小刀,轻便但功能有限。适合嵌入式系统。
- 多项式模型:大砍刀,威力大但不好控制。适合科研或特殊场景。
我曾经在一个项目中,用Brown-Conrady模型校正后,边缘还有0.3像素的残差。换成5阶多项式,残差降到0.05像素。但代价是标定时间从2秒变成了15秒。嗯,这就是trade-off。
避坑指南:标定完成后,一定要做“残差分析”。把标定板上的点投影回去,看看平均误差和最大误差。如果最大误差超过1像素,说明模型选错了或者标定数据有问题。
4.5 知识体系图
下面这张图,是我自己整理的畸变模型选型逻辑。你可以照着它来选:
这张图的核心逻辑就是:先判断畸变大小,再判断畸变类型。选对了模型,标定就成功了一半。
最后说一句:模型只是工具,真正重要的是理解畸变的物理本质。我见过有人用最复杂的模型,标定结果却一塌糊涂——因为连标定板都没放平。嗯,工具再好,基础不能丢。
公众号:蓝海资料掘金营,微信deep3321