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

news2024/11/17 6:47:13

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

三、测试结果

matlab2017b测试结果如下

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity下如何实现RTMP或RTSP流播放和录制

技术背景 在探讨Unity平台RTMP或RTSP直播流数据播放和录制之前&#xff0c;我们先简单回顾下RTSP或RTMP直播流数据在Unity平台的播放流程&#xff1a; 通过Native RTSP或RTSP直播播放SDK回调RGB/YUV420/NV12等其中的一种未压缩的图像格式&#xff1b;Unity下创建相应的RGB/YU…

工作几年后想转行学编程,如何操作才靠谱?

30岁转行来得及么&#xff1f;继结婚、生子、就业、买房后&#xff0c;又一个对30岁的灵魂拷问来了。 在一档综艺节目里&#xff0c;有位年过30的“实习生”为了能让孩子有更好的生活条件、也为了自己的事业与发展&#xff0c;她选择在而立之年放下自己曾经所擅长的&#xff0c…

微信键盘终于正式发布,张小龙说:其目的并不是为了抢夺输入法市场

自从2021年1月份&#xff0c;张小龙在微信公开课透露&#xff1a;微信将上线属于自己的专属输入法&#xff0c;到现在已经快2年过了。 今天终于正式发布了&#xff0c;下面我们一起来体验下。 1、安装 打开App Store&#xff0c;输入“微信键盘”&#xff0c;点击获取就可以…

刷爆力扣之字符串中的单词数

刷爆力扣之字符串中的单词数 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&#…

STATIC和静态分析的必要性

​有一款正常工作的软件。那么可以说正常工作的软件都是好软件吗&#xff1f;在漫威的《黑豹》电影中有一个场景我深深地看过。 <图 1> 电影《黑豹》的场景 就算做的好&#xff0c;也有进步的空间! 我认为好的软件也是如此。 即使它可以工作并且没有问题&#xff0c;但总…

Vue2.x中的Vuex

目录 一、vuex是什么 1.1、概念 1.2、Github地址 1.3、使用场景 1.4、同胞传值 1.5、Vuex工作原理 1.6、搭建Vuex环境 二、求和案例 2.1、getters用法 2.2、mapState与mapGetters 2.3、mapActions与mapMutations 2.4、Vuex模块化命名空间namespace 2.5、头插人员案…

Nacos 寻址机制

目录 1. 什么是寻址机制 2. 源码讲解 MemberLookup AbstractMemberLookup 2.1 单机寻址 2.2. 文件寻址 2.3 地址服务器寻址 1. 什么是寻址机制 假设存在一个 Nacos 集群&#xff0c;其内部具有 A , B , C 三个节点。 客户端如何决定向集群中的哪个节点发送请求 在 appl…

基于Springboot+Mybatis+mysql+element-vue高校就业管理系统

基于SpringbootMybatismysqlelement-vue高校就业管理系统一、系统介绍二、功能展示1.用户登陆注册2.个人信息(学生端)3.查看企业岗位信息&#xff08;学生端&#xff09;4.我的应聘(学生端)5.学生信息管理&#xff08;辅导员&#xff09;6.三方协议书审核&#xff08;辅导员&am…

向用户展示推荐算法,TikTok主动“透明化”

获悉&#xff0c;近日TikTok宣布推出一项新功能&#xff0c;用户可以查看推荐主页&#xff08;For You&#xff09;中某个视频被推荐的原因&#xff0c;这一功能让用户拥有了更多的知情权&#xff0c;让TikTok的算法变得更透明化。新功能新功能推出后&#xff0c;用户可以在视频…

Diskless:云与互联网数据中心的下一个大变革

作为数字经济的核心产业&#xff0c;云与互联网数据中心正面临着下一波技术浪潮的冲击&#xff1a;云原生应用和Serverless无服务器计算的全面普及&#xff0c;推动数据中心底层硬件资源彻底解耦池化和重组整合&#xff0c;形成新的扁平分层——新型存算分离硬件架构&#xff0…

定时循环执行Python脚本 —— 定时执行专家

