3. 相机标定基础:内参、外参、畸变系数的概念,标定板的选择与使用

相机标定,说白了就是给摄像头做一次「体检」和「配镜」。

你想想看,摄像头出厂时,镜片有误差,感光元件有偏移,拍出来的画面天然就是变形的。如果不做标定,直接拿两个不同型号的摄像头做拼接,结果一定是歪歪扭扭、对不齐的。

我刚开始做多摄像头拼接时,就吃过这个亏。当时图省事,跳过了标定,结果花了三周去调拼接参数,最后还是得回头老老实实做标定。嗯,从那以后,我再也不敢跳过这一步了。

3.1 内参:摄像头自己的「基因」

内参描述的是摄像头内部的光学结构。它不随摄像头移动而改变,是每个摄像头独有的「身份证」。

内参矩阵通常写成这样:

K = [fx  0  cx
     0  fy  cy
     0   0   1]
  • fx, fy:焦距,单位是像素。它决定了物体在画面中的缩放比例。
  • cx, cy:主点坐标,也就是光轴穿过成像平面的位置。理想情况下在画面正中心,但实际总有偏移。
我的经验: 同一个型号的摄像头,内参也会有细微差异。做异构摄像头融合时,每个摄像头都必须单独标定,不能偷懒用「出厂默认值」。

3.2 外参:摄像头在空间中的「位置」

外参描述的是摄像头在世界坐标系中的位置和朝向。它由旋转矩阵 R 和平移向量 t 组成。

外参的作用,就是把世界坐标系的点,转换到摄像头坐标系里。公式很简单:

P_cam = R * P_world + t

对于多摄像头系统,外参标定的核心任务,就是求出每个摄像头相对于同一个世界坐标系的 R 和 t。这样,不同摄像头看到的画面,才能映射到同一个空间里。

注意: 外参会随着摄像头移动而改变。如果摄像头被碰歪了,或者重新安装过,必须重新标定外参。我曾经在一个项目中,因为支架螺丝松动,导致拼接结果每天漂移,排查了整整两天才找到原因。

3.3 畸变系数:镜片带来的「变形」

任何镜头都有畸变,只是程度不同而已。畸变主要分两类:

畸变类型 表现 产生原因
径向畸变 画面边缘向内或向外弯曲(桶形/枕形) 镜片曲率不完美
切向畸变 画面倾斜、梯形变形 镜片与感光元件不平行

畸变模型通常用多项式来描述:

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]

其中 k1, k2, k3 是径向畸变系数,p1, p2 是切向畸变系数。标定的目的,就是求出这 5 个参数,然后对画面做反向校正。

关键点: 畸变校正必须在图像拼接之前完成。否则,两张变形程度不同的画面,拼接时会出现明显的错位和重影。

3.4 标定板的选择与使用

标定板是标定的「尺子」。选对了,事半功倍;选错了,事倍功半。

3.4.1 常见标定板类型

类型 特点 适用场景
棋盘格 角点检测稳定,算法成熟 通用场景,初学者首选
圆点阵 圆心定位精度高,抗噪性好 高精度标定,工业场景
ArUco/ChArUco 自带编码,可识别单个标记 多摄像头同步标定

我个人习惯用棋盘格,因为它简单、稳定、容易上手。但如果你需要亚像素级别的精度,圆点阵是更好的选择。

3.4.2 标定板使用要点

  1. 尺寸要合适: 标定板在画面中至少占 1/4 到 1/3 的面积。太小了,角点检测不稳定;太大了,边缘畸变区域覆盖不全。
  2. 姿态要多样: 拍摄时,标定板要倾斜、旋转、前后移动,覆盖画面的各个区域。我一般会拍 20-30 张不同姿态的图片。
  3. 光照要均匀: 避免反光和阴影。反光会导致角点检测失败,阴影会引入额外的误差。
  4. 保持静止: 拍摄时,标定板可以动,但摄像头不能动。如果摄像头在动,外参就变了,标定结果会乱掉。
避坑指南: 我曾经用一张 A4 纸打印的棋盘格去做标定,结果误差一直降不下来。后来才发现,纸张受潮后轻微变形,导致棋盘格的实际尺寸和理论尺寸不一致。从那以后,我都是用玻璃基板或者铝基板打印的标定板,硬质、平整、不变形。

3.5 标定流程与知识结构

下面这张图,把相机标定的核心逻辑串起来了:

相机标定知识结构图 标定板图像 角点/圆心检测 内参矩阵 K 畸变系数 (k1,k2,p1,p2,k3) 外参 (R, t) 畸变校正 + 图像去畸变 标定完成后,用内参和畸变系数校正每帧图像,再用外参将多摄像头画面映射到统一坐标系

整个流程其实就三步:

  1. 采集数据: 用标定板拍摄多张不同姿态的图片。
  2. 提取特征: 检测角点或圆心,建立图像坐标和世界坐标的对应关系。
  3. 求解参数: 用最小二乘法或非线性优化,解出内参、外参和畸变系数。
小技巧: 标定完成后,一定要做一次「重投影误差」检查。如果平均误差超过 0.5 像素,说明标定质量不够好,需要重新采集数据。我一般要求误差控制在 0.3 像素以内。

嗯,标定这件事,看起来简单,但细节很多。把内参、外参、畸变系数理解透,标定板选对、用对,后面的图像拼接才能有一个扎实的基础。