记录下自己遇到的一次模板匹配的难题.方便以后举一反三.

遇到的是两颗螺丝,受环境光影响,轮廓非常复杂.思考逻辑如下:

1.减少轮廓复杂程度,使用到的算子edges_sub_pix

edges_sub_pix (ImageReduced, Edges, 'canny', 6, 20, 40)

2.使用xld创建模板create_shape_model_xld

create_shape_model_xld (Edges, 'auto', 0, 0, 'auto', 'auto', 'ignore_local_polarity', 30, ModelID)

3.reduce_domain减少搜索范围 find_shape_model匹配取结果,这里会把没有打螺丝的也找到,因为轮廓简化了

4.使用get_grayval在中心点取10点像素点的颜色做判断.

编辑好的halcon文件放在:三种模板匹配例子,有普通轮廓,非常复杂的轮廓简化.-数据集文档类资源-CSDN下载三种模板匹配例子,有普通轮廓,按区域重新生成简化图片创建模板.然后匹配.非常复杂的轮廓简化.再更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/lw8014/85800016

read_image (Image, 'clip')
gen_rectangle2 (ROI_0, 117, 185, rad(40.1207), 116.387, 41.7915)
reduce_domain (Image, ROI_0, ImageReduced)
*创建匹配模板
create_shape_model (ImageReduced, 'auto', -0.39, rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*write_shape_model (ModelID, 'C:/Users/斌/Desktop/sss/xxx.shm')*写入创建好的模板
*read_shape_model ('C:/Users/斌/Desktop/sss/xxx.shm', ModelID)*读取以前创建好的模板
*获取创建好的模板轮廓显示在0,0位置
get_shape_model_contours (ModelContours, ModelID, 1)*参数说明:
*1、要匹配的图元 2、模型句柄 3、模型最小旋转角 4、模型最大旋转角 5、行方向的最小缩放比 6、行方向最大缩放比 7、列方向最小缩放比 8、列方向最大缩放比 9、找到模型的最小分数
*10、找到模型的数量 11、模型的最大重叠 12、亚像素精度 13、金字塔数 14、贪婪值 15、16找到的图像的中心坐标;17、18行列的缩放比 20、得分
find_shape_model (Image, ModelID, -0.39, rad(360), 0.7, 20, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
if (|Score|>0)dev_display (Image)dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)*显示匹配的分数disp_message (200000, Score, 'window', Row, Column+5, 'black', 'true')
endif

 模版匹配类型

执行步骤

应用场合

基于组件匹配

  1. 获取组件模型里的初始组件gen_initial_components;
  2. 根据图像模型,初始组件,训练图片来训练组件和组件相互关系train_model_components;
  3. 创建组件模型create_trained_component_model;
  4. 寻找组件模型find_component_model;
  5. 释放组件模型clear_component_model;

组件匹配是形状匹配的扩展,但不支持大小缩放匹配;

适用于多个对象定位的场合,

基于形状匹配

  1. 创建形状模型create_shape_model;
  2. 寻找形状模型find_shape_model;
  3. 释放形状模型clear_shape_model;

定位对象内部的灰度值可以有变化,但对象边缘轮廓必须清晰平滑的场合

基于灰度匹配

  1. 创建模版create_template;
  2. 搜索模版best_match;
  3. 释放模版clear_template;

定位对象内部的灰度值必须没有大的变化,没有缺失的部分,没有干扰图像噪声的场合

基于互相关匹配

1.创建模版create_ncc_model;

2.搜索模版find_ncc_model;

3.释放模版clear_ncc_model;

搜索对象有轻微的变形,大量的纹理,模糊图像中的对象等场合,其速度快于传统的灰度匹配;

基于变形匹配

1.创建模版create_local_deformable_model;

2.搜索模版find_local_deformable_model;

3.释放模版clear_deformable_model;

对象有轻微的变形的场合

基于描述匹配

1.创建模版create_calib_descriptor_model;

2.搜索模版find_calib_descriptor_model;

3.释放模版clear_descriptor_model;

对象有透视变形的场合,但它不是通过对象的轮廓来匹配的,而是根据一些描述的点来进行匹配的,这些点按照位置和灰度值进行的分类。

Halcon模版匹配相关推荐

  1. halcon模板匹配学习(一) Matching 初印象

    什么是模板匹配呢?简单而言,就是在图像中寻找目标图像(模板),或者说,就是在图像中寻找与模板图像相似部分的一种图像处理技术.依赖于选择的方法不同,模板匹配可以处理各种情形下的变换,如照明.杂点.大小. ...

  2. halcon 形状匹配

    halcon 形状匹配 1.例子 指定模板图像区域(也可以用draw_rectangle1画一个矩形) Row1 := 188 Column1 := 182 Row2 := 298 Column2 : ...

  3. 最简单的目标跟踪(模版匹配)

    最简单的目标跟踪(模版匹配) zouxy09@qq.com http://blog.csdn.net/zouxy09 一.概述 目标跟踪是计算机视觉领域的一个重要分支.研究的人很多,近几年也出现了很多 ...

  4. halcon模板匹配实践(1)算子参数说明与算子简介

    create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, ...

  5. java实现图像模版匹配(蜗牛学院)

    package com.woniu.test;import java.awt.AWTException; import java.awt.Rectangle; import java.awt.Robo ...

  6. Halcon:模版匹配

    一:函数介绍 1.创建模板 create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimiz ...

  7. halcon模板匹配学习(二) 准备模板

    如下,我们将介绍匹配的第一个操作:准备模板 初始时刻,我们准备好参考图像,并对其做一定的处理,然后我们需要从参考图像中导出模板,也就是将参考图像裁剪成所谓的模板图像.获取模板图像可以通过设置ROI来完 ...

  8. 基于openCV的形状模版匹配

    初衷 果然halcon用顺手了,人就变懒了,正好有项目需要自己写个形状匹配的程序,就拿来练练手,程序不是很复杂,速度上感觉和halcon里面find_scaled_shape_model还是有差距,目 ...

  9. Halcon 模板匹配专栏

    1.基于形态的匹配 先看原图 首先将要匹配的图片剪切出来 代码如下 *读取模板图片和要查找的目标图片 read_image (Image, 'green-dot') *read_image (Imag ...

最新文章

  1. oracle 14108,ORA-14108:非法分区扩展表名的语法
  2. iOS日常工作之常用宏定义大全
  3. 用stm32开发时是直接买现成的开发板还是芯片?开发板学习,芯片硬件设计
  4. [Aaronyang] 写给自己的WPF4.5 笔记6[三巴掌-大数据加载与WPF4.5 验证体系详解 2/3]
  5. tcc读写文本txt文件
  6. 中科院的java_java 中调用中科院分词系统
  7. 面试题之丑数的C++实现求解(孤陋寡闻了,才知道丑数这么high的东东)
  8. 测试面试题集-Dubbo常见面试题
  9. python贪心算法几个经典例子_闲来无事整一下贪心算法 用python实现的
  10. php把数据存到cookie,php – 在cookie中存储数组
  11. 2021-02-23 根据RNA-seq测序数据判断文库类型和链特异性
  12. [llvm cookbook] 1、LLVM设计与使用
  13. 网络技术大讲堂:什么是IPv6+?
  14. continue语句只用于循环语句中_Python尚学堂高淇|P60P63break语句,else语句使用,循环代码的优化...
  15. 华为 、锐捷、新华三、睿易网络设备怎么选
  16. Android 11.0 12.0蓝牙遥控器确认键弹不出输入法的解决方法
  17. 巴贝奇计算机科学思想,计算机之父巴贝奇_图灵_计算机科学之父
  18. 收藏,全网开发者都在学的26门AI课程!
  19. 大数据之路、阿里巴巴大数据实践读书笔记 --- 第二章、日志采集
  20. python PIL的Image.resize()和Image.thumbnail()函数的区别

热门文章

  1. 程序员撩妹专用~~~好看的H5立方体创意相册,资源免费!!!程序员送给女孩子的礼物,非常适合送给小姐姐!
  2. lumen php命令,lumen控制器调用artisan
  3. barcode4j生成条形码及打印条码开发介绍
  4. 计算机上64位数和32位数,cad中32位和64位的区别是什么?
  5. hbuilderx安装教程_HBuilderX入门教程
  6. keil设置c语言字体大小,Keil uVision4怎么放大字体?放大字体和关键字标注颜色方法介绍...
  7. 饭店点餐系统之数据库表结构
  8. Vue报错:Uncaught (in promise) ReferenceError Message is not defined at eval
  9. adb安装报错情形以及解决办法
  10. Net-snmp添加子代理示例