一、课程导论与标定基础
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 课程目标与学习路径
这门课的目标很明确:让你从“会标定”变成“能自动化标定”。
具体来说,学完这门课你应该能做到:
- 独立完成单目/双目/手眼标定,理解每种标定的适用场景
- 编写HALCON脚本,把标定流程封装成可复用的函数
- 设计自动化标定方案,减少人工干预,提高标定效率
- 部署到产线,让标定脚本在无人值守的情况下稳定运行
整个课程分四个模块,我建议你按这个顺序学:
| 模块 | 章节 | 学习重点 |
|---|---|---|
| 基础篇 | 1-8章 | 标定原理、HALCON算子、单目标定实战 |
| 进阶篇 | 9-16章 | 双目标定、手眼标定、畸变校正 |
| 自动化篇 | 17-24章 | 脚本封装、参数调优、异常处理 |
| 部署篇 | 25-30章 | 产线集成、性能优化、维护策略 |
学习建议:每章后面的代码示例,我建议你亲手敲一遍。光看是学不会标定的——我在培训新人时发现,动手做过一遍和只看不做的,理解深度差了三倍不止。
1.5 标定流程知识图谱
下面这张图把标定流程的核心环节和它们之间的关系画出来了。你可以把它当作整个课程的地图,每学完一章回来看看,就知道自己走到哪了。
这张图里,四个阶段是串行执行的。但注意,验证阶段如果发现误差超标,需要回退到采集阶段重新拍摄——我在实际项目中至少遇到过三次这种情况,都是因为标定板图像质量不达标。
1.6 你需要准备的环境
开始动手之前,确保你的环境满足以下条件:
- HALCON版本:推荐19.11及以上,低版本有些算子不兼容
- 标定板:HALCON标准棋盘格或圆点阵,建议用陶瓷材质,不易变形
- 相机:任意工业相机,分辨率建议500万像素以上
- 开发语言:HDevelop或C++/C#(课程以HDevelop为主)
小技巧:如果你手头没有物理标定板,HALCON提供了虚拟标定板生成工具。我刚开始学的时候就用虚拟板练手,效果一样好。