【缺陷检测】基于matlab GUI印刷电路板自动缺陷检测【含Matlab源码 1912期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、印刷电路板自动缺陷检测简介

我国是PCB生产大国,据世界电子电路理事会WECC各协会统计[1],2007年中国大陆PCB产值占全球总产值的27.9%,仅一年时间就比2006年增长了17.0%。但在我国PCB行业高速发展的同时,也面临着巨大的挑战,那就是PCB质量问题。在生产过程中任何一道工序甚至PCB上的任何1条线路出现问题都会导致整个PCB板的报废。高废品率提高了生产成本。如何及时发现并减少废品率,是当前所有PCB生产厂家的迫切需求。在当前人工目测、在线测试等众多检测方法中,自动光学检测AOI(Automatic Optic Inspection)在成本、效率、可靠性等方面都显示出独特的优势。本文通过图像处理技术开发了一套PCB缺陷自动检测系统。本文主要介绍该系统的软件实现部分。

1 系统流程
系统软件组成如图1所示。首先在同一个工作台上拍摄PCB标准图,这是为了尽量保持拍摄标准图与待测图具有相同的物距、焦距等,以减少图像配准的耗时以及尽量减少误差,提高识别率。对标准图进行中值滤波以滤除噪声平滑图像,然后保存标准图。检测时打开被测图,首先进行滤除噪声等预处理,然后通过定位圆进行图像配准;再做差影运算,通过阈值变换分离出差影特征。由于图像配准时不能完全做到像素一一对应以及阈值分割得不完美,将引起阈值变换后的二值图可能存在非缺陷部分。如果不能把这些部分去除,会造成误检。所以还需要进行形态学的变换来滤除噪点。最后则对分离出来的缺陷目标进行几何特征统计并得出结论。
在这里插入图片描述
图1 系统的软件处理流程

2 图像的预处理与配准
2.1 图像的去噪运算

图像在形成、传输、接收和处理的过程中,不可避免地存在着外部和内部干扰,如光电转换过程中敏感元件灵敏度的不均匀性、数字化过程的量化噪声、传输过程中的误差以及人为因素等,都会引起噪声[2]。目前去噪效果很理想的算法是中值滤波。中值滤波是一种非线性的信号处理方法,其原理如下:假设有1个一维序列f1,f2,f3,…,fn,取该窗口长度(点数)为m(m为奇数)。对该序列进行中值滤波,即从序列中相继抽取m个数fi-v,…,fi-1,fi,fi+1,…,fi+v,其中fi为窗口的中心点值,v=(m-1)/2。再将这m个点值按其数值大小排序,取中间的那个数作为滤波输出,用公式表示为:yi=med{fi-v,…,fi-1,fi,fi+1,…,fi+v},其中i∈Z,v=(m-1)/2。图2所示为中值滤波前后图片的对比效果。由此可见,中值滤波对滤除噪声,保留特征信息具有比较理想的效果。
在这里插入图片描述
图2 中值滤波效果图

2.2 图像的配准
图像的配准是对取自不同时间、不同传感器或者不同视角的同一场景的2幅图像或者多幅图像图形匹配的过程。图像配准通常通过计算图像的相似度来进行,而图像的相似度是通过计算相似性测度评价的。相似性测度又分为互相关相似性测度、基于傅里叶分析的测度以及序贯相似性检测。其中互相关相似测度是最基本的相似性测度,其原理如下:假设有模板T和搜索图S,Si,j表示模板覆盖下的那块搜索图[3],其中i、j表示位置。则其互相关相似度为:
在这里插入图片描述
归一化为:
在这里插入图片描述
T和Si,j越相似,则R(i,j)越大,当T和Si,j完全相似时,R(i,j)=1,因此可以根据R(i,j)的大小来判断T和Si,j的相似程度。

2.3 几何匹配
2.3.1 匹配原理

