目录
一、什么是 Halcon
HALCON 是德国 MVTec Software GmbH 公司开发的商业机器视觉算法库,1996 年发布首版,是工业机器视觉领域公认的"商业王者"。与 OpenCV 不同,Halcon 不开源、按授权收费,但它用2000+ 个高度优化的算子(Operator)和一套独特的数据体系,把工业视觉中最难、最痛的问题(鲁棒定位、亚像素测量、3D 重建)做到了开箱即用。
Halcon 的典型工作方式是:在 HDevelop 可视化 IDE 中交互式调参验证算法,验证通过后一键导出为 C++ / C# / Python / VB 代码,集成到产线软件中部署。
OpenCV 像一套"视觉零件库",你自己组装机器;Halcon 像一条"视觉产线"——零件已按工业标准装好、调过、验过,你只需要按下按钮。代价是:它收费。
1.1 Halcon 的核心特征
- 算子式 API:2000+ 算子命名统一为"动词_名词"(
read_image、find_shape_model),输入参数在前、输出在后,极易记忆 - Region 行程编码:区域不以像素位图存储,而用行程压缩,连通域分析比 OpenCV 快一个数量级
- XLD 亚像素精度:轮廓提取精度可达 1/10 ~ 1/50 像素,满足精密测量需求
- 形状匹配:抗遮挡、抗杂波、支持旋转缩放的模板匹配,是 Halcon 最知名的王牌能力
- 自动并行:算子内部自动多线程,无需手写并行代码
- 硬件无关:基于 GenICam 标准,几百种工业相机免驱接入
Halcon 是商业付费软件:开发用 HDevelop 也需要授权(可申请试用),部署按运行时(Runtime)授权收费,有加密狗和软授权两种形式。选型时务必算入授权成本。
二、Halcon 能力矩阵
Halcon 的能力围绕"工业检测"设计,可归纳为六大能力域:
三、核心原理:四大数据类型
理解 Halcon 的钥匙,是理解它的数据体系。Halcon 变量只有两大类:图像数据(Iconic)和控制数据(Control)。图像数据又分三种,它们是 Halcon 区别于所有其他视觉库的精髓:
| 数据类型 | 是什么 | 坐标精度 | 典型用途 |
|---|---|---|---|
| Image | 像素矩阵,可含多个通道 | 整数像素 | 原始图像、滤波结果 |
| Region | 二值区域集合(行程编码) | 整数像素 | Blob 分析、缺陷掩码 |
| XLD | 亚像素轮廓/多边形 | 浮点(亚像素) | 精密测量、边缘拟合 |
| Tuple | 数值/字符串数组 | — | 参数、坐标、结果传递 |
四、Region 原理:行程编码
OpenCV 里的"区域"是一张与原图同大的二值图(每个像素 0 或 255)。Halcon 的 Region 完全不同:它不存储像素位图,而存储每一行中前景段的起止列号,这就是行程编码(Run-Length Encoding, RLE)。
行程编码带来三个直接优势:
- 省内存:一个圆形区域不存位图,只存每一行的一段坐标
- 算得快:连通域分析(
connection)、区域交并差(intersection/union2)直接在行程表上做集合运算,速度远超像素扫描 - 天然支持"不连通":一个 Region 变量可以同时包含多个不相连的区域,
count_obj数个数,select_obj取第几个
五、XLD:亚像素轮廓
XLD(eXtended Line Description,扩展线描述)是 Halcon 的另一大利器。普通边缘检测输出的是"像素级"的点,而 XLD 通过亚像素插值,把边缘定位到浮点数坐标——精度可达 1/10 到 1/50 个像素。
XLD 上可以做几何拟合:把轮廓点拟合为直线、圆、椭圆、矩形,直接得到尺寸和位置,这是精密测量的标准做法:
* 提取亚像素边缘 → 拟合圆 → 直接得到圆心和半径(亚像素精度) edges_sub_pix (Image, Edges, 'canny', 1.5, 20, 40) segment_contours_xld (Edges, Segments, 'lines_circles', 5, 4, 2) fit_circle_contour_xld (Segments, 'ahuber', -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
六、Blob 分析:视觉三板斧之首
Blob 分析(连通域分析)是工业视觉最常用的手段:把"目标"从背景中分割出来,统计它的数量、面积、位置、形状。Halcon 的经典三连是:
常用的筛选特征(select_shape 的 Features 参数):
| 特征名 | 含义 | 典型用途 |
|---|---|---|
'area' | 面积(像素数) | 按大小过滤、数大零件 |
'circularity' | 圆度 0~1 | 区分圆孔 vs 异物 |
'rectangularity' | 矩形度 | 检测芯片/方片 |
'width' / 'height' | 外接矩形宽高 | 尺寸分拣 |
'orientation' | 长轴方向角 | 偏转检测 |
七、形状匹配:Halcon 的王牌
Blob 分析依赖"目标和背景灰度差异明显"。但产线上常有光照不均、遮挡、杂乱背景、目标旋转缩放的情况——这正是 Halcon 形状匹配(Shape-Based Matching)的统治区。它的思想是:用目标的边缘形状(而非灰度)做模板,在图像金字塔上逐层搜索。
除了形状匹配,还有:NCC 匹配(基于归一化互相关,适合有纹理但无变形的目标)、局部变形匹配(适合柔性物体如塑料件、印刷品)、组件匹配(目标由多个相对位置允许变化的部件组成)、3D 表面匹配(基于点云的六自由度定位)。
八、图像采集与相机标定
8.1 图像采集:一套接口接所有相机
Halcon 通过 GenICam 标准接入工业相机:GigE Vision、USB3 Vision、CoaXPress、CameraLink 等接口的相机,都用同一套算子操作,无需厂商 SDK。
8.2 相机标定
Halcon 标定使用专用的标定板(圆点阵列 caltab,而非棋盘格),通过 find_calib_object 自动找标定板,calibrate_cameras 一次性求解内参、外参、畸变。标定后像素坐标可直接换算为世界坐标(毫米),测量结果与物理尺寸挂钩。
* 标定核心三步(多拍几张标定板图像) find_calib_object (Image, CalibDataID, 0, 0, 0, [], []) * 自动找标定板圆点 calibrate_cameras (CalibDataID, Error) * 求解内外参 image_points_to_world_plane (CameraParam, Pose, Row, Col, 'mm', X, Y) * 像素→毫米
九、3D 视觉与深度学习
十、HDevelop:原型到交付的工作流
HDevelop 是 Halcon 自带的交互式开发环境,是它"高效"的秘密:
- 逐行执行:每行算子可随时运行,图像窗口即时看到效果,变量窗口实时查看 Region/XLD 内容
- 算子向导:输入算子名,图形界面引导填每个参数,还能拉 ROI 生成代码
- 一键导出:验证通过的程序导出为 C++ / C# / Python / VB 代码;也可用 HDevEngine 直接加载 HDevelop 脚本运行
- 内置示例:HDevelop 自带数千个示例程序(Examples Browser),覆盖几乎所有算子的典型用法
十一、核心特性
| 特性 | 说明 |
|---|---|
| 商业授权 | 算法稳定、有官方技术支持;开发/部署均收费,适合预算充足的工业项目 |
| 2000+ 算子 | 命名规范统一(动词_名词),学习一个等于学会一类 |
| Region 行程编码 | Blob 分析内存/速度双优,区域可任意不连通 |
| XLD 亚像素 | 1/50 像素精度,精密测量开箱即用 |
| 形状匹配 | 抗光照/遮挡/旋转/缩放,工业定位事实标准 |
| 自动并行 | 算子内部自动多线程;支持多相机并行采集处理 |
| 硬件无关 | GenICam 标准接入数百种相机;Windows/Linux/ARM/嵌入式全平台 |
| 原型-部署一体 | HDevelop 验证 → 导出多语言代码,算法参数与生产代码完全一致 |
| 3D + DL 全栈 | 线激光/双目/点云 + 深度学习四类任务,无需拼凑第三方库 |
十二、应用场景全景
十三、最简示例
13.1 HDevelop:Blob 分析八行(检测并计数)
* 读入图像 → 阈值 → 连通域 → 按面积筛选 → 输出个数和中心 read_image (Image, 'particles.png') threshold (Image, Dark, 0, 120) * 深色部分成为 Region connection (Dark, Connected) * 拆成独立连通域 select_shape (Connected, Targets, 'area', 'and', 100, 99999) * 面积≥100 保留 count_obj (Targets, Number) * 数目标个数 area_center (Targets, Area, Row, Column) * 取面积和中心坐标 dev_display (Image) dev_display (Targets) * 可视化结果
13.2 HDevelop:形状匹配(产线定位标准模板)
* ===== 离线:创建模板(对标准件图像做一次) ===== read_image (ModelImage, 'model.png') gen_rectangle1 (ROI, 100, 150, 400, 500) * 框出目标区域 reduce_domain (ModelImage, ROI, ImageReduced) create_shape_model (ImageReduced, 'auto', 0, rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID) * ===== 在线:每张图搜索,输出位置/角度/得分 ===== grab_image (Image, AcqHandle) find_shape_model (Image, ModelID, 0, rad(360), 0.5, 0, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score) * Score > 0.7 即认为找到目标 → Row/Column/Angle 用于引导机械手
13.3 C++ 导出:部署到产线软件
// main.cpp — HDevelop 代码一键导出的 C++ 版本(节选) #include <HalconCpp.h> using namespace HalconCpp; int main() { HObject ho_Image, ho_Dark, ho_Connected, ho_Targets; HTuple hv_Number, hv_Area, hv_Row, hv_Column; ReadImage(&ho_Image, "particles.png"); Threshold(ho_Image, &ho_Dark, 0, 120); Connection(ho_Dark, &ho_Connected); SelectShape(ho_Connected, &ho_Targets, "area", "and", 100, 99999); CountObj(ho_Targets, &hv_Number); AreaCenter(ho_Targets, &hv_Area, &hv_Row, &hv_Column); std::cout << "检测到目标数: " << hv_Number.I() << std::endl; return 0; }
1. 安装 Halcon(含 HDevelop),申请试用授权
2. 打开 HDevelop → 文件 → 浏览示例程序,搜
threshold / find_shape_model,直接运行看效果3. 换成自己的图像,在算子窗口里交互式调阈值,观察变量窗口中的 Region
十四、总结
Halcon 核心要点速查
- 定位:德国 MVTec 的商业工业视觉库,2000+ 算子,收费但确定性强
- 四大数据类型:Image(像素)、Region(行程编码区域)、XLD(亚像素轮廓)、Tuple(数组)
- Region 行程编码:只存每行前景段起止列,Blob 分析快且省内存
- XLD 亚像素:浮点坐标,1/50 像素精度,精密测量标配
- 三板斧:Blob(
threshold→connection→select_shape)、形状匹配(create/find_shape_model)、标定(calibrate_cameras) - 形状匹配:抗光照/遮挡/旋转缩放,金字塔加速,亚像素输出位置角度
- 采集:GenICam 一套算子接 GigE/USB3/CoaXPress 全部相机
- 3D + DL:线激光/双目/3D 匹配 + 分类/检测/分割/异常检测(只需良品样本)
- 工作流:HDevelop 原型验证 → 导出 C++/C#/Python → 产线 7×24h 部署
— 全文完 —