背景
不同的模板匹配方法,其操作步骤也不一样,其生成模板的方式也有不同的地方,在之前的课程中我们讲述了基于形状的模板匹配,本期课程我们去了解一下基于灰度值的模板匹配。
基于灰度值的模板匹配适用于图像内灰度变化比较稳定,噪声比较少,且灰度差异比较明显的检测目标。 这是一种不太推荐的匹配方法,因为该方法复杂度高,一次只能检测一个目标,耗时,且对光照和尺寸变化十分敏感。
如果在视觉检测项目过程中,遇到采集到的图像特征一致性差的情况下。我们可通过灰度匹配指令将待检测目标的灰度值特征框选出来。首先去创建一个灰度模板,然后在图像中去搜索与灰度模板的相似度最接近的区域,并找出相似度达到最大,即匹配到该模板。
在上期课程中,我们讲述了如何使用VPLC系列机器视觉运动控制一体机进行进行ROI创建的课程。本期课程正运动小助手给大家分享一下VPLC系列机器视觉运动控制一体机对图像进行灰度匹配的课程。
01VPLC控制器
(一)VPLC516E构架图
(二)课前准备
1.电脑一台,安装ZDevelop3.10以上版本软件
2.VPLC516E一台
3.24V直流电源一个
4.网线一根
5.WinSCP软件
6.电线若干
02课程主要使用的指令
1. ZV_FASTTEMPL -- 快速简单匹配
ZV_FASTTEMPL(img,modImg,tab_rst[,method = 0])
描述:
获取最佳匹配位置的整型值 x、y 坐标。
参数:
img:ZVOBJECT 类型,待匹配图像
modImg:ZVOBJECT 类型,模板图像
tab_rst:TABLE 索引,匹配结果,输出参数,依次为 x、y 坐标
Method:匹配算法
2.ZV_BESTTEMPL -- 灰度模板匹配
ZV_BESTTEMPL(img,modImg,min_score,tab_rst[,is_sub_pix=0,polar=0])
描述:
获取最佳匹配位置,支持亚像素精度。
参数:
img:ZVOBJECT 类型,待匹配图像,图片为单通道图片
modImg:ZVOBJECT 类型,模板图像
min_score:最低匹配分值
tab_rst:TABLE 索引,匹配结果,输出参数,依次为 score、x、y
is_sub_pix:是否子像素精度插值,0-否,1-是
polar:匹配极性模式
3. ZV_MULTITEMPL -- 灰度模板匹配
ZV_MULTITEMPL(img,modImg,mat_rst,min_score[,nums=0,min_dist=0,
is_sub_pix=0,polar=0])
描述:
多目标灰度匹配,在搜索图像中查找与模板匹配的目标,返回分值最高的前nums个匹配中分值大于min_score的结果。
参数 :
img:ZVOBJECT 类型,待匹配图像
modImg:ZVOBJECT 类型,匹配模板图像
mat_rst:ZVOBJECT 类型,匹配结果,矩阵类型,N 行 3 列,每行一
个结果,结果顺序依次为分数 score、x 坐标和 y 坐标
min_score:最低匹配分值
nums:最大匹配数量,取分值最高的前 nums 个结果,为 0 则取全部
结果
min_dist:两个匹配结果的最小距离,大于等于 0,等于 0 则自动选
择距离
is_sub_pix:是否使用子像素精度插值
polar:匹配极性
→本期课程就使用第三条灰度匹配指令做多目标灰度匹配编写示例代码。
03软件实现
1. 打开ZDevelop软件:新建名称为“基于灰度匹配的视觉定位.zpj”项目→新建“HMI”文件→新建“主函数.bas”文件 (用于编写界面响应函数、并开启HMI自动运行任务) →新建“相机采集.bas”文件 (用于实现相机采集功能) →新建“绘图刷新.bas”文件 (用于更新绘制ROI数据) →新建“初始化.bas”文件 (用于初始化测量参数) →文件添加到项目。
2.设计HMI主界面和创建模板,并关联它的控件变量。
主界面
创建模板界面
3. 编写实现对图像进行灰度匹配的执行函数。
'灰度匹配
GLOBAL SUB btn_match()
if ga_cutModel=0 THEN
?"先截取模板图像"
RETURN
endif
ticks=0
GLOBAL match_rst(500)
ZV_GAUSSBLUR(grabImg, sImg, 3)
ZV_MULTITEMPL(sImg,subImg,ga_match_rst,ga_match_param(0), ga_match_param(3),ga_match_param(4),ga_match_param(1),ga_match_param(2))
ZV_MATINFO(ga_match_rst, 0) '获取矩阵结果信息。并存放到起始地址为0的table数组
ZV_GRAYTORGB(sImg, colorImg) '灰度图转换到RGB图
if TABLE(0) > 0 then '如果匹配到目标
local rowr
for rowr = 0 to TABLE(0)-1
'获取match_rst矩阵中第rowr行的数据存放到起始地址为3的table数组中,table最大长度5
ZV_MATGETROW(ga_match_rst, rowr, 3, 3)
match_rst(rowr*3+0) = TABLE(3) '将匹配结果赋值给定义的结果变量,显示到界面
match_rst(rowr*3+1) = TABLE(4)
match_rst(rowr*3+2) = TABLE(5)
match_rst(rowr*3+3) = TABLE(6)
match_rst(rowr*3+4) = TABLE(7)
'在匹配目标上绘制对应的编号,以便和输出结果信息相对应
ZV_MARKER(colorImg,TABLE(4),TABLE(5),0,60,ZV_COLOR(255,0,0))'绘制十字
next
endif
ZV_LATCH(colorImg, 0) '显示匹配结果图像
ga_match_time = abs(TICKS) '计算匹配消耗时间
ENDSUB
本次,正运动技术【机器 视觉运动控制 一体机小课堂】三分钟进行灰度匹配,就分享到这里。
审核编辑:汤梓红
评论
查看更多