当前位置: 首页 > news >正文

图像模板匹配技术详解(含 Halcon 实例)

一、基于灰度值的模板匹配

1. 基本原理

基于灰度值的匹配通过衡量模板图像(T)与待匹配图像(S)子区域的灰度相似性实现定位,核心是计算归一化积相关系数(NCC),公式如下:

(R(i,j) = \frac{\sum{m=1}^{M}\sum{n=1}^{N} T(m,n) \cdot S{i,j}(m,n)}{\sqrt{\sum{m=1}^{M}\sum{n=1}^{N} T(m,n)^2 \cdot \sum{m=1}^{M}\sum{n=1}^{N} S{i,j}(m,n)^2}})

  • (R(i,j) \in [-1,1]),值越接近 1,匹配度越高。

  • 原理:模板在待匹配图像上滑动,计算每个位置的 NCC 值,最大值对应最佳匹配位置。

2. 序贯相似性检测算法(SSDA)

为提高效率,SSDA 通过累加误差阈值判断提前终止非匹配区域的计算:

  1. 定义绝对误差:(|S_{i,j}(m,n) - T(m,n)|);

  2. 设定阈值(T_k),随机选取像素点累加误差,若超过(T_k)则标记为非匹配区域,记录累加次数r;

  3. r越大,匹配度越高(匹配区域需更多计算才可能超过阈值)。

3. Halcon 灰度匹配算子及实例

核心算子
  • create_ncc_model(Template, NumLevels, AngleStart, AngleExtent, AngleStep, Metric, ModelID):创建 NCC 模板

  • find_ncc_model(Image, ModelID, AngleStart, AngleExtent, MinScore, NumMatches, ..., Row, Column, Angle, Score):搜索最佳匹配

实例:SMD 芯片匹配
dev_update_off () read_image (Image, 'smd/smd_on_chip_05') // 读取图像 get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, 'black', WindowHandle) dev_set_color ('green') dev_set_draw ('margin') ​ // 定义模板区域(ROI) gen_rectangle1 (Rectangle, 175, 156, 440, 460) reduce_domain (Image, Rectangle, ImageReduced) // 裁剪模板区域 ​ // 创建NCC模板(支持旋转角度0~0,自动金字塔层级) create_ncc_model (ImageReduced, 'auto', 0, 0, 'auto', 'use_polarity', ModelID) ​ dev_display (Image) dev_display (Rectangle) stop () ​ // 批量匹配多幅图像 for J := 1 to 11 by 1 read_image (Image, 'smd/smd_on_chip_' + J$'02') // 搜索匹配(最小得分0.5,最多1个匹配) find_ncc_model (Image, ModelID, 0, 0, 0.5, 1, 0.5, 'true', 0, Row, Column, Angle, Score) dev_display (Image) // 显示匹配结果 dev_display_ncc_matching_results (ModelID, 'green', Row, Column, Angle, 0) stop () endfor ​ clear_ncc_model (ModelID) // 释放模板

二、基于特征的模板匹配

1. 基本原理

通过提取图像的特征点 / 轮廓 / 矩等信息进行匹配,解决灰度匹配对光照、旋转敏感的问题,常见方法包括:

  • 不变矩匹配:利用图像矩的旋转 / 缩放不变性匹配;

  • 距离变换匹配:计算边缘点到模板边缘的最小欧式距离,距离越小匹配度越高;

  • 最小均方误差匹配:通过仿射变换模型最小化对应点对的误差。

2. Halcon 特征匹配算子及实例

核心算子
  • create_shape_model(Template, NumLevels, AngleStart, AngleExtent, AngleStep, ..., ModelID):创建形状模板

  • find_shape_model(Image, ModelID, AngleStart, AngleExtent, MinScore, ..., Row, Column, Angle, Score):搜索形状匹配

实例:形状模板匹配
dev_update_off () read_image (Image, 'part.png') // 读取包含目标的图像 dev_close_window () get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, 'black', WindowHandle) ​ // 提取模板区域(假设目标为矩形) threshold (Image, Region, 100, 255) connection (Region, ConnectedRegions) select_shape (ConnectedRegions, TemplateRegion, 'area', 'and', 500, 10000) ​ // 检查模板可行性(生成金字塔层级) inspect_shape_model (TemplateRegion, ModelImages, ModelRegions, 4, 30) ​ // 创建形状模板(支持旋转-30°~30°,步长1°) create_shape_model (TemplateRegion, 4, -0.52, 1.05, 'auto', 'none', 'use_polarity', 30, 10, ModelID) ​ // 获取模板轮廓用于显示 get_shape_contours (ModelContours, ModelID, 1) ​ // 读取待匹配图像并搜索 read_image (TestImage, 'part_test.png') find_shape_model (TestImage, ModelID, -0.52, 1.05, 0.6, 1, 0.5, 'least_squares', 0, 0.9, Row, Col, Angle, Score) ​ // 显示结果 dev_display (TestImage) dev_display_shape_matching_results (ModelID, 'green', Row, Col, Angle, 1, 1, 0) stop () ​ clear_shape_model (ModelID) // 释放模板

三、图像金字塔

1. 定义与作用

图像金字塔是多分辨率图像集合,自下而上分辨率逐步降低,用于:

  • 加速匹配(先在低分辨率层粗匹配,再在高分辨率层精匹配);

  • 提高抗干扰能力(低分辨率层过滤细节噪声)。