本文对缺陷检测采取差影法检测,差影法检测必须是待测图与标准图的像素基本对应。所以差影法的核心就在于图像的几何匹配。待测图与标准图的匹配通常采用设置定位标志来解决,也就是在PCB板对角线部位通过添加特定的图形,定位时通过图形在标准图和目标图板上的几何位置差异进行缩放、平移和旋转的几何操作来实现待测图与标准图的像素一一对应。几何匹配的效果很大程度上取决于定位图形位置尺寸的获取。通常定位图形选用形状规则的圆来进行,不仅因为圆心坐标具有很好的定位作用,还因为目前对于圆检测的研究已经相对比较成熟,比较容易检测出圆的特征尺寸。

2.3.2 圆的检测
对于圆的检测目前绝大多数是通过Hough变换来进行。Hough变换是利用图像空间与参数空间的对应关系,将图像控件的检测问题转化到参数空间,通过参数空间进行简单的累加统计来完成检测任务。Hough变换的圆形检测原理其圆的方程表示为:
在这里插入图片描述
在参数空间建立1个三维的累加数组A(a,b,r),计算出每1个三元组(a,b,r),并对A累加:
在这里插入图片描述
如果半径r固定,则参数空间与图像空间的对应如图3所示。黑色部分对应图像空间中的圆周上的点,而圆周则为可能的圆心位置。因此,在图像空间中共圆的点在参数空间中对应同一个点,即图像空间中的点对应参数空间中的圆,参数空间中的点对应图像空间中的圆。算法的实现也正是利用了这种特性。
在这里插入图片描述
图3 Hough变换的参数空间
如果直接通过这种方法进行圆检测,由于需要对整幅图的像素进行逐点运算并判断,会占用很多系统时间,因此速度上无法满足实时性的需求。基于Hough变换的圆检测方法[5]通过先对图像进行灰度化、去噪、边缘检测以及形态学运算等预处理,再通过使用多维数组代替循环计算进行Hough变换,可以大大提高检测速度与准确率。

2.3.2 图像的几何变换
图5所示为PCB板定位圆的位置,其中A(x1,y1)、B(x2,y2)分别为2个定位圆的圆心坐标。由于标准板上和待测板上都有定位圆,因此待测图因摄像头畸变或者工作台振动而产生的偏差可以通过A、B坐标的偏差对待测图进行几何变换进行调整,调整步骤为:

(1)计算出待测图定位圆心的水平偏角θAB和标准图的θ′AB。如果θAB≠θ′AB,则对待测图进行旋转变换。旋转角度为θAB―θ′AB(顺时针方向为正)。

(2)计算出待测图定位圆心的距离LAB和标准图的L′AB,如果LAB≠L′AB,则对待测图进行缩放变换。缩放倍数为n=L′AB/LAB(n>1表示缩放)。

(3)计算出待测图2个定位圆心线段的中点坐标经过(1)、(2)两步运算后的坐标D。将D与标准图的D′进行比较,如果不相等,则X方向平移Dx′-Dx,Y方向平移Dy′-Dy(屏幕左上角为原点,X轴正方向朝右,Y轴正方向朝下)。
在这里插入图片描述
图5 定位圆

3 缺陷检测
3.1 阈值变换

几何配准对标准图和待测图做差运算,得到的差影图如图6(a)所示,此图并非二值图,为了对缺陷进行统计识别,需要通过阈值分割将其转化为二值图。图像分割的方法可分为固定阈值分割和自动阈值分割。固定阈值分割是通过一个确定的或者人为操作时选定的阈值进行二值化的方法。由于该法很不灵活且不具有自动性,所以本文主要讨论自动阈值分割,通过搜索直方图的方法来选取全局阈值进行分割。该类方法主要有:双峰法、最大内间方差阈值(OSTU)法、P_tittle阈值分割法、最大熵法等。本文使用最大内间方差阈值(OSTU)法[5]。该法基本思想是:最佳阈值应当使得不同类之间的可分离性最大。把待处理图像的直方图在某一阈值与支出分割为2组,当被分割成2组的间方差最大时,决定阈值。OSTU分割后的图像如图6(b)所示。
在这里插入图片描述
图6 差影运算与阈值分割效果

