基于OpenCV 的PCB 元件缺陷检测
2015-12-10郑帅兵贾小军季汉华
郑帅兵 贾小军 季汉华
摘要:随着计算机硬件性能不断提升和图像处理技术的不断发展,基于机器视觉的无接触检测技术在各个行业得到了广泛的应用,相关技术应用于PCB元件的缺陷检测已经成为可能。利用OpenCV视觉库对有出厂的PCB元件进行预处理(阈值分割、平滑滤波、边缘处理等),然后将处理校正后的PCB图像与模板图像进行对比校对,确定匹配的细节部分,从而确定出厂PCB元件是否存在缺陷。实验表明采用OpenCV进行图像处理与传统方法相比,检测效率高,程序集成度高。
关键词:图像处理;PCB元件;缺陷检测;OpenCV
中图分类号:TP18 文献标识码:A 文章编号:1009-3044(2015)26-0214-03
Defect Detection of PCB Components Based on OpenCV
ZHENG Shuai-bing, JIA Xiao-jun, JI Han-hua
(College of Mathematics Physics and Information Engineering, Jiaxing University, Jiaxing 314001, China)
Abstract: With the development of the technology about computer and image processing, non-contact detecting technology based on machine vision has been widely used, and it has been becoming possible to apply the related technology in the defect detecting of PCB component. By means of the OpenCV vision library, PCB components image is processed through smoothing filter, binarization processing and edge detecting. Then, compare the processed PCB image with the standard template image to determine whether there are defects on PCB component. Experimental results show that compared to the traditional methods, using OpenCV for image processing can improve the efficiency of detection and the integration of program.
Key words: Image processing; PCB component; Defect detecting; Open CV
印刷电路板PCB(Printed Circuit Board)是电子元器件的载体,可以实现电子元器件自动插装或贴装,如CPU芯片,电解电容,电阻等。在生产过程中会出现各种各样的问题,比如油印、微蚀等,会影响到元件的工作精度和可靠性,甚至造成不可挽回的损失。所以,PCB元件的缺损检测是加工生产中必不可少的环节,具有重要意义。目前的PCB元件缺陷检测方法是人工检测,电测试和X射线测试方式[1]。但是这些方法费力、生产效率低。为了提高生产效率,提高产量,针对优化PCB元件缺陷检测,本文研究基于数字图像处理技术的检测方法。这种数字图像处理技术主要依靠OpenCV视觉库处理图像。使用OpeCV 3.0在VS 2008环境下对PCB的缺陷检测。
1二值化检测法
数字图像处理技术主要研究有数字化图像、图像编码、图像的增强和复原、图像描述、图像识别等[2]。图像处理方法可分为二种:第一种包括各种几何变换方法,特点是将图像通过几何方法,变换到其他频域中进行处理后,再变换到原来的域中。第二种方法是数学形态学运算,它区别于常见的频域和空域,是建立在积分几何和集合论基础上的运算。
PCB元件是一种体积偏小、色彩单一的元器件,对检测精度有较高要求。另外,PCB元件的检测属于全面检测,注重检测速率的快慢。综合考虑图像处理须接受较好的光照及形成较高的图像质量,采用传统图像二值化检测法[3-4]。
2 OpenCV视觉库
OpenCV计算机视觉库是由一些基本的C函数和C++类所组成的函数库,用来实现计算机图像算法,解决复杂困难的计算机图像处理问题。该库的所有代码都经过优化,计算效率很高,主要用于对图像进行高级处理,例如特征检测与跟踪[5-6]。它的主要方向是提供良好的机器视觉接口函数,让复杂的机器视觉产品可以更好的供人们使用。OpenCV视觉库非常庞大,包含了有横跨工业产品检测、医学图像处理、安防、用户界面、摄像头标定、三维成像、机器视觉等领域的超过500个接口函数[7]。因此,它目标成为一种用于实时系统的视觉开源库。
3 PCB元件缺陷检测过程
3.1 检测流程
OpenCV视觉库提供图像处理函数,对PCB元件进行平滑处理、边缘检测等全面处理,较完整地获取PCB元件中存在的缺陷,检测流程如图1所示。
3.2 PCB元件检测过程
3.2.1 图像去噪
去除图像噪声的常用方法有邻域平均法均值滤波器、中值滤波、自适应维纳滤波器、小波去噪等。实验采用的是中值滤波方法,它的原理是将数字序列中某一点的值用该点一个邻域中各点值的中值替换,其主要功能是让周围像素灰度值的差比较大的像素改取与周围的像素值接近的值,从而可以消除孤立的噪声点[8],它对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,使边缘不被模糊。此外,中值滤波的算法比较简单,也易于实现。
中值滤波的方法是采用一个长度为奇数的二维滑动窗口,设定某一个时刻,对这窗口内的信号样本值按照像素值的大小进行排序。二维中值滤波输出公式为:
[g(x,y)=med{f(x-k,y-1),(k,1∈w)}] (1)
其中,[f(x,y)],[g(x,y)]分别为未处理图像和处理后图像;W为二维模板,取以目标像素为中心的一个领域子矩阵窗口,对窗口内的像素灰度值进行排序,用数据序列的中值代替中心点的灰度值。
OpenCV中提供的平滑滤波函数如下:
void cvSmooth(const CvArr* src, CvArr* dst, int smooth_types=CV_MEDIAN, int parameter1=3, int parameter2=0; double parameter3=0, double parameter4=0);
其中smooth_types取以下几种值。
CV_MEDIAN:对图像进行像素值为parameter1×parameter1的中值滤波。
CV_BLUR_NO_SCALE:对每个像素的parameter1×parameter2领域求和。
CV_BLUR:对每个像素parameter1×parameter2邻域求和并做尺度变换1/(parameter1×parameter2)。
CV_GAUSSIAN:对图像进行像素值为parameter1×parameter2的高斯卷积。
CV_BILATERAL:应用双向3x3滤波,彩色sigma=parameter1,空间sigma=parameter2。
利用OpenCV提供的函数实现对PCB元件图像的处理,得到滤波图像,结果如图2所示。
3.2.2 阈值分割
使用阈值分割方法将图像有效和图像缺陷部分进行分割,提取有效部分进行处理,提高PCB图像缺陷的识别精度和准确度。这种方法特别适合用于背景占据不同灰度级的图像,不仅可以很大程度地压缩数据量,而且也简化了分析和处理步骤,提高生产效率。
最常见的阈值分割是固定阈值分割方法,OpenCV提供了固定阈值分割方法的函数:
void cvThreshold(const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type );
其中,
src:初始数组,数值为8-bit或者32-bit浮点数。
dst:输出数组,必须与src的类型一致。
threshold:阈值。
max_value:使用CV_THRESH_BINARY和CV_THRESH_BINARY_INV的最大值。
threshold_type:阈值类别。
利用OpenCV视觉库检测阈值分割函数,实现对PCB元件图像的分割,结果如图3所示。
3.2.3 边缘检测
常用的一阶边缘算子有Prewitt 算子和Canny算子等。本实验采用的是Canny算子[9]。Canny算子有以下3大优点:
(1) 图像边缘信息的漏检、误检率较小,图像的检测整体效果较好。
[SNR(f)=-wwG(-x)f(x)dxσ-wwf2(x)dx] (2)
(2) 实现高精度的定位,Location越大越好。
[Location=-wwG'(-x)f'(x)dxσ-wwf'2(x)dx] (3)
(3) 响应次数最少,保证只有唯一像素点响应。
[D(f')=π-∞∞f'2(x)dx-∞∞f(x)dx12] (4)
OpenCV提供的CvCanny函数原型如下:
void cvCanny( const CvArr* image, CvArr *edges, double threshold1, double threshold2, int aperture_size=3);
其中,
threshold1:第一个阈值。
threshold2:第二个阈值。
aperture_size:算子内核大小。
采用OpenCV提供的cvCanny函数。运用Canny算子进行PCB元件的边缘检测,实验结果如图4所示。
在经过以上处理之后,可以将检测后的PCB元件图像与标准模板PCB图像进行匹配,匹配成功后得到函数返回值,最终确定PCB元件的缺陷。OpenCV中提供的形状比较的函数如下:
Double cvMatchShapes( const void* object1, constvoid* object2, int method, double parameter=0 );
其中,
object1:第一个轮廓或灰度图像。
object2:第二个轮廓或灰度图像。
Method:比较方式在以下3种方式中:CV_CONTOUR_MATCH_I1, CV_CONTOURS_MATCH_I2, CV_CONTOURS_MATCH_I3。
Parameter:数值参数,函数匹配完成后,会返回一个匹配的数值,表明匹配程度。
利用OpenCV提供的匹配函数,可以获得相应的匹配结果,如图5所示。
3.2.4 实验与分析
模板的选择会影响匹配的结果,模板选得太大,对较小的缺陷不敏感;而模板选得太小,像素点采集不够,实验结果不准确,容易产生误差。实验采用[600
定义一个变量pcbResult,获取函数的返回值。当PCB元件没有缺陷时,pcbResult的值为0,但是,实际结果与理论存在一定的误差,经过反复试验、严格对比,使结果更加可靠,选取PCB存在缺陷的临界值为0.2。所以,当pcbResult等于0时,图像完全匹配,没有缺陷;当pcbResult小于0.2时,认为图像基本匹配,不存在缺陷或缺陷不会影响PCB的正常使用。当pcbResult大于0.2时,则表明PCB元件存在缺陷,无法匹配。实验结果如图6所示。
4 结论
OpenCV视觉库免费,源代码公开,具有强大的图像处理能力,能在不同平台移植使用,兼容性好,有利于减少运行成本和程序运行的可靠性。本文研究解决PCB元件缺陷的最佳方法,利用OpenCV视觉库强大的图像处理技术,结合图像滤波、边缘检等方法实现对PCB元件的缺陷检测。经实验证明,利用OpenCV对PCB元件缺陷检测是比较高效可行的方法,具有较好的效果。尤其是利用OpenCV中的函数,使原本复杂困难的图像处理问题变得简单易懂,易于上手,可见有很强的实用价值。众所周知,OpenCV具有比较好的移植性,在各个开发平台都能很好运行,未来可以将程序移植到嵌入式系统中,让检测系统消耗更少、效率更高、运行更快捷。
参考文献:
[1] 熊光洁, 马树元. 基于机器视觉的高密度电路板缺陷检测系统[J]. 计算机测量与控制,2011,19(8):1824-1825.
[2] 陈汗青, 万艳玲等. 数字图像处理技术研究进展[J]. 工业控制计算机,2013,(1): 72-73
[3] 潘忆江,黄际彦. PCB中圆形图像的自动光学检测研究[J].现代电子技术,2014,37(8):69-70.
[4] 安宁, 林树忠. 图像处理方法研究及其应用[J]. 仪器仪表学报,2006,27(6):792-793.
[5] 秦小文, 温志芳, 乔维维. 基于OpenCV的图像处理[J]. 电子测试,2011(7):39-41.
[6] 方玫,喻擎苍,李华强.C++Builder 下OpenCV的数字图像处理[J].计算机工程与设计,2008,29(4):882-883.
[7] 郭辉, 陈光. 基于OpenCV的视觉图像处理应用研究[J]. 微型机与应用,2012(21):14-20.
[8] 王宇新,贺圆圆等.基于FPGA 的快速中值滤波算法[J].计算机应用研究,2009,26(1):224-226.
[9] 姜玲燕,庞明勇.边缘信息诱导的图像矢量化算法[J].小型微型计算机系统.2015,1(1):183-185.
[10] 晁越, 李中健. OpenCV图像处理编程研究[J]. 电子设计工程. 2013(10):175-177.