使用形态学处理相关算法对芯片电路图焊接锡点缺陷进行检测

news/2024/11/28 0:46:52/

up目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

       当前我国信息科技的发展, 产业界自动化生产水平越来越高。 具体在电子产品行业, 随着精细化和自动化的发展, 电子产品的焊点质量的好坏, 深刻地影响着产品成品的质量和效率, 因此, 对于焊点的缺陷检测也成为了 电子制造行业亟需解决的问题。 传统的人工检测方法存在费时、 精度低、 效率低下等问题, 各种新的检测方法应运而生。 其中, 机器视觉运用到自动化生产乃至焊点检测已经成为当代自动化生产发展的趋势。 世界制造业的发展, 对于电子产品的焊点自动化检测的智能化技术水平也提出了 更高的要求, 实现焊接产品制造的自动、 柔性化和智能化已经成为焊接技术发展的新趋势。具体在机器视觉应用于焊点检测过程中: 首先通过对焊点的图像进行采集,对焊点区域进行定位, 提取出焊点图像; 再对焊点图像进行特征分析处理, 得到参数反馈, 以降低人工失误、 提高产品生产效率、 保证产品质量和可靠性。运用图像处理算法对焊点质量进行检测, 可以在很多的电子元器件加工中进行使用, 如PCB焊点、 手机GBA焊点等。本文以手机锂电池中的焊点作为检测对象, 采用机器视觉和图像处理方法,实现了 对漏焊、 焊点粘连、 虚焊、 过焊的缺陷检测。 本文完成的主要工作包括:

(1)介绍了 常用的图像预处理和特征提取方法, 针对焊点图像的特点, 对图像进行灰度对比度增强, 同时采用中值滤波去除图像中的噪声; 提出一种合理的快速迭代分割二值图像的方法;

(2)在充分考虑灰度与空间的关系以及算法复杂度的基础上, 提出了 一种基于距离变换的分水岭分割算法, 准确的分割出了 目 标区域和检测出粘连区域;

(3)对焊点图像特征的缺陷进行检测和识别。 本文主要识别的是四种类型的缺陷: 漏焊、 焊点粘连、 虚焊、 过焊;

(4)开发了 系统的控制软件, 实现了 焊点缺陷有效检测, 并给出了 实验结果。

        由体积比较小的元器件引起的焊接问题中,焊锡桥接是最常见的问题。当电路板上两个不应该连接的两个焊点在PCB 焊接过程中不经意地被焊锡连接时,就会形成桥联。根据电路结构的不同,可能会造成各种损坏。

        具体的处理步骤如下:

图像预处理
step1:灰度图
step2:去噪,采用中值滤波算法
step3:二值化
step4:平滑处理

芯片缺陷检测
step1:将面积巨大的区域视为光线影响,将其背景化

step2:由于图形处理时,会出现部分细小的间隔的图,这种情况视为图形处理导致的误差,所以进行合并

step3:将面积较小的区域视为缺陷部分,直接去除处理

step4:提取芯片的管脚

step5:利用视觉效果处理,计算每个定位点下面的区域的面积和周长

二、核心程序

