4. 标定板设计与制作
标定板,说白了就是给相机看的「尺子」。没有它,相机根本不知道自己在三维空间里是什么位置。我刚开始做双目标定时,总觉得随便打印一张棋盘格就能搞定,结果校正出来的图像歪歪扭扭,后来才发现是标定板本身就不合格。
这一章,咱们就聊聊标定板的几种主流方案,以及怎么把它做好、用对。
4.1 棋盘格标定板(Checkerboard)
棋盘格是入门首选,也是我最早接触的标定板。它的核心优势就是角点检测稳定,OpenCV 里直接有 findChessboardCorners 函数,一行代码就能找到所有内角点。
关键参数:
- 内角点数:比如 9×6,指的是内部交叉点数量,不是格子数量
- 方格尺寸:实际物理边长,单位毫米,用于后续计算相机内参
- 黑白对比:必须清晰,避免反光
我个人习惯用 12×9 的棋盘格,内角点就是 11×8。为什么?因为角点越多,标定时的约束越强,结果越稳定。但也不是越多越好——角点太多,图像边缘的格子太小,检测精度反而下降。
我的经验:棋盘格适合初学者和快速验证。但要注意,棋盘格对畸变较大的区域(比如图像边缘)覆盖不够均匀,因为角点分布是均匀网格,边缘区域的角点密度和中心一样,无法重点校正边缘畸变。
4.2 圆点标定板(Circle Grid / Asymmetric Circles)
圆点标定板,我是在做高精度工业测量时才真正用上的。它的优势在于:圆心的定位精度比角点更高,因为圆点检测可以做到亚像素级别。
OpenCV 支持两种圆点模式:
- 对称圆点:
findCirclesGrid默认模式,圆点按矩形排列 - 非对称圆点:
CALIB_CB_ASYMMETRIC_GRID,圆点按交错排列,能提供更丰富的方向信息
| 对比项 | 棋盘格 | 圆点标定板 |
|---|---|---|
| 检测精度 | 角点,亚像素可达 0.1 像素 | 圆心,亚像素可达 0.05 像素 |
| 抗模糊能力 | 较弱,模糊后角点偏移 | 较强,圆心位置更稳定 |
| OpenCV 函数 | findChessboardCorners |
findCirclesGrid |
| 适用场景 | 入门、快速标定 | 高精度、工业场景 |
避坑指南:我曾经在强光下用圆点标定板,结果圆点边缘反光严重,圆心检测全偏了。后来我改用哑光材质打印,并在拍摄时加偏振片,问题才解决。圆点标定板对光照均匀度要求比棋盘格更高。
4.3 Charuco 标定板
Charuco 是棋盘格和 ArUco 码的结合体。它既有棋盘格的角点,又有 ArUco 码的独立 ID 识别能力。说白了,就是每个格子角落都有一个唯一的编码。
为什么需要这个?
你想想看,普通棋盘格在拍摄时,如果只拍到部分区域,OpenCV 就不知道这些角点对应棋盘上的哪个位置。但 Charuco 不同——每个角点都有 ID,哪怕只拍到 4 个角点,也能知道它们在全局坐标系中的位置。
Charuco 的核心优势:
- 部分遮挡也能标定:只拍到部分标定板,照样能用
- 自动识别方向:不需要手动指定棋盘格方向
- 适合大角度拍摄:即使标定板倾斜很大,也能稳定检测
我在做双目相机大视场标定时,就吃过普通棋盘格的亏——标定板稍微倾斜超过 45 度,角点检测就失败了。换成 Charuco 后,哪怕标定板几乎侧对相机,也能稳定识别。
生成 Charuco 标定板的代码也很简单:
import cv2
import cv2.aruco as aruco
# 定义字典和棋盘格参数
dictionary = aruco.getPredefinedDictionary(aruco.DICT_6X6_250)
board = aruco.CharucoBoard((11, 8), 0.04, 0.02, dictionary)
# 生成图像
img = board.generateImage((1200, 900))
cv2.imwrite('charuco_board.png', img)
这里 0.04 是格子边长(米),0.02 是 ArUco 码边长(米)。打印时这两个值必须精确测量,否则标定结果会整体缩放。
4.4 标定板打印与固定
标定板设计好了,怎么把它变成实物?这一步看似简单,但坑不少。
4.4.1 打印要求
- 材质:哑光纸或哑光相纸,避免反光
- 尺寸精度:用激光打印机,精度可达 0.1mm 以内。喷墨打印机会有墨水扩散,边缘模糊
- 平整度:打印后必须贴在刚性背板上,比如亚克力板、铝板或玻璃板
我的习惯:打印前先用尺子量一下打印机的实际输出比例。有些打印机默认缩放 97% 或 101%,导致实际尺寸和设计尺寸不符。我会在标定板四周加一个 100mm 的参考尺,打印后先量这个尺子,确认无误再贴板。
4.4.2 固定方法
| 方法 | 优点 | 缺点 |
|---|---|---|
| 双面胶 + 亚克力板 | 简单、成本低 | 时间久了可能起泡 |
| 喷胶 + 铝板 | 平整、耐用 | 喷胶需要均匀,否则有气泡 |
| 玻璃夹层 | 最平整、防弯折 | 玻璃反光,需要调整光源 |
我个人最推荐喷胶 + 铝板方案。铝板本身平整,喷胶后纸张贴合紧密,不会像双面胶那样局部鼓起。而且铝板轻便,手持拍摄时不会太累。
避坑指南:我曾经用玻璃夹层做标定板,结果玻璃反光严重,相机拍出来的标定板上有明显的灯光倒影,角点检测直接失败。后来我在玻璃背面贴了哑光膜,才勉强能用。如果你非要用玻璃,记得把光源放在侧面,不要正对标定板。
4.4.3 标定板尺寸选择
标定板的大小,取决于你的相机视场和拍摄距离。一个简单的经验法则:
- 标定板在图像中至少占 30% 的面积
- 每个格子/圆点在图像中至少 20 像素宽
- 标定板要能在视场内自由移动,覆盖图像的各个区域
举个例子,如果你的双目相机基线是 10cm,工作距离是 50cm-200cm,那么标定板边长建议在 30cm-50cm 之间。太小了,远距离时标定板在图像中只有一小块,角点检测不稳定;太大了,近距离时标定板超出视场,拍不全。
4.5 本章知识体系
下面这张图,帮你理清标定板选型与制作的整体流程:
嗯,标定板这部分就聊到这儿。记住一句话:标定板的质量,直接决定了标定结果的上限。花半小时把标定板做好,后面能省下好几个小时的调试时间。