← 返回博客列表

一、什么是 Halcon

HALCON 是德国 MVTec Software GmbH 公司开发的商业机器视觉算法库,1996 年发布首版,是工业机器视觉领域公认的"商业王者"。与 OpenCV 不同,Halcon 不开源、按授权收费,但它用2000+ 个高度优化的算子(Operator)和一套独特的数据体系,把工业视觉中最难、最痛的问题(鲁棒定位、亚像素测量、3D 重建)做到了开箱即用。

Halcon 的典型工作方式是:在 HDevelop 可视化 IDE 中交互式调参验证算法,验证通过后一键导出为 C++ / C# / Python / VB 代码,集成到产线软件中部署。

一句话理解 Halcon
OpenCV 像一套"视觉零件库",你自己组装机器;Halcon 像一条"视觉产线"——零件已按工业标准装好、调过、验过,你只需要按下按钮。代价是:它收费。
Halcon 在视觉项目中的工作流 ① 相机/图像 GigE / USB3 GenICam 标准 离线图片 read_image ② HDevelop 原型开发 算子窗口 变量监视 图像可视化 交互式调参 阈值/匹配参数所见即所得 ③ 代码导出 C++ / C# Python / VB HDevEngine export ④ 产线部署 检测工位 PLC 通讯 OK/NG 输出 7×24h 相机取图 → HDevelop 验证 → 导出代码 → 产线集成:一条完整、闭环的工业视觉工作流
Halcon 工作流:HDevelop 原型 → 多语言导出 → 产线部署

1.1 Halcon 的核心特征

关于授权
Halcon 是商业付费软件:开发用 HDevelop 也需要授权(可申请试用),部署按运行时(Runtime)授权收费,有加密狗和软授权两种形式。选型时务必算入授权成本。

二、Halcon 能力矩阵

Halcon 的能力围绕"工业检测"设计,可归纳为六大能力域:

Halcon 六大能力域 1. 图像采集与管理 open_framework / grab_image GigE Vision / USB3 Vision GenICam GenTL 标准 多相机同步/触发/IO 控制 图像缓存与环形缓冲 2. Blob 分析与分割 threshold 阈值分割 connection 连通域 select_shape 特征筛选 形态学(开/闭/分水岭) 区域运算(交/并/差) 3. 模板匹配(王牌) 形状匹配 shape-based NCC 灰度匹配 局部变形匹配 组件匹配 component 3D 表面匹配 4. 亚像素测量 edges_sub_pix 亚像素边缘 XLD 轮廓拟合 fit_line/circle/ellipse distance 距离/角度测量 卡尺 measure_pos 5. 标定与 3D calibrate_cameras 标定 双目立体 stereo 线激光 sheet of light 结构光/多视角重建 点云处理与 3D 匹配 6. 识别与深度学习 OCR 字符识别/OCV 条码/二维码/Data Matrix DL 分类/检测/分割 DL 异常检测(无监督) Deep OCR 基础设施层 HDevelop IDE HDevEngine 自动多线程 GPU/OpenCL 加速 C++/C#/Python 接口 HALCON 嵌入式版 Windows/Linux/ARM 加密狗/软授权
Halcon 六大能力域 + 基础设施层

三、核心原理:四大数据类型

理解 Halcon 的钥匙,是理解它的数据体系。Halcon 变量只有两大类:图像数据(Iconic)和控制数据(Control)。图像数据又分三种,它们是 Halcon 区别于所有其他视觉库的精髓:

Halcon 四大数据类型 Image 图像 像素矩阵(通道域) 多通道:灰度/RGB/红外 支持 ROI 裁剪域 domain:处理范围 例:read_image (Image, ...) grab_image (Image, ...) Region 区域 二值区域(行程编码) 可不连通、可"空洞" 存储极紧凑(RLE) Blob 分析的核心载体 例:threshold → Region connection → 多个 Region XLD 轮廓 亚像素轮廓/多边形 坐标为浮点数 精度 1/50 像素 精密测量的载体 例:edges_sub_pix fit_circle_contour Tuple 数组 控制数据容器 1 2 3 … 数值或字符串数组 无需声明类型 Row:=[10,20,30] 也可装图像对象句柄 例:Row, Col, Angle Score 输出结果
三大图像数据(Image / Region / XLD)+ 一个控制数据容器(Tuple)
数据类型是什么坐标精度典型用途
Image像素矩阵,可含多个通道整数像素原始图像、滤波结果
Region二值区域集合(行程编码)整数像素Blob 分析、缺陷掩码
XLD亚像素轮廓/多边形浮点(亚像素)精密测量、边缘拟合
Tuple数值/字符串数组—参数、坐标、结果传递

