第三节:相机标定原理——标定板设计、张正友法与单应性矩阵
各位同学,今天我们聊一个绕不开的话题——相机标定。
说实话,我入行头两年,一直觉得标定就是个“走流程”的事。直到有一次在产线上,一个视觉引导项目死活对不准,折腾了三天,最后发现是标定板打印尺寸输错了。嗯,从那以后,我再也不敢小看这一步。
相机标定,说白了就是给相机“配眼镜”。让相机知道:
它看到的像素坐标,到底对应真实世界的哪个位置。
一、标定板设计——棋盘格 vs 圆点阵
标定板是标定的“尺子”。没有一把好尺子,你量什么都不准。
1. 棋盘格标定板
这是最经典、最常用的方案。黑白格子交替排列,角点清晰,检测算法成熟。
- 优点:角点检测精度高,亚像素提取稳定
- 缺点:需要完整视野,边缘格子容易被裁切
- 我个人的习惯:棋盘格尺寸选 7×9 或 9×11,格子边长 10mm~30mm 之间
小技巧:打印棋盘格时,一定要用激光打印机,喷墨的容易洇墨,角点会偏移。我吃过这个亏。
2. 圆点阵标定板
圆点阵在工业场景中也很常见,尤其是大视场或远距离标定。
- 优点:圆心检测不受透视畸变影响,适合大角度标定
- 缺点:需要精确知道圆心坐标,对光照敏感
- 避坑指南:我曾经用圆点阵标定一个广角镜头,结果发现边缘圆点变成了椭圆,圆心偏移严重。后来加了畸变校正预处理才解决。
| 对比项 | 棋盘格 | 圆点阵 |
|---|---|---|
| 检测精度 | 高(亚像素角点) | 中(圆心拟合) |
| 抗畸变能力 | 一般 | 较好 |
| 实现难度 | 低 | 中 |
| 适用场景 | 常规视觉引导 | 大视场、大角度 |
二、张正友标定法原理
张正友教授在1998年提出的这个方法,可以说是视觉标定领域的里程碑。为什么?因为它让标定变得“接地气”了。
以前的标定方法需要高精度的三维标定块,又贵又难用。张正友的方法只需要一个平面棋盘格,拍几张不同角度的照片就行。
核心思想:利用平面标定板上的已知点,建立从世界坐标到像素坐标的映射关系,然后通过多张照片的约束,解出相机内参和外参。
关键步骤:
- 拍摄 10~20 张不同姿态的标定板图像
- 提取每张图像的角点坐标
- 利用单应性矩阵求解内参初值
- 考虑畸变参数,进行非线性优化
你想想看,一个平面标定板,每张照片其实只能提供一个“单应性矩阵”的约束。但多张照片组合起来,就能把内参和外参解耦出来。这就是张正友法的精妙之处。
三、单应性矩阵求解
单应性矩阵(Homography Matrix),是连接标定板平面和图像平面的桥梁。
它的数学形式是 3×3 的矩阵,有 8 个自由度(最后一个元素归一化为 1)。
// 单应性矩阵的数学表达
// s * [u, v, 1]^T = H * [X, Y, 1]^T
// 其中:
// (u, v) 是图像像素坐标
// (X, Y) 是标定板上的世界坐标
// s 是尺度因子
// H 是 3×3 的单应性矩阵
求解方法:
- 至少需要 4 对匹配点(因为每个点提供两个方程,8 个未知数需要 8 个方程)
- 实际中我会用 20~30 对点,用最小二乘法求解
- 常用算法:DLT(直接线性变换)+ RANSAC 剔除误匹配
注意:单应性矩阵假设标定板是平面。如果你的标定板有翘曲或不平整,求解出来的 H 矩阵会有误差。我曾经遇到一个项目,标定板贴在墙上,墙表面有细微的凹凸,结果标定误差一直下不去。后来换了刚性背板才解决。
四、知识体系结构图
下面这张图,是我自己整理的相机标定知识脉络。你看一遍,心里就有谱了。
五、实战建议
讲完理论,我给大家几个实在的建议:
- 标定板不要太小:至少占视野的 1/3 以上,否则角点检测不稳定
- 照片数量要够:我一般拍 15~20 张,覆盖视野的各个区域
- 姿态要多样:倾斜、旋转、平移都要有,不要只拍正面的
- 光照要均匀:避免反光和阴影,否则角点提取会飘
一句话总结:标定板是基础,张正友法是核心,单应性矩阵是工具。三者缺一不可。
好了,这一节的内容就到这里。下一节我们聊一聊手眼标定的具体实现,到时候我会分享一个我踩过的坑——标定顺序搞反了,结果机器人差点撞了相机。