3.2 形态学变换
由于配准过程存在的误差以及图片本身的微小畸变缺陷,所以差影运算后的图像会有无法消去的非缺陷部分。如图7所示,其灰度值和缺陷部分灰度值相差不大,阈值分割后也必然存在这部分噪点,如果不把这些部分消除掉,会造成误检。通过形态学变换可以消除这些噪点。
在这里插入图片描述
图7 形态学运算后
形态学又称数学形态学[6],是一种分析几何形状的数学方法,是建立在集合代数基础上的,用集合论方法定量描述集合结构的科学。最基本的形态学运算子有:腐蚀(Erosion)、膨胀(Delation)、开(Opening)和闭(Closing)。由于需要滤除噪点,本文使用了腐蚀和开运算。

对于1个给定的目标图像X和1个结构元素S,如果S在图像上移动,在每1个当前位置x,S[x]只要3种可能的状态:S[x]⊆X、S[x]⊆Xc、S[x]∩X与S[x]∩Xc均不为空。其中满足S[x]⊆X的点x的全体构成结构元素与图像的最大相关点集,则称这个点集为S对X的腐蚀,记为XӨS。用集合的方式定义为:XӨS={x|S[x]⊆X}。腐蚀的作用是消除物体边界点,可以把小于结构元素的物体去掉,选取不同大小的结构元素,就可以去掉不同大小的物体。

腐蚀可以看作是将图像X中每1个结构元素S全等的S[x]收缩为点x。反之,将X中的每1个点X扩大为S[x]。这就是膨胀运算,用集合方式定义为:XӨS={x S[x]∩x≠0}。与腐蚀相反,膨胀运算的作用是把图像周围的背景点合并到物体中。

开运算和闭运算是在腐蚀和膨胀的基础上定义的。开运算就是对图像先进行腐蚀运算再进行膨胀运算。而闭运算是对图像先进行膨胀运算再进行腐蚀运算。

通过这4种形态学算子的组合可以对图像进行包括图像分割、特征抽取、边缘检测、图像滤波、图像增强和恢复等操作。图7是对阈值分割后的图进行1次腐蚀运算和1次开运算后的结果。留下来的4处正是目标电路板上缺陷位置的二值图。

⛄二、部分源代码

function varargout = Mainyinshua(varargin)
% Prepared by OON CHEE YEE, 27737268
% MAINYINSHUA MATLAB code for Mainyinshua.fig
% MAINYINSHUA, by itself, creates a new MAINYINSHUA or raises the existing
% singleton*.
%
% H = MAINYINSHUA returns the handle to a new MAINYINSHUA or the handle to
% the existing singleton*.
%
% MAINYINSHUA(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in MAINYINSHUA.M with the given input arguments.
%
% MAINYINSHUA(‘Property’,‘Value’,…) creates a new MAINYINSHUA or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Mainyinshua_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Mainyinshua_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Mainyinshua

% Last Modified by GUIDE v2.5 23-Jun-2022 19:33:32

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @Mainyinshua_OpeningFcn, …
‘gui_OutputFcn’, @Mainyinshua_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% — Executes just before Mainyinshua is made visible.
function Mainyinshua_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Mainyinshua (see VARARGIN)

% Choose default command line output for Mainyinshua
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Mainyinshua wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = Mainyinshua_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% — Executes on button press in CheckDefects.
function CheckDefects_Callback(hObject, eventdata, handles)
% hObject handle to CheckDefects (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Creating global variables to be used across Callback Function
global template test defect
% Display image in top right axes
axes(handles.axes6)
% by using image substraction between template and test, defects can be
% identified as diff_1 variable
defect= imabsdiff(template,test);
% display test image
imshow (test)
% draw a boundingbox on each defect found on PCB
all_defect_bboxes = regionprops(defect,‘BoundingBox’,‘centroid’);
hold on

for i = 1:length(all_defect_bboxes)
% Accessing each bounding box to obtain its position and insert
% annotation
each_boundingbox = all_defect_bboxes(i).BoundingBox;
rectangle(‘Position’,each_boundingbox,‘EdgeColor’,‘r’,‘LineWidth’,1.5)
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]胡秀亮,高志,叶健敏,王涛.基于图像处理技术的PCB缺陷自动检测系统[J].微型机与应用. 2010,29(01)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值