正运动技术
正运动技术

协助伙伴成功,是我们的价值所在

The value of Zmotion is to bring customers more success!

首页 / 支持与服务 / 技术分享

Technical support

技术分享

机器视觉运动控制一体机应用例程-多目标形状匹配

  

  1.png

  

  我们在前面的基于形状匹配的视觉定位课程中,讲述了形状匹配的基本原理、应用场景以及使用ZDevelop软件实现形状匹配功能的方法。但在课程演示的程序示例中,只输出了一个匹配目标的结果,本节课程我们将对该程序的功能进行扩展,讲解如何实现多目标形状匹配功能。

  基于形状匹配的视觉定位课程内容,可关注“正运动小助手”公众号,查看相关推文:

  《VPLC系列机器视觉运动控制一体机快速入门(三)》

  《教学视频:机器视觉运动控制一体机应用例程-多目标形状匹配》

  一 检测原理

  

  多目标形状匹配的检测原理和形状匹配的检测原理是一致的。

  形状匹配算法是基于特征相关的匹配算法,其核心思想就是将模板图像在待检测图像中滑窗搜索,计算出模板图像在待匹配图像中各位置的相似度量值。

  

  1.png

  

  二 应用场景

  

  1.多目标定位

  检测视野上有(随机)多个固定形状特征的待测目标,需要输出目标的位置信息。

  2.多目标位置跟随

  当需要检测的多个目标位置不固定时,一些检测功能的ROI位置无法确定如检测直线、检测圆形等,我们可以利用检测目标周边有固定距离的特征进行位置跟随。

  三 软件演示

  

  2.png

  

  (一)多目标形状匹配功能实例演示

  检测要求:在“基于形状匹配的视觉定位”的程序上增加获取多个目标结果的功能。

  1.打开ZDevelop软件:点击[文件]→[打开项目]→选择“基于形状匹配的视觉定位”项目。

  2.修改设计主运行界面。

  

  3.png

  

  3.在global_variable.bas文件中修改并增加定义的全局变量。

          增加定义全局变量:

          '匹配结果,score、x、y、angle、scale

          GLOBAL DIM d_match_rst(500)

          GLOBAL DIM id

          id=0

  4.在InitLocator.bas文件中初始化增加的全局变量。

          增加初始化结果变量:

          '初始化匹配定位结果

          for i=0 to 499

          d_match_rst(i) = 0

          next

  5.关联主运行界面值显示控件变量。

  

  4.png

  

  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 SUB

  7.在main.bas文件中添加主运行界面按下【上一页】按钮时响应的函数并关联动作函数名。

  '主界面点击上一页按钮时响应的函数

      GLOBAL SUB btn_UpPage()

      id=id-1 'id变量自减1

      if id<0 then '如果id变量<0

      id =0 'id=0

      endif

  END SUB

  

  5.png

  

  8.在main.bas文件中添加主运行界面按下【下一页】按钮时响应的函数并关联动作函数名。

      '主界面点击下一页按钮时响应的函数

          GLOBAL SUB btn_DownPage()

          id=id+1

          if(id=12) then

          id=11

          endif

      END SUB

  

  6.png

  

  9.在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

  (二)仿真演示效果

  

  7.png

  

  8.png

  

  

  本次,正运动技术VPLC系列机器视觉运动控制一体机应用例程(一)——多目标形状匹配功能,就分享到这里。

  更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

  本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

  

  9.png

邮箱留言

Copyright © 2013 正运动技术有限公司 Design by Zmotion 版权所有   粤ICP备13037187号    Powered by www.zmotion.com.cn 运动控制器-运动控制卡

在线咨询