ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-07-11 18:04:02  阅读:234  来源: 互联网

标签:ROI -- auto affine Halcon 参数 gen 模板


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

我们以一张名片来举例子,我们以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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有