基于OpenCV 的偏光片检测方法
2020-10-16石鹏飞
石鹏飞, 刘 慧
(中电科风华信息装备股份有限公司, 山西 太原 030024)
引言
偏光片的检测需求主要分为两大类:第一,喷码字符检测,常见的检测内容包括喷码字符不正、错码、缺点、重码、红点等;第二,表面缺陷检测,常见的包括打痕、压痕、糊污、条纹、划伤、剥离、折痕等。对于这两大类检测需求,传统的方法是人工检测,人工检测费时又费力,不仅检测水平受人的因素影响非常大,而且人工操作容易对偏光片造成二次伤害。近些年来,随着自动化需求不断提高,在线检测逐渐开始替代人工检测。
由于国内外的检测水平参差不齐,国外一些视觉厂商由于行业接触早,技术积累多,因而在技术上一直处于领先地位,但功能模块固定,不能随着检测需求的变化积极应对。国内一些视觉供应商,通过购买成熟算法库,积极进行二次开发,在偏光片检测行业逐步占有了一席之地。
国内对偏光片检测的研究主要集中在深圳大学。曾小星[1]等人采用结构光照明的方法,对偏光片外观缺陷进行了研究;赖文威[2]等人研究了偏光片外观缺陷的成像机理;贺健[3]对偏光片缺陷进行了仿真。石鹏飞[4]引入了机器学习的方法,对偏光片缺陷进行了检测和分类。综上所述,国内对偏光片缺陷的检测处于起步阶段,一些技术并没有大规模地应用于生产实践。
本研究采集了大量实际生产缺陷小图,使用开源计算机视觉库(Open Source Computer Vision Library)中算法进行处理,而OpenCV 提供的视觉处理算法非常丰富。一次作业中,喷码字符是固定的,因此对于喷码字符的检测,并不需要对字符进行识别,只需要比对每次喷码内容是否一致即可。而OpenCV 中,模板匹配算法非常适合进行字符比对,只需要事先提取一个图片模板,每次利用匹配算法进行图片模板的匹配即可,通过匹配度即可判断喷码字符优良。表面缺陷的检测则需要依次进行多种算法操作,最终将缺陷轮廓位置提取出来。
1 喷码字符检测
1.1 模板匹配简介
用T 表示模板图像,I 表示待匹配图像,切模板图像的宽为w 高为h,用R 表示匹配结果,匹配过程如图1 所示。
图1 匹配过程
归一化平方差匹配法算法如式(1)所示:
此处R 越小,表示匹配程度越高。实际程序中,用1-R 表示匹配度。OpenCV 主要函数如下:
MatchTemplate(img,temp,ftmp,1);
//0-5 共5 种方法,1 表示归一化平方差匹配
MinMaxLoc (ftmp, &minv, &maxv, &minl, &maxl,NULL);
//输出最小值,最大值,以及最小值,最大值的位置
1.2 模板提取
如下页图2 所示,提取200*200 大小的一幅待匹配模板。该模板完美体现了喷码字符的内容,没有缺点,没有其它遮挡,角度也正确,是一个合格模板。使用该模板在原图中进行匹配,匹配结果如图3 所示。
图2 模板图
图3 验证原图模板
从匹配结果来看,匹配度达到了99.83%,匹配程度非常的高。从红框的位置来看,准确地找到了目标字符的位置,并显示出了结果,X 方向1 729,Y 方向1 825。
1.3 OK 结果匹配验证
从同一喷码批次中随机抽取8 张喷码字符确认OK 的图片进行验证。每张图片都通过了人工的检测,判定OK。验证结果如表1 所示。
表1 OK 样品匹配结果
表1 中显示,样品OK3 未能匹配到准确的位置,其余的样品均可以达到98%左右的匹配度,X 方向以及Y 方向的位置精度均在100 个像素以内,选择合适大小的矩形区域,可以完整地提取出来。
1.4 NG 结果匹配验证
图4 依次为四种典型的喷码NG 缺陷类型:未喷码、字符缺点、记号覆盖、字符错印。表2 中是相应的匹配度。
图4 四种典型的喷码NG 缺陷类型
表2 NG 品匹配结果
对比所有的匹配度结果发现,除字符错印外,同一批喷码结果无论NG 还是OK,均有较高的匹配度,其原因主要是背景像素占比过大,计算匹配矩阵时,结果往往就过大。极端地讲,例如OK3 样品,虽然找到了最大的匹配度值,但确未能正确匹配位置。通过比较匹配度,可以发现,选取合适的阈值,可以将大部分喷码结果筛选出来,对于印错字符,可以明显地挑选出来,但仍然存在不能完全检出的问题,存在一定的误判风险,既有可能由于过低的匹配度将OK 品过杀,又有可能由于过高的匹配度将NG 品放过。表1、表2 中,无论是OK 品和NG 品,二者的匹配度都太高了,并且十分接近。
2 表面缺陷检测
2.1 处理过程
采用OpenCV 中的算法,对一些表面带有缺陷的偏光片图片进行处理,把最大的缺陷位置标记出来。为了处理方便,将带有缺陷的偏光片按照缺陷位置预先分割成200*200 的缺陷小图。如下页图5 所示,带有明显缺陷的缺陷小图。
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像去噪,因此采用高斯滤波对图像进行预处理。下页图6 为高斯滤波后的效果图。
选取合适的阈值对图像高斯滤波后的图像进行二值化运算,如下页图7 所示。二值化后,缺陷部分和非缺陷部分明显的黑白分明。但缺陷位置的范围可能略小,避免提取轮廓时不能完全包围,因此对二值化后的图像进行膨胀操作,如下页图8 所示,白色区域面积明显扩张。
图5 缺陷小图
图6 高斯滤波
图7 二值化
图8 膨胀
采用canny 算法提取图像的轮廓,如图9 所示,四个大小不一的缺陷轮廓都被提取出来。找出最大的一组轮廓,并找到围成该轮廓的最小矩形,并在原始缺陷小图上标记出来,如图10 所示。
图9 轮廓提取
图10 缺陷标记
2.2 验证结果分析
对48 幅不同的缺陷小图进行处理,选取其中有代表性的进行分析。图11 是六种典型的处理结果。图11-1 代表了能够正常检测的结果,图11-2 代表了未能找到缺陷位置的检测结果。图11-3 和图11-4 分别代表了横向和纵向条纹的缺陷检测结果。图11-5 表面缺陷的对比度较高,有利于检测结果。对比图11-4 和图11-6 发现,横向条纹的检测结果不是很理想,但如果横向条纹有较高的对比度,可以得到不错的检测结果。
通过分析以及验证,造成以上六种典型检测结果的一个原因是在使用OpenCV 中算法时,函数参数选取的差异性。高斯滤波、二值化、膨胀、轮廓提取对应的函数中都要选取对应的结构元素,机构元素的大小和方向都会造成检测结果有较大的差异性。
3 结论
图11 验证结果
1)OpenCV 中模板匹配算法不仅可以准确对喷码字符进行匹配,而且可以验证喷码位置的准确性。对于喷码不良的各种情况,也可以分辨出来。但仍有匹配失误的图片,究其原因,背景和字符像素差异不大,二值化可以解决这个问题。
2)利用OpenCV 中算法组合以及选取合适的结构元素,偏光片表面缺陷检测大部分可以检测出来。但参数的选取比较困难,需要大量的验证。另外,算法的稳定性也需要长期的验证。
3)机器视觉检测的经典算法和深度学习算法结合起来,可大大提高缺陷检测的能力和图像分类的能力。