工控网首页
>

应用设计

>

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

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

image.png

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

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

一检测原理

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

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

image.png

二应用场景

1.多目标定位

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

2.多目标位置跟随

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

三软件演示

image.png

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

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

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

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

image.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.关联主运行界面值显示控件变量。

image.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

image.png

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

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

GLOBAL SUB btn_DownPage()

    id=id+1

    if(id=12) then 

        id=11

    endif  

  

END SUB

image.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

(二)仿真演示效果

image.png

image.pngimage.png

image.png

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

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

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

审核编辑(
王静
)
投诉建议

提交

查看更多评论
其他资讯

查看更多

正运动技术自主研发运动控制实时软核MotionRT7软件安装流程

Windows实时运动控制软核(六):LOCAL高速接口测试之Matlab

Windows实时运动控制软核(五):LOCAL高速接口测试之VC6.0

Windows实时运动控制软核(四):LOCAL高速接口测试之VB.NET

Windows实时运动控制软核(三):LOCAL高速接口测试之C++