2. 标定基础理论:相机内参、外参、畸变模型(径向/切向)详解
做深度相机标定这些年,我最大的感触就是——理论不扎实,后面全是坑。今天咱们就把相机标定的几个核心概念掰开揉碎讲清楚。你想想看,一台相机放在产线上,它怎么知道拍到的物体在真实世界里长什么样?这背后就是内参、外参和畸变模型在起作用。
2.1 相机内参:相机自己的“基因密码”
内参说白了,就是相机本身的固有属性。它描述了三维空间点如何投影到二维图像平面。我习惯用一个简单的矩阵来表示:
K = [fx 0 cx]
[ 0 fy cy]
[ 0 0 1]
这里每个参数都有物理意义:
- fx, fy:焦距参数,单位是像素。它们决定了物体在图像中放大的倍数。
- cx, cy:主点坐标,也就是光轴与图像平面的交点。理想情况下在图像中心,但实际总有偏差。
内参矩阵还有一个重要特性——上三角矩阵。这意味着它只包含5个自由度(fx, fy, cx, cy, 以及一个倾斜参数s,但现代相机s通常为0)。
2.2 相机外参:相机在空间中的“位置和姿态”
外参解决的是另一个问题:相机坐标系和世界坐标系之间怎么转换?
外参由两部分组成:
- 旋转矩阵 R(3×3):描述相机的朝向
- 平移向量 t(3×1):描述相机的位置
合在一起,就是一个4×4的齐次变换矩阵:
[R | t]
[0 | 1]
我个人习惯把外参理解为“相机在真实世界里的身份证”。同一个场景,换个角度拍,外参就变了。但内参不会变——除非你动了镜头或换了相机。
2.3 畸变模型:为什么直线会变弯?
你想想看,理想情况下相机应该遵循小孔成像模型。但实际镜头都有光学缺陷,导致图像变形。这就是畸变。我把它分为两类:
2.3.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 是像素点到图像中心的距离。你会发现,离中心越远,畸变越严重。
2.3.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]
嗯,公式看着有点复杂。但实际项目中,切向畸变通常比径向畸变小一个数量级。我一般先看径向畸变,如果效果不满意再考虑切向。
2.4 知识体系总览
下面这张图,是我自己总结的标定理论核心逻辑。你看一遍就能理清关系:
2.5 畸变校正的完整流程
在实际产线中,我们不会手动去算这些公式。但理解流程很重要。我一般按这个步骤走:
- 采集标定板图像:至少20张,覆盖不同角度和距离
- 提取角点:找到标定板上棋盘格或圆点的精确位置
- 求解内参和外参:用最小二乘法拟合
- 计算畸变系数:基于重投影误差优化
- 应用校正:生成去畸变后的图像
- 标定板必须平整,我见过用亚克力板代替陶瓷板的,结果标定误差大了3倍
- 光照要均匀,避免反光点干扰角点提取
- 标定完成后一定要做验证——拍一张已知尺寸的物体,看测量值是否准确
2.6 一个常见的误解
很多人以为标定一次就一劳永逸了。其实不然。我遇到过的情况:
- 镜头松动后,内参变了
- 温度变化导致镜头热胀冷缩,畸变参数漂移
- 产线振动让相机位置偏移,外参需要重新标
所以,定期复标是产线运维的必修课。我个人建议:量产前做一次完整标定,之后每周做一次快速验证。
好了,这一章的内容就到这里。内参、外参、畸变模型这三个概念,是后续所有标定操作的基础。你把这些吃透了,后面讲张正友标定法、立体标定、手眼标定的时候,就会轻松很多。