1. 课程导入
1.1 为什么需要学习相机标定与畸变校正
在机器视觉工程实践中,相机标定是决定测量精度与识别稳定性的基础性环节。无论是尺寸测量、缺陷检测、机器人引导还是三维重建,图像中的像素坐标必须能够可靠地映射到物理世界中的毫米或微米坐标。然而,由于镜头制造公差、装配误差以及光学物理特性,相机成像系统不可避免地引入两类误差:镜头畸变(径向畸变、切向畸变)与透视误差(由相机与物体平面不平行引起)。若不进行标定与校正,即便算法再优秀,测量结果也可能产生数像素甚至数十像素的系统性偏差。
Halcon作为工业视觉领域广泛使用的商业机器视觉库,提供了从标定板生成、图像采集、角点提取、相机内参计算到畸变校正与测量的一整套工具链。掌握Halcon的标定流程,意味着你能够将视觉系统的精度从“像素级”提升到“亚像素级”,并能够在不同相机、不同镜头、不同安装角度下快速复用标定参数。
1.2 学习目标
完成本章及后续课程学习后,你将能够:
- 理解成像模型:掌握针孔相机模型、内参矩阵、外参矩阵、畸变系数(k1, k2, p1, p2, k3)的物理含义与数学表达。
- 独立完成标定流程:使用Halcon的标定板(如Halcon标准标定板或自定义打印标定板)完成从图像采集、角点提取、标定计算到误差评估的完整操作。
- 实施畸变校正:利用标定结果对实时图像或离线图像进行畸变校正,并验证校正前后的测量精度差异。
- 掌握坐标系转换:理解图像坐标系、相机坐标系、世界坐标系之间的转换关系,能够将像素坐标映射到机器人基座标系。
- 评估标定质量:通过重投影误差、标定板覆盖区域、图像清晰度等指标判断标定结果是否合格。
1.3 适用人群
| 人群类型 | 基础要求 | 学习收益 |
|---|---|---|
| 机器视觉工程师 | 熟悉Halcon基本算子,了解图像处理基础 | 掌握高精度测量与定位的标定方法,提升项目交付质量 |
| 自动化设备调试人员 | 具备PLC或运动控制基础,接触过视觉系统 | 能够独立完成视觉系统的现场标定与故障排查 |
| 高校/科研机构学生 | 具备线性代数与图像处理基础 | 深入理解相机成像模型与标定算法原理,为论文或竞赛提供支撑 |
| 机器人/无人机开发者 | 了解ROS或机器人操作系统 | 实现视觉引导抓取、避障中的相机-机器人坐标统一 |
1.4 课程结构总览
本课程共30章,按照“原理→操作→实战→进阶”的逻辑组织,具体模块划分如下:
- 基础篇(第1-8章):环境搭建、Halcon编程基础、图像采集与预处理、相机成像模型与坐标系变换。
- 标定核心篇(第9-16章):标定板设计、角点提取算法、单目/双目标定流程、畸变校正算子详解、标定精度评估与优化。
- 应用实战篇(第17-24章):基于标定结果的尺寸测量、缺陷定位、机器人手眼标定(Eye-in-Hand / Eye-to-Hand)、三维重建中的标定应用。
- 进阶与疑难篇(第25-30章):非平面标定、远心镜头标定、标定结果稳定性分析、常见标定失败案例复盘、Halcon与深度学习结合的标定新思路。
每一章均包含理论讲解、Halcon代码示例、参数调优建议以及常见错误排查,确保学员能够“学得懂、练得会、用得上”。
1.5 Halcon简介
Halcon是由德国MVTec公司开发的综合性机器视觉软件库,提供超过2000个算子,涵盖图像采集、滤波、分割、识别、测量、标定、三维视觉等全流程功能。其核心优势在于:
- 高性能:底层采用C/C++优化,支持多核并行与GPU加速,适合实时工业场景。
- 跨平台:支持Windows、Linux、macOS,并提供C、C++、C#、Python、VB.NET等接口。
- 标定工具链完整:从标定板描述文件(.descr)到标定助手(Calibration Assistant),再到算子级API(如find_calib_object、calibrate_cameras),形成闭环。
- 工业验证充分:在汽车、电子、半导体、医药等行业有大量成熟部署案例。
值得注意的是,Halcon的标定模块支持两种主流标定板:棋盘格标定板与圆点阵列标定板。其中圆点阵列标定板(如Halcon标准板)在亚像素角点提取精度上更具优势,且对遮挡和光照变化更鲁棒。本课程后续章节将重点围绕圆点阵列标定板展开。
1.6 安装与环境配置
在开始标定学习之前,必须确保Halcon开发环境正确安装并能够调用相机或读取图像。以下为Windows环境下的标准安装流程(Linux/macOS类似):
1.6.1 获取Halcon安装包
访问MVTec官网(www.mvtec.com)下载Halcon试用版或正式版。试用版提供完整功能,但限制图像分辨率(最大1024×1024)和运行时间(每次启动后30分钟自动退出)。对于学习标定流程,试用版完全够用。
1.6.2 安装步骤
- 双击安装包,选择安装目录(建议默认路径,避免中文或空格)。
- 选择需要绑定的开发语言接口(如HDevelop、C++、C#、Python)。
- 安装完成后,启动HDevelop(Halcon的交互式开发环境)。
- 在HDevelop中,通过菜单栏
帮助 → 示例程序打开标定相关示例(如calibrate_cameras_example)。
1.6.3 验证安装是否成功
在HDevelop中执行以下代码,若能正常显示图像窗口并输出相机内参,则说明环境配置正确:
* 读取一张示例图像
read_image (Image, 'printer_chip/printer_chip_01')
* 显示图像
dev_display (Image)
* 创建一个标定模型(仅测试,不执行完整标定)
create_calib_data ('calibration_object', 1, 1, CalibHandle)
* 输出提示信息
disp_message (WindowHandle, 'Halcon环境配置成功!', 'window', 12, 12, 'black', 'true')
halcond.dll),请检查系统环境变量 PATH 是否包含Halcon的 bin\x64-win64 目录。此外,建议将HDevelop的字体设置为“等宽字体”,便于代码阅读。
1.6.4 相机驱动与图像采集接口
标定需要采集标定板图像。Halcon通过 open_framegrabber 算子连接工业相机(如Basler、Hikrobot、Daheng),也支持通过 open_framegrabber ('File', ...) 从本地文件夹读取图像序列。对于没有相机的学员,可以使用Halcon自带的标定板示例图像(位于 images/calib/ 目录)进行离线标定练习。
1.7 标定核心原理速览
在进入具体操作前,先建立对相机标定的整体认知。相机标定的本质是求解以下参数:
- 内参矩阵:焦距
f、主点坐标cx, cy、像素尺寸sx, sy(通常由相机传感器决定,标定中可优化)。 - 畸变系数:径向畸变
k1, k2, k3与切向畸变p1, p2。 - 外参矩阵:标定板相对于相机的旋转矩阵
R与平移向量t(每张标定板图像对应一组外参)。
Halcon的标定流程遵循“张正友标定法”的改进版本,其核心步骤为:
- 采集10-20张不同位姿(角度、距离)的标定板图像。
- 提取标定板上的圆点中心坐标(亚像素精度)。
- 根据已知的标定板物理尺寸(如圆点间距),建立图像点与空间点的对应关系。
- 通过最小化重投影误差,迭代优化内参、畸变系数与每张图像的外参。
下图展示了标定过程中图像坐标系、相机坐标系与世界坐标系之间的变换关系:
从图中可以看出,标定过程实际上是在求解从世界坐标到像素坐标的完整映射关系,其中内参矩阵与畸变系数是相机固有的,不随拍摄位姿变化;而外参矩阵则描述了每次拍摄时标定板与相机的相对位置。
1.8 常见误区与学习建议
对于初学者,建议按照以下路径进行学习:
- 先使用Halcon自带的示例图像完成一次完整的离线标定,熟悉流程与算子。
- 再尝试使用自己的相机和打印标定板进行在线标定,对比不同光照、不同角度下的标定结果。
- 最后,将标定结果应用到实际测量任务中,观察畸变校正前后的测量重复性差异。