%step1:将面积巨大的区域视为光线影响,将其背景化
[L,n]        = bwlabel(I_gray_filter2);%计算连通区域的个数
index = 0;
L2    = zeros(rows,cols);
L3    = zeros(rows,cols);
for i=1:n[r,c]  = find(L==i);             %计算每个连通区域的坐标值a1(i) = max(r); a2(i) = min(r); %X坐标b1(i) = max(c); b2(i) = min(c); %y坐标w(i)  = b1(i)-b2(i);            %连通区域的行范围h(i)  = a1(i)-a2(i);            %连通区域的列范围%计算占用面积square(i) = w(i) * h(i);%计算每个连通区域的面积if square(i) > AERAMAX%如果一个连通区域的面积大于设定面积,那么说明这个区域中的物体时运动员for i=1:length(r)I_gray_filter2(r(i),c(i))   =   0;endend
endfigure;
subplot(131);imshow(I_gray_filter2);title('去掉大面积的效果');%step2:由于图形处理时,会出现部分细小的间隔的图,这种情况视为图形处理导致的误差,所以进行合并
%step2:由于图形处理时,会出现部分细小的间隔的图,这种情况视为图形处理导致的误差,所以进行合并
%step2:由于图形处理时,会出现部分细小的间隔的图,这种情况视为图形处理导致的误差,所以进行合并step1 = 2;%合并区域的间隔大小step2 = 2;%合并区域的间隔大小for i = 1:rows-step1 for j =1:cols-step2if I_gray_filter2(i,j) > 0 & I_gray_filter2(i+step1,j) > 0I_gray_filter2(i:i+step1,j) = I_gray_filter2(i,j);%行范围合并endif I_gray_filter2(i,j) > 0 & I_gray_filter2(i,j+step2) > 0I_gray_filter2(i,j:j+step2) = I_gray_filter2(i,j);%列范围合并end        endendsubplot(132);imshow(I_gray_filter2);title('合并邻近区域');%step3:将面积较小的区域视为缺陷部分,直接去除处理
%step3:将面积较小的区域视为缺陷部分,直接去除处理
%step3:将面积较小的区域视为缺陷部分,直接去除处理
[L,n]        = bwlabel(I_gray_filter2);%计算连通区域的个数
index = 0;
L2    = zeros(rows,cols);
L3    = zeros(rows,cols);
for i=1:n[r,c]  = find(L==i);             %计算每个连通区域的坐标值a1(i) = max(r); a2(i) = min(r); %X坐标b1(i) = max(c); b2(i) = min(c); %y坐标w(i)  = b1(i)-b2(i);            %连通区域的行范围h(i)  = a1(i)-a2(i);            %连通区域的列范围%计算占用面积square(i) = w(i) * h(i);%计算每个连通区域的面积if square(i) < sel_area2%如果一个连通区域的面积大于设定面积,那么说明这个区域中的物体时运动员for i=1:length(r)I_gray_filter2(r(i),c(i))   =   0;endend
endsubplot(133);imshow(I_gray_filter2);title('去掉小面积的效果');%step4:提取芯片的管脚
%step4:提取芯片的管脚
%step4:提取芯片的管脚%提取可能得焊接点,去除其他额外的错误信息
%得到合适的联通区域[L,n]        = bwlabel(I_gray_filter2);%计算连通区域的个数
index = 0;
L2    = zeros(rows,cols);
L3    = zeros(rows,cols);
for i=1:n[r,c]  = find(L==i);             %计算每个连通区域的坐标值a1(i) = max(r); a2(i) = min(r); %X坐标b1(i) = max(c); b2(i) = min(c); %y坐标w(i)  = b1(i)-b2(i);            %连通区域的行范围h(i)  = a1(i)-a2(i);            %连通区域的列范围%计算占用面积square(i) = w(i) * h(i);%计算每个连通区域的面积index = index + 1;%下面四行代码是对分割边框的描述L2(a2(i)+1:a2(i)+2,b2(i)+1:b1(i),1)   =   255;L2(a2(i)+1:a2(i)+2,b2(i)+1:b1(i),2)   =   0;L2(a2(i)+1:a2(i)+2,b2(i)+1:b1(i),3)   =   0;L2(a1(i)+1:a1(i)+2,b2(i)+1:b1(i),1)   =   255; L2(a1(i)+1:a1(i)+2,b2(i)+1:b1(i),2)   =   0; L2(a1(i)+1:a1(i)+2,b2(i)+1:b1(i),3)   =   0; L2(a2(i)+1:a1(i)  ,b2(i)+1:b2(i)+2,1) =   255; L2(a2(i)+1:a1(i)  ,b2(i)+1:b2(i)+2,2) =   0; L2(a2(i)+1:a1(i)  ,b2(i)+1:b2(i)+2,3) =   0; L2(a2(i)+1:a1(i)  ,b1(i)+1:b1(i)+2,1) =   255;  L2(a2(i)+1:a1(i)  ,b1(i)+1:b1(i)+2,2) =   0; L2(a2(i)+1:a1(i)  ,b1(i)+1:b1(i)+2,3) =   0; %计算每个分割区域的中心坐标值                  Xcenters(i) = round((a2(i)+a1(i))/2);Ycenters(i) = round((b2(i)+b1(i))/2);L3(Xcenters(i)-1:Xcenters(i)+1,Ycenters(i)-1:Ycenters(i)+1,1)   =   255;L3(Xcenters(i)-1:Xcenters(i)+1,Ycenters(i)-1:Ycenters(i)+1,2)   =   0;L3(Xcenters(i)-1:Xcenters(i)+1,Ycenters(i)-1:Ycenters(i)+1,3)   =   0;%产生分割矩形
endfor i = 1:rowsfor j = 1:colsif  L3(i,j,1) == 255        %如果L2=255,即如果是视频的分割部分,那么输出的最后的视频为分割方框pixel2(i,j,1) = L3(i,j,1);%Rpixel2(i,j,2) = L3(i,j,2);%Gpixel2(i,j,3) = L3(i,j,3);%Bpixel3(i,j,1) = L3(i,j,1);%Rpixel3(i,j,2) = L3(i,j,2);%Gpixel3(i,j,3) = L3(i,j,3);%B        elsepixel2(i,j,:) = I(i,j,:);%如果不是分割的方框,那么直接输出视频pixel3(i,j,:) = I_gray_filter2(i,j,:);%如果不是分割的方框,那么直接输出视频endend
endfigure;
subplot(121);imshow(pixel2);title('芯片管脚的定位效果图');
subplot(122);imshow(pixel3);title('芯片管脚的定位效果图');%step5:利用视觉效果处理,计算每个定位点下面的区域的面积和周长
%step5:利用视觉效果处理,计算每个定位点下面的区域的面积和周长
%step5:利用视觉效果处理,计算每个定位点下面的区域的面积和周长[L,n]        = bwlabel(I_gray_filter2);%计算连通区域的个数
%SSS = zeros(rows,cols);
for i=1:n[r,c]  = find(L==i);             %计算每个连通区域的坐标值a1(i) = max(r); a2(i) = min(r); %X坐标b1(i) = max(c); b2(i) = min(c); %y坐标[rectx,recty,area,perimeter] = func_detect(c,r,'p');S_check(i) = area;for i=1:length(r)SSS(r(i),c(i))   =   255;end
endup25

