【图像检测】基于形态学算法实现pcb电路板缺陷检测matlab源码

2021/4/24 12:25:16

本文主要是介绍【图像检测】基于形态学算法实现pcb电路板缺陷检测matlab源码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

数学形态学操作可以分为二值形态学和灰度形态学,灰度形态学由二值形态学扩展而来。数学形态学有2个基本的运算,即腐蚀和膨胀,而腐蚀和膨胀通过结合又形成了开运算和闭运算。
开运算就是先腐蚀再膨胀,闭运算就是先膨胀再腐蚀。

  • 二值形态学

粗略的说,腐蚀可以使目标区域范围“变小”,其实质造成图像的边界收缩,可以用来消除小且无意义的目标物。式子表达为:


该式子表示用结构B腐蚀A,需要注意的是B中需要定义一个原点,【而B的移动的过程与卷积核移动的过程一致,同卷积核与图像有重叠之后再计算一样】当B的原点平移到图像A的像元(x,y)时,如果B在(x,y)处,完全被包含在图像A重叠的区域,(也就是B中为1的元素位置上对应的A图像值全部也为1)则将输出图像对应的像元(x,y)赋值为1,否则赋值为0。
我们看一个演示图。


B依顺序在A上移动(和卷积核在图像上移动一样,然后在B的覆盖域上进行形态学运算),当其覆盖A的区域为[1,1;1,1]或者[1,0;1,1]时,(也就是B中‘1’是覆盖区域的子集)对应输出图像的位置才会为1。

  • 膨胀

粗略地说,膨胀会使目标区域范围“变大”,将于目标区域接触的背景点合并到该目标物中,使目标边界向外部扩张。作用就是可以用来填补目标区域中某些空洞以及消除包含在目标区域中的小颗粒噪声。

该式子表示用结构B膨胀A,将结构元素B的原点平移到图像像元(x,y)位置。如果B在图像像元(x,y)处与A的交集不为空(也就是B中为1的元素位置上对应A的图像值至少有一个为1),则输出图像对应的像元(x,y)赋值为1,否则赋值为0。
演示图为:

  • 小结

也就是说无论腐蚀还是膨胀,都是把结构元素B像卷积操作那样,在图像上平移,结构元素B中的原点就相当于卷积核的核中心,结果也是存储在核中心对应位置的元素上。只不过腐蚀是B被完全包含在其所覆盖的区域,膨胀时B与其所覆盖的区域有交集即可。

  • 灰度形态学

在讲述灰度值形态学之前,我们进行一个约定,即将结构元素B覆盖住的图像A的区域记为P(取Part之意)。

  • 灰度形态学的腐蚀

那么灰度形态学中的腐蚀就是类似卷积的一种操作,用P减去结构元素B形成的小矩形,取其中最小值赋到对应原点的位置即可。
我们来看一个实例,进行加深对灰度形态学的理解。
假设我们有如下的图像A和结构元素B:

进行灰度形态学腐蚀的过程如下:

我们对输出图像的第一个元素的输出结果进行具体的展示,也就是原点对应的4的位置。输出图像其他的元素的值也都是这样得到的。我们会看到,B首先覆盖的区域就是被减数矩阵,然后在其差矩阵中求min(最小值)来作为原点对应位置的值。

灰度形态学的膨胀

根据上面对腐蚀的描述,我们对膨胀做出同样的描述,灰度形态学中的膨胀就是类似卷积的一种操作,用P加上B,然后取这个区域中的最大值赋值给结构元素B的原点所对应的位置。


这里也对输出图像第一个元素值的来历做个说明。

对上面矩阵的和求最大值就是6,所以把6赋值给结构元素原点所对应的位置。

  • 小结

上面介绍了灰度形态学的概念,这里来说一说各自的用处。相比较于原图像,因为腐蚀的结果要使得各像元比之前变得更小,所以适用于去除高峰噪声。而灰度值膨胀的结果会使得各像元比之前的变得更大,所以适用于去除低谷噪声。

