HALCON 模板匹配的总结

学习和掌握Halcon是如何进行模板匹配的。主要包括基于形状的模板匹配,基于相关性的模板匹配,基于组件的模板匹配,基于局部形变的模板匹配,以及基于描述符的模板匹配。

HALCON提供的基于形状匹配的算法主要是针对感兴趣的小区域来建立模板,对整个图像建立模板也可以,但这样除非是对象在整个图像中所占比例很大,这往往也是要牺牲匹配速度的,这个后面再讲。基本流程是这样的,如下所示:
⑴ 首先确定出ROI的矩形区域,这里只需要确定矩形的左上点和右下点的坐标即可,gen_rectangle1()这个函数就会帮助你生成一个矩形,利用area_center()找到这个矩形的中心;

⑵ 然后需要从图像中获取这个矩形区域的图像,reduce_domain()会得到这个ROI;这之后就可以对这个矩形建立模板,而在建立模板之前,可以先对这个区域进行一些处理,方便以后的建模,比如阈值分割,数学形态学的一些处理等等;

reduce_domain算子

reduce_domain ( Image, Region : ImageReduced : : ) 
其中,Image是输入的图像;Region是输入的区域;ImageReduced是输出的图像,是Image中Region的那部分图像。

通过reduce_domain确实能获得特定区域Region位置的图像,但是,reduce_domain是缩小一个图像的定义域,并不缩小图像的实际尺寸,即新图像ImageReduced尺寸大小并未发生变化。如果使用get_image_size来计算ImageReduced图像的尺寸,其尺寸和 原图Image一样。
  并且,包括一系列的domain算子,比如change_domain,均不改变图像矩阵的大小。
crop_domain算子:

crop_domain ( Image : ImagePart : : ) 
Image是输入的原始图像;ImagePart是输出的最小外界正矩形的图像,也就是说,如果一副大图上,就一块区域有值,其他区域均没有值。通过调用该函数,能够将有值的区域以最小外界正矩形的方式返回,而剪掉那些没有值的区域。

crop_domain能够对图像的尺寸进行剪裁。而且,其一系列的domain算子均能对图像尺寸进行剪裁。

reduce_domain 和 crop_domain 可以配合使用

一般来说,如果想要得到某个ROI区域的小图,且对小图的尺寸有要求时,需要特别注意,配合使用上述两个函数。比如说要调用傅立叶变换对小图进行分析。

⑶ 接下来就可以利用create_shape_model()来创建模板了,这个函数有许多参数,其中金字塔的级数由Numlevels指定,值越大则找到物体的时间越少,AngleStart和AngleExtent决定可能的旋转范围,AngleStep指定角度范围搜索的步长;这里需要提醒的是,在任何情况下,模板应适合主内存,搜索时间会缩短。对特别大的模板,用Optimization来减少模板点的数量是很有用的;MinConstrast将模板从图像的噪声中分离出来,如果灰度值的波动范围是10,则MinConstrast应当设为10;Metric参数决定模板识别的条件,如果设为’use_polarity’,则图像中的物体和模板必须有相同的对比度;创建好模板后,这时还需要监视模板,用inspect_shape_model()来完成,它检查参数的适用性,还能帮助找到合适的参数;另外,还需要获得这个模板的轮廓,用于后面的匹配,get_shape_model_contours()则会很容易的帮我们找到模板的轮廓;
 

⑷ 创建好模板后,就可以打开另一幅图像,来进行模板匹配了。这个过程也就是在新图像中寻找与模板匹配的图像部分,这部分的工作就由函数find_shape_model()来承担了,它也拥有许多的参数,这些参数都影响着寻找模板的速度和精度。这个的功能就是在一幅图中找出最佳匹配的模板,返回一个模板实例的长、宽和旋转角度。其中参数SubPixel决定是否精确到亚像素级,设为’interpolation’,则会精确到,这个模式不会占用太多时间,若需要更精确,则可设为’least_square’,’lease_square_high’,但这样会增加额外的时间,因此,这需要在时间和精度上作个折中,需要和实际联系起来。比较重要的两个参数是MinSocre和Greediness,前一个用来分析模板的旋转对称和它们之间的相似度,值越大,则越相似,后一个是搜索贪婪度,这个值在很大程度上影响着搜索速度,若为0,则为启发式搜索,很耗时,若为1,则为不安全搜索,但最快。在大多数情况下,在能够匹配的情况下,尽可能的增大其值。
⑸ 找到之后,还需要对其进行转化,使之能够显示,这两个函数vector_angle_to_rigid()和affine_trans_contour_xld()在这里就起这个作用。前一个是从一个点和角度计算一个刚体仿射变换,这个函数从匹配函数的结果中对构造一个刚体仿射变换很有用,把参考图像变为当前图像。
 

学习参考链接:

​​​​​​Halcon中 reduce_domain算子和crop_domain算子的使用及配合_学习专栏,期待交流与成长-CSDN博客_reduce_domain算子

算子 create_shape_model & find_shape_model_好习惯成就伟大-CSDN博客_create_shape_model 

你可能感兴趣的:(文丰年,图像处理,计算机视觉,人工智能)