四、Region 原理:行程编码

OpenCV 里的"区域"是一张与原图同大的二值图(每个像素 0 或 255)。Halcon 的 Region 完全不同:它不存储像素位图,而存储每一行中前景段的起止列号,这就是行程编码(Run-Length Encoding, RLE)。

行程编码:Region 只存每一行的"前景段" 二值区域(8×8) OpenCV 方式:8×8=64 个像素值 Halcon Region:行程表 行号y 起始列 结束列 y=1 → x=4 ~ 5 y=2 → x=3 ~ 6 y=3 → x=2 ~ 6 y=4 → x=2 ~ 7 y=5 → x=3 ~ 6 y=6 → x=4 ~ 5 只存 6 个行程 (y, x_start, x_end),共 18 个数 区域越大、越规整,压缩率越高;运算直接在行程上进行,速度极快
Region 用 (行号, 起点列, 终点列) 三元组描述前景,存储与运算都极高效

行程编码带来三个直接优势:

五、XLD:亚像素轮廓

XLD(eXtended Line Description,扩展线描述)是 Halcon 的另一大利器。普通边缘检测输出的是"像素级"的点,而 XLD 通过亚像素插值,把边缘定位到浮点数坐标——精度可达 1/10 到 1/50 个像素。

像素级边缘 vs XLD 亚像素轮廓 像素级(Region/OpenCV 边缘) 边缘只能落在格子上 → 锯齿、误差 ≤ 0.5 像素 XLD 亚像素轮廓 浮点坐标平滑拟合 → 精度 1/10~1/50 像素
XLD 通过亚像素插值,边缘坐标精度远超像素级

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 的经典三连是:

Blob 分析三连:threshold → connection → select_shape ① threshold 阈值分割 灰度 0~100 的像素 → 前景 Region ② connection 连通域拆分 1 2 3 一个 Region → 三个独立 Blob ③ select_shape 特征筛选 ✓ ✓ 面积 ≥ 100 的保留,噪点剔除 之后:area_center 取面积/中心坐标 → count_obj 数个数 → 输出 OK/NG
Blob 分析标准流水线:阈值分割→连通域拆分→按形状特征筛选

常用的筛选特征(select_shape 的 Features 参数):

特征名含义典型用途
'area'面积(像素数)按大小过滤、数大零件
'circularity'圆度 0~1区分圆孔 vs 异物
'rectangularity'矩形度检测芯片/方片
'width' / 'height'外接矩形宽高尺寸分拣
'orientation'长轴方向角偏转检测

七、形状匹配:Halcon 的王牌

Blob 分析依赖"目标和背景灰度差异明显"。但产线上常有光照不均、遮挡、杂乱背景、目标旋转缩放的情况——这正是 Halcon 形状匹配(Shape-Based Matching)的统治区。它的思想是:用目标的边缘形状(而非灰度)做模板,在图像金字塔上逐层搜索。

形状匹配原理:金字塔搜索 + 边缘形状比对 ① 创建模板(离线一次) ROI 中提取 边缘形状 create_shape_model → ModelID ② 图像金字塔加速搜索 Level4 粗 Level3 Level2 Level0 原图(精定位) 顶层粗筛 → 逐层细化,速度提升数十倍 ③ find_shape_model 遮挡?✓ 仍检出 旋转15°?✓ 杂波背景?✓ 形状匹配的四大"抗造"特性 抗光照变化 基于边缘不用灰度 抗遮挡/缺失 最小相似度 0.5 即可 支持旋转+缩放 输出 Row/Col/Angle 亚像素定位 坐标角度均为浮点
形状匹配:离线建模板,金字塔在线搜索,输出位置/角度/缩放/得分
Halcon 匹配家族
除了形状匹配,还有:NCC 匹配(基于归一化互相关,适合有纹理但无变形的目标)、局部变形匹配(适合柔性物体如塑料件、印刷品)、组件匹配(目标由多个相对位置允许变化的部件组成)、3D 表面匹配(基于点云的六自由度定位)。

