正运动技术
正运动技术

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

The value of Zmotion is to bring customers more success!

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

Technical support

技术分享

【机器视觉运动控制一体机小课堂】三分钟进行轮廓提取

背景
轮廓提取是基于边缘轮廓的算法,可用于需要提取工件轮廓信息后进行加工处理的检测加工项目,可广泛应用于点胶、激光切割、工件打磨等需要提取工件轮廓的领域。

轮廓是一种能存储一系列点集的数据结构,可分为像素轮廓或亚像素轮廓。 轮廓指令只能提取特定属性的轮廓。

提取图像的边缘信息时会不可避免地提取到一些非检测目标的干扰轮廓信息,如未闭合的边缘线条、毛刺等轮廓信息。

此时我们需要使用图像预处理或者设置一些过滤条件来过滤一些干扰噪点。 因此我们还需要根据目标的轮廓特点过滤掉杂散的 冗余边缘或进行边缘的修补等操作去获取我们实际所需的目标轮廓信息。

轮廓提取效果如下图所示:

企业微信截图_20220705170603.png

将目标轮廓提取完成之后,我们就可以提取轮廓点集位置信息进行工件相 关的轮廓随动加工处理。

注意:提取图像目标轮廓前需确保图像内目标轮廓的对比度明显,才能保证轮廓提取的精度。

在上期课程中,我们讲述了如何使用 VPLC系列机器视觉运动控制一体机进行 图像拼接 的课程。 本期课程正运动小助手给大家分享一下 VPLC系列机器视觉运动控制一体机进行 轮廓提取 的课程。



教学视频:






01
VPLC控制器


(一)VPLC516E构架图

企业微信截图_20220707114440.png

(二)课前准备
1.电脑一台,安装ZDevelop3.10以上版本软件
2.VPLC516E一台
3.24V直流电源一个
4.网线一根
5.WinSCP软件
6.电线若干


02
课程主要使用的指令


1.ZV_AUTOTHRESH -- 自动二值化

ZV_AUTOTHRESH(src,dst,tab_thresh)
描述:

使用OTSU算法计算最佳阈值并对图像进行自动二值化处理。

参数:

src:ZVOBJECT类型,源图像,单通道图像

dst:ZVOBJECT类型,二值图像

tab_thresh:TABLE索引,输出参数,使用的分割阈值

2.ZV_CONTGEN -- 生成轮廓

ZV_CONTGEN(img,contlist,mode,appro)
描述:

提取二值图像的边缘轮廓。

参数:

img:ZVOBJECT类型,源二值图像

contlist:ZVOBJECT类型,提取到的轮廓序列,列表类型,轮廓序列中包含多个轮廓,每个轮廓由一系列的点集构成

mode:轮廓提取方式:0-外轮廓即被某轮廓封闭包围的所有轮廓将不被提取,1-所有轮廓

appro:轮廓表示方式:0-点集方式即轮廓用一系列的点集表示,1-精简方式即轮廓用一系列的点集表示但水平、垂直、对角线将被精简成两个端点,建议使用1

3.ZV_CONTFILTER -- 过滤

ZV_CONTFILTER(contlist,feature,min,max,is_invert)
描述:

将轮廓序列中的轮廓以某种特征进行过滤,保留满足特征要求的轮廓。

参数:

contlist:ZVOBJECT类型,待过滤的轮廓序列,列表类型

feature:轮廓特征类型,参考排序,可取值-1,则按照顺序取序号在范围内的轮廓

min:特征值的下限

max:特征值的上限

is_invert:是否反向选择,为1则保留不在范围内的轮廓,默认值为0

4.ZV_CONTSORT -- 排序

ZV_CONTSORT(contlist,feature,is_inc)
描述

对轮廓序列按照特征feature进行排序。

参数:

contlist:ZVOBJECT类型,待排序的轮廓序列,列表类型

feature:排序的特征类型,如下表所示

is_inc:指定是否升序,为0则降序排列,否则升序

轮廓特征如下:

企业微信截图_20220707114511.png

5.ZV_CONTCOUNT -- 轮廓点数量

ZV_CONTCOUNT(contour,tab_count)
描述

获取轮廓中点的数量,支持在线命令,使用无需传入TABLE索引参数。

参数:

contour:ZVOBJECT类型,轮廓

tab_count:TABLE索引,输出参数,点的数量

6.ZV_CONTGETPT -- 轮廓点遍历

ZV_CONTGETPT(contour,id,tab_pt)
描述:

获取轮廓中的指定点坐标。

参数:

contour:ZVOBJECT类型,轮廓

id:指定点的id,第一个点的id为0

tab_pt:TABLE索引,输出参数,获取的点坐标x,y

7.ZV_CONTLIST -- 轮廓绘制

ZV_CONTLIST(img,contlist,color,auto_color)

描述:

绘制轮廓序列。

参数:

img:ZVOBJECT类型,绘制的目标图像

contlist:ZVOBJECT类型,轮廓序列

color:绘制序列的颜色,img为彩色图像时可用ZV_COLOR(r,g,b)生成颜色,img为黑白图像时颜色取值为[0,255],如黑色0,灰色128,白色255

auto_color:是否自动设置颜色,为1则自动设置不同的颜色,color将不再使用



03
软件实现


1. 打开ZDevelop软件:新建名称为“轮廓提取.zpj”项目→新建“HMI”文件→新建“Basic.bas”文件 (用于编写界面响应函数、并开启HMI自动运行任务) →新建“相机采集.bas”文件 (用于实现相机采集功能 )→新建“初始化.bas”文件 (用于初始化测量参数) →文件添加到项目。

企业微信截图_20220707114524.png

2.设计HMI主界面,并关联它的控件变量。

企业微信截图_20220707114540.png

3.编写实现对图像进行轮廓提取的执行函数。


'轮廓提取执行程序

GLOBAL sub main()

   LOCAL dot_count,i

   DMSET TABLE(10000,10000,0) 

   ZV_IMGCOPY(GrabImg,testImg)    '复制图像

   ZV_AUTOTHRESH(testImg,testImg,0)  '自动二值化  

   ZV_CONTGEN(testImg,contlist,outline_mode,outline_appro)    '生成轮廓

   ZV_CONTFILTER(contlist,filt_param(0),filt_param(1),filt_param(2),0)'对轮廓列表中的轮廓进行过滤

   ZV_GRAYTORGB(GrabImg,ResImg)    '灰度图转彩色图 

   ZV_CONTSORT(contlist,filt_param(0),0)'对轮廓以周长特征进行降序排序

   ZV_LISTGET(contlist,con,0)'获取第0个轮廓

   dot_count = ZV_CONTCOUNT(con)'获取轮廓点数量

   TABLE(10)=dot_count  

   FOR i = 0 TO dot_count-1

      ZV_CONTGETPT(con,i,10000+i*2)'轮廓中的点坐标放到TABLE(0)中

   NEXT 

   ZV_CONTLIST(ResImg,contlist,zv_color(0,255,0))    '绘制轮廓序列

   ZV_LATCH(ResImg,1)

ENDSUB



   4.效果演示。


完整代码获取地址

D87D5B67FA5F497C983AD134D2846A11.png

本次,正运动技术【机器视觉运动控制一体机小课堂】 三分钟 进行轮廓提取 ,就分享到这里。

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

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。
  
  正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位等等。


邮箱留言

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

在线咨询