目录 提前准备 方案一、执行DOS命令 方式 1、在《定时执行专家》里新建“执行DOS命令”任务 方案二、执行脚本文件 方式 1、编写 .bat 脚本&#xff0c;用来执行Python脚本 2、在《定时执行专家》里新建“执行脚本文件”任务 本文提供两种使用《定时执行专家》定时循环执…

挑选在线客服系统的七大注意事项

在线客服系统是客户关怀软件&#xff0c;能够为访客和客服提供即时对话&#xff0c;对访客来说&#xff0c;能够为其提供一个快速、高效的沟通方式&#xff0c;即时性的互动提高访客沟通体验&#xff1b;对客服来说&#xff0c;有效提高客服效率,为客服人员节省大量宝贵时间。 …

机器学习 | 支持向量机

一.基本原理 SVM是一种二分类模型 基本思想&#xff1a;在特征空间中寻找间隔最大的分离超平面使数据得到高效的二分类&#xff0c;具体来讲&#xff0c;有三种情况&#xff08;不加核函数的话就是线性模型&#xff0c;加了之后才会升级为一个非线性模型&#xff09; 当训练…

玩以太坊链上项目的必备技能(Constant 和 Immutable 状态变量-Solidity之旅十六)

constant&#xff08;常量&#xff09; 说到常量这一概念&#xff0c;拥有现代编程经历的您&#xff0c;对这一词再熟悉不过了。 常量&#xff0c;常量&#xff0c;顾名思义便是变量值始终不变&#xff0c;这在很多面向对象程序语言中都有。 相对 Solidity 来说&#xff0c;…

Web入门开发【六】- 域名认证

欢迎来到霍大侠的小院&#xff0c;我们来学习Web入门开发的系列课程。 首先我们来了解下这个课程能学到什么&#xff1f; 1、你将可以掌握Web网站的开发全过程。 2、了解基础的HTML&#xff0c;CSS&#xff0c;JavaScript语言。 3、开发自己的第一个网站。 4、认识很多对编…

LabVIEW如何减少下一代测试系统中的硬件过时2

LabVIEW如何减少下一代测试系统中的硬件过时2 HAL最佳实践 从通用测试函数中分离测试逻辑 一个重要的最佳实践是将特定于dut的测试逻辑与更通用的、可重用的测试模块分离&#xff0c;以提高重用性并减少重新验证和文档成本。解耦和使层模块化可以改进系统架构&#xff0c;使…

08 面向对象三大特性

目录 一 封装 1.1 概述 1.2 为什么要进行封装&#xff1f; 1.3 Java中的封装 1.4 四种访问权限修饰符 1.5 练习 二 继承 2.1 继承的由来 2.2 继承的好处 2.3 语法格式 2.4 继承的特点之一&#xff1a;成员变量 2.4.1 父类成员变量私有化 2.4.2 父类和子类成员变量…

二维刚体变换

欢迎访问我的博客首页。 二维刚体变换1. 二维旋转矩阵2. 参考1. 二维旋转矩阵 二维世界坐标系中任一点 P(x,y)P(x, y)P(x,y) 绕原点逆时针旋转 θ\thetaθ 度到点 P′(x′,y′)P(x, y)P′(x′,y′)&#xff0c;这个旋转可以用一个二维矩阵表示 R逆[cosθ−sinθsinθcosθ].(1.…

女文科生转行做程序员,工资涨了4倍,戏说“我是女生”怕啥秃顶

前几天&#xff0c;有一个女生在后台留言&#xff0c;问她要不要毕业后做程序员工作&#xff1f;自己特别纠结。 情况是这样的&#xff1a;她今年大学毕业&#xff0c;学计算机专业&#xff0c;有一定兴趣&#xff0c;但父母比较反对&#xff0c;列举了很多程序员熬夜加班的痛…

Fragment案例

Fragment案例 1.案例要求 框架布局项目难点&#xff1a;1 导航栏的实现&#xff0c;显示导航按钮、切换Fragment 2 每个Fragment的创建、显示 3 Fragment的跳转&#xff08;从新闻列表到新闻详情&#xff0c;再返回&#xff09; 涉及的技术&#xff1a;用RadioGroup及RadioButt…