基于机器视觉的差速器卡簧装配防错检测研究*
2018-02-05任永强
任永强 杜 瑞 李 军
(合肥工业大学机械工程学院,安徽 合肥 230009)
在自动化装配线中,关于零部件错装漏装的检测技术已经成为影响自动化程度和智能制造水平的关键因素[1]。差速器总成作为变速箱装配中的重要部件,其装配质量严重影响着整条变速箱装配生产线的生产效率[2]。如图1所示,差速器总成的轴用卡簧由于结构尺寸较小,通常使用卡簧钳手动装配在一字轴上,然后将差速器总成放入托盘中。通过视觉检测代替人工检测卡簧是否错装漏装,可以有效地降低误检率,适应生产节拍要求,从而进一步提高变速箱装配线的自动化水平[3]。
1 视觉检测系统
差速器总成由人工装配完成后,置于图2所示旋转检测台的定位座上。伺服电动机转动检测台至工业相机拍照位置停止,检测卡簧装配合格后,定位座由检测台内的旋转气缸转动180°检测一字轴另一端卡簧。检测不合格,旋转检测台返回原位报错。两次检测均合格后,差速器总成被夹紧气缸和伺服机械手吊至装配线体的托盘上,整个检测流程结束。
视觉检测系统的控制原理如图3所示,工业相机通过网口与工控一体机连接,相机接收检测软件触发后拍照回传,软件检测合格后通过以太网将结果发送给PLC,PLC控制伺服电动机等执行机构完成动作。检测过程中LED光源由PLC控制开关。
2 图像处理
2.1 图像处理流程
考虑到卡簧的检测视野范围较小,如图4所示,选用某品牌CMOS面阵工业相机、配50 mm焦距镜头,工作距离300 mm,视野范围40 mm×30 mm。光源选择环形无影白色LED光源,配双路控制器。
设置相机的拍摄大小为540×480像素,格式为彩色24位图像。先对彩色源图像进行灰度化处理,以提取卡簧轮廓。由于差速器壳体的加工表面粗糙度差,导致干扰信息过多,需要在保留卡簧轮廓特征的条件下对目标图像进行滤波降噪。而且卡簧金属表面经图像处理后可能会有边缘模糊和间断的情况出现,还需要膨胀处理使得轮廓连续。经过以上一系列预处理之后再提取轮廓,设计算法检测出卡簧双耳的圆孔,计算圆孔中心距离从而判断卡簧是否装配合格。详细处理流程如图5所示。
2.2 图像处理算法
相机采集到的彩色24位图像每个像素用3个字节表示,每个字节对应着R、G、B分量的亮度(红、绿、蓝),由于图像处理的大多数算法都是在灰度图像上进行的,所以必须将彩色图像灰度化才能进一步处理。灰度转换公式为:
其中,Gray(x,y)为转换后得图像在(x,y)点的灰度值(540×480图像中x540,y480)。 灰度值的范围是0~255,需要对灰度图像进行阈值分割使得黑色(0)与白色(255)区分更为明显。设定阈值为thresh,像素灰度最大值为maxval,分割后(x,y)点灰度值:
经过灰度化和阈值分割的卡簧图像如图6所示,其中阈值分割参数thresh=152,maxval=255。
为了尽量保留卡簧图像的细节特征条件下对图中的斑点噪声进行抑制,必须要使用滤波降噪,滤波效果的好坏直接影响到后续处理的有效性和可靠性。中值滤波是一种基于排序统计理论的非线性平滑算法,基本原理就是把像素点的灰度值用该点领域中各点的中值代替,从而消除孤立的噪点。
取3×3的像素矩阵为例,中值滤波算法先将元素值进行排序得(0,13,24,75,86,149,171,213,255),中间点经过中值滤波后取值86。由于排序取中值,中值滤波矩阵阶数必须为奇数。调整阶数为5×5、7×7或者9×9将得到不同的滤波效果。图7是将上述阈值分割处理所得图像分别经过5×5和9×9中值滤波得到的卡簧图像。随着滤波矩阵阶数的增加,卡簧双耳圆孔的轮廓边缘特征愈加明显,噪点也相应大幅减少,但阶数过高会导致边缘特征丢失,所以需要根据实际选取最佳滤波阶数。
Canny边缘检测算子由于不丢失重要边缘,检测到的边缘与实际偏差较小的特性被广泛应用,其原理是将上述处理的图像f(x,y)与高斯平滑算子G(x,y)作卷积,其中:
再求出局部边缘的法向:
根据二阶导数过零点的边缘检测原理找出边缘位置:
从而保留了每个像素点上梯度强度极大值,删掉其他值。此时的图像仍然有很多噪点。Canny算法应用双阈值以筛选边缘。设定一个阈值上界和阈值下界,像素点超出阈值上界必然是边缘。低于阈值下界不是边缘。通常阈值上界设定为阈值下界的3倍效果最佳。最后通过滞后阈值处理,消除纹状的断开边缘响应,得到连续的边缘,如图8左侧所示。
为了防止边缘仍然存在微小的断点,影响卡簧圆孔边缘检测,再使用膨胀优化。膨胀就是求图像局部最大值,将图像src(x,y)与带有锚点的正方形核(x′,y′)进行卷积,计算出核覆盖区域的像素点最大值,并将最大值赋给锚点所在的像素点,数学表达式如下:
膨胀后图像的高亮区逐渐增长,达到扩大边缘使其连续的目的,处理效果如图8右侧所示。
经过上述预处理后的图像dst(x,y)轮廓分明。传统的霍夫变换检测圆形轮廓需要较大内存且速度缓慢。这里采用一种基于面积周长比值的快速提取圆形轮廓方法。首先获取图像中各个轮廓的面积A和周长C,圆形的面积与周长平方的比值为:
而图像dst(x,y)得到的卡簧圆孔轮廓通常不是标准的圆形,其比值小于0.079 6,而且其他闭合轮廓的比值也小于0.079 6,这里给出筛选比值的范围:
0.063 这样既能检测出接近于圆的卡簧圆孔轮廓,也能屏蔽其他异形轮廓的干扰。然而还有一些很小的轮廓会被误判成卡簧圆孔,再使用面积与周长比值: 上式可以得到圆形轮廓的半径,根据像素距离限制半径范围12pixel 再分别取圆孔轮廓的外接矩形,将矩形的中心作为卡簧双耳圆孔的圆心,利用两点间直线距离公式计算出圆孔像素距离: 由于卡簧错装时双耳圆心距离较大,所以根据实际限定圆孔距离d的范围(例如120pixel EmguCV是.NET平台下对计算机视觉库OpenCV图像处理库的封装,能够用.NET兼容的编程语言C#调用OpenCV的函数。C#程序在调用EmguCV的函数前先引用EmguCV几个基本动态链接库: using Emgu.CV; using Emgu.CV.Util; using Emgu.CV.Structure; using Emgu.CV.CvEnum; using Emgu.Util; 以上动态链接库包含了常用的图像处理算法和类库。针对卡簧图像的预处理流程如下: Image img =img.SmoothMedian(par.MedianSize); //中值滤波(参数MedianSize) CvInvoke.Threshold(img, img, par.Thresh, par.MaxVal, ThresholdType.Binary); //阈值分割(参数Thresh,MaxVal) img = img.Canny(par.CannyThresh, par.CannyThresh * 3); //Canny边缘检测,参数阈值上界是下界值3倍 img = img.Dilate(par.Interations); imgout = img; //结果输出 其中par是卡簧检测参数类RingPars的对象。RingPars将参数封装成属性,配置这些参数的窗口界面如图10所示。参数配置过程中图像实时处理并显示,用户可根据实际采集的照片质量,保存预处理效果最佳的一组参数用于下一步检测。右下方的卡簧距离限定可设置卡簧双耳圆孔圆心距离限定范围。 其中img为预处理得到的卡簧图像,vvp为存储所有轮廓的对象。筛选圆孔轮廓的代码: for (int i = 0; i < vvp.Size; i++) //遍历所有轮廓 { double area =CvInvoke.ContourArea(vvp[i]); //获取当前轮廓的面积; double length = CvInvoke.ArcLength(vvp[i], true); //获取当前轮廓的周长 double r = (area / length) * 2; //当前轮廓半径 doublep = (area / (length * length)); //面积与周长平方比值p if (p > 0.063&& p < 0.0796) //通过p筛选 { if (12< r && r < 15) //通过半径筛选 { circle_vvp.Push(vvp[i]); //提取筛选后的圆轮廓 } } } 经过筛选后circle_vvp中存储着卡簧圆孔轮廓,再绘制外接矩形和两圆心连接线段。部分代码如下: for (int i = 0; i < circle_vvp.Size; i++) { //获取圆孔轮廓的外接矩形 Rectangle rect = CvInvoke.BoundingRectangle(circle_vvp[i]); imgSrc.Draw(rect, new Bgr(230, 255,230), 2); //绘制矩形 pList.Add(new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2)); // 获取两圆心 } Point[] p = new Point[2]; p[0] = ListPoint[0]; p[1] = ListPoint[1]; LineSegment2D line = new LineSegment2D(p[0], p[1]); // 创建线段 imgMeas.Draw(line, new Bgr(230, 255, 230), 2, LineType.AntiAlias, 0); // 绘制线段 length = line.Length; // 得到圆心距离 imageBox1.Image = imgMeas;// 主界面显示图像 软件检测主界面如图11所示,检测结果列表中显示了当前检测详细信息。 准备多个差速器总成样件,放入旋转检测台进行试验,记录视觉检测软件的结果并验证软件检测数据是否准确,如表1所示。 表1 检测试验数据 试验序号检测卡簧有无圆孔间距/pixel装配是否合格检测用时/ms检测准确验证1有130合格33√2无/漏装31√3有132合格34√4有157错装34√5有131合格31√6有130合格33√7无/漏装245×8有154错装37√9有131合格34√10有131合格31√ 通过验证可以说明软件检测准确性较高,多次试验准确率可达95%以上,且检测用时较短,满足实时性要求。试验过程中影响检测准确性的因素主要有: (1)差速器加工表面粗糙度。 (2)差速器定位座定位精度。 (3)相机与光源支架稳定性。 (4)外界环境光的干扰。 利用机器视觉相关理论及算法,通过检测卡簧双耳的轮廓圆判断卡簧是否漏装,计算轮廓圆心像素距离判断卡簧是否错装,从而完成了对差速器卡簧的装配防错检测。设计视觉检测平台及软件,对软件的实时性和准确性做了试验验证,系统满足实际生产需求,提高了装配线的自动化水平。 [1]陈向伟,王海月.基于计算机视觉的轴套零件尺寸测量 [J] .制造技术与机床,2014(10):85-88. [2]韩冰.基于机器视觉的发动机活塞装配防错检测技术研究[D].济南:山东大学,2009. [3]刘霞.工业零件形状尺寸的机器视觉检测系统的研究[D].哈尔滨:哈尔滨理工大学,2009. [4]韩思奇,王蕾.图像分割的阈值法综述[J].系统工程与电子技术,2002(6):91-102. [5]Canny J.A computational approach to edge detection [J] .Pattern Analysis & Machine Intelligence IEEE Transactions on, 1986, PAMI-8(6):679-698. [6]王晓东, 宋洪侠, 刘超,等.基于机器视觉的微小型零件测量与装配控制 [J].哈尔滨工程大学报,2011,32(9):1117-1122. [7]张少伟.基于机器视觉的边缘检测算法研究与应用[D].上海:上海交通大学, 2013. [8]Duchene J, Leclercq S.An optimal transformation for discriminant and principle component analysis, [J].Pattern Analysis and Machine Intelligence, IEEE Transactions on, 1988, 10(6): 978-983. [9]王化楠.Hough变换在视觉检测系统中的应用研究 [D].大连:大连理工大学,2006. [10]赵春江.C#数字图像处理算法典型实例 [M].北京:人民邮电出版社,2009. [11]Milan Sonka,Vaclav Hlavac,Roger Boyle.Image processing, analysis and machine vision[M].北京:清华大学出版社,2011.3 视觉检测软件设计
4 试验与分析
5 结语