1. 标定板设计基础:棋盘格、圆点阵、ChArUco板的设计原理与数学建模
做相机标定这么多年,我最大的感触是:标定板选得好,标定就成功了一半。很多人一上来就调算法参数,结果角点检测总出问题——其实根源往往在标定板本身的设计上。
这一章,咱们就聊聊三种主流标定板的设计原理和数学建模。我会结合自己踩过的坑,帮你把基础打扎实。
1.1 棋盘格标定板:最经典的选择
棋盘格(Checkerboard)是标定界的"老兵"。它结构简单,角点检测算法成熟,几乎所有的标定库都原生支持。
设计原理
棋盘格由黑白相间的方格组成。角点就是黑白格的交界点。为什么选这种结构?说白了,黑白交界处的梯度变化最剧烈,算法最容易定位。
设计时要注意几个关键参数:
- 内角点数:比如 9×6,指的是内部角点数量,不是格子数。我见过有人把格子数当角点数用,结果标定失败——嗯,这个坑我踩过。
- 方格尺寸:实际物理尺寸(mm),必须精确测量。误差 0.1mm 都会影响标定精度。
- 长宽比:建议两个方向的内角数不要相等(比如 9×6 而不是 8×8),否则算法在方向判断上容易混淆。
数学建模
棋盘格的数学模型其实很简单。假设每个方格尺寸为 s mm,那么第 i 行第 j 列的角点坐标就是:
X = j * s
Y = i * s
Z = 0 (假设标定板在 Z=0 平面)
所有角点构成一个平面点阵。这个点阵在图像中的投影,就是我们要检测的目标。
1.2 圆点阵标定板:高精度的选择
圆点阵(Circle Grid)是棋盘格的替代方案。它的核心优势是:圆心定位精度可以做到亚像素级。
设计原理
圆点阵由一系列等间距排列的圆形组成。检测时,算法提取每个圆的轮廓,然后拟合椭圆,取椭圆中心作为特征点。
设计要点:
- 圆直径:一般取方格尺寸的 60%-80%。太小了检测不到,太大了容易重叠。
- 圆心距:至少是直径的 1.5 倍,保证圆与圆之间不粘连。
- 非对称标记:通常会在某个角落去掉一个圆,用来确定方向。我习惯在左上角去掉一个,这样程序里好处理。
数学建模
圆点阵的数学模型和棋盘格类似,只是特征点从角点变成了圆心:
X = j * spacing
Y = i * spacing
Z = 0
其中 spacing 是圆心距。注意,这里的 i 和 j 是从 0 开始的索引。
但有个关键区别:圆在透视投影下会变成椭圆。椭圆中心并不是圆心的真实投影,存在一个小的偏移。这个偏移在高精度标定时必须补偿。具体补偿公式我们会在第 5 章详细讲。
1.3 ChArUco 板:棋盘格与 ArUco 的结合
ChArUco 板是我个人最喜欢的一种设计。它把棋盘格的角点检测能力和 ArUco 码的 ID 识别能力结合在了一起。
设计原理
ChArUco 板的结构是:在棋盘格的每个白色方格内嵌入一个 ArUco 码。这样,每个角点周围都有唯一的 ID 信息。
这样做的好处很明显:
- 自动识别方向:不需要手动指定标定板的朝向,算法自动识别。
- 部分遮挡也能用:即使只拍到一部分角点,也能通过 ID 知道它们在世界坐标系中的位置。
- 多板同时标定:可以在场景中放多个 ChArUco 板,算法自动区分。
数学建模
ChArUco 板的数学模型稍微复杂一些。它包含两层坐标:
- 棋盘格角点坐标:和普通棋盘格一样,基于方格尺寸计算。
- ArUco 码角点坐标:每个 ArUco 码的四个角点,相对于所在方格的位置是固定的。
举个例子,假设方格尺寸为 s,ArUco 码边长为 m(通常 m = s * 0.8),那么第 i 行第 j 列的 ArUco 码左上角坐标为:
X = j * s + (s - m) / 2
Y = i * s + (s - m) / 2
Z = 0
这样,每个 ArUco 码的四个角点坐标都能精确计算出来。
1.4 三种标定板的对比
我把三种标定板的核心差异整理成了表格,方便你选型时参考:
| 特性 | 棋盘格 | 圆点阵 | ChArUco 板 |
|---|---|---|---|
| 特征点类型 | 角点 | 圆心 | 角点 + ArUco 码 |
| 检测精度 | 像素级 | 亚像素级 | 像素级 |
| 方向识别 | 需手动指定 | 需非对称标记 | 自动识别 |
| 遮挡鲁棒性 | 低 | 中 | 高 |
| 实现复杂度 | 低 | 中 | 高 |
| 适用场景 | 入门、快速标定 | 高精度、工业现场 | 多板、复杂场景 |
1.5 知识体系总览
下面这张图展示了本章的核心知识结构。你可以把它当作一个"导航图",后续学习时随时回来对照。
1.6 选型建议与避坑指南
说了这么多,到底该怎么选?我给出几条实战建议:
- 如果你是初学者:从棋盘格入手。资料多,代码成熟,遇到问题容易找到答案。
- 如果你做工业标定:优先考虑圆点阵。我做过对比测试,同样条件下圆点阵的标定重投影误差比棋盘格低 30% 左右。
- 如果你要标定多相机系统:用 ChArUco 板。它能自动识别每个板子的 ID,省去手动匹配的麻烦。