【Halcon工业应用知识点】模板匹配处理手法总结(附源码)

一、用途

1、常用于识别定位、测量、机械手抓取等

2、多用形状匹配

二、原理

1、基于灰度(极少用)

    【案例best_match : 常规灰度匹配流程】

    【案例best_match_mg : 根据灰度图调整模板】

    【案例set_reference_template : 设置从哪里开始搜索】

2、基于相关性(少用)

    【案例find_ncc_model_exposure:常规相关性匹配流程】

 

3、基于形状(最常用)

      一阶导数算子、二阶导数算子

      1、找到区域轮廓,生成模板,查找模板轮廓与目标区域轮廓

 

      图像金字塔:一般设为 3-5层

      模板、实例(找到的区域)

三、形状匹配【使用图像创建模板】

    手法:采集 - 预处理 - 抠图 - 创建模板 - 查找 - 显示

   【案例】

    1、采集图像

    2、预处理:获得作为模板匹配的区域,一般会稍微膨胀

    3、抠图(手动抠图/Blob抠图)

    4、创建模板

           create_scaled_shape_model() 匹配的图像可缩放(行列等比例缩放)、旋转

           Template:用于创建模板的图像

           NumLevels:金字塔层数

           *AngleStart:模板开始角度 视情况而定

           *AngleExtent:模板角度范围

            AngleStep:模板角度步长

           *ScaleMin:最小缩放比例

           *ScaleMax:最大缩放比例

            ScaleStep:缩放步长

            Optimization:优化算法

            *Metric: 匹配极性

            Contrast:模板与实例的对比度

            MinContrast:模板前景与背景的对比度(对比度越大,则轮廓点数越少,一般20左右)

            ModelID:创建的模板句柄

            create_aniso_shape_model() :匹配的图像行列可不等比例缩放

            create_shape_model() :匹配的图像不可缩放

5、查找(对应创建的模板形式)

find_scaled_shape_model(s) 寻找匹配可旋转缩放的图像

Image: 模板匹配的目标图像

ModelID: 匹配模板句柄

AngleStart: 匹配其实角度(注:此处的角度值与缩放值均在创建模板的参数范围内即可)

AngleExtent:匹配角度范围

ScaleMin: 匹配目标的最小缩放比例

ScaleMax: 匹配目标的最大缩放比例

MinScore: 最小分数,类似于匹配度,分数低于这个值的目标,则不会被匹配上

* NumMatches:查找个数(0为查找所有)

MaxOverlap: 目标重叠度

SubPixel:亚像素精度

* NumLevels:金字塔层数

* Greediness:贪婪度(找不到需要调整参数)

Row:查找结果行座标

Column:查找结果列座标

Angle:查找结果角度

Scale:查找结果缩放比例

Score:查找结果分数,即匹配度

find_aniso_shape_model(s):

find_shape_model(s):

 

【案例关键点】

1、find_scaled_shape_model: 常规模板匹配创建及匹配(行列缩放为等比例)

2、first_example_shape_matching: 芯片模板匹配(不可缩放)

3、find_aniso_shape_model: 匹配目标的行列比例可缩放(可不等比例),单个模板对应多个目标

5、reuse_model: 保存模板文件

6、pm_multiple_models: 多模板匹配(内部包含从cad文件导入轮廓)

7、check_soft_cheese :多模板匹配

8、find_cococa_packages_max_deformation(或find_shape_model_max_deformation): 类似包装袋等非刚性物体表面有形变的匹配(重点参数:max_deformation N,N越大允许形变越大)

9、使用均值创建模板(案例4)

10、matching_image_border: 匹配边界图像时需设置

11、matching_coins: 缩减一个区域,指定从该出查找减少查找时间

12、matching_defocused_pcb : 模糊查找,查找时金字塔设为[0, -n]

13、process_shape_model:创建模板前,看下模板是否完整,是否需要修改,修改后再创建模板

14、find_peanut_candies_local_deformable: 柔性产品、包装袋产品形变(形变大时使用本组合算子)

create_local_deformable_model:创建模板

find_local_deformable_model:查找

15、set_shape_model_timeout :设置查找最长时间,超过便不查

16、set_shape_model_min_contrast: 设置模板与实例的最小对比度,提高查找正确率

 

四、形状匹配【使用轮廓创建模板】

手法:采集 - 预处理 - 获取xld轮廓 - 创建模板 - 查找 - 显示

1、采集图像

2、预处理:

3、获取xld轮廓

4、创建模板

create_scaled_shape_model_xld() :匹配的图像可缩放、旋转

create_aniso_shape_model_xld() :匹配的图像仅仅在X、Y方向缩放

create_shape_model_xld() :匹配的图像不可缩放

 

5、查找(对应创建的模板形式)

find_scaled_shape_model(s) 寻找匹配可旋转缩放的图像

find_aniso_shape_model(s):

find_shape_model(s) :

 

【案例关键点】

create_shape_model_xld: 创建xld轮廓模板,用xld轮廓去匹配


五、基于组件匹配

    可应用于开关检测(开关检测也可用多模板匹配)

六、分类

模板匹配:

  • 基于灰度值
  • 基于相关
  • 基于形状
  • 局部可变形
  • 可变现(适合刚性透视变换、透视失真) create_planar_uncalib_deformable_model_xld
  • 基于组件 利用模板之间的关系
  • 基于描述符

案例:

*读取图片
read_image (Image, '1.png')
*画一个ROI区域
gen_rectangle1 (ROI_0, 57.625, 55.5, 186.063, 190.5)
*用上面画出的ROI抠图
reduce_domain (Image, ROI_0, ImageReduced)
*用抠出的图像做成模板
create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*获取模板轮廓,此步非必须
*get_shape_model_contours (ModelContours, ModelID, 1)
*在原图中查找模板
find_shape_model (Image, ModelID, -0.39, 0.78, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
*显示模板匹配的结果,即将模板的轮廓变换到识别到的位置
dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)

 

项目案例分享:

链接:https://pan.baidu.com/s/13orowAalkoXaRxdbDgZjIw 
提取码:s2pd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章