相机标定入门:原理、流程与常见误区
相机标定求的是焦距、主点、畸变等内参以及相机之间的位置关系。本文讲清针孔模型与平面标定板标定的原理,给出一套可执行的标定流程,并逐条分析“重投影误差越低越好”等八个常见误区。
要点
- 相机标定求的是“三维点如何变成像素”这套数学模型的参数:内参(焦距、主点)、畸变系数,以及多台相机之间、相机与其他设备之间的外参。
- 工业上最常用的做法是:用平面标定板从多个角度拍摄十几到几十张图像,检测特征点后做非线性优化,也就是张正友平面标定法及其扩展。
- 标定结果只对标定时的镜头状态有效。调焦、变焦、改光圈,或者改变分辨率、裁剪区域之后,都需要重新标定。
- 重投影误差低是必要条件,不是充分条件,还要检查图像覆盖、参数不确定度,并做独立验证。
- 标定板的尺寸精度和平面度决定了外参、双目基线和测量结果这把“尺子”准不准。
什么是相机标定?
相机把三维世界投影成二维图像。这个过程可以用一个数学模型描述:给定空间中一个点的坐标,模型能算出它落在图像的哪个像素上。相机标定(camera calibration)就是通过拍摄几何尺寸已知的物体——通常是标定板——来估计这个模型的参数。
完成标定后,才能可靠地做以下工作:
- 把像素距离换算成毫米,进行尺寸测量;
- 校正镜头畸变,让直线在图像中保持笔直;
- 用双目或多相机做三维重建和测距;
- 把相机坐标与机器人、激光雷达、IMU 等设备的坐标统一起来;
- 在 AR、数字孪生等应用中让虚拟内容与真实画面对齐。
广义的“标定”还包括双目和多相机的外参标定、机器人手眼标定、相机与激光雷达或 IMU 的联合标定等,它们几乎都以单台相机的内参标定为基础。
内参:焦距、主点与畸变
内参(intrinsic parameters)描述相机自身的成像特性,与相机放在哪里无关:
- 焦距 fx、fy:以像素为单位,约等于镜头焦距除以像元尺寸。例如 8 mm 镜头配 3.45 µm 像元,
fx ≈ 8 / 0.00345 ≈ 2319 px。像元为正方形时,fx 与 fy 非常接近。 - 主点 cx、cy:光轴与传感器平面的交点。由于镜头与传感器存在装配偏差,它通常不在图像的正中心。
- 畸变系数:真实镜头不是理想的针孔。径向畸变(radial distortion)让直线向外鼓(桶形)或向内收(枕形);切向畸变(tangential distortion)主要来自镜片的偏心或倾斜。
外参:相机在哪里、朝向哪里
外参(extrinsic parameters)描述两个坐标系之间的刚体变换,即旋转 R 和平移 t。单相机标定时,每张图像都会解出一个“标定板相对相机”的位姿;双目和多相机标定还要求出相机之间的相对位姿,两台相机光心之间的距离就是基线(baseline)。
一个三维点是如何变成像素的?
最常用的是“针孔 + 畸变”模型,可以分四步理解:
- 坐标变换:把点从标定板(或世界)坐标系变换到相机坐标系,
P_cam = R · P_board + t,得到 (X, Y, Z)。 - 透视除法:投影到距光心为 1 的归一化平面,
x = X / Z,y = Y / Z。 - 加入畸变:按畸变模型把 (x, y) 变成 (x_d, y_d),例如径向部分
x_d = x · (1 + k1·r² + k2·r⁴ + k3·r⁶),其中r² = x² + y²。 - 换算成像素:
u = fx · x_d + cx,v = fy · y_d + cy。
广角和鱼眼镜头需要换用其他投影模型,详见相机模型怎么选。
为什么一块平面标定板就能完成标定?
标定板上每个特征点(角点或圆心)在板坐标系中的位置都是已知的,而且都位于同一个平面上(z = 0)。忽略畸变时,平面到图像的映射是一个 3×3 的单应矩阵(homography)。每拍一张图,就能求出一个单应矩阵,而每个单应矩阵能为内参提供两个约束方程。只要有足够多姿态不同的图像,就能解出内参的初值。这正是张正友平面标定法的核心思想。
有了初值,再用非线性最小二乘(如 Levenberg–Marquardt 算法)同时优化内参、畸变系数和每张图的位姿,使所有特征点重投影误差(reprojection error)的平方和最小。重投影误差指的是:用当前参数把已知的三维点投影到图像上,投影位置与实际检测位置之间的像素距离。
这里有一个关键前提:各张图中标定板的朝向必须不同。如果各张图中的板面都相互平行,例如始终正对相机、只是平移或在板面内转动,每张图提供的约束就是重复的,焦距和拍摄距离无法区分——拍得再多也解不准。
一套可执行的标定流程
| 步骤 | 要做的事 | 延伸阅读 |
|---|---|---|
| 1. 明确需求 | 工作距离、视场、精度目标;单目、双目还是手眼 | — |
| 2. 选择标定板 | 图案类型、外形尺寸、方格大小、基材 | 图案、尺寸、基材 |
| 3. 固定相机状态 | 锁定对焦、光圈、变焦,关闭自动对焦和图像增强 | 采集最佳实践 |
| 4. 采集图像 | 多角度倾斜,覆盖画面四角与边缘,远近有变化 | 同上 |
| 5. 检测特征 | 亚像素提取角点或圆心,剔除检测失败或可疑的图像 | — |
| 6. 优化求解 | 选择相机模型,初始化后做非线性优化,剔除离群点 | 相机模型 |
| 7. 评估结果 | RMS、逐图误差、参数标准差、覆盖情况 | 看懂标定结果 |
| 8. 独立验证 | 用未参与标定的图像或已知尺寸进行检验 | 同上 |
| 9. 保存与归档 | 记录相机序列号、镜头设置、分辨率、日期、标定板编号 | — |
第 9 步最容易被忽略。几个月后系统出了问题,如果不知道当时用的是哪块板、什么镜头设置,就无从排查。
像素误差换算到物体上是多少?
标定结果和特征检测精度通常以像素表示。想知道它在被测物上大约对应多少毫米,可以用物方像素尺寸换算:
物方像素尺寸 = 视场宽度 / 图像宽度(像素)
例如视场宽 280 mm、图像宽 2448 px,每个像素对应约 0.11 mm,0.1 像素的误差相当于物体上约 11 µm。这只是量级估计:实际测量误差还取决于标定误差在画面中的分布、被测物边缘的提取精度,以及物体是否处在标定时覆盖的距离范围内。
单目相机标定后能测距吗?
标定之后,每个像素都可以反投影成一条空间射线,但单凭一张图无法知道物点在射线上的哪个位置。因此单目相机只能在有额外约束时做三维测量:例如物体位于一个已知平面上(如传送带平面,需要先求出该平面相对相机的位姿),或者物体本身的几何尺寸已知(用 PnP 算法求位姿)。需要测量任意点的三维坐标时,应采用双目、多相机或结构光等方案。
常见误区
误区一:重投影误差越低,标定越好
RMS 只反映模型对“参与标定的这些点”拟合得好不好。如果所有图像都集中在画面中央,边角的畸变完全靠外推,RMS 可以很低,边缘的实际误差却可能达到几个像素。参数过多的模型、过少的图像也会让 RMS 偏低。
误区二:图像越多越好
真正起作用的是姿态和位置的多样性。三十张姿态几乎相同的图像,不如十五张角度、位置、远近各不相同的图像。重复的图像还会让结果偏向某一区域。
误区三:标定板正对相机拍就行
正对拍摄时透视效果很弱,焦距与距离高度相关。应让标定板绕水平轴和竖直轴分别倾斜,常用范围约 30–45°。
误区四:标定完还能调焦或改光圈
调焦会改变镜头的有效焦距和畸变,变焦的影响更大,改变光圈也可能带来细微变化。这些设置应在标定前调到实际使用状态并锁定,标定后不再改动。
误区五:打印一张纸贴在板上就够用
普通打印机存在缩放误差,纸张会随湿度伸缩,粘贴时容易起鼓、不平。用于演示和试验没有问题,用于测量或多相机标定时,这些误差会直接进入结果。
误区六:畸变参数越多越精确
参数越多,模型的拟合能力越强,但也需要更多、分布更好的数据来约束。数据不足时会过拟合:在标定数据上误差很小,换个位置却变差。大多数工业镜头用 5 参数畸变模型就足够了。
误区七:方格尺寸填错影响不大
方格尺寸填错时,焦距、主点、畸变这些内参基本不受影响,RMS 也看不出任何异常;但所有平移量都会按比例出错——双目基线、手眼标定的平移、以毫米计的测量结果都会偏。正因为不容易发现,务必核对板上标注的参数。
误区八:标定一次,永久有效
运输振动、碰撞、镜头螺纹松动、温度变化都会让参数漂移。建议建立定期复检机制,例如测量一个已知长度,或检查双目极线校正后的纵向视差。
什么时候必须重新标定?
- 更换了镜头或相机,或调整过对焦、变焦、光圈;
- 改变了图像分辨率、binning 或 ROI——裁剪会改变主点坐标,binning 会改变以像素计的焦距;
- 相机或支架受到碰撞,或经过拆装;
- 工作温度与标定时相差较大,而应用的精度要求较高;
- 定期复检发现误差超出了允许范围。