function pcbjiance()
dcpcbrgb=imread('待检测pcb.jpg');%读入待检测pcb图像
figure(1)
imshow(dcpcbrgb);
title('待检测pcb');
t=rgb2gray(dcpcbrgb);%待检测pcb图像灰度化
lvbo=medfilt2(t);%中值滤波
uu=im2bw(lvbo);%二值化
u=bwmorph(uu,'spur',8);%去除物体小的分支
p=bwmorph(u,'fill');%填充孤立黑点
dc=bwmorph(p,'clean');%去除孤立亮点
figure()
imshow(dc);
title('预处理后待检测pcb图像');
goldenpcbrgb=imread('标准pcb图像.jpg');%读入标准pcb图像
biaozhungray=rgb2gray(goldenpcbrgb);%标准pcb图像灰度化
bj=im2bw(biaozhungray);%二值化
figure()
imshow(goldenpcbrgb);
title('标准pcb');
figure()
imshow(bj);
title('标准pcb二值化图像')
dc_rect=[80 370 150 130];%待检测pcb图像中选取参与互相关计算区域的矩阵
bj_rect=[40 320 200 190];% 标准pcb图像中选取参与互相关计算区域的矩阵
bj_sub=imcrop(bj,bj_rect);%剪裁标准pcb图像
  max_c=0;%初始化互相关最大值
 for rr=-2:1:2%待检测pcb图像依次旋转的角度(步进值可调)
    dc_rot=imrotate(dc,rr,'nearest');%待检测pcb图像旋转,使用邻近插值法
    dc_sub=imcrop(dc_rot,dc_rect);%裁剪带检测pcb图像
    c=normxcorr2(dc_sub,bj_sub);%计算互相系数
[max_c1,imax1]=max(abs(c(:)));%max_c1为系数最大值,imax1为系数最大值对应的位置下标
   if(max_c1>max_c)%每一次循环的最大值进行比较
      max_c=max_c1;%取最大的值
      angle=rr;%把取得最大值时对应的旋转角度赋给angle
   end
end

end
hpqs
dxqs
aoxian
duan4lu
hpds
dxdy
tuqi
duan3lu
tongban

完整代码或者代写添加QQ1575304183

往期回顾>>>>>>

【图像识别】国外车牌识别matlab源码

【图像识别】基于svm支持向量机算法表情识别matlab源码

【图像识别】基于cnn卷积神经网络之验证码识别matlab源码

【图像识别】基于svm植物叶子疾病检测和分类matlab源码​​​​​​​

【图像识别】路面裂缝识别含GUI源码matlab源码​​​​​​​

【图像识别】基于RGB和BP神经网络的人民币识别系统含GUI界面matlab源码​​​​​​​

【图像识别】条形码识别系统matlab源码​​​​​​​

【图像识别】基于不变矩的数字验证码识别含GUI界面matlab源码​​​​​​​

【图像识别】基于模板匹配之手写数字识别系统GUI界面matlab源码​​​​​​​

【图像识别】基于贝叶斯分类器之目标识别matlab源码

【图像识别】身份证号码识别matlab源码

【图像识别】条形码识别系统matlab源码​​​​​​​

【模式识别】基于特征匹配的英文印刷字符识别matlab源码

【图像分类】基于极限学习分类器对遥感图像分类matlab源码​​​​​​​

【图像识别】基于BP神经网络之字母识别matlab源码

【图像特征处理】指纹图像细节特征提取matlab源码

【图像识别】基于反馈神经Hopfield的数字识别matlab源码

【图像识别】基于二值膨胀差分和椒盐滤波之教室内人数识别系统matlab源码

【图像识别】火灾检测matlab源码GUI

【模式识别】基于 Hough变换视频车道线检测matlab源码​​​​​​​

【模式识别】基于matlab Hough变换图片车道线检测

【模式识别】基于差影法之三维人体姿态行为识别matlab源码

【模式识别】指针式表盘识别matlab源码

【图像识别】表情检测matlab源码

【图像检测】基于LSD直线检测matlab源码

【图像识别】基于帧差法跌倒检测matlab源码

【图像识别】基于组合BCOSFIRE过滤器进行墙体裂缝识别matlab源码

【图像边缘检测】基于插值法亚像素边缘检测matlab源码

【模式识别】基于贝叶斯最小错误率手写数字识别matlab 源码

【模式识别】基于PCA手写数字识别matlab 源码

【模式识别】基于模板匹配的手写体数字识别matlab源码

【图像识别】基于模板匹配车牌识别matlab源码含GUI

【图像识别】基于模板匹配之人脸表情识别matlab源码含GUI

【图像识别】基于LBP+LPQ算法融合人脸表情识别matlab源码

【图像识别】基于HSV和RGB模型水果分类matlab源码含 GUI

【图像识别】基于模板匹配之数字识别matlab源码

【图像识别】基于BP神经网络的手写字体识别matlab源码含GUI界面

【图像识别】基于ksvd字典学习之人脸表情识别matlab源码

【图像识别】基于ORL数据库的PCA人脸识别系统matlab源码

【图像检测】基于 gabor滤波器布匹瑕疵检测matlab源码

【图像识别】基于yolo v2深度学习检测识别车辆matlab源码



这篇关于【图像检测】基于形态学算法实现pcb电路板缺陷检测matlab源码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程