近年来随着科学技术的进步,作为21世纪三大尖端技术之一的人工智能得到飞速发展。而视觉技术作为人工智能领域的一个分支,也随之发展,各行各业也渐渐开始进行技术变革。一些传统的需要人工检测的行业,开始逐渐采用自动化的智能检测方式。比如,使用相机代替人眼去观察检测的对象;采用程序算法来模拟人的意识进行判断,针对图像信息进行分析推理,得到图像处理结果。
正运动技术将携带自主研发的一款VPLC视觉运动控制器全力支持机器视觉自动化检测行业的发展,为各行各业的专业人士提供机器视觉+运动控制的解决方案。
相机拍摄图像时,图像发射的光通过镜头在CCD 上成像,光到达 CCD 的某个像素时,将根据光的强度产生相应的电荷将该电荷的大小读取为电信号,即可获得各像素上光的强度(即像素浓度值,也可以叫灰度值)。
机器视觉的工作原理是使用光学系统和图像处理设备来模拟人类视觉功能,从采集到的目标图像中提取信息并进行处理,获取所需的检测对象信息,并加以分析和判断,将最终结果告知给硬件设备进行机器设备,以指引机器设备的下一步动作。
一个完整的机器视觉系统由多个模块组成,一般包括光学系统(光源、镜头、相机)、图像处理系统, 交互界面等。
对于机器视觉项目来说,检测实现的前提就是图像输入,而图像输入离不开工业相机。相机是一种将光信号转化为数字信号或模拟信号的工具,是采集图像的重要设备,是机器视觉系统中的核心部件。
相机广泛应用于各个领域,尤其是用于生产监控、测量任务和质量控制等。工业数字相机通常比常规的标准数字相机更加坚固耐用。工业生产的环境决定了工业相机必须能够应对各种复杂多变的外部影响,如应用于高温、高湿、粉尘等恶劣环境。
1.分辨率
分辨率代表镜头记录物体细节的能力,以每毫米能够分辨黑白对线的数量为计量单位,“线对/毫米(lp/mm)”,分辨率越高的成像越清晰。我们常说的显示分辨率是屏幕图像的精密度,指图形所能显示像素有多少。分辨率高带来的图像数据量就大,一般分辨率大的相机,帧率一般都不会太高,常见相机像素分辨率如下:
640x480=307200(30万)
1280×1024=1310720(130万)
1600×1200=1920000(200万)
2560×1920=4915200(500万)
3672×2754=10112688(1000万)
2.像素深度(Pixel Depth)
即每像素数据的位数,一般常用的是8Bit,一幅彩色图像的每个像素用R,G,B三个分量表示,若每个分量用8位,那么一个像素共用24位表示,就说像素的深度为24,每个像素可以是224种颜色中的一种。在这个意义上,往往把像素深度说成是图像深度。表示一个像素的位数越多,它能表达的颜色数目就越多,而它的像素深度就越深。
3. 最大帧率(Frame Rate)/行频(Line Rate)
相机采集传输图像的速率,对于面阵相机一般为每秒采集的帧数(Frames/Sec.),对于线阵相机为每秒采集的行数(Lines/Sec.)。
4. 曝光方式(Exposure)和快门速度(Shutter)
对于线阵相机都是逐行曝光的方式,可以选择固定行频和外触发同步的采集方式,曝光时间可以与行周期一致,也可以设定一个固定的时间;面阵相机有帧曝光、场曝光和滚动行曝光等几种常见方式,数字相机一般都提供外触发采图的功能。快门速度一般可到10微秒,高速相机还可以更快。
5. 光谱响应特性(Spectral Range)
是指该像元传感器对不同光波的敏感特性,一般响应范围是350nm-1000nm,一些相机在靶面前加了一个滤镜,滤除红外光线,如果系统需要对红外感光时可去掉该滤镜。
6.接口类型
有Camera Link接口,以太网接口,1394接口、USB接口等。
正运动技术的VPLC516E是一款内嵌开放式Linux系统的视觉运动控制器,是国内首款嵌入式运动控制+机器视觉于一身的一体机。图片
ZDevelop是正运动技术自主开发的调试软件,通过它用户能够很容易的对控制器进行配置快速开发应用程序以及对运动控制器正在运行的程序进行实时调试,ZDevelop软件可通过使用串口或网口连接控制器,程序下载到控制器时可选ROM掉电保存下载或RAM掉电不保存下载方式,掉电保存的程序可以直接脱机运行。
支持四种编程方式,分别为Zvision、ZBasic、ZPLC梯形图、ZHMI组态界面,使用ZDevelop软件编写的程序可以下载到正运动控制器里,也可以在PC平台仿真运行。
ZVision Basic是正运动技术自主开发的视觉编程语言,通过视觉指令在ZDevelop软件中进行视觉程序的开发,编写完项目程序后可直接下载入VPLC控制器进行操作。
ZVision Basic语言具有标准的命名规则,简单易懂,能够用简短的视觉指令就能完成视觉功能的实现,目前支持视觉定位,视觉测量,数据码识别,Blob块状物检测,缺陷检测等多种视觉算子。
下面介绍一个简单的图像处理的例子。首先在ZDevelop中利用图像采集接口,使用网口相机实时拍摄图像。采集到图像后对图像进行简单的阈值分割处理,将有物体的区域标记出来,进行对图像中的区域统计零件数量
(1)首先在ZDevelop新建hmi界面,创建一个图片元件窗口,设置相关的锁存通道编号。
(2)采集图像,如果需要连续地采集图像,要建立图像采集循环在循环中使用。
(3)简单处理图像。获取到图像保存到GrabImg变量中,接下来根据图像进一步处理,接下来根据图像进一步处理,如二值化处理、膨胀、腐蚀、开闭运算等处理,以获取到清晰的图像质量为主。本例中相机使用的是黑白相机,如果使用的是彩色相机则需要通过ZV_RGBTOGRAY将原始图像改为单通道的灰度图像,开始生成整个图像的区域,对整个图像的区域进行二值处理,将区域中黑色部分提取出来存放到区域变量中。
(4)接着使用ZV_RECONNECT指令计算生成连通区域列表,通过ZV_REFILTER指令将列表中面积合适的区域提取出来,排除干扰的小杂点,提取出每个区域并且进行绘制ZV_REGION将区域绘制出来。
(5)零件数量获取使用ZV_LISTCOUNT,将区域列表中的数量获取到寄存器TABLE 数组TABLE(0)中。
ZVOBJECT ShowImg,ColorGrabImg,Region,MASk,RegionConnecte,BinaryImage,Region_Id
DIM Count,ShowString(100),File_Name(100)
Count=0
while 1
if Count=6 then
Count=0
end if
File_Name=TOSTR(Count,1,0)+'.bmp'
ZV_READIMAGE(ShowImg,File_Name,1) '读取本地图像
ZV_LATCH(ShowImg,0) '显示图像
ZV_REGENFULLIMG(ShowImg,Mask) '全图像区域处理
ZV_RETHRESH(ShowImg,Mask,Region,0,128) '对Mask 指定区域内图像进行二值化,生成二值化后的区域
ZV_REFILLUP(Region,Region) '孔洞填充,去除零件中的白色部分
ZV_RECONNECT(Region,RegionConnecte) '计算区域的连通区域
ZV_REFILTER(RegionConnecte,0,1500,15000,0) '对区域列表中的区域进行过滤,保留面积在1500到15000的区域,面积不在此范围的区域将被过滤
ZV_LISTCOUNT(RegionConnecte,0)'获取列表中的连通区域的数量
ZV_GRAYTORGB(ShowImg,ShowImg) '灰度图像转RGB图像
DELAY(100)
PRINT '零件数量为:'tostr(TABLE(0),1,0) '打印输出结果
for i=0 to TABLE(0)-1 '遍历输出图像显示
ZV_IMGCOPY(ShowImg,ColorGrabImg)
ShowString=TOSTR(i+1,1,0)
ZV_LISTGET(RegionConnecte,Region_Id,i)'获取列表中序号为0的元素
ZV_REGION(ColorGrabImg,Region_Id,0,zv_color(0,0,255)) '对每个区域进行绘制红色
ZV_TEXT(ColorGrabImg,'零件统计个数:'ShowString,10,10,120,ZV_COLOR(255,255,0))
ZV_LATCH(ColorGrabImg,1)
ZV_CLEAR(ColorGrabImg)
DELAY(50)
next
DELAY(100)
Count=Count+1
wend