2. 常见类型

  • 高斯金字塔:通过高斯模糊 + 下采样(去除偶数行 / 列)生成,用于向下采样;

  • 拉普拉斯金字塔:记录高斯金字塔层间差异,用于图像重建(向上采样)。

3. Halcon 金字塔相关算子

  • inspect_shape_model(Image, ModelImages, ModelRegions, NumLevels, Contrast):检查模板并生成金字塔;

  • create_shape_modelNumLevels参数指定金字塔层级(通常 3~5 层)。

四、Halcon Matching 助手

1. 功能

可视化创建模板、设置参数(如旋转范围、最小得分)、测试匹配结果,并自动生成代码,支持 4 种匹配方式:

  • 基于形状的匹配;

  • 基于相关性的匹配(NCC);

  • 基于描述符的匹配;

  • 基于形变的匹配。

2. 使用步骤

  1. 打开助手:助手 → 打开新的Matching

  2. 创建模板:从图像中框选 ROI 或加载已有模板;

  3. 配置参数:设置角度范围、金字塔层级、最小得分等;

  4. 测试匹配:在 “检测” 选项卡执行匹配,查看结果;

  5. 生成代码:在 “代码生成” 选项卡导出可执行的 Halcon 程序。

五、本章小结

  • 灰度匹配:基于像素灰度相关性(NCC),适用于光照稳定、无大幅形变场景;

  • 特征匹配:基于形状 / 轮廓特征,抗光照、旋转能力强,适用于复杂场景;

  • 图像金字塔:通过多分辨率加速匹配,平衡效率与精度;

  • Matching 助手:简化模板创建与参数调试,快速生成匹配代码。

习题参考思路

  1. 8.1:图像匹配目的是定位目标在图像中的位置 / 姿态,常用方法包括灰度匹配(NCC、SSDA)、特征匹配(形状、不变矩)、基于描述符的匹配(SIFT、SURF)等。

  2. 8.2 字母识别:

    • 步骤:创建每个字母的形状模板 → 对测试图像预处理(二值化、去噪) → 用find_shape_model批量匹配并输出结果。

  3. 8.3 数字 3 和 5 识别:

    • 步骤:分别创建 “3” 和 “5” 的模板 → 遍历图像用find_shape_model搜索,设置NumMatches为 “所有”,筛选得分高于阈值的结果。

http://www.cnnetsun.cn/news/140884.html

相关文章:

  • 5-脱氧-L-阿拉伯糖—结构独特的稀有单糖,药物设计与合成化学的宝贵砌块 CAS:13039-56-0
  • 2-乙酰胺基-1,3,4,6-四-O-乙酰基-2-脱氧-5-硫代-α-D-吡喃葡萄糖 —— 糖化学与药物研发的关键砌块 CAS:67561-97-1
  • 群体分析如何改变你的客户洞察
  • 别再为BGM被下架了,可以生成带声音且无版权素材的AI,真的来了
  • vue和springboot框架开发的校园商店零售管理系统_pt87nuk3
  • vue和springboot框架开发的校园智能AI问答技术的快递物流管理系统_5kf8to85
  • 文件句柄数超限
  • 如何用 Oracle 的账号和权限来连接 ZooKeeper 的客户端认证、ACL 绑定到身份 2 个概念
  • 艾宝体案例 | 以人为本、灵活赋能:Spectris携手KnowBe4打造高效安全意识与合规培训体系
  • 面向2025:融合AI安全的网络安全学习路线与技能清单
  • 迎战2026:网络安全从业者必须掌握的核心技能与实战路线图
  • python-uniapp微信小程序的字典词韵查询系统的设计与实现_79zfkl8b
  • 7个免费网站帮你降低论文AI率,通过万方AIGC查重,亲测有效
  • 【Java毕设全套源码+文档】基于springboot的拍卖管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 基于开源AI智能名片链动2+1模式多商户商城小程序的销售工作性质与能力要求研究
  • 科研人都懂的绘图痛:你是否还在为这些问题熬夜?
  • 传统vs智能:编辑分配效率对比实验报告
  • Watt Toolkit实战:构建电商价格监控系统
  • 技术演进中的开发沉思-258 Ajax:自定义事件
  • 幽冥大陆(五十三)人工智能开发语言选型指南——东方仙盟筑基期
  • 小程序python-uniapp巴山大峡谷景区酒店预定系统的设计与实现_98434fj3
  • 【Java毕设源码分享】基于springboot+vue的易家宜超市云购物系统设计与实现(程序+文档+代码讲解+一条龙定制)
  • 用AI一键识别网站技术栈:Wappalyzer的智能分析
  • 【Java毕设源码分享】基于springboot+vue的苹果批发销售管理平台设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Java毕设源码分享】基于springboot+vue的街道办管理系统设计与实现(程序+文档+代码讲解+一条龙定制)
  • 代码随想录算法训练营第三十八天:最长公共子序列,不相交的线,最大子序和,判断子序列
  • 电脑与手机互传工具--强大的Coolmuster Android Assistant
  • Nacos注册/配置中心
  • Vue-cli如何集成WebUploader完成百万文件分块上传?
  • HTML如何设计JQuery支持大文件上传的暂停与继续功能?