APP下载

基于OpenCV的手套包装盒缺陷检测理论分析与研究

2022-09-15王富豪蔡吉飞董傲楠李雨兴杨明旭北京印刷学院机电工程学院北京102600

绿色包装 2022年8期
关键词:包装盒像素点手套

王富豪,蔡吉飞,董傲楠,李雨兴,杨明旭(北京印刷学院 机电工程学院,北京 102600)

关键字:OpenCV;表面缺陷;手套包装盒

随着新冠疫情在全世界爆发,手套的使用量在大幅度增加。因此,手套包装盒的需求随之增多。但是部分手套盒存在质量问题,可能出现表面有污渍,纸张损坏等各种问题。如果这些有问题的手套盒销售到客户端,则会带来许多隐患。因此,在手套未出售之前检查出破损的手套盒势在必行。现在检测手套包装盒主要靠人工检测,这一检测方法繁琐复杂,效率非常低。除此之外,有许多企业使用数字图像处理技术进行缺陷检测。目前,国内做了大量的研究和探索工作,并且使用数字图像处理技术已经有了比较成型的检测体系,但是使用传统的图像处理操作不方便,所编写的代码量比较大。本文着重介绍的另一种方式是通过使用OpenCV来自动地检测手套包装盒的缺陷位置以及缺陷形状,OpenCV库是一款在最近几年非常流行的免费开源计算机视觉库,在库中存在许多丰富的计算机视觉库,库中提供大量的图像处理函数[1],可以自动检测出有破损的手套包装盒,可以大幅度提升检测效率。手套包装盒如图1所示。

图1 手套包装盒

1 数字图像处理技术缺陷检测

数字图像信号处理技术核心是指通过微处理器把相机中捕获下来的模拟图像信号自动转化输出为一组数字信号,再通过数字计算机软件对数字图像信号进行处理,然后控制图像亮度变化、图像灰度增强、图像复原、图像重建、图像形态学处理、图像分割、边缘模糊检测、图像编码转换和图像匹配处理等一系列处理手段。在工业相机所捕获的图像样本中,主要特征包括了目标信息、背景信息和图像噪声,但是在我们对图像进行处理加工的这个过程中,应该对其某些重要特征信息更加关注,把这些过分关注的部分称为目标,其余的则称为背景。在图像处理过程中,需要对目标进行预处理,可以减少或消除由于噪声产生的图像质量下降[2]。进行图像预处理后则可以将图像转化为标准的图像,然后进行图像二值化、边缘检测、缺陷提取等操作。

2 算法原理分析

使用OpenCV提供的计算机视觉库,对图像进行处理,从而可以得到算法流程如下所示。程序流程:1)读取并显示原图像;2)图像平滑操作;3)图像二值化;4)Canny边缘检测;5)缺陷特征提取;6)与模板进行匹配。

图像噪声平滑算法主要功能是用来去除图像信号中所掺杂的图像噪声,尽可能用减少图像噪声信息来提高图像平滑的算法质量。图像噪声平滑方法的本质是采用低通滤波,拦阻高频信号的图像噪声信息,从而可以留下一些低频噪声有用的信号。但是由于图像噪声的图像边缘信号属于图像高频信息,因此算法在做图像平滑运算时,会尽可能把这些边缘信息模糊化,而图像边缘信息对平滑图像噪声来说也非常重要。因此,在应用平滑滤波处理时,需要注意保持图像上原有的信息。常见使用的平滑滤波的方法一般有高斯滤波法、中值滤波法、均值平滑滤波法等[3]。

2.1 中值滤波

中值滤波实际上是非线性的平滑滤波在频率合适的情况下,可以完全克服线性平滑滤波,从而带来图像细节的模糊问题。中值滤波算法是一种以窗口内其中一个相邻像素点为滤波中心的方式,将该窗口上所有相邻像素点中的所有像素灰度值均按照数值从小到大的规则进行滤波排序,然后每次只会取消一个空间的值,作为该滤波中心像素最小的灰度值[4]。设h(x,y)为图像的任意像素点,p(x,y)为原始像素点,h(x,y)经过非线性变换得到新像素点,则中值滤波对应的数学表达式为:

中值滤波可以减少与典型值差异较大值对结果的影响。

2.2 高斯滤波

