刘双龙,金晓怡,范瑜,奚鹰
(1.201620 上海市 上海工程技术大学 机械与汽车工程学院;2.201804 上海市 同济大学 机械与能源工程学院)
机器视觉发展至今,已不是单一的应用产品。机器视觉的软硬件产品已逐渐成为生产制造各个阶段的必要部分,这对系统的集成性提出了更高的要求[1-2]。企业需要能够与测试或控制系统协同工作的一体化工业自动化系统,而非独立的视觉应用[3]。在现代自动化生产过程中,机器视觉系统广泛用于工况监视、成品检验和质量控制等领域。
工业领域中,视觉定位可以实现目标产品的自动化,例如,搬运、定位、焊接等[4]。市面上MATLAB、OpenCV、LabVIEW、HALCON 等成熟的软件都可用于视觉定位。视觉定位方法有很多,按传感器的数量多少可分为单目视觉定位、双目视觉定位以及全方位视觉定位[5]。当前,学者们较多研究的还是单目视觉定位算法,本文中也选择了单目识别进行手表表壳中心定位。
完整的视觉系统包括4 个主要部分:光学系统、图像采集设备、图像处理系统和执行系统。在开发图像处理算法之前,设计和构建合适的机器视觉系统是很有必要的。一个好的视觉系统可以减少环境对图像采集系统的干扰,并且能够简化图像处理算法,降低对算法处理随机噪声的系统要求。
图像采集设备一般选用工业相机或者支持二次开发的摄像头。二者当中,工业相机支持超高清晰度图像的采集,但由于本文中的视觉算法对清晰度的要求不是很高,所以选定性价比较高的锐尔威视的RERUSB100W03M型摄像头做图像采集设备,其最高有效像素为1 280(H)×720(V),支持帧率是30 fps。
本文选用的图像处理硬件系统为联想G50-80笔记本电脑,使用Visual Studio 2017 编译环境配置OpenCV 4.1.2。图像采集设备与图像处理系统,即摄像头与电脑之间采用USB3.0 High Speed 接口连接,实现图像数据交换。
本研究仅涉及机器视觉的算法部分,而依照工厂实际要求,每个手表壳的中心坐标及偏转角度是需要获得的主要信息,由视觉系统向后续执行系统提供。执行系统的搭建不在本文的讨论范围之内。
光学系统提供与工况相似的照明环境,以便收集工件的图像信息。图像采集设备会受到工厂内光照条件和人员移动等因素的影响,造成拍照环境不稳定,并且很可能会进一步干扰图像处理的结果。
另外,光学系统也是为了保证视觉系统识别任务的准确性和稳定性。本文中的手表壳表面还没有经过抛光处理,所以需要利用良好的照明来提高亮度。本文应用的算法仅需分辨手表壳轮廓,对采集到的图像质量要求不高,所以选用白色光源为表壳载物盘照明。
表壳图像的获取主要通过工业摄像机拍摄获得,图1 所示为工业摄像机拍摄的工厂实际图。每个载物盘上分别有4×4=16 个待加工表壳的放置点,为准确表达每个表壳的实际坐标,可将横向记为x轴、纵向记为y轴。
图1 工厂车间表壳样品摆放图Fig.1 Shop floor sample layout
图像分析利用数学模型,结合图像处理技术,分析底层特征和上层结构,从而提取具有一定智能信息的数据。本文需要提取各表壳中心坐标以及每个表壳相对于自己坐标中心的偏转角度。
用V表示一个表壳中所有边缘像素的集合。若随机从V中选择3 个像素,这3 个像素有可能是从圆中选择出来的。假设很多被选择的3 个像素集合都是从同一个圆上选择的,那么就有很大概率这个圆是真正的圆。通过循环运算实现圆的数据并不断迭代,从而从累加器中找到潜在的圆形。本文使用的算法,随机一次选择4 个边缘像素,并定义一个判据距离来寻找一个可能的圆形,具体过程如下:
第1 步:存储全部边缘像素vi=(xi,yi)进入集合V,同时初始化记录失败次数的计数器f为0。让Tf,Tmin,Ta,Td和Tr作为给定的5 个初始值。其中Tf为能容忍的失败次数。如果V中像素比Tmin小,则停止检测圆形的任务。在任意位于潜在圆上的两个中介像素间的距离应该比Ta更大。Td和Tr是距离临界值和比率临界值。此外,让│V│表示仍存留于V中的便算像素数量;
第2 步:如果f=Tf或者│V│<Tmin,然后停止,否则,将从集合V中随机选择4 个点vi(i=1,2,3,4),在vi被选择的情况下,设定集合V=V-{vi}。
第3 步:从4 个边缘像素中选择潜在的圆,使任意在3 个中介像素中的2 个间的距离比Ta大,4个在潜在圆边缘上的像素的间距比Td大。如果满足,进入第4 步,否则将vi(i=1,2,3,4)点放回V集合,重置f:=f+1,返回第2 步。
第4 步:假设Cijk是潜在的圆,设定计数器C为0。对于任何一个V集合中的元素vi,检查dl→ijk是否不比给定的间距临界值Td更大。如果是的话C:=C+1,同时从V集合中将vk取出。在检测所有V集合中的边缘像素之后,假设C=np,也即边缘像素np满足dl→ijk≤Td。
第5 步:如果np≥2πrijkTr,进入第6 步。否则认为潜在的圆是个假圆,将这些边缘像素np放回V,重置f:=f+1,返回第2 步。
第6 步:潜在的圆Cijk已经被检测为真正的圆,将f置为0,返回第2 步。
在进行表壳中心坐标识别之前,为了消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性、最大限度地简化数据,一般需要对其进行预处理。通过图像预处理,可以改进特征提取、图像分割、匹配和识别的可靠性[6]。
经过预处理,下一步需要对每一个表壳的图像进行单独分析,包括中心坐标识别和偏转角度。通过以上分析,确定表壳中心坐标,算法操作流程如图2 所示。
图2 图像操作流程Fig.2 Image operation flow
在进行图像预处理时,调用OpenCV 函数库中的cv2.THRESH_OTSU,使用OTSU 算法选择最优阈值,搭配cv2.THRESH_TOZERO 语法提取出图像中的所有表壳特征,经过彩色阈值处理后的图像如图3 所示。
图3 彩色阈值处理后的图像Fig.3 Color thresholded image
接下来,对每个表壳分别进行图像二值化处理,二值化处理后的图像如图4 所示。为了进一步提取图像中的有用信息。对上述操作后的表壳图像进行Canny 边缘检测[7-8],获取到的表壳边缘轮廓图像如图5 所示。
图4 二值化处理后的图像Fig.4 Image after binarization processing
图5 Canny 算法得到的轮廓图像Fig.5 Outline image by Canny algorithm
对于表壳的边缘轮廓图像可以调用OpenCV 函数库中的cv2.HoughCircles(),即霍夫算法(Hough算法)[9],然后采用cv2.HOUGH_GRADIENT 语法检测出轮廓图像中的圆形。对检测圆形中的每一个非0 点,通过Sobel 算法[10]计算局部梯度。计算得到的梯度方向,实际上就是圆切线的法线,圆的中心坐标亦得。
根据最大圆半径与中心圆半径绘制一个合适大小的辅助圆,获得表壳与该圆相交的8 个点,再由这8 个点拟合出表壳中心线的位置。受噪声影响,有时获得的最大圆半径并不能与表壳相交产生8 个点,对表壳的中心线位置产生些许影响。图6 和图7 为上述方法绘制的辅助圆以及最后求得的表壳偏转角度。
图6 辅助圆交点得到的中心线Fig.6 Centerline obtained from intersection of auxiliary circles
图7 最后拟合的中心线Fig.7 Centerline of final fitting
最后,为了能够直观观察表壳中心坐标识别算法的处理结果,编写一段输出程序,使得算法运行成功后,输出一张带有每个表壳中心圆和中心点的阈值图像,如图8 所示。
图8 算法处理输出图像Fig.8 Algorithm processing output image
首先,在搭建完成的机器视觉硬件系统中,对摆放位置和角度随机的手表壳载物盘进行50 次拍照,获得50 张待检测的实验图像,作为表壳中心定位算法的检测数据。
向Visual Studio 2017 平台上编写好的表壳中心坐标识别代码中输入50 张实验图像,并根据本文介绍的方法对图像中表壳的中心进行定位,然后观察50 张经过算法处理后的输出图像,中心定位的实际情况可用人眼直接判断,与算法输出的结果进行对比。
通过50 张图像的算法识别结果和表壳中心坐标实际情况对比,得到算法在50 张图像中对表壳中心定位的准确率。实验结果见表1。
表1 表壳中心定位算法准确率检测数据Tab.1 Accuracy detection data of shell center positioning algorithm
针对手表壳工件的中心定位任务,本论文搭建了一套单目机器视觉系统,模拟实际情况对手表壳工件拍照;然后对获得的表壳图像进行滤波处理、灰度处理以及表壳中心位置的确定;基于OTSU 算法对表壳图像进行彩色阈值分割,利用该阈值对图像二值化处理后,再进行Canny 边缘检测,获得表壳边缘轮廓信息;运用Hough 算法检测表壳轮廓中的圆,确定圆心坐标后,再通过拟合求得表壳的中心线位置。本算法避免了大量的数值排序和迭代计算,大大提高了运算速度。最后,使用50 张摆放位置和角度随机的手表壳载物盘作为实验图像,对本算法进行准确率验证,从验证结果可知,本算法对手表壳中心定位的准确率接近100%,完全能够满足实际生产的任务要求。