基于机器视觉的牛奶盒吸管自动检测技术
2021-06-01朱春锦黎鑫泽朱建业
朱春锦,黎鑫泽,朱建业,张 浩
(广州大学,广东 广州 514000)
0 引言
生活中我们偶尔会遇到购买的一箱牛奶中某一盒牛奶表面没有吸管的情况,从而造成困扰。这是因为牛奶盒上的吸管在生产过程中难免会出现点胶不足或传送带运输卡落的情况,导致最后装箱时牛奶盒上没有吸管。目前的牛奶生产厂家采用人工检测的方式对吸管有无进行检测,而在高速的流水生产线上,人工很容易因长时间工作而出现用眼疲劳,以至最后的生产效率难以保障。
当前,机器视觉技术[1-3]飞速发展,其在工业方面的检测应用[4-5]也越来越多。目前,机器视觉技术在诸多方面的应用已比较成熟,例如:物体轮廓形状识别、表面裂纹监测、人脸识别、字符识别等。但是国内现今并没有人将机器视觉技术应用到吸管检测上。
为此,本文提出了一种基于Haclon 的伊利牛奶盒吸管有无的检测设计方案。使用模板匹配算法来提取吸管关键部分区域,再利用区域形态学运算来判断奶盒表面是否存在吸管。该方案对光照要求低且可以代替人工检测,从而提高吸管检测效率和质量。
1 吸管检测处理算法
牛奶盒检测算法的步骤如图1所示。
图1 吸管检测算法流程
在检测过程中,获得图像数据后,最终的目的是对吸管是否出现在图像上的正确位置进行判断。因为包装的特性,如果牛奶盒表面有吸管,那么一定会遮挡住牛奶盒表面的圆形标签如图2 所示。本文设计的算法核心就在于检测标签区域是否存在吸管部分,如果存在则该牛奶盒表面有吸管,反之则牛奶盒表面没有吸管。
图2 采集的牛奶盒图像
1.1 模板匹配
检测的第一步,采集一张牛奶盒表面图像作为标准图像,并对其做一次灰度化处理。
为了在以后的检测中每次都能准确定位到奶盒表面的圆形标签区域,可以利用采集到的标准图像上的二维码区域创建一个模板图像,每一次检测中对待检测图像进行模板匹配,即可定位到待检测图像上的二维码区域。因为奶盒的包装特性,二维码区域和标签区域的相对位置始终是固定的,所以可以根据二者的位置关系准确定位到奶盒表面的标签区域。
其算法流程是:选取标准图像上的二维码作为模板图像,同时在标签处绘制一个同标签等大的圆形区域,记录二维码和圆形区域的位置和相互之间的位置关系。在检测时,当二维码区域匹配成功时即可获得检测图像上的二维码区域的位置,将该位置和二维码模板的位置进行计算,获得二维码的仿射变换的关系矩阵,同时对绘制的圆形域用该矩阵进行仿射变换,仿射变换后圆形区域的位置即是检测图像上的圆形标签处的位置。
1.2 互相关法
互相关法是模板匹配的一种基本方法,其原理如下。文中设置的二维码模板T(m,n)叠放在被搜索的牛奶盒图S(W,H)中进行上下左右的平移,二维码模板图覆盖住的原图区域叫子图,搜索范围是:1 ≤i ≤W-n,1 ≤j ≤H-m。使用下式可以衡量T与Sij之间的相似性:
式中:(i,j)为子图左下角在被搜索图S 上的坐标,然后再将其结果归一化,就可以得到模板匹配的相关系数:
当模板和子图一样时,相关系数R(i,j)=1,在被搜索图S中完成全部搜索后,找出R的最大值Rmax(im,jm),其对应的子图即为匹配目标。
1.3 区域处理算法
根据模板匹配后我们定位到了目标区域(蓝色标签部分),为了节省算法的运算时间,选择利用仿射变换后的圆形区域将标签部分的图像裁剪出来。只对裁剪后的图像进行阈值处理,因为吸管和标签部分的颜色对比度较大,如果吸管存在,使用阈值二值化便能很好地得到吸管区域。但是实验表明,无论使用什么值作为阈值,二值化后的吸管部分始终会和背景部分存在连通的情况,无法使用面积特征直接筛选出吸管部分。因为二值化后的吸管部分和背景部分面积和形状差距较大,为此考虑使用区域开运算的手法,将二值化后的其他干扰区域清除,只留下吸管区域。
开运算就是先对区域进行膨胀后再腐蚀,达到消除干扰区域的同时又能很好地保留想提取的目标区域。
膨胀和腐蚀时首先需要选取结构元S,其可以是任意形状,以十字形为例(如图3)。在结构元S中还要选取一个锚点o,我们一般将结构元的中心定为锚点,这里就是十字形的中心,为o 点。然后将S 在图像f(如图4)上进行滑动,f是一幅二值图像,灰色区域代表1,白色区域为0。膨胀其过程就是把结构元锚点位置的像素灰度值设置为结构元值为1 的区域对应图像区域像素的最大值。使用公式(3)表示,计算公式如下:
式中:(x,y)为锚点o 的位置,x′和y′为结构元值为1 的像素相对锚点o 的位置偏移,f表示原图,dst 表示结果图(如图5)。
膨胀后的示意图如下,让人感觉就像是图像中的目标区域膨胀变大了一样。其中图5 中的斜纹部分就是膨胀后多出的区域。
图3 十字结构元
图4 膨胀前的原图
图5 膨胀后的结果图
腐蚀其过程就是把结构元锚点位置的像素灰度值设置为结构元值为1 的区域对应图像区域像素的最小值。使用
公式(8)表示,计算公式如下:
式中:(x,y)为结构元S 锚点o 的位置,x′和y′为结构元值为1 的像素相对锚点o 的位置偏移,f表示原图,dst 表示结果图,如图6所示。
图6 腐蚀后的结果图
腐蚀后的示意图如下,视觉上就像原图目标区域被“腐蚀”了一般。
对图像f用同一结构元S 先腐蚀后膨胀成为开运算,其运算符号记为:
对图4 使用图3 做结构元开运算后的结果图,如图7 所示,其保留了目标区域的大致形状。
图7 开运算后的结果图
为了得到吸管区域,对阈值后的标签区域进行开运算,其效果就能很好地消除干扰区域,提取到吸管区域。
2 实验验证
为了验证上述的算法处理有效性,且能实现检测奶盒表面是否存在吸管的目的,本文采用Halcon 软件作为实验环境,对本文算法进行验证。
2.1 定位区域
首先使用read_image ()将相机采集的一张图像读取到软件中如图2 所示。为了定位到感兴趣的标签区域,先手动在二维码图像处绘制一个等大的矩形区域和标签处绘制一个等大的圆形区域,用area_center()得到两个区域的中心坐标。用圆形坐标减去二维码区域坐标,将得到进行仿射变换的关系坐标。使用reduce_domain()将二维码从原图中抠出,用create_shape_model()创建二维码模板。前期的准备工作结束。随后相机循环采集图像,用find_shape_model()找到二维码所在的位置,然后生成仿射变化矩阵,同时对圆形区域进行仿射变换。如此便定位到了标签区域,将仿射变换后的圆形区域对检测图像进行抠图处理,其结果如图8所示。
2.2 区域处理
由于吸管和背景区域的对比度差异明显,所以使用阈值binary_threshold()算子就可以得到吸管区域,阈值后用connection()分割区域,就可得到下面的效果图,图9是奶盒有吸管的结果图,图10是奶盒没吸管后的结果。
图9 带吸管阈值后图
图10 没有吸管阈值后图
因为吸管的形状是矩形的,所以采用矩形的结构元素对阈值后的图像进行开运算opening_rectangle1(),以达到消除干扰区域的目的。有吸管的图像开运算后保留下了吸管区域如图11 所示,而没有吸管的图像开运算后,则成为空区域如图12所示。
图11 有吸管图开运算结果
图12 没有吸管开运算后结果
至此,使用count_obj()算子对开运算后的区域进行计数。如果区域数大于0,则说明有牛奶盒上有吸管存在;如果为0,则表示没有吸管。
3 结果分析
将本文的吸管检测算法与传统的流水线人工检测相比,实验结果如表1 所示,实验设定每100 盒伊利纯牛奶中有1盒没有吸管。
表1 吸管检测方法对比Tab.1 Comparison of pipette detection methods
从表1的对比结果来看,使用本文方法检测的失误率和所需要时间都比传统的流水线人工检测低,并且能够满足流水线的检测速度要求。后续只要搭配一个合适的牛奶盒剔除装置,通过计算开始采集到牛奶盒的时间t和传送带的速度v以及剔除装置与采集装置的距离S三者的关系,就可以让电脑发出指令让剔除装置从流水线上剔除掉没有吸管的牛奶。如此,便可以取代流水线上人工检测,搭建成一套自动的检测系统。
4 结论
本文基于Halcon 软件平台,设计了伊利纯牛奶盒表面吸管存在与否的检测方法,使用机器视觉技术代替人工检测。通过对图像关键部位的区域提取和区域形态学运算,对吸管有无的情况进行判断。实验结果表明,检测失误率可达到0.00%,时间快于人工,且该方法对光照要求低,证明了该方法的可实现性和优越性。但本文并没有设计出牛奶盒剔除装置,搭建成一套完整的监测系统,为后文可以研究改进之处。