如下,我们将介绍匹配的第一个操作:准备模板

初始时刻,我们准备好参考图像,并对其做一定的处理,然后我们需要从参考图像中导出模板,也就是将参考图像裁剪成所谓的模板图像。获取模板图像可以通过设置ROI来完成。对于某些应用来说,也可以使用综合模板代替模版图像。综合模板既可以是综合创造的模板图像,也可以是一个XLD轮廓。

裁剪参考图像,使之成为模板图像

为了创建模板图像,我们需要从参考图像中选取ROI,并使用 reduce_domain裁剪图像的定义域为我们选取的ROI。这样我们就创建了模板图像,后续将作为匹配算子的输入参数。

选取ROI有两种方法:

  • 直接指定法。
    我们可以直接指定区域的参数进而直接生成区域。HALCON 提供了多种算子用来创建区域,既包括标准的形状像矩形(gen_rectangle2)或者椭圆(gen_ellipse) 到自由形状的区域,比如多边形区域(gen_region_polygon_filled).为了使用这些算子,你需要这些区域的参数,比如矩形的位置、大小、方向或者园的位置和半径。如果这些参数不能直接获得,你可以使用draw算子,比如你可以在打开的图像上画一个形状,然后返回其参数。这些算子可以在HDevelop菜单 Operators :fa-play: Graphics :fa-play: Drawing 获得。
  • 通过图像处理获得区域。
    有时我们可以通过图像处理获得区域,如阈值处理分割图像、通过blob分析connection、fill_up、select_shape等可以选取某种特征的区域。

综合模板图像,作为模板图像的替代选择

综合模板图像

综合模板图像主要应用于 correlation-based 匹配和所有基于轮廓的2D方法 比如 shape-based, component-based, local deformable, and perspective deformable matching.
如下我们举例说明。

我们想要定位电容。如果我们选择明亮的圆域作为ROI区域,则会发现该区域包括大量的噪声点。因此最后匹配出的电容只有一个。如果我们改进之前的圆区域,换成一个环形区域作为ROI,则最后匹配出理想的电容区域。但是即使这样,环形区域使得内部的区域丢失了一部分,而且仍然包含部分噪点,所以不理想。

最好的方法是使用综合模板图像。具体步骤如下:
Step 1: 创造一个XLD轮廓
首先我们使用算子gen_ellipse_contour_xld创造一个圆形区域。

RadiusCircle := 43
SizeSynthImage := 2*RadiusCircle + 10
gen_ellipse_contour_xld (Circle, SizeSynthImage/2, SizeSynthImage/2, 0,
RadiusCircle, RadiusCircle, 0, 6.28318, 'positive', 1.5)

注意合成图像应该比区域大一些,因为对于 shape-based matching,当创建图像金字塔时,区域外面的像素也被使用。
Step 2: 创造一个图像,并将XLD插入图像中
然后我们使用算子gen_image_const创造一个空的图像,并使用算子* paint_xld*将XLD轮廓插入图像中.

gen_image_const (EmptyImage, 'byte', SizeSynthImage, SizeSynthImage)
paint_xld (Circle, EmptyImage, SyntheticModelImage, 128)

Step 3: 创建模型
使用综合模板创建模型。

请注意:
完整的代码,见:HDevelop 项目 solution_guide/matching/synthetic_circle.hdev

来自XLD轮廓的模型

对于 shape-based matching 和 the local and perspective deformable matching,你不必要从一个XLD轮廓中创建一个综合模板图像,因为你可以直接使用XLD轮廓作为模板。比如说,对于shape-based matching, 你不必要提供一幅图像,选择ROI,然后调用 create_shape_model, create_scaled_shape_model, or create_aniso_shape_model其中之一去创建模型。

相反,你可以简单地调用create_shape_model_xld, create_scaled_shape_model_xld, or create_aniso_shape_model_xld使用XLD轮廓作为输入参数。

举例说明。如下的完整项目,见 HDevelop example program: examples\hdevelop\Matching\Shape-Based\create_shape_model_xld.dev:

gen_circle_contour_xld (ContCircle, 300, 300, MeanRadius, 0, 6.28318, \
'positive', 1)
create_shape_model_xld (ContCircle, 'auto', 0, 0, 'auto', 'auto', \
'ignore_local_polarity', 10, ModelID)

对于 local and perspective deformable matching 的处理也可以相应的被使用。这里你可以使用算子create_local_deformable_model_xld for the local deformable matching and create_planar_uncalib_deformable_model_xldor create_planar_calib_deformable_model_xld, respectively, for perspective deformable matching.

初始时刻不知道极性,因为轮廓不提供极性。所以需要在一个有代表性的图像中做实验,看看如何设置极性。开始忽略极性,即参数
Metric设置为ignore_local_polarity,后面设置极性.可以调用算子set_shape_model_metric for shape-based matching,set_local_deformable_model_metric
for local deformable matching, and set_planar_uncalib_deformable_model_metric or
set_planar_calib_deformable_model_metric, respectively, for perspective deformable matching.
然后极性信息就被存储到模型中。然后在接下里的搜索算子中可以通过参数
Metric设置各位合适的值,如’use_polarity’. 这种处理强烈推荐给迅速且鲁棒的搜索。

