halcon算子模板匹配(一)基于形状的模板匹配

一、基于形状模板匹配的原理

1.形状模板匹配的原理及实现过程

           原理:是基于边缘方向梯度的匹配。该方法是以物体边缘的梯度相关性为 匹配标准,提取兴趣区区域内的边缘特征,根据模板的大小和清晰度要求生成多层级的图像金字塔模型,接着再图像金字塔层自上而下逐层搜索模板图像,直至搜索到底层或者确定的匹配结果为止。

            优点:形状模板是最常用,最有效,最快速的匹配方法,对很多干扰因素不敏感,如光照和图像灰度发生变化,甚至支持局部边缘缺失杂乱场景,噪声,失焦,轻微变形。

            缺点:不适用于旋转和缩放比较大的情况。

            实现过程:

           1.创建ROI区域,准备模板图像用来创建模板

           2.图像预处理,改善图像质量,以便图像效果更好

           3.创建模板用于模板匹配

           4.获得图像模板的轮廓,用于之后的匹配

           5.进行模板匹配,得到图像对应匹配区域的行纵坐标以及角度和匹配分值等信息。

2.形状模板匹配的应用场景

  • 适用于目标轮廓比较清晰的场景。
  • 适用于杂乱场景、遮挡、非线性光照变化、尺寸缩放、失焦和轻微形变的图像,以及多通道图像和多个模板的同步匹配。
  • 适用于纹理简单的图像。

3.形状模板匹配算子及参数介绍

1.确定模板匹配的相关参数 determine_shape_model_params(可以自动获取类似对比度等参数)


 determine_shape_model_params(Template, // 模板 
                              ‘auto’, // 金字塔层数
                              0, // 起始角度
                              rad(360), // 角度范围
                              0.9, // 缩小范围
                              1.1, // 放大范围
                              ‘auto’, // 减少像素的方法
                              ‘use_polarity’, // 极性
                              ‘auto’, // 对比度
                              ‘auto’, // 最小对比度
                              'all', // 需要自动确定的参数
                              ParameterName, // Name of values

2.创建模板 create_shape_model


 create_shape_model(Template , // 模板图像
                    NumLevels, // 金字塔层数
                    AngleStart, // 起始角度
                    AngleExtent, // 角度范围
                    AngleStep, // 角度步长
                    Optimization, // 设置模板优化和模板创建方法
                    Metric, // 匹配方法设置
                    Contrast, // 模板中前景与背景的对比度
                    MinContrast, // 被查找图片的最小对比度
                    ModelID) // 模板ID

3.检测模板的金字塔层是否合理 inspect_shape_model


  inspect_shape_model(Image : // 输入参数,输入图像
                     ModelImages, // 输出参数,输出图像基于金字塔的影像
                     ModelRegions : // 输出参数,输出模型区域
                     NumLevels, // 输入参数,使用的金字塔层数。默认4,范围1~10
                     Contrast : ) // 输入参数,设置对比度。默认30,参考10,20,30,40,60,80,100,120,140,160

4.在图像中搜索模板  find_shape_model

 find_shape_model(Image, // 搜索图像
                  ModelID, // 模板句柄
                  AngleStart, // 搜索时的起始角度
                  AngleExtent, // 搜索时的角度范围,必须与创建模板时的有交集
                  MinScore, // 最小匹配值,输出的匹配的得分Score大于该值
                  NumMatches, // 定义要输出的匹配的最大个数
                  MaxOverlap, // 当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出
                  SubPixel, // 计算精度的设置,五种模式,多选2,3
                  NumLevels, // 搜索时金字塔的层数
                  Greediness, // 贪婪度,搜索启发式,一般都设为0.9,越高速度快,容易出现找不到的情况
                  Row, Column, Angle, Score) // 输出匹配位置的行和列坐标、角度、得分(模板在搜索图像中可见比例的近似测量,如果模板的一半被遮挡,该值就不能超过0.5)

二、形状模板匹配的类型

  • 一般形状匹配模板shape_model
  • 线性变形匹配模板planar_deformable_model
  • 局部可变形模板local_deformable_model
  • 和比例缩放模板Scale_model

b67a93f3ffdb48ccb25fa10b783a6b8e.png

三、形状模板匹配的案列及代码

*传入第一张图片做模板
read_image (Image, 'C:/Users/Maxwell/Desktop/模板匹配testimage/1.jpg')
rgb1_to_gray (Image, GrayImage)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display (GrayImage)
dev_set_draw ('margin')
*draw_rectangle2 (WindowHandle, Row1, Column1, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, 2258.64, 893.313, -0.0, 228.375, 179.435)
reduce_domain (GrayImage, Rectangle, ImageReduced)
create_shape_model (ImageReduced, 'auto', rad(0),rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)

* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('C:/Users/Maxwell/Desktop/模板匹配testimage', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image_t, ImageFiles[Index])
    rgb1_to_gray (Image_t, GrayImage_t)
    find_shape_model (GrayImage_t, ModelID, rad(0), rad(360), 0.1, 1, 0.5, 'least_squares', 0, 0.5, Row, Column, Angle, Score)
    vector_angle_to_rigid (2258.64, 893.313, 0, Row, Column, Angle, HomMat2D)
    dev_set_color ('green')
    dev_set_line_width (3)
    affine_trans_region (Rectangle, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
    dev_display (GrayImage_t)
    dev_display (RegionAffineTrans)
    * Image Acquisition 01: Do something
endfor

创建的模板:

c3bd6adb6b9c4d18a525a4c57d34d359.png

模板匹配的结果:

30159fec3746409ebd99cdde9e62114a.png

参考文章:(26条消息) halcon知识:常见三种模板匹配方法总结_halcon 模板匹配_无水先生的博客-CSDN博客

基于形状的模板匹配(Shape-Based)_shape匹配_盾山狂热粉的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/qiaodahua/article/details/130292845