高斯滤波函数属于线性滤波方法,通过高斯函数来选择权值,使用这种滤波方法对系统消除正态分布上的高斯噪声非常有效。高斯模板的权重值按照距离来设置,离模板中心越远,高斯模板权重值就越小;离模板中心距离越近,高斯权重值越大[5]。其中(x,y)为任意的像素点,根据实际需求可以得到二维高斯滤波函数表达式为:

常见的高斯模板如图2所示:均值越大,对图像的平滑作用越好,均值越小,图像细节丢失的则越少。

图2 高斯模板

2.3 均值滤波

均值滤波为线性滤波,算法比较简单,抗噪性能差。均值滤波技术是采用一个灰度奇数点作为可滑动的灰度窗口,窗口内两端相邻的灰度两个像素中心点将所对应的两个灰度值点相加得到灰度平均值,用这个灰度平均值点代替灰度值点。如果在滑动窗口各个像素点设定权重,则称其为灰度加权均值滤波[6],图3为均值滤波的模板。

图3 均值滤波模板

OpenCV提供平滑滤波函数的原型为:void cvSmooth(const CvArr*src,CvArr*dst, int smoothtypes=Cv_MEDIAL,int parami=3,int param2=0,double param3=0,double param4=0)

2.4 阈值分割

对图像阈值分割可以有效区分背景和目标部分,为后续图像处理提高缺陷识别的精度。设原始图像为f(x,y),则根据实际情况和划分准则在f(x,y)找到其阈值为T,根据阈值可以把图像分割为两部分[7]。分割后的图像为:

通常选取b0=0,则代表为黑色,b1=1,则代表为白色,即所谓的图像二值化。

OpenCV提供的阈值分割函数为:cvThreshold(src,dst,threshold,max_value,threshold_thpe)

2.5 边缘检测

常见使用的一阶微分边缘算子有Roberts算子、Sobel算子、Prewitt算子、Canny算子等。本文采用Canny算子[8]。Canny算子选择的判断准则如下:1)Canny算子的检测性能比较好,检测效果比较好,不容易出现误检或漏检的现象。2)可以很好的对缺陷物件进行定位和识别。3)最少的边缘相应次数,可以同时保证边缘只有一个像素的响应[9]。

cvCanny函数的原型如下:void cvCanny(const Cv Arr*image,Cv A rr*edges, double threshold1,double threshold2,int aperture_size=3)

3 缺陷检测处理过程

1)首先导入核心工具包OpenCV,由于手套包装盒为流水线,需要导入录制视频,使用cv2.videoCapture( )导入视频。2)把视频转化为每一帧处理,即把视频转化为图片,使用指令cv2.cvtColor( )进行灰度值转化。3)为了区分缺陷位置,使用cv2.threshold( )进行预处理,然后使用cv2.findContours( )找到所有的轮廓位置。4)过滤干扰物品,使用cv2.contourArea( )函数计算所检测物品的面积,只有当面积大于某一值时,才认为是包装盒的待检测面,使用cv2.boundingRect( )函数做缺陷部位的外接矩形。5)当定位到待检测面时,判断包装盒表面是否有缺陷,然后重复上面操作,使用外接矩形定位到缺陷的位置。6)识别缺陷的种类,可以通过外接矩形的长和宽比例或灰度值来判断,即通过cv2.calcHist( )函数得到缺陷的灰度直方图,根据分布情况即可以判断其种类。

4 总结

1)目前使用数字图像处理进行缺陷检测已经比较成熟,手套包装盒上的缺陷也可以使用此方法进行检测,即不适用OpenCV亦可进行缺陷检测,但是操作过程比较繁琐。

2)OpenCV库是一款开源的计算机视觉库,代码库里面包含许多已经被封装设计好的函数,开发者一般只需要直接调用该函数即可。直接使用OpenCV库可以有效减少软件开发者的编写工作量,并且由于使用的OpenCV库具有很好的软件移植性,可以很方便的把软件程序直接嵌入到系统,使整个系统更加具有灵活性。

猜你喜欢

包装盒像素点手套
棉手套
一个快递盒的旅行
基于局部相似性的特征匹配筛选算法
包装趣事
零食包装盒的百变大咖秀
做只手套好过冬
基于5×5邻域像素点相关性的划痕修复算法
神秘的白手套
基于canvas的前端数据加密
棉手套