八、图像采集与相机标定

8.1 图像采集:一套接口接所有相机

Halcon 通过 GenICam 标准接入工业相机:GigE Vision、USB3 Vision、CoaXPress、CameraLink 等接口的相机,都用同一套算子操作,无需厂商 SDK。

Halcon 图像采集架构 GigE Vision 千兆网相机 USB3 Vision USB 相机 CoaXPress 高速同轴 GenTL/采集卡 CameraLink 等 GenICam 标准接口 open_framework / set_framework_param / grab_image
所有接口相机统一走 GenICam,算子层完全一致

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 视觉与深度学习

3D 视觉方案 与 深度学习能力 3D 视觉 双目立体视觉 stereo triangulation 线激光(光切) sheet of light 结构光/多相机重建 photometric stereo 3D 表面匹配 6DoF 位姿估计 深度学习(DL 模块) 分类 classification OK/NG 判别 检测 detection 目标框定位 异常检测 anomaly 只需良品样本 分割/Deep OCR 缺陷分割/文字识别 配套 MVTec Deep Learning Tool(标注+训练 GUI),训练好的模型 read_dl_model 加载推理 异常检测是工业场景杀手锏:不需要缺陷样本,只用良品就能训练
Halcon 覆盖四大 3D 方案与四类深度学习任务

十、HDevelop:原型到交付的工作流

HDevelop 是 Halcon 自带的交互式开发环境,是它"高效"的秘密:

十一、核心特性

特性说明
商业授权算法稳定、有官方技术支持;开发/部署均收费,适合预算充足的工业项目
2000+ 算子命名规范统一(动词_名词),学习一个等于学会一类
Region 行程编码Blob 分析内存/速度双优,区域可任意不连通
XLD 亚像素1/50 像素精度,精密测量开箱即用
形状匹配抗光照/遮挡/旋转/缩放,工业定位事实标准
自动并行算子内部自动多线程;支持多相机并行采集处理
硬件无关GenICam 标准接入数百种相机;Windows/Linux/ARM/嵌入式全平台
原型-部署一体HDevelop 验证 → 导出多语言代码,算法参数与生产代码完全一致
3D + DL 全栈线激光/双目/点云 + 深度学习四类任务,无需拼凑第三方库
Halcon vs OpenCV 选型对比 维度 Halcon OpenCV 授权 商业收费 开源免费(BSD) 精密测量 ★★★★★ XLD 亚像素 ★★★ 需自己实现 模板匹配 ★★★★★ 形状匹配 ★★★ feature2d 拼合 工业相机 GenICam 免驱 需厂商 SDK 适合场景 产线检测/测量/3D 研究/通用/AI 前后处理
付费买的是确定性:测量精度、匹配鲁棒性、交付速度与官方支持

十二、应用场景全景

Halcon 典型应用场景 Halcon 2000+ 算子 半导体/电子 晶圆/芯片检测 丝印/引脚检测 BGA 焊点 汽车制造 零件尺寸测量 装配引导 表面缺陷 医药医疗 药瓶/胶塞检测 标签 OCR 医疗器械测量 印刷/包装 印刷质量 条码/二维码 字符 OCV 食品饮料 液位/灌装 异物分拣 封口检测 机器人抓取 2D/3D 定位 无序抓取 手眼标定 物流分拣 条码读取 包裹测量 OCR 面单 新能源 电池极片检测 3D 焊缝 光伏 EL 检测
Halcon 八大工业场景:半导体/汽车/医药/印刷/食品/机器人/物流/新能源

十三、最简示例

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 部署

— 全文完 —