图像处理在平面零件分拣控制中的应用
2015-06-26江燕王敬东
江燕,王敬东
(1.应天职业技术学院 机电与信息工程系,江苏南京210033;2.南京航空航天大学自动化学院,江苏南京210016)
1 引言
随着计算机技术及应用的飞速发展,PLC的应用越来越广泛。PLC有很强的现场控制能力,广泛应用于工业生产线,配合各类传感器可以检测出零件的材质和大小,并对零件进行分类。但因其没有视觉,对这类材质相同且外形相似的零件,PLC 表现出力不从心。PLC 本身没有视觉,也无法对图像进行匹配和识别。但是如果PLC能借助于Matlab强大的图像处理能力,对PLC控制系统是锦上添花。简言之,如果能将两者结合起来应用于生产实际中,那么可以充分发挥各自的优势,对实际被控过程进行更好地控制。提高企业的生产效率和企业的核心竞争力,为企业带来可观的经济效益。
2 主要算法
本文总体设计思路:系统初始化后,PLC 控制传送运行,待零件已到摄像头下,PLC 控制传送带暂停;Matlab 收到零件到位信息,启动摄像头拍照,并将图像与样本图像进行匹配识别,然后将识别结果发送给MCGS;MCGS 收到信息后,PLC 控制传送带运行,根据PLC 识别结果信息,控制相应的电磁阀驱动气缸动作,将零件推入分类槽,结束本工作周期任务,PLC 控制传送带运行,等待下个零件的到来。其中主要的研究内容是Matlab的图像处理、DDE通道建立和PLC分拣控制算法。
2.1 图像处理算法
本文利用Matlab 的图像处理功能,获取待检零件图像,并完成待检零件图像与样本库零件图像的一一比对,继而得出识别结果。如果样本库中有与之匹配的图像,则返回该样本库零件的编号;如果样本库中无与之匹配的图像,则认为该待检零件为废品,返回废品标志。借助Windows 操作系统提供的VFW 库函数控制USB 摄像头获取零件图像后,具体的图像处理有如下4个方面。
1)利用rgb2gray函数[1]获得零件图像的灰度图,再利用histeq 函数获得零件图像的均衡化直方图,统计均衡化直方图中的“1”的个数(用a 表示),与样本库零件图像的均衡化直方图中的“1”的个数(用b表示)的比值为
若L很接近1,表示待检图与样本图有着极相似的均衡化直方图,然而我们知道,每幅图都有一个跟它对应的直方图(如图1 所示),但是不同图的直方图有可能是一样的(如图2所示)。即L很接近1不是两图像一致的充分条件[2],而只是必要条件。如果待检零件先与样本库图像计算L 值,将L值最接近1的那个样本图作为准匹配图,那么才锁定该样本图进行更深入的比较。这样可以大大减少待测图像与样本库图像的比对和匹配时间,尤其是样本库零件数量较多的情况。
图2 有相同灰度图的不同图像Fig.2 Different images of the same image
2)为了去除或降低光照等干扰因素对零件图像质量的影响,对待检零件图进行预处理[3],得到比较清晰,准确的零件边缘,防止由于这些干扰因素的存在而导致误判。
利用Matlab对待检零件图进行边缘提取[4]、膨胀、细化、去毛刺等预处理,得到比较清晰,准确的零件边缘。如图3所示。
图3 零件图像预处理Fig.3 Parts image preprocessing
3)通过bwlabel 函数对零件图像进行区域标记[4],统计出孔洞个数,如果待检零件孔洞数与准样本一致,再利用sum 函数计算标记为1 的区域(标记1 为最大的区域)中像素点的个数,如果最长边缘像素点数也很接近,可以认为待检零件和准样本零件有很相似的外轮廓。
bwlabel函数的调用格式如下:
[L,num]=bwlabel(BW,n)
其中,返回一个和BW大小相同的L矩阵,包含了标记了BW 中每个连通区域的类别标签,这些标签的值为1,2,num(连通区域的个数)。n的值为4 或8,表示是按4 连通寻找区域,还是8 连通寻找,默认为8[5]。num返回的就是BW中连通区域的个数。如分别利用4连通、8连通对矩阵a进行标记,标记结果如图4 所示。用4 连通标记中,把2个孔洞当5个标记了;用8连通标记中,正确的标记为2个孔洞。由于要检测的是零件孔洞的个数,因而应该用8 连通来标记区域。用8 连通标记零件区域的效果如表1所列。从表1中可发现,8连通标记的正确率很高。6个测试零件孔洞的标记都正确无误。
图4 图像矩阵的连通标记Fig.4 Image matrix of connected component labeling
表1 零件孔洞个数的标记Tab.1 The mark hole number of parts
4)通过统计零件边缘的总像素点来判断其内部空洞的形状。由于图像边缘图像为二值图像,“0”为背景,“1”为边缘像素点,因而可以利用sum 函数统计“1”(边缘像素点)的个数。如果待检零件边缘像素点与准样本零件相等或很接近,则可以认为它们空洞形状很相似。
5)通过上面的比对,已经能确定待检零件与准样本有着很相似的外轮廓和相同数目的空洞。但是还不能确定各个空洞的位置是否一致。可以通过mean函数求取零件各个标记的区域的质心坐标[6],但是由于图像有可能存在位移或旋转,这些都会导致质心坐标的变化,所以用比对两幅图质心的坐标来判断是否为相同零件是不可行的。如果通过计算各个区域质心之间的距离值与准样本零件的很接近,那么则认为待检零件确实与该准样本零件是同一种零件。
在Matlab命令窗口输入以下代码,可获得零件图像的各个孔洞的质心,如图5所示。
i1=im2bw(i);
g=~i1;
[L,num]=bwlabel(g,8);
for i=1:num
[r,c]=find(L==i);
rchar=mean(r);
cchar=mean(c);
R(1,i)=rchar;
C(1,i)=cchar;
end
图5 测试图形及质心坐标Fig.5 The test pattern and the centroid coordinates
有了各质心的坐标,就可以用两点的距离公式来计算任意2个质心的距离。
设A(x1,y1),B(x2,y2),则A,B两点的距离为
取两幅空洞个数相同,且空洞形状相同但相对位置有差别的测试图形,得到的对比数据如表2所示。
表2 测试图形的质心距离Tab.2 The centroid distance of test pattern
从表2 可以发现空洞的位置变化,计算出来的质心位置和各质心距离存在较大差别,因此,如果待检零件的各质心的距离矩阵存在着差别,那么说明零件各孔洞位置存在不完全一致的情况。而如果待检零件的各质心的距离矩阵一致或存在微小的差别,就可以断定待检零件与准样本零件是同一种零件。
2.2 DDE通道建立
DDE(dynamic data exchange,DDE)是一种动态数据交换机制,可完成两个应用程序之间的数据交换。本文利用DDE 实现分拣系统中Matlab 与PLC 的数据通信。PLC 通过DDE 发送“零件到位”信息给Matlab;Matlab 则将图像处理结果“1”,“2”,“3”,“4”发送给PLC,实时完成待检零件的分拣任务。
Matlab 与PLC 的DDE 通信,实质是Matlab与excel,MCGS 与excel,MCGS 与PLC 之间的数据交换。具体的设置有以下几方面。
1)新建excel 表单,在sheet1 中R1C1,R1C3对应MCGS 输出的数据data1,data3;R1C2 对应MCGS输入的数据data2。给R1C1,R1C3分别输入“ =McGsRun|DataCentre!data1”和“ =McGs-Run|DataCentre!data3”。如图6所示。
图6 excel表单数据区域的设置Fig.6 Set up region of excel form data
2)新建MCGS 工程,建立3 个数值变量:data1,data2和data3,data1和data3为DDE输出;data2 为DDE 输入[7]。另外为了观察方便,新建一个用户窗口(命名为“窗口0”),建立3 个数据输出框,用于显示data1,data2,data3。如图7所示。
图7 MCGS数据变量的建立Fig.7 Set variable data of MCGS
3)新建Matlab 的M 文件程序(命名为“ddee.m”),程序语句如下所示。
z=34;
chann=ddeinit('excel','sheet1')
%与excel就sheet1创建对话通道chann[8]
rc=ddepoke(chann,'r1c2',z)
%通过对话通道chann,将34写给R1C2
r1=ddereq(chann,'r1c1')
%通过对话通道chann,读取R1C1数据给r1
r2=ddereq(chann,'r1c3')
%通过对话通道chann,读取R1C3数据并赋给r2
4)建立DDE 数据连接。打开excel 文档;运行MCGS 的窗口0,并给data1 和data3 赋值;在Matlab 下运行“ddee.m”文件。可观察到,Matlab成功接收MCGS 的data1(=5)和data3(=1)值,MCGS 的data2 的值也更新为Matlab 所发送的数值(z=34)。如图8 所示。可见DDE 数据交换通信正常。通过DDE数据通道,PLC可将data1(系统启动信息)和data3(零件到位信息)发送给Matlab,而Matlab可将识别结果z发送给PLC。完成数据的实时更新。
图8 DDE下的数据交换Fig.8 Data exchange by using DDE
2.3 分拣控制算法
本文采用PLC完成零件的传输、定位和分拣动作控制。PLC 的控制思路:系统初始化后,启动电机,传送带运行,当检测到有零件到达摄像机正下方时,电机立即停止,同时令零件到位标志为1;延时2 s(等待拍照和图像处理)后,读取图像处理结果,如果收到的“1”或“2”或“3”或“4”或“5”,代表“1#零件”或“2#零件”或“3#零件”或“废品”或“未处理完”,PLC 驱动电机运转将零件运至“1#槽”或“2#槽”或“3#槽”处,驱动“1#气缸”或“2#气缸”或“3#气缸”动作;如果收到的是“4”,则代表是废品,PLC 启动电机将其运至传送带尽头,使其掉落废品筐中。
3 识别效果
经过多次的测试,测试数据如表3 所示。从统计的数据看,该识别方法误判率很低,据有限数据统计表明,误判率约为0.16%,即分拣正确率约为99.84%,效果很好。
表3 测试数据统计Tab.3 Test statistics
4 结论
本文主要介绍借助DDE 技术将Matlab 图像处理技术应用于平面零件的分拣控制系统,实现结构复杂且材质相同的零件的识别和分拣控制。本系统分拣正确率不小于99.8%,零件分拣准确可靠、抗干扰能力强、维护简单方便;在平面类零件分拣控制设计中,有一定的实际应用价值。
[1]冈萨雷斯.数字图像处理(MATLAB 版)[M].北京:电子工业出版社,2007.
[2]Poggio T,Voorhees H,Yuille A.Regularized Solution to Edge Detection[J].J.Complexity,1988(4):106-123.
[3]Oliveira P R,Roseli R A F.Improvements on ICA Mixture Models for Image Pre-processing and Segmentation[J].Neurocomputing,2008,71(10):2180-2193.
[4]Nalwa V S,Binford T O.On Detecting Edges[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,1986,8(6):699-714.
[5]王郑耀.数字图像的边缘检测[M].西安:西安交通大学出版社,2003.
[6]李志军,傅蓉浣.应用于机器视觉的图像自动比对算法研究[J].机电工程,2009(7):53-56.
[7]郁汉琪,盛党红.电气控制技术与可编程控制器应用[M].南京:东南大学出版社,2003.
[8]张志涌.精通MATLAB 6.5 版[M].北京:北京航天航空大学出版社,2009.