3. 标定板设计与选择:标定板类型、生成与规范
标定板这东西,说白了就是给相机看的“尺子”。尺子不准,后面所有测量都是白搭。我见过太多项目,算法调得再好,最后发现是标定板本身有问题,那真是欲哭无泪。
这一节,咱们就聊聊怎么选板子、怎么生成板子、以及怎么保证板子符合规范。嗯,这里要注意,选错了板子类型,你的自动化流程可能从一开始就埋了雷。
3.1 标定板类型:圆点 vs 棋盘格
HALCON 里最常用的就两种:圆点阵列板和棋盘格板。它们各有各的脾气,我分别说说。
| 对比维度 | 圆点阵列板 | 棋盘格板 |
|---|---|---|
| 特征提取 | 提取圆心坐标,亚像素精度高 | 提取角点坐标,对畸变敏感 |
| 鲁棒性 | 对遮挡、光照不均更鲁棒 | 边缘模糊时角点定位易漂移 |
| 标定精度 | 整体精度略高,尤其远心镜头 | 精度足够,适合常规面阵相机 |
| 适用场景 | 高精度测量、远心镜头、大畸变 | 通用视觉、机器人引导、快速标定 |
| HALCON算子 | find_caltab + find_marks_and_pose |
find_chessboard 或 find_caltab |
我个人习惯:做精密测量项目,比如手机零件尺寸检测,我首选圆点板。它的圆心提取受边缘噪声影响小,而且 HALCON 对圆点阵列的标定算法优化得非常好。如果是做机器人抓取、定位这种对精度要求没那么苛刻的场景,棋盘格就够用了,而且棋盘格在视野边缘的角点更容易被检测到。
3.2 HALCON 标定板文件生成
你不需要去买现成的标定板文件。HALCON 提供了 gen_caltab 这个算子,你可以自己生成。我每次做新项目,第一件事就是根据相机视野和镜头焦距,重新生成一块专属的标定板描述文件。
生成一个标定板描述文件(.descr),你需要指定以下参数:
- XNum / YNum:标定板在 X 和 Y 方向上的标记点数量。我一般用 7x7 或 9x9,太少精度不够,太多容易超出视野。
- MarkDist:相邻标记点的中心距,单位米。这个值决定了标定板的物理尺寸。
- DiameterRatio:圆点直径与 MarkDist 的比值。HALCON 默认 0.5,我建议不要小于 0.4,否则圆点太小,提取困难。
- CalPlateDescr:输出描述文件的路径。
- CalPlatePSFile:输出 PostScript 文件的路径,用于打印。
下面是我常用的生成代码,直接复制就能用:
* 生成一个 7x7 的圆点标定板
* 标记点间距 12.5mm,圆点直径 6.25mm
gen_caltab (
7, 7, * XNum, YNum
0.0125, * MarkDist [m]
0.5, * DiameterRatio
'caltab_7x7_12.5mm.descr', * 描述文件
'caltab_7x7_12.5mm.ps' * 打印文件
)
生成后,你会得到两个文件:
- .descr 文件:给 HALCON 读的,里面记录了所有标记点的世界坐标。
- .ps 文件:给打印机用的,直接打印出来贴在玻璃或陶瓷板上。
3.3 标定板规范与避坑指南
选好了类型,生成了文件,是不是就万事大吉了?远着呢。下面这几条规范,是我用真金白银的返工换来的教训。
3.3.1 物理尺寸规范
- 标定板尺寸:至少覆盖相机视野的 1/3 到 1/2。太小了,视野边缘的畸变模型拟合不准。
- 标记点数量:最少 4x4,推荐 7x7 以上。点越多,拟合的鲁棒性越好。
- 背景与标记对比度:必须是高对比度。白色陶瓷基板 + 黑色铬层圆点,这是工业标准。不要用喷墨打印,精度不够。
3.3.2 标定板文件规范
- 单位统一:描述文件中的 MarkDist 单位是米,你生成时写 0.0125,实际打印出来的间距也必须是 12.5mm。差 0.1mm,标定结果就偏了。
- 文件路径:描述文件路径不要有中文和空格。HALCON 在某些版本下对中文路径支持不好,我踩过这个坑。
- 版本兼容:HALCON 不同版本生成的 .descr 文件格式略有差异。如果你在 HALCON 13 上生成,拿到 HALCON 22 上用,有时会报错。建议在目标版本上重新生成。
3.3.3 标定流程中的规范
- 标定板姿态:拍照时,标定板要倾斜、旋转、平移,覆盖整个视野。不要只拍正对相机的几张,那样解算出来的畸变系数是错的。
- 图像数量:我一般拍 15-20 张。少于 10 张,内参的重复性不好。
- 光照一致性:标定时的光照要和实际生产时保持一致。如果标定时用环形光,生产时用背光,那标定结果基本作废。
3.4 标定板选择与生成流程
下面这张图,是我做项目时脑子里始终绷着的一根弦。从需求到生成,每一步都不能跳。
你看,流程不复杂,但每一步都有坑。需求分析阶段,你要搞清楚相机分辨率、视野大小、镜头畸变程度。类型选择阶段,根据精度要求选圆点还是棋盘格。参数计算阶段,用 MarkDist = 视野宽度 / (XNum + 1) 这个公式估算一下,保证标定板在视野里占得够大。
生成文件后,我建议你做一个快速验证:用手机拍一张标定板的照片,扔进 HALCON 里跑一下 find_caltab,看看能不能稳定找到所有标记点。如果这一步都卡住,那后面的自动化脚本就别想了。
嗯,标定板这块就聊这么多。记住,选对板子、生成对的文件、打印出合格的物理板子,你的标定自动化流程才算真正迈出了第一步。