机器视觉运动控制一体机应用例程-多目标形状匹配.docx
机器视觉运动控制一体机应用例程-多目标形状匹配 我们在前面的基于形状匹配的视觉定位课程中,讲述了形状匹配的基本原理、应用场景以及使用ZDevelop软件实现形状匹配功能的方法。但在课程演示的程序示例中,只输出了一个匹配目标的结果,本节课程我们将对该程序的功能进行扩展,讲解如何实现多目标形状匹配功能。 基于形状匹配的视觉定位课程内容,可关注“正运动小助手”公众号,查看相关推文: 一检测原理 多目标形状匹配的检测原理和形状匹配的检测原理是一致的。 形状匹配算法是基于特征相关的匹配算法,其核心思想就是将模板图像在待检测图像中滑窗搜索,计算出模板图像在待匹配图像中各位置的相似度量值。 二应用场景 1.多目标定位检测视野上有(随机)多个固定形状特征的待测目标,需要输出目标的位置信息。2.多目标位置跟随当需要检测的多个目标位置不固定时,一些检测功能的ROI位置无法确定如检测直线、检测圆形等,我们可以利用检测目标周边有固定距离的特征进行位置跟随。 三软件演示 (一)多目标形状匹配功能实例演示检测要求:在“基于形状匹配的视觉定位”的程序上增加获取多个目标结果的功能。 1.打开ZDevelop软件:点击文件打开项目选择“基于形状匹配的视觉定位”项目。 2.修改设计主运行界面。 3.在global_variable.bas文件中修改并增加定义的全局变量。 增加定义全局变量:'匹配结果,score、x、y、angle、scaleGLOBAL DIM d_match_rst(500) GLOBAL DIM idid=04.在InitLocator.bas文件中初始化增加的全局变量。 增加初始化结果变量: '初始化匹配定位结果 for i=0 to 499 d_match_rst(i) = 0 next5.关联主运行界面值显示控件变量。 6.在camera.bas文件中修改主运行界面按下【单次采集】按钮响应的函数。 '主界面按下单次采集按钮执行的函数GLOBAL SUB btn_grab() '如果d_use_imgfile=1时使用读取本地图片功能,使用控制器时请将此部分代码注释掉 if (d_use_imgfile=1) then if(d_index=3) then d_index=0 endif File_Name="多目标匹配"+TOSTR(d_index,1,0)+".bmp" '.flash多目标匹配目录下的图片所在的路径名称 ZV_IMGREAD(grabImg,File_Name,0) ZV_LATCH(grabImg, 0) d_index=d_index+1 return endif ''读取本地图片功能结束 '如果相机数量为0,提示先扫描相机,并退出子函数不往下执行 if cam_num = 0 then ?"请先扫描相机!" return endif CAM_SETPARAM("TriggerSoftware", 0) '发送触发指令 CAM_GET(grabImg, 0) '获取一帧图像存放到grabImg变量中 ZV_LATCH(grabImg, 0) '将图像显示到锁存通道0中END SUB7.在main.bas文件中添加主运行界面按下【上一页】按钮时响应的函数并关联动作函数名。 '主界面点击上一页按钮时响应的函数GLOBAL SUB btn_UpPage() id=id-1 'id变量自减1 if id<0 then '如果id变量<0 id =0 'id=0 endifEND SUB 8.在main.bas文件中添加主运行界面按下【下一页】按钮时响应的函数并关联动作函数名。 '主界面点击下一页按钮时响应的函数GLOBAL SUB btn_DownPage() id=id+1 if(id=12) then id=11 endifEND SUB9.在main.bas文件中修改创建模板界面按下【测试】按钮时响应的函数。 '创建模板界面按下测试按钮时响应的函数GLOBAL SUB btn_loc_test() if (d_is_creModel = 0) then '如果创建模板标志=0 ?"未创建模板!" '提示未创建模板毛病返回子函数不往下执行 return endif '开始匹配 TICKS = 0 '开始计时 for i=0 to 499 d_match_rst(i) = 0 next table(0)=0 ZVOBJECT match_rst, sImg, colorImg '对图像进行3*3高斯平滑处理,处理后的图像输出到sImg变量中 ZV_GAUSSBLUR(grabImg, sImg, 3) '根据模板子图像和搜索参数进行目标匹配,并将匹配结果存放到match_rst矩阵中 ZV_SHAPEFIND(s_mod, sImg, match_rst, d_match_param(0), d_match_param(1), d_match_param(2), d_match_param(3), d_match_param(4), d_match_param(5), d_match_param(6) ZV_MATINFO(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(match_rst, rowr, 5, 3) ' d_match_rst(rowr*5+0) = TABLE(3) '将匹配结果赋值给定义的结果变量,显示到界面 d_match_rst(rowr*5+1) = TABLE(4) d_match_rst(rowr*5+2) = TABLE(5) d_match_rst(rowr*5+3) = TABLE(6) d_match_rst(rowr*5+4) = TABLE(7) '计算刚性变换矩阵 ZV_GETRIGIDVECTOR(mat_rigid1, 0, 0, 0, TABLE(4), TABLE(5), TABLE(6) '对轮廓或轮廓序列进行仿射变换 ZV_CONTAFFINE(contlist1, mat_rigid1, tsContlist1) '在colorSubImg图像上绘制绿色的轮廓序列 ZV_CONTLIST(colorImg, tsContlist1, ZV_COLOR(0, 255, 0), 0) '在匹配目标上绘制对应的编号,以便和输出结果信息相对应 ZV_TEXT(colorImg, TOSTR(rowr+1,1,0),TABLE(4),TABLE(5),60,ZV_COLOR(0, 255, 0) ' next else '未匹配到目标时,将结果赋值为-1 for i=0 to 499 d_match_rst(i) = -1 next endif d_match_time = abs(TICKS) '计算匹配消耗时间 ZV_LATCH(colorImg, 0)'显示匹配结果图像END SUB(二)仿真演示效果 本次,正运动技术VPLC系列机器视觉运动控制一体机应用例程(一)多目标形状匹配功能,就分享到这里。 更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。 本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。