三、测试结果

matlab2017b测试结果如下

 

 

 


http://www.ppmy.cn/news/442930.html

相关文章

焊接的技巧与方法

手工焊接操作的基本步骤 1.清洁焊接对象的表面&#xff0c;这一步是必须的&#xff0c;就算你再赶时间也不能偷懒。用小刀或者砂纸把焊点打磨光亮&#xff0c;露出铜的光泽。铜表面的氧化物会阻碍焊锡与之形成合金&#xff0c;这一步做得不到位的话&#xff0c;那么虚焊也是必…

QFN封装芯片手工焊接方法

本文以NRF905芯片焊接为例&#xff0c;介绍在条件极穷的条件下&#xff0c;如何焊接小脚距的QFN贴片。只要你足够的细心&#xff0c;该焊接方法适用于所有小贴片。紫色文字是超链接&#xff0c;点击自动跳转至相关博文。持续更新&#xff0c;原创不易&#xff01; 目录&#x…

手机 — oppo手机录音放在哪个文件夹里

可以到手机录音和通话录音的保存位置为&#xff1a;文件管理–存储–Recordings文件夹。注意&#xff1a;购买的新手机中找不到此文件夹&#xff0c;需要先保存一段录音文件后&#xff0c;即可在文件管理中找到此文件夹。

oppo的sd卡在哪里打开_oppo手机sd卡怎么打开 oppo手机sd卡怎样打开

以oppo r15&#xff0c;Android 8系统为例。打开电脑&#xff0c;在豌豆荚官网上下载并安装豌豆荚客户端&#xff0c;待安装成功后&#xff0c;打开豌豆荚客户端并用usb数据线将手机与电脑连接。然后需要在手机上确认usb调试&#xff0c;才能连接成功&#xff0c;之后豌豆荚将自…

oppo时间显示无服务器,oppo手机日期和时间怎么显示怎么办

1. oppo手机屏幕上面的时间和日期怎么变大 1、首先打开手机主界面&#xff0c;然后选择点击“设置”选项&#xff0c;如下图所示。 2、打开设置界面之后&#xff0c;选择点击“其他设置”选项&#xff0c;如下图所示。 3、进入其他设置界面之后&#xff0c;选择点击”无障碍“选…

卸载或禁用vivo / oppo手机的内置软件

需要注意的&#xff1a;卸载或禁用未知功能 App 可能会导致手机故障&#xff0c;在卸载或禁用 App 之前先备份手机内的重要数据。 本文使用的手机型号&#xff1a;vivo Z5 / oppo Reno Z 需要的软件&#xff1a; ADB下载地址&#xff1a;https://adbdownload.com/ ES文件浏…

Web应用技术(第八周/第4次练习/4h)

这一次练习对JSP和Servlet进行了补充学习 1.JSP的本质&#xff1a;2.include指令的作用&#xff1a;3.EL表达式语言与JSTL&#xff1a;关于EL表达式&#xff1a;&#xff08;1&#xff09;EL表达式用于取参数值与参数值的设定&#xff1a;&#xff08;2&#xff09;EL表达式的本…

深度学习基础知识整理

本文是在七月的BAT机器学习面试1000题系列进行修改。 前言 July我又回来了。 之前本博客整理过数千道微软等公司的面试题&#xff0c;侧重数据结构、算法、海量数据处理&#xff0c;详见&#xff1a;微软面试100题系列&#xff0c;今17年&#xff0c;近期和团队整理BAT机器学…