2、相机标定原理:标定板设计(棋盘格/圆点阵)。张正友标定法核心思想。单应性矩阵与内外参求解。
相机标定,说白了就是给相机做一次“视力矫正”。
你想想看,镜头天生就有畸变,广角镜头尤其明显。我最早做车载环视项目时,第一次看到鱼眼镜头拍出来的画面——停车场柱子全是弯的,吓得我赶紧去查标定资料。嗯,从那以后我就明白了:不标定,畸变校正就是空中楼阁。
2.1 标定板设计:棋盘格 vs 圆点阵
标定板是标定的“尺子”。你得有一块已知尺寸的图案,相机才能算出自己的参数。
核心原则:标定板上的特征点必须能被算法稳定、精确地检测到。精度不够,后面全白搭。
棋盘格标定板
这是最常用的方案。黑白格子交替排列,角点就是特征点。
- 优点:角点检测算法成熟(OpenCV 的
findChessboardCorners),亚像素精度高。 - 缺点:必须保证棋盘格完整出现在视野中,部分遮挡时检测会失败。
- 我踩过的坑:有一次在户外标定,阳光太强,黑白格反光严重,角点检测直接崩了。后来我换了哑光覆膜的标定板,问题解决。
圆点阵标定板
圆形图案,圆心作为特征点。
- 优点:圆心定位精度更高(理论上可达 0.01 像素级),对部分遮挡更鲁棒。
- 缺点:透视畸变会让圆变成椭圆,需要做椭圆拟合,计算量稍大。
- 适用场景:高精度工业测量、显微成像。
| 对比项 | 棋盘格 | 圆点阵 |
|---|---|---|
| 特征点类型 | 角点 | 圆心 |
| 检测鲁棒性 | 需完整视野 | 可部分遮挡 |
| 亚像素精度 | 高 | 更高 |
| 计算开销 | 低 | 中 |
| 个人推荐 | 通用首选 | 高精度场景 |
我的建议:如果你刚开始做标定,先用棋盘格。OpenCV 的例程最多,遇到问题好查。等流程跑通了,再考虑圆点阵提升精度。
2.2 张正友标定法核心思想
张正友标定法,是 1998 年张正友博士提出的。它解决了“用 2D 平面标定板标定 3D 相机”的问题。
为什么它这么牛?因为在此之前,标定需要高精度的 3D 标定块,又贵又难做。张正友的方法只需要你打印一张棋盘格,贴在平面上,拍几张不同角度的照片就行。
核心思想就一句话:利用平面标定板上的已知点,建立 2D 图像点到 3D 世界点的映射关系,然后通过数学推导,把相机内参、外参、畸变系数一步步解出来。
具体步骤我拆解一下:
- 拍一组图片:标定板放在不同位置、不同角度,至少 10-15 张。
- 检测特征点:提取每张图片中的角点或圆心坐标。
- 计算单应性矩阵:每张图片对应一个单应性矩阵 H。
- 求解内参:利用 H 矩阵的约束条件,解出内参矩阵 K。
- 求解外参:内参已知后,每张图片的外参(旋转 R 和平移 t)就出来了。
- 优化畸变:用最小二乘法拟合畸变系数。
- 全局优化:用 Levenberg-Marquardt 算法做一次整体优化。
注意:标定板必须平整!我曾经用一张海报纸当标定板,结果纸有褶皱,标定出来的内参偏差很大。后来换了 3mm 亚克力板,精度才稳定下来。
2.3 单应性矩阵与内外参求解
单应性矩阵 H,是连接“世界平面”和“图像平面”的桥梁。
它的数学形式是 3x3 矩阵,有 8 个自由度(因为尺度归一化)。
// 单应性矩阵的数学表达
// s * [u, v, 1]^T = H * [X, Y, 1]^T
// 其中 H = K * [r1, r2, t]
// K 是内参矩阵,r1、r2 是旋转矩阵的前两列,t 是平移向量
每张标定板图片,都能算出一个 H。怎么算?用至少 4 个点对,通过直接线性变换(DLT)求解。
有了 H 之后,内参怎么解?这里有个关键约束:旋转矩阵的列向量是正交的,且模长为 1。
数学推导我就不展开了,直接说结论:
- 从 H 矩阵中提取出两个约束方程。
- 多张图片的约束方程联立,可以解出内参矩阵 K 的 5 个参数(fx, fy, cx, cy, skew)。
- 内参已知后,外参 R 和 t 可以直接从 H 和 K 反算出来。
工程要点:实际求解时,OpenCV 的 calibrateCamera 函数已经封装好了。但你得理解背后的原理——否则遇到标定失败时,你连日志都看不懂。
2.4 知识体系总览
下面这张图,把整个标定原理串起来了。我建议你保存下来,做项目时对照着看。
2.5 工程落地要点
理论说完了,聊点实际的。我在几个量产项目里总结的经验:
标定图片怎么拍?
- 标定板占画面 1/4 到 1/3 大小,别太小也别太大。
- 角度变化:俯仰 ±30°,偏航 ±30°,滚转随意。
- 距离变化:从最近到最远,覆盖工作距离范围。
- 我习惯拍 15-20 张,剔除重投影误差大于 0.5 像素的图片。
常见翻车现场:
- 标定板反光 → 换哑光材质。
- 标定板不平 → 用玻璃或亚克力板压平。
- 图片模糊 → 确保快门速度够快,别手抖。
- 特征点检测失败 → 检查光照是否均匀,对比度是否足够。
嗯,标定原理这部分就这些。记住:标定是畸变校正的基石,基础打牢了,后面的工程化部署才能稳。