find_shape_model (Image, ModelID, 0, 0, 0.7, 0, 0, 'least_squares', 0, 0.9, Row, Column, Angle, Score)... accessing the indices of the matches
... that represent suitable drill holesvector_angle_to_rigid (0, 0, 0, Row[HoleIndices[0]], Column[HoleIndices[0]], Angle[HoleIndices[0]], HomMat2D)set_shape_model_metric (Image, ModelID, HomMat2D, 'use_polarity')for Index := 2 to 9 by 1read_image (Image, 'brake_disk/brake_disk_part_'+Index$'02d')find_shape_model (Image, ModelID, 0, 0, 0.7, 0, 0,   'least_squares', 0, 0.9, Row, Column, Angle, Score)
endfor

如下图为示意图:

注:关于极性的选择。

1. 使用极性模式: 要求模板与图像黑白亮度对应。
2. 忽略模板全局极性: 不需要模板与图像黑白亮度对应
3. 忽略局部极性: 不需要模板与图像黑白亮度对应,允许变化。

halcon模板匹配学习(二) 准备模板相关推荐

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

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

  2. 苹果CMS10内核 番茄视频模板 苹果CMS二开模板 会员系统 卡密系统

    苹果CMS10内核 番茄视频模板 苹果CMS二开模板 会员系统 卡密系统 二开功能: 后台自带主题设置 支持两种付费模式: 2-1.自带开屏广告,可在后台控制开关,以及时间 2-2.单独设置某部视频为 ...

  3. 记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配(二)

    本文接着上一篇记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配 打开HALCON并打开匹配助手 匹配助手如图 "创建"页说明: 1,选择匹配方式 中间偏上方的下拉 ...

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

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

  5. Smarty模板技术学习(二)

    本文主要包括以下内容 公共文件引入与继承 内容捕捉 变量调剂器 缓存 Smarty过滤器 数据对象.注册对象 与已有项目结合 公共文件引入与继承 可以把许多模板页面都用到的公共页面放到单独文件里边,通 ...

  6. 模板匹配理论的优缺点,模板匹配和神经网络

    1.模板匹配理论的优缺点 1.函数模板方式克服了C语言解决类似问题时使用大量不通函数名表示相关功能. 2.克服了宏定义不能进行参数类型检查的弊端. 3.克服了C++函数重载用相应函数名字重写几个函数的 ...

  7. opencv 模板匹配_详细剖析模板匹配

    点击上方"新机器视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 模板匹配介绍 我们需要2幅图像: 原图像 (I): 在这幅图像里, ...

  8. Halcon模板匹配学习:find_aniso_shape_model

    (粉色是显示设置相关,不需要太多关注,黄色为自己标注,绿色输入参数,紫色输出参数) *去寻找SMD电容元器件, 这些SMD电容元器件在具有10位深度的图像(类型为uint2的图像)中在行和列方向上呈现 ...

  9. 2021-01-10 Halcon初学者知识 【10】形状匹配 【二】模板的形状匹配

    将上一篇博客中的图像用来测试代码:在images目录下,存放若干张指环图片,用下述代码,进行形状识别: dev_set_line_width(4) list_image_files('images', ...

最新文章

  1. ORACLE 数据的逻辑组成
  2. ModelBasedCompressiveSensing
  3. Android开发之Dialog的三种列表显示(解读谷歌官方API)
  4. requestbody前端怎么传_学习前端开发前的基础知识了解「V1001」
  5. iOS GZWaterfall任何形式的瀑布流
  6. 你不知道的思维导图能做的事
  7. UVA11760 Brother Arif, Please feed us!【bitset】
  8. HardDisk读取速度
  9. 前端可视化的四种方式
  10. 局域网访问虚拟机里的应用,以可道云 kod为例
  11. matlab里的speed,matlab虚数 分析一下getspeed()函数
  12. AR和VR现在还火爆吗?
  13. 如何科学地评价妹子身材?三围符合黄金比例是审美标准?你错了!
  14. 阿里百川 用户反馈(feedback) 与 (com.umeng.lib.xxxxx 及 和 alipaySDK-xxxxx) 冲突的问题。
  15. POSCMS 短信设置
  16. 3dmax和python做3d动画_maya三维动画师和程序员(python)哪个前景好一些?
  17. 计算机网络设备配置与调试体会,计算机网络设备配置与调试课程标准
  18. transmac装黑苹果_黑苹果 篇一:黑苹果安装-clover引导10.15.3超详细
  19. 如何找回删除的文件?挺高的恢复率!
  20. 教你三分钟了解PS技术

热门文章

  1. 看YYModel源码的一些收获
  2. [原创]Toolbar setNavigationIcon无效
  3. 多线程并发之原子性(六)
  4. GNU/CPIO 学习小结
  5. vue路由传参的三种基本方式 - 流年的樱花逝 - SegmentFault 思否
  6. 什么是Affinity
  7. 服务器租用单线、双线、bgp 相比有哪些区别优势?
  8. OC Autorelease
  9. ORA-00980与PL/SQL程序编译出错
  10. 手把手教你用1行代码实现人脸识别 -- Python Face_recognition