其他分享
首页 > 其他分享> > 转战Halcon日记【9】-- 模板匹配

转战Halcon日记【9】-- 模板匹配

作者:互联网

模板匹配是一个用处非常大的算子,可以说是传统机器视觉检查上的一个核心

我们以一张名片来举例子,我们以zoomin这个logo为模板

输入图

模板选择

实现的效果(各个角度都可匹配)

     ·   

我们上一下代码

*读取图片
read_image(Image, 'mingpian.png')
*提取模板图片
gen_rectangle1 (ROI_0, 391.44, 1074.71, 487.6, 1300.8)
area_center(ROI_0, Area, Row1, Column1)
reduce_domain(Image, ROI_0, ImageReduced)

*创建模板
*第一个参数是模板图片,第二个参数是空间金字塔的层数(之后讲解这个参数啥意思)
*第三个参数是角度的起始值,第四个参数是角度的结束值,第五个参数是角度的步长,也就是说,我们模板0-360°范围都可以检测的,第五个参数一般默认auto
*第六个参数是模板的最小比例,第七个参数是模板的最大比例,也就是说,我们模板在0.9-1.1倍的大小范围内都可以检测的,第八个参数是比例的步长,也默认auto
*后面的参数都默认就行,都是优化匹配速度之类的
*最后一个参数返回的是创建之后的模板
create_scaled_shape_model(ImageReduced, 'auto', 0, rad(360), 'auto', 0.9, 1.1, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)

*显示创建的模板的轮廓
get_shape_model_contours(ModelContours, ModelID, 1)

*生成几个相关的roi区域
gen_rectangle1 (ROI_1, 395.349, 481.381, 526.205, 877.684)
gen_rectangle1 (ROI_2, 600.716, 491.329, 656.536, 966.212)
gen_rectangle1 (ROI_3, 671.175, 498.884, 714.741, 991.456)
gen_rectangle1 (ROI_4, 722.91, 490.72, 778.73, 1100.31)
gen_rectangle1 (ROI_5, 604.463, 1157.46, 782.814, 1342.52)

* Image Acquisition 01: Code generated by Image Acquisition 01
* 打开相机,这个在助手里面直接可以插入代码
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[1] XW200', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
    *取图
    grab_image_async (Image1, AcqHandle, -1)
    * Image Acquisition 01: Do something
    * 执行模板查找
    * 第一个参数是需要查找的图片,第二个参数是刚刚创建的模板
    * 第三个第四个参数是起始的角度
    * 第五个参数是最小的匹配分数,也就是说,大于这个匹配分数才认为是模板图片
    * 第六个参数是匹配的个数,如果为0的话,就是有多少个就匹配多少个
    * 第七个参数是最大的重叠区域,假设匹配出两个模板,如果iou超过这个值就认为是一个
    * 第八九十个参数默认就行
    * 第十一十二十三个参数分别是返回的模板的位置和角度
    find_shape_model(Image1, ModelID, 0, rad(360), 0.3, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
    if (Score>0)
        * 获得一个旋转矩阵
        * 前三个参数参数是原始点的坐标和角度
        * 第四五六个参数是变换后的坐标和角度
        * 第七个参数是返回的旋转矩阵,根据前六个参数就能得到这个矩阵
        vector_angle_to_rigid(0, 0, 0, Row, Column, Angle, HomMat2D)
        
        * 根据旋转矩阵进行仿射变换(为了显示用)
        affine_trans_contour_xld(ModelContours, ContoursAffineTrans, HomMat2D)
        gen_rectangle2(Rectangle, Row, Column, Angle, 200, 100)
        
        vector_angle_to_rigid(Row1, Column1, 0, Row, Column, Angle, HomMat2D1)
        affine_trans_region(ROI_1, RegionAffineTrans1, HomMat2D1, 'nearest_neighbor')
        affine_trans_region(ROI_2, RegionAffineTrans2, HomMat2D1, 'nearest_neighbor')
        affine_trans_region(ROI_3, RegionAffineTrans3, HomMat2D1, 'nearest_neighbor')
        affine_trans_region(ROI_4, RegionAffineTrans4, HomMat2D1, 'nearest_neighbor')
        affine_trans_region(ROI_5, RegionAffineTrans5, HomMat2D1, 'nearest_neighbor')
    endif
endwhile
close_framegrabber (AcqHandle)

 看看界面截图

标签:ROI,--,auto,affine,Halcon,参数,gen,模板
来源: https://www.cnblogs.com/guligedong-rose/p/16467277.html