1、模板匹配

模板就是一副已知的小图像,而模板匹配就是在一副大图像中搜寻目标,已知该图中有要找的目标,且该目标同模板有相同的尺寸、方向和图像元素,通过一定的算法可以在图中找到目标,确定其坐标位置

2、模板匹配方法

  • 基于形状的匹配
  • 基于轮廓的匹配
  • 基于灰度的匹配
  • 基于组件的匹配
  • 基于互相关匹配

3、基于形状和轮廓的匹配


1、创建ROI

①标准形状

  • draw_rectangle1/2
  • draw_circle
  • draw_ellipse
  • draw_line

②任意形状

  • draw_region
  • draw_polygon

③生成标准ROI

  • gen_rectangle1/2
  • gen_circle
  • gen_ellipse
  • gen_region_line

④通过XLD创建AOI

  • gen_region_contour_xld
  • gen_region_polygon_xld

2、创建匹配模板

create_shape_model(Template , // 模板图像 NumLevels, // 图像金字塔 AngleStart, // 起始角度 AngleExtent, // 角度范围 AngleStep, // 角度步长 Optimization, // 优化算法 Metric, // 极性 Contrast, // 对比度 MinContrast, // 最小对比度 ModelID // 生成模板ID)

3、匹配模板

find_shape_model(Image, // 匹配图像 ModelID, //模板句柄AngleStart,  // 起始角度AngleExtent,  //角度范围 MinScore,  // 最低得分输出的匹配的得分Score 大于该值NumMatches,  // 匹配数量 MaxOverlap,  // 最大重叠SubPixel,   //计算精度的设置,五种模式,多选2,3   NumLevels,   //搜索时金字塔的层数    Greediness :  //贪婪度,搜索启发式,一般都设为0.9,越高速度快,容易        出现找不到的情况Row,Column,Angle,Score) //输出匹配位置的行和列坐标、角度、得分。

4、实例
(1)模板

(2)创建程序

dev_update_off ()
dev_close_window ()
read_image (Image, 'F:/培训/Halcon培训/Test/b7.png')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width/4, Height/4, 'black', WindowHandle)
dev_display (Image)
gen_empty_obj(Models)
*模板数量数组,模板的下标从1开始
IndexS:=[]
*第n个模型的数量
IndexE:=[]
ModelIDs:=[]
*创建ROI
gen_rectangle1 (ROI_0, 1330.27, 953.165, 1611.85, 1414.88)
area_center (ROI_0, Area, Row, Column)
reduce_domain (Image, ROI_0, ImageReduced)
mean_image (ImageReduced, ImageMean, 5, 5)
*创建模板
create_shape_model (ImageReduced, 'auto', rad(0), rad(360), 'auto', 'auto', 'ignore_local_polarity', 'auto', 'auto', ModelID)
*获得模板
get_shape_model_contours (ModelContours, ModelID, 1)
count_obj (ModelContours, Number)
count_obj (Models, Number1)
concat_obj (Models, ModelContours, Models)
IndexS:=[IndexS,Number1+1]
IndexE:=[IndexE,Number+Number1]
ModelIDs:=[ModelIDs,ModelID]dev_close_window ()
dev_open_window (0, 0, Width/4, Height/4, 'black', WindowHandle1)
*read_image (Image2, 'F:/培训/Halcon培训/Test/b17.png')
dev_display (Image)
gen_rectangle1 (ROI_1, 1302.41, 298.09, 1564.95, 650.634)
area_center (ROI_1, Area1, Row1, Column1)
reduce_domain (Image, ROI_1, ImageReduced1)
threshold (ImageReduced1, Regions1, 170, 255)
erosion_circle (Regions1, RegionErosion, 3.5)
connection (RegionErosion, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50000, 99999)
shape_trans (SelectedRegions, RegionTrans, 'convex')
dilation_circle (RegionTrans, RegionDilation, 4)
*获得xld
gen_contour_region_xld (RegionDilation, Contours, 'border')
*由于region创建模板效果差,创建xld模板
create_shape_model_xld (Contours, 'auto', rad(0), rad(360), 'auto', 'auto', 'ignore_local_polarity', 5, ModelID1)
get_shape_model_contours (ModelContours1, ModelID1, 1)
select_shape_xld (ModelContours1, SelectedXLD, 'contlength', 'and', 1000, 99999)
count_obj (SelectedXLD, Number2)
count_obj (Models, Number3)
concat_obj (Models, SelectedXLD, Models)
IndexS:=[IndexS,Number3+1]
IndexE:=[IndexE,Number2+Number3]
ModelIDs:=[ModelIDs,ModelID1]
for i := 1 to 25 by 1read_image (Image1, 'F:/培训/Halcon培训/Test/b'+i+'.png')dev_display (Image1)*寻找模板find_shape_models (Image1, ModelIDs, rad(0), rad(360), 0.8, 0, 0.5, 'least_squares', 0, 0.9, Row2, Column2, Angle, Score, Model)Num:=|Score|for j:= 0 to Num-1 by 1copy_obj (Models, ModelSelected, IndexS[Model[j]], IndexE[Model[j]]-IndexS[Model[j]]+1)*从点和角度计算刚性仿射变换vector_angle_to_rigid (0, 0, 0, Row2[j], Column2[j], Angle[j], HomMat2D)*对XLD等值线应用任意的二维仿射变换affine_trans_contour_xld (ModelSelected, ContoursAffineTrans, HomMat2D)endfor
endfor

(3)结果

4、参数分析

<Halcon>基于形状和轮廓的模板匹配相关推荐

  1. 使用OpenCV实现Halcon算法(3)基于轮廓的模板匹配

    声明:本篇仅仅是分享网上的开源项目,算法非本人原创. 〇.算法效果展示 0.1要定位的模板一 找到的匹配 在有污损情况下找到的匹配 0.2要定位的模板2 找到的匹配 一. 理论部分 模板匹配的算法包括 ...

  2. HALCON基于形状匹配详解

    HALCON基于形状的模板匹配详细说明 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间.去年有过一段时间的集中学习,做了许多的练习和实验,并对基于HDevelop的形状 ...

  3. Halcon基于形状的几何定位函数说明

    Halcon基于形状的几何定位函数说明 1. create_shape_model(Template: : //reduce_domain后的模板图像 NumLevels,//金字塔的层数,可设为&q ...

  4. 基于VS与OpenCV的模板匹配学习(4):手写OpenCV matchTemplate()

    基于VS与OpenCV的模板匹配学习(4):手写OpenCV matchTemplate() 文章目录 基于VS与OpenCV的模板匹配学习(4):手写OpenCV matchTemplate() 前 ...

  5. halcon基于形状的模板匹配第三例:rectify_result.hdev

    这个例子其实是在比较两种ROI"还原"的方式: 模板匹配后,获得仿射变换矩阵T,则对于ROI的分析有两种: 1.全局的,将T.inv()*Img_target得到目标图片全局还原后 ...

  6. halcon知识:常见三种模板匹配方法总结

    目录 一. 形状匹配模板( Shape_Based ) 1.1 形状匹配常见的有四种情况 1.2 四种匹配的特点 1.3 一般形状匹配模板shape_model 1.4 线性变形匹配模板planar_ ...

  7. halcon——缺陷检测常用方法总结(模板匹配(定位)+差分)

    引言 机器视觉中缺陷检测分为一下几种: blob分析+特征 模板匹配(定位)+差分 光度立体:halcon--缺陷检测常用方法总结(光度立体) - 唯有自己强大 - 博客园 (cnblogs.com) ...

  8. 基于空间相关的图像模板匹配及MATLAB实现

    应用背景:机器的模式识别所要解决的问题,就是用机器代替人去认识图像和找出一幅图像中人们感兴趣的目标物.如何找到目标物即图像的区域呢,这里介绍在空间域使用模板在图像中寻找与模板匹配的区域. 基本原理:在 ...

  9. python opencv模板匹配多目标_基于opencv的多目标模板匹配

    利用opencv进行多目标模板匹配,只要是利用其matchTemplate函数,但在多目标(这里是讨论目标图片中不同大小模板的匹配),以下贴出代码和图片,供大家参考: #include #includ ...

最新文章

  1. JavaScript跨域总结与解决办法
  2. Base64实现图片的编码和解码
  3. springmvc【问题1】跨域
  4. 利用JS面向对象+模块化封装集AJAX请求、基本数据校验、URL参数截取等功能于一身的通用工具模块
  5. 算法设计与分析复习第一二章(时间复杂度和蛮力法)
  6. 区块链中的密码学(五)-零知识证明简述
  7. C++基础--static的用法
  8. 20191011每日一句
  9. Java-集合练习题(1)
  10. Droopy v0.2 靶机渗透(drupal 7.3版本漏洞)
  11. cmd命令行操作windows注册表
  12. TCL中变量嵌套使用
  13. Switch上gamemaker,6.11发售,可不写代码创造游戏
  14. 【Mysql系列】如何实现王者荣耀排名
  15. linux命令行 随机排列,有趣的Linux命令行:随机输出唐诗宋词
  16. 服务机器人常用的定位导航技术及优缺点分析
  17. 剑网三重置版服务器维护,《剑网三》重制版基础教程,让你从入门萌新步入大佬行列...
  18. oracle----存储过程
  19. 【JAVA开发规范】日志规范
  20. 树形递归算法解决一笔画问题(Java)

热门文章

  1. [大话设计模式C++版] 第17章 在NBA我需要翻译 —— 适配器模式
  2. 10个最佳WordPress Star Rating插件
  3. 3Dmax场景小房子—打造完整还原游戏场景
  4. 数据库-音乐网站-sql
  5. 如何把一个字符串的大小写取反?(大写转小写/小写转大写)
  6. 查询人数最多的部门名字
  7. Oracle中的sql语句
  8. Oracle语句优化规则
  9. myFAX传真服务器
  10. 一些电脑清理方法,学起来,总会用到的