1. 引言
长久以来,铝电解电容极性(Polarity)测试一直是品保人员担心的问题,铝电解电容实物图如图1所示。铝电解电容器在电路中常被用作交流旁路和滤波、能量转换和延时,在要求不高时也可用于信号耦合 [1]。若电解电容漏插在PCB上,会对整个PCB电路的性能产生很大的影响。因此电容漏插的检测在工业生产中尤为重要。若采用人工目视检查检耗时且不可靠,需要寻找可靠的PCB板上电解电容检测的方法。而目前电路板生产过程中使用的缺陷检测共有五种类型:人工目视检查;电气测试;自动光学检测;X射线检测;激光检测 [2]。除了人工目视检查外其他几种检测方法相对来说成本较高,消耗资源过多,不适合在大众化的生产车间推广。随着MATLAB App Designer在很多工程领域得到了广泛应用,因电容漏插检测时需要对采集的电容顶图图像进行处理,而检测的关键点恰恰在于系统能否准确判断电解电容灰度均值和标准差。为了简化整体系统的设计,本论文以焊有铝电解电容的PCBA作为待检测的硬件部分,软件部分则借助MATLAB App Designer模块来设计出一种电容漏插视觉检测的可视化方法以便精准识别电容的漏插情况,使其占用资源较少,效率提高。
Figure 1. Aluminum electrolytic capacitor
图1. 铝电解电容
2. 总体设计方案
整体设计包括硬件和软件两部分,本系统的设计重点是对图像进行处理。用光源、USB摄像头 [3]、焊有电解电容的PCB搭建的视觉检测系统作为硬件系统,在装有MATLAB的App Designer的上位机作为软件开发系统。由USB摄像头捕获的待测电容元件,选取最清晰的一帧进行模板制作,通过编写程序可以检测出电解电容顶部的灰度均值和标准差等信息,同时将这些信息保存至xls文件中。在待测元件实时检测环节,此模块将保存的电容信息文件读出与实时检测值进行比较,若实时检测的结果与模板信息中的结果相同则电容无漏插,App Designer的可视化界面上会显示“pass”,反之,则显示“no”。总体框图如图2所示,利用USB摄像头和MATALB中的App Designer设计工具制作装有铝电解电容的标准PCBA板,在实时监测环节,利用USB摄像头和检测端的程序与标准PCBA板作比较从而显示相应结果。
Figure 2. Overall block diagram of visual inspection system design
图2. 视觉检测系统设计总体框图
3. 方案原理介绍
整个系统的方案采用MATLAB App Designer设计工具来开发实现,其中最为关键部分是检测指标的选择,本系统采用了计算ROI区域内的灰度图像均值和标准差,若PCB板上的电解电容无漏插,则均值和标准差在一个范围内,若电解电容漏插,则测量值会在范围之外并做出裁决进行显示。
3.1. MATLAB App Designer简介
MATLAB App Designer是Mathworks公司在MATLAB R2016a中正式推出的前系GUIDE的替代产品。其界面控件做了全面的更新,这是在MATLAB图形系统转向使用面向对象系统之后的一个重要的后续产品。它旨在顺应Web的潮流,能帮助用户利用新的图形系统,操作简便的设计更加美观的GUI (Graphical User Interface,图形用户接口)。用户可以在App Designer设计工具中,通过拖放可视化组件来安排图形用户界面的设计布局,并使用集成编辑器快速编写其行为,创建开发出专业的应用程序 [4] [5]。而本系统对可视化和设计布局要求较高,因此采用此软件进行开发,本系统共设计了三个面板供用户使用。
3.2. 灰度化处理方法
该设计关键在于对捕获的图像进行灰度化处理,即去掉图像的RGB信息,将彩色通道的影像转换为单色通道(0~255)的黑白影像。常用的灰度化处理方法为最大值法、平均值法和加权平均值法。
对于最大值法,选取R、G、B三个颜色通道的最大强度值作为灰度值(Y)进行图像灰度化。
(1)
对于平均值法,选取R、G、B三个颜色通道的强度值进行算术平均计算,计算结果作为灰度值(Y)进行推向灰度化。
(2)
对于加权平均法,将R、G、B三个颜色通道的强度值根据一定的权值进行加权平均计算 [6] [7]。
(3)
其中
、
、
分别为R、G、B三通道的权重值。
4. 基于App Designer的电容漏插检测系统
本系统关键在于MATLAB视觉检测算法的实现,整个系统设计包括三个模块,分别为视频采集模块、模板制作模块和在线漏插检测模块,各个模块包含的内容如图3所示。第一部分视频采集系统模块主要为模板制作做准备,采集电解电容顶部的图像,并选取最清晰的图像进行保存;第二部分“模板制作”主要为框选ROI (Region of interest)、检测ROI内电容的灰度均值和标准差大小,并将相关信息保存到一个xls文件中;第三部分为在线漏插检测模块,主要包括读取xls文件、视频采集、比对模板并显示电解电容是否漏插,若实时检测的ROI区域的均值和方差在模板信息阈值范围内的通过,反之则不通过。
Figure 3. MATLAB capacitor leak detection framework
图3. MATLAB电容漏插检测结构框架
4.1. 视觉采集模块
视频采集模块的主要功能为预览摄像头,选取最清晰的一帧进行拍摄 [8],为模板制作模块提供标准图片,主界面如图4所示。该模块采用的面板上共设置4个按钮,“预览”按钮功能为打开摄像头,该功能的实现共依赖imaqhwininfo (‘winvideo’)和videoinput (‘winvideo’, ID)函数,前者用来获取设备ID信息,后者用来进行视频捕获;“拍照”按钮实现图片的采集,该功能实现依靠frame = getsnapshot()实现,其中frame就是拍摄的图片;“关闭摄像头”按钮依赖closepreview()函数实现。最终依赖imshow()函数,将视频流和图片文件放到坐标系中,一定注意在此函数中将坐标系相应的句柄写入,如下面示例所示,frame为拍摄保存的图片,‘parent’为“坐标轴的句柄”属性,“app.UIAxes2_2_option3”为坐标系句柄数。
imshow(frame,'parent',app.UIAxes2_2_option3);
axis(app.UIAxes2_2_option3,'on');
4.2. 模板制作模块
因模板制作是后续电容漏插的检测标准,故此模块的处理尤为重要。本模块的制作可分为绘制ROI框选、图像灰度化处理、保存模板信息三部分。
4.2.1. ROI的框选
在MATLAB软件上进行ROI框选可使用imrect()函数和imcrop()函数配合实现截图功能,getPosition()函数可用来获取图像上特定区域的坐标。当把图片导入坐标系中后,鼠标会变成“+”,此时即可进行拖拽实现位置的框选,同时getPosition()函数可以返回ROI区域的[start_x, start_y, width, height],即ROI起始(x,y)坐标以及框的宽度和高度。主要实现程序如下所示:
h=imrect(app.original_option2,[50,50,30,30]);
pause(15);
pos=getPosition(h);
img_ROI = imcrop(img, pos);
imrect()下的“app.original_option2”为“原图像”的句柄,初始化绘制一个[50,50,30,30]的矩形框如图5所示,当用户框选移动完成之后利用getPositon()读取ROI位置信息,之后将采集后的图像利用imcrop()函数,保存为img_ROI,并将提取的推向绘制在“ROI图像”的坐标系中。而imcrop()函数的用法为X2 = imcrop (X, map),其中X表示为需要裁剪的图片,map为截取的区域即getPosition()函数返回的向量。
4.2.2. 图像灰度化处理
对图像进行灰度化处理的方法有很多,本App运用了最大值法、平均值法和加权平均法 [9]。因要计算图片的灰度均值和标准差,这些都是统计量,因此将uit8类型彩色图片转化为double类型数据。当采用最大值法进行灰度化 [10] 时,即提取三通道每一个像素的亮度最大值,对于图5中的ROI裁剪图片进行处理的结果如图6(a)所示,可以计算灰度均值为178.5,标准差为47.87;当采用平均值法进行灰度化时,即提取三通道每一个像素亮度平均值,灰度处理结果如图6(b)所示,灰度均值为170.9,标准差为48.77;当采用加权平均法时,即按一定的权重提取每个通道的亮度值,注意RGB三通道的权重和为1,加权平均法处理结果如图6(c)所示,经计算灰度均值为172.3,标准差为48.84,主要功能实现代码如下所示:
gray_img1(x,y) = max(img(x,y,1),max(img(x,y,2),img(x,y,3)));
gray_img1(x,y) = (double(img(x,y,1))+double(img(x,y,2))+double(img(x,y,3)))/3;
gray_img1(x,y) = R*img(x,y,1)+G*img(x,y,2)+B*img(x,y,3);
app.mean1_option2.Value=mean2(i);
app.bizozhun_option2.Value=sqrt(var(i(:)));
语句中变量gray_img1(x,y)指的是灰度化处理后的图像值,变量img(x,y)指的是带有RGB信息的图像值。其中第一条语句为最大值法处理的语句,分取出去img中每个通道的亮度值,同理第2、3语句分别为平均值处理和加权平均灰度化处理的语句。第4条语句中的mean()函数是用来求灰度均值的,i指的是灰度化后的图像,var()函数用来求解灰度值方差,开方后即为标准差。
(a) (b) (c)
Figure 6. Maximum grayscale (a), average grayscale (b), weighted average grayscale (c)
图6. 最大值灰度化(a)、平均值灰度化(b)、加权平均灰度化(c)
4.2.3. 保存模板信息
在模板制作模块,需要将标准带有电解电容PCBA检测的信息保存起来,为后面的在线监测做准备。需要保存的模板信息为ROI内的图像灰度均值、图像灰度标准差、ROI位置信息(即横坐标起始点、纵坐标起始点、宽度和高度)、灰度化方法和R、G、B三通道权重共10个数值,利用Xlswrite()函数,第一个参数为保存的文件地址,第二个参数为保存的矩阵信息,本系统经过多次测试,以一次测试为例,其保存的数据如表1所示。
Table 1. Holds the template information values
表1. 保存模板信息值
4.3. 在线漏插检测
这部分所涉及的内容包括读取模板信息,检测PCBA中电解电容是否漏插。为了实现在线实时监测电容漏插情况,必须要添加视频采集程序,而检测方法与模板制作中检测方式相同,这部分不再进行赘述。我们通过程序可以实时捕获判读ROI处的灰度均值和标准差,通过与模板中的电容元件的信息作对比,可以在App Designer的在线检测面板显示出来电路板的电容是否漏插。整个软件的设计包括读取模板信息和在线监测两部分。对于此模块的程序主要分为两部分,整体设计流程图如图7所示。
Figure 7. Flow chart of online testing program
图7. 在线检测程序流程图
4.3.1. 读取模板信息
对于读取信息处理主要采用xlsread()函数,该函数用法为xlsread (‘filename’, ‘range’),“filename”指的是需要读取的文件路径,“range”指的是需要读取表格的位置,如“A1:A8”。之后将读取的值分别赋给相应的变量,在读取ROI的位置信息后,需要在摄像头实时检测的坐标系上,借助rectangle()函数具体用法如下所示:
rectangle(app.UIAxes_2_option3,'position',[x_start , y_start , width , height ] );
第一个参数为需要绘制的坐标系句柄,第二个参数为位置属性‘Position’,后面的是具体的位置信息。除此之外还需要设置检测的灰度检测阈值,本系统经过测试灰度化均值阈值范围为标准值加减15,灰度化标准值加减15。
4.3.2. 灰度处理计算
在摄像头抓拍图像之后,图像需要经过ROI裁剪并进行灰度化处理,为了确保能与模板中的图片比对,其中在在线监测部分的灰度化方式需要读取模板文件中的方法,同时灰度图片的均值和标准差也是直接与模板中的相同。
4.3.3. 在线检测
在这部分,将模板制作的过程全部集成在一个while中,可以实现ROI裁剪、灰度变换处理、电容漏插情况判断及显示是否正确,判断程序如下所示:
up_mean=app.Upper_MeanEditField_option3.Value;
lw_mean=app.Lower_MeanEditField_option3.Value;
up_Deri=app.Upper_DeriationEditField_option3.Value;
lw_Deri=app.Lower_DeriationEditField_option3.Value;
zhenshi_mean=app.MeanEditField_option3.Value;
zhenshi_Dire=app.DeriationEditField_option3.Value;
Ifzhenshi_mean>=lw_mean&&zhenshi_mean<=up_mean&&zhenshi_Dire>=lw_Deri&&
zhenshi_Dire<=up_Deri
app.EditField_4.Value=pass
app.Lamp_option3.Color='g';
else
app.EditField_4.Value=no
app.Lamp_option3.Color='r';
end
这段程序的上半部分为阈值设置,zhenshi_mean为实时检测的灰度均值,zhenshi_Dire为实时检测的灰度标准差,只有实时检测ROI内的灰度均值和灰度标准差都在阈值范围内,才会显示“PASS”同时测试灯为绿色,反之显示“No”,测试灯为红色。
5. 面板介绍
5.1. “获取图像”面板
此面板如图8所示,点击“预览”可以打开摄像头设备,选取较为清晰的一帧的进行拍照,之后点击“关闭摄像头”即可。
5.2. “模板制作”面板
此面板如图9(a) (b)所示,点击按钮“开始选择”即可选择拍摄的图片,图片和ROI初始矩形框会出
(a) 原始图像面板(b)灰度处理面板
Figure 9. “Template Making” panel
图9. “模板制作”面板
(a) 在线测量前面板(b)文件路径保存面板
Figure 10. “On-line Monitoring” panel
图10. “在线监测”面板
(a) 电容无漏插(b)电容漏插
Figure 11. On-line monitoring of missed insertion results
图11. 在线监测漏插结果
现在“原图像”坐标系中,在15 s内将ROI里面的内容框选好,程序会自动裁剪ROI中的内容;可以选择灰度变化方式,点击“灰度变换”程序会对ROI的RGB图像进行灰度变换,并在(b)的坐标系中显示;点击“保存信息”可以将(b)右侧的所有数据进行保存。
5.3. “在线监测”面板
此面板如图10(a)中所示,由两个按钮进行控制,点击“开始检测”,系统会自动读取模板文件信息并显示在对应的文本框中,之后便每隔3 s抓拍一次,检测信息处理并显示检测结果;(b)面板是用来显示相应文件的路径。
6. 测试结果
当运行“开始检测”,测试结果如图11(a)所示,检测ROI区域灰度均值为142,灰度标准差为53.07,在阈值[122.7,152.7]和[38.88,68.88]因此检测结果为“Pass”,检测指示灯为绿色;用镊子将电解电容取下,测试结果如图11(b)所示,检测ROI区域的灰度均值为148.1,灰度标准差为33.83,因此检测结果为“No”。
7. 结论
本系统相比人工目检等方式具有成本小、出错率低、效率高等优点,但是也存在光线变化过大会导致误判的现象,之后需要做的更加精准。同时,该系统也具有较高的可拓展性,可广泛应用于电路系统元件检测车间,适合中小型厂家使用。
参考文献