前言
模板匹配(Shape-Based Matching)是 Halcon 最经典的功能,也是产线上用最多的定位算法。不管是引导机器人抓取,还是做有无检测,底层都是模板匹配。
但网上大部分教程都停在 HDevelop 里跑通了就完事。真正的落地场景是:C# 上位机里,点击"注册模板"→ 点击"开始匹配"→ 串口/TCP 往外吐坐标。
本文提供一个可以直接拿去改的工程框架。
工程结构
HikvisionHalconDemo/
├── Program.cs ← 入口
├── CameraCapture.cs ← 相机采集(复用上篇文章代码)
├── TemplateMatcher.cs ← 模板管理核心
├── PatternMatchingDemo.cs ← 匹配执行
├── CoordinateTransformer.cs← 像素→物理坐标转换
└── ResultDisplay.cs ← 结果显示(HWindowControl)
1. 模板注册(TemplateMatcher.cs)
模板匹配的第一步是用一张标准件的图片创建模板:
| |
选型参数说明
| |
⚠️ 角度范围越大、缩放范围越大,匹配速度越慢。如果你的工件是固定角度放置,把范围缩小到 ±5°(
-0.087, 0.174),速度能快 5-10 倍。
2. 匹配执行(PatternMatchingDemo.cs)
| |
3. 像素坐标转物理坐标(CoordinateTransformer.cs)
模板匹配输出的是像素坐标,给机器人用需要转成物理坐标(mm)。
| |
九点标定怎么做
运动步骤:
1. 机器人走到位置1(记录机器人坐标 X1, Y1)
2. 拍一张图,找出特征在图像中的位置(Row1, Col1)
3. 重复步骤1-2,走 9 个位置形成 3×3 网格
4. 9 对对应点喂给 VectorToHomMat2d → 完成标定
精度建议:
- 标定板范围覆盖整个视野的 80% 以上
- 标定位置不要共线(至少 3 个不共线的点)
- 标定点的越多(9 点或 16 点),畸变矫正越准
4. 完整流程串联
| |
5. 性能调优
| 场景 | 建议 | 效果 |
|---|---|---|
| 固定角度放置 | 角度范围缩到 ±5° | 匹配速度快 5-10 倍 |
| 物体大小固定 | 缩放范围设 1.0-1.0 | 匹配速度快 3-5 倍 |
| 多目标同时找 | NumMatches=0 | 会找出所有匹配 |
| 只找第一个 | NumMatches=1 + Greediness=0.9 | 最快出结果 |
| 低对比度环境 | MinContrast 降到 5 | 提高检出率,噪声也会多 |
| 旋转对称物体 | 角度范围 0-360° | 但会显著变慢 |
速度参考(i5-8500T,130万像素)
| 配置 | 耗时 |
|---|---|
| 全角度 360°,全缩放 0.8-1.2 | 80-120ms |
| 限制角度 ±5°,固定缩放 | 8-15ms |
| 限制角度 ±5°,固定缩放,NumMatches=1 | 3-5ms |
总结
模板匹配在 C# 里的完整落地链路:
拍照 → ROI框选 → CreateScaledShapeModel → 保存 .shm
↓
拍照 → FindScaledShapeModel → 像素坐标
↓
九点标定 → VectorToHomMat2d → 仿射变换
↓
物理坐标 → 串口/TCP → 机器人抓取
代码从文件保存/加载、亚像素精度、标定转换到结果显示都涵盖在内,直接拿去改项目名就能用。
发布日期:2026-07-02
标签:#机器视觉 #Halcon #C# #模板匹配 #.NET