一、课程导论与标定基础

1.1 机器视觉标定的意义

机器视觉标定,说白了就是给相机“配眼镜”。

你想想看,相机镜头天生就有畸变——广角镜头拍出来的直线是弯的,长焦镜头边缘有拉伸。再加上相机安装时的角度偏差,图像里的像素坐标和真实世界的物理坐标之间,存在一个复杂的映射关系。标定要做的,就是把这个映射关系算清楚。

我在项目中遇到过最典型的案例:一条手机屏幕检测线,未标定时测量误差达到±0.5mm,客户要求±0.05mm。折腾了两周,最后发现是镜头畸变和相机安装角度共同导致的。做完标定,误差直接降到±0.03mm。嗯,从那以后我再也不敢跳过标定这步了。

标定的核心价值可以归纳为三点:

  • 消除畸变:把镜头带来的桶形/枕形畸变校正回来
  • 建立尺度:让像素距离对应到毫米/微米等真实物理单位
  • 统一坐标系:多相机系统里,把每个相机的图像统一到同一个世界坐标系下

一句话总结:没有标定的机器视觉系统,就像没有刻度的尺子——能看见,但量不准。

1.2 HALCON标定流程概览

HALCON的标定流程,我个人习惯把它分成四个阶段。每个阶段都有明确的输入和输出,你跟着走就不会乱。

阶段 核心操作 关键输出
准备阶段 选择标定板、配置相机参数初值 标定板描述文件(.descr)、相机初始内参
采集阶段 拍摄15-25张不同位姿的标定板图像 标定图像序列
计算阶段 提取角点、求解内外参、优化畸变系数 相机内参、外参、畸变系数
验证阶段 重投影误差分析、测量验证 标定报告、误差指标

这里有个容易踩的坑——我曾经以为拍个三五张就够了,结果标定出来的参数在图像边缘误差特别大。后来才明白,标定板必须覆盖整个视场,而且位姿要多样化:倾斜、旋转、远近都要有。15张是底线,25张更稳妥。

避坑指南:标定板不要只放在画面中心区域。我曾经见过一个项目,标定板始终在画面中央1/3范围内移动,结果边缘畸变完全没校正过来。标定板必须出现在画面的四个角落和边缘区域。

1.3 标定的数学模型(简版)

你不需要成为数学家也能用好HALCON标定,但理解核心公式能帮你排查问题。

HALCON使用的标定模型基于针孔相机模型,加上径向和切向畸变补偿。核心公式就两个:

// 世界坐标 → 图像坐标(理想情况)
[u, v, 1]^T = K * [R|t] * [X, Y, Z, 1]^T

// 畸变补偿
u' = u * (1 + k1*r^2 + k2*r^4) + 2*p1*u*v + p2*(r^2 + 2*u^2)
v' = v * (1 + k1*r^2 + k2*r^4) + p1*(r^2 + 2*v^2) + 2*p2*u*v

其中:

  • K 是内参矩阵(焦距、主点坐标)
  • [R|t] 是外参矩阵(旋转和平移)
  • k1, k2 是径向畸变系数
  • p1, p2 是切向畸变系数

HALCON把这些都封装好了,你只需要调用 camera_calibration 算子。但知道这些参数的含义,能帮你判断标定结果是否合理——比如k1通常在-0.5到0.5之间,如果跑出来是-5.0,那肯定有问题。

1.4 课程目标与学习路径

这门课的目标很明确:让你从“会标定”变成“能自动化标定”。

具体来说,学完这门课你应该能做到:

  1. 独立完成单目/双目/手眼标定,理解每种标定的适用场景
  2. 编写HALCON脚本,把标定流程封装成可复用的函数
  3. 设计自动化标定方案,减少人工干预,提高标定效率
  4. 部署到产线,让标定脚本在无人值守的情况下稳定运行

整个课程分四个模块,我建议你按这个顺序学:

模块 章节 学习重点
基础篇 1-8章 标定原理、HALCON算子、单目标定实战
进阶篇 9-16章 双目标定、手眼标定、畸变校正
自动化篇 17-24章 脚本封装、参数调优、异常处理
部署篇 25-30章 产线集成、性能优化、维护策略

学习建议:每章后面的代码示例,我建议你亲手敲一遍。光看是学不会标定的——我在培训新人时发现,动手做过一遍和只看不做的,理解深度差了三倍不止。

1.5 标定流程知识图谱

下面这张图把标定流程的核心环节和它们之间的关系画出来了。你可以把它当作整个课程的地图,每学完一章回来看看,就知道自己走到哪了。

HALCON标定流程知识图谱 ① 准备阶段 选标定板 配置相机参数 ② 采集阶段 拍摄15-25张 覆盖全视场 ③ 计算阶段 提取角点 求解内外参 ④ 验证阶段 重投影误差分析 测量验证 核心输出 相机内参 + 外参 + 畸变系数 + 标定报告 重投影误差 < 0.1 pixel 为合格

这张图里,四个阶段是串行执行的。但注意,验证阶段如果发现误差超标,需要回退到采集阶段重新拍摄——我在实际项目中至少遇到过三次这种情况,都是因为标定板图像质量不达标。

1.6 你需要准备的环境

开始动手之前,确保你的环境满足以下条件:

  • HALCON版本:推荐19.11及以上,低版本有些算子不兼容
  • 标定板:HALCON标准棋盘格或圆点阵,建议用陶瓷材质,不易变形
  • 相机:任意工业相机,分辨率建议500万像素以上
  • 开发语言:HDevelop或C++/C#(课程以HDevelop为主)

小技巧:如果你手头没有物理标定板,HALCON提供了虚拟标定板生成工具。我刚开始学的时候就用虚拟板练手,效果一样好。