Halcon模版匹配

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

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

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;

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

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值