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 文件:给打印机用的,直接打印出来贴在玻璃或陶瓷板上。
注意:打印出来的标定板必须保证平整。我曾经用普通 A4 纸打印贴在泡沫板上,结果标定出来的内参全是错的。后来换成 3mm 厚的玻璃基板,问题才解决。标定板不平,等于你的世界坐标系是弯的。

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 张,内参的重复性不好。
  • 光照一致性:标定时的光照要和实际生产时保持一致。如果标定时用环形光,生产时用背光,那标定结果基本作废。
核心原则:标定板是测量系统的“基准尺”。它的精度必须比被测物体的公差高一个数量级。如果你的产品公差是 ±0.1mm,标定板的制造精度至少要到 ±0.01mm。

3.4 标定板选择与生成流程

下面这张图,是我做项目时脑子里始终绷着的一根弦。从需求到生成,每一步都不能跳。

标定板选择与生成流程 1. 需求分析 2. 类型选择 3. 参数计算 4. 生成 .descr 文件 5. 打印与验证 关键:每一步都需要确认输入参数的正确性,尤其是 MarkDist 的物理值

你看,流程不复杂,但每一步都有坑。需求分析阶段,你要搞清楚相机分辨率、视野大小、镜头畸变程度。类型选择阶段,根据精度要求选圆点还是棋盘格。参数计算阶段,用 MarkDist = 视野宽度 / (XNum + 1) 这个公式估算一下,保证标定板在视野里占得够大。

生成文件后,我建议你做一个快速验证:用手机拍一张标定板的照片,扔进 HALCON 里跑一下 find_caltab,看看能不能稳定找到所有标记点。如果这一步都卡住,那后面的自动化脚本就别想了。

一个小技巧:如果你用的是圆点板,生成 .descr 文件后,可以用文本编辑器打开看看。里面记录了每个圆心的世界坐标 (X, Y, Z=0)。你可以随机挑几个点,手动算一下间距,和 MarkDist 对比,确保生成逻辑没问题。

嗯,标定板这块就聊这么多。记住,选对板子、生成对的文件、打印出合格的物理板子,你的标定自动化流程才算真正迈出了第一步。