首页 > 编程语言 >使用形态学处理相关算法对芯片电路图焊接锡点缺陷进行检测

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

时间:2022-12-24 23:23:50浏览次数:65  
标签:a1 焊点 点缺陷 区域 电路图 形态学 a2 b1 b2

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;
end
end
end

figure;
subplot(131);imshow(I_gray_filter2);title('去掉大面积的效果');



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

step1 = 2;%合并区域的间隔大小
step2 = 2;%合并区域的间隔大小
for i = 1:rows-step1
for j =1:cols-step2
if I_gray_filter2(i,j) > 0 & I_gray_filter2(i+step1,j) > 0
I_gray_filter2(i:i+step1,j) = I_gray_filter2(i,j);%行范围合并
end
if I_gray_filter2(i,j) > 0 & I_gray_filter2(i,j+step2) > 0
I_gray_filter2(i,j:j+step2) = I_gray_filter2(i,j);%列范围合并
end
end
end

subplot(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;
end
end
end

subplot(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;
%产生分割矩形
end
for i = 1:rows
for j = 1:cols
if L3(i,j,1) == 255 %如果L2=255,即如果是视频的分割部分,那么输出的最后的视频为分割方框
pixel2(i,j,1) = L3(i,j,1);%R
pixel2(i,j,2) = L3(i,j,2);%G
pixel2(i,j,3) = L3(i,j,3);%B
pixel3(i,j,1) = L3(i,j,1);%R
pixel3(i,j,2) = L3(i,j,2);%G
pixel3(i,j,3) = L3(i,j,3);%B
else
pixel2(i,j,:) = I(i,j,:);%如果不是分割的方框,那么直接输出视频
pixel3(i,j,:) = I_gray_filter2(i,j,:);%如果不是分割的方框,那么直接输出视频
end
end
end
figure;
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
end
up25

三、测试结果

 

 

 

 

 

 

 

 

标签:a1,焊点,点缺陷,区域,电路图,形态学,a2,b1,b2
From: https://www.cnblogs.com/matlabfpga/p/17003535.html

相关文章

  • 基本形态学算法
    基本形态学算法为什么要做基本形态学算法的研究和实现?是因为形态学是一个非常有力,应用广泛的工具,但同时也是研究不是很清楚的工具。往往一个恰到好处的变换,就能......
  • 形态学操作
    一、基本原理形态学操作的目的是为了提取图像中主要的分量信息。包括腐蚀、膨胀、开运算、闭运算、形态梯度学运算、顶帽运算、黑帽运算、击中击不中等。二、几种运......
  • 基于形态学处理的交通标志检测分割算法matlab仿真
    目录一、理论基础二、核心程序三、仿真测试结果作者ID:fpga和matlabCSDN主页:https://blog.csdn.net/ccsss22?type=blog擅长技术:1.无线基带,无线图传,编解码2.机器视觉......
  • 【图像处理笔记】图像分割之形态学分水岭
    0引言迄今为止,我们讨论了基于三个主要概念的分割:边缘检测、阈值处理和区域提取。每种方法都有优点[例如全局阈值处理具有速度优势]和缺点[例如在基于边缘的分割中,需要进......
  • 形态学图像处理
    腐蚀和膨胀腐蚀原理:假设原图像中有一个前景物体,那么我们用一个结构元素去腐蚀原图的过程是这样的:遍历原图像的每一个像素,然后用结构元素的中心点对准当前正在遍历的这......
  • 有这10大原则7大步骤,什么电路图都能看懂
    01​电路简化的基本原则初中物理电学中的复杂电路可以通过如下原则进行简化:☀第一:不计导线电阻,认定R线≈0。有电流流过的导线两端电压为零,断开时开关两端可以测得电压(电路中......
  • 形态学处理
    1、膨胀 应用:让有断裂的字母膨胀相连,再做后续其他工作 作用:将与物体接触所有背景点合并到该物体中,使边界向外扩张的过程,可以用来填补物体中的空洞2、腐蚀 膨......
  • 根据电路图分析逻辑功能
    这个题感觉表达式会麻烦一些,一步一步写吧Y1= ~(A&B)Y2=~(A&Y1)Y3=~(B&Y1)Y4=~(Y2&Y3&C)Y5=~(Y2&Y3&Y4)Y6=~(C&Y4)Y=~(Y5&Y6) ......