基于MATLAB的三极管个数检测.docx
- 文档编号:4911562
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:18
- 大小:752.86KB
基于MATLAB的三极管个数检测.docx
《基于MATLAB的三极管个数检测.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的三极管个数检测.docx(18页珍藏版)》请在冰豆网上搜索。
基于MATLAB的三极管个数检测
基于图像处理的元器件个数识别
摘要
数字图像处理是实现图像增强、复原、编码、压缩等,其主要为改善图像的质量,以人为对象,且以改善人的视觉效果为目的。
目前,图像处理系统应用领域广泛医学、军事、科研、商业等领域。
因为数字图像处理技术易于实现非线性处理,处理程序和处理参数可变,故是一项通用性强,精度高,处理方法灵活,信息保存、传送可靠的图像处理技术。
本设计的数字图像处理与识别技术系统以数字图像处理理论为基础,基于Matlab工具工作环境设计,能很好、快速的应用于识别本专业以后将要经常使用的电子元器件。
主要作用为识别相同元器件的个数,相对于传统的机械识别具有安全性高,非接触性,高速度等特点。
此种数字图像处理算法可以广泛应用于各个行业的相同或相近的物品识别,从而大大提高生产效率。
进一步的工作是使用opencv实现图像处理,最终通过上下位机的联调最终在规定的时间内完成对采集图像的处理。
关键字:
数字图像;图像处理;图像识别;Matlab;元器件.
Abstract
DigitalImageProcessingistorealizetheImageenhancement,recovery,coding,compression,itsmainforimprovingthequalityofimages,adheretotheobject,andtoimprovethepersonforthepurposeofvisualeffect.Atpresent,imageprocessingsystemiswidelymedicine,militaryandscientificresearch,business,etc.Thedesignofthedigitalimageprocessingandrecognitiontechnologyinthedigitalimageprocessingsystembasedonthetheoryoftheworkingenvironment,basedonMatlabtooldesign,canbeverygood,rapidappliedtoidentifythemajoroftenusedelectroniccomponents.Mainfunctionforthesamenumberofcomponents,theidentificationofthetraditionalmechanicalidentificationwithahighlevelofsecurity,non-contact,highspeed,etc.Thedigitalimageprocessingalgorithmscanbewidelyusedinvariousindustriesofthesameorsimilargoodsidentification,whichgreatlyimprovetheproductionefficiency.
Keywords:
Digitalimage,Imageprocessing,Imagerecognition,Matlab,Components.
0.绪论
数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
数字图像处理最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。
数字图像处理作为一门学科大约形成于20世纪60年代初期。
早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。
图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等。
首次获得实际成功应用的是美国喷气推进实验室(JPL)。
他们对航天探测器徘徊者7号在1964年发回的几千张月球照片使用了图像处理技术,如几何校正、灰度变换、去除噪声等方法进行处理,并考虑了太阳位置和月球环境的影响,由计算机成功地绘制出月球表面地图,获得了巨大的成功。
随后又对探测飞船发回的近十万张照片进行更为复杂的图像处理,以致获得了月球的地形图、彩色图及全景镶嵌图,获得了非凡的成果,为人类登月创举奠定了坚实的基础,也推动了数字图像处理这门学科的诞生。
因为数字图像处理技术易于实现非线性处理,处理程序和处理参数可变,故是一项通用性强,精度高,处理方法灵活,信息保存、传送可靠的图像处理技术。
本图像识别统计装置设计数字以数字图像处理理论为基础,基于Matlab工具工作环境设计,能很好、快速的应用于识别本专业以后将要经常使用的电子元器件。
主要作用为识别相同元器件的个数,相对于传统的机械识别具有安全性高,非接触性,高速度等特点。
此种数字图像处理算法可以广泛应用于各个行业的相同或相近的物品识别,从而大大提高生产效率。
1.设计要求
主要运用图像处理的综合方法实现,把均值滤波增强,腐蚀运算和膨胀运算,开运算,灰度变换等相结合,来实现本次设计:
1)设计一套符合应用场合的图像采集装置测量装置,下位机主要是嵌入式系统,这里面主要是设计上位机使用的环境。
2)详细写出图像采集装置和测量装置的组成部件以及参数。
3)详细列出图像采集和测量的使用环境。
4)设计处理的流程。
5)对实验使用的关键原理作以介绍。
2.功能介绍
本设计为小功率的三极管元件图像识别统计装置,通过数码相机获取平铺无重叠堆积的三极管的图像,并通过Matlab工具处理后统计三极管的数目。
通过控制控制数码相机的拍摄实现拍摄—统计—拍摄的过程。
可以由MCU实现三极管的传送,上位机实现统计显示。
本装置的统计方式为软件识别,与传统的机械清点相比具有速度快,损耗低等特点,目前的缺陷就是清点精度相对比较的低。
3.总体方案设计
3.1功能模块划分
本装置有检测传送控制、图像拍摄、软件处理三部分组成,MCU主要负责三极管的取送,数码相机负责图像的获取;而具体的任务分配及数据处理则由处理能力强大的上位机(PC机)来完成。
总体功能可由下图表示:
图3-1整体功能模块示意图
3.2MCU传送控制流程
装置MCU控制传送的元件块分块及传送速度,这里主要介绍上位机图像处理部分,下位机的设计就不详细介绍。
其与数码相机存在控制通讯接口,逻辑关系如下图所示:
图3-2MCU传送控制
3.3数码相机拍摄
数码相机获取的图片是后续程序处理的基础,所以在得到的图片质量上要有好的保证。
比如图像的曝光度,解析度,对比度、色调等,所以有必要调整光照,设定好元件放置处的背景色。
其中调整光照可以由MCU一并控制。
数码相机的启停可由MCU控制,也可由PC控制,但图片所涉及的数据量大,要求失真度低,图像数据传输通讯接口可采用USB接口。
这里使用imaging公司的摄像头和驱动进行上位机VC开发。
3.4软件处理流程
图3-3软件处理流程
4.图像处理
4.1图像格式转换
取的图像格式为RGB彩色图像,需要先将其转换为8位256级的灰度图像。
本程序采用Matlab的图像处理工具箱的函数rgb2gray来实现。
rgb2gray()
功能:
转换RGB图像或颜色映像表为灰度图像。
语法:
I=rgb2gray(RGB)
newmap=rgb2gray(map)
4.2去噪及特征提取
图4-1灰度图及其直方图
上图4-1为三极管统计的局部图片,图中可见,三极管的主体部分很背景及管脚有着明显的区别,可以通过选取合适的阈值进行二值化,从而提取出每个三极管的特征。
图4-2为此图像的直方图,从图中可见到比较明显的阈值分界点,但是并不是非常的明显,这是因为,图中有很多的三极管因为反光的缘故,导致主体部分有些发白,如图4-3所示。
图4-2需要进一步处理的地方
4.3灰度调整
对于这些发白部分,我们采用灰度调整及中值滤波进行处理,在matlab中,提供了两个函数进行相应的操作,其中imadjust进行灰度调整,其用法如下
Imadjst(f,[low_inhigh_in],[low_outhigh_out],gamma)
Gamma所表示的意义:
>1--------凹曲线
<1--------凸直线
=1--------直线
medfilt2用于进行中值滤波处理,其用法如下
F=medfilt2(f,[mn]);
f为输入图像
[mn]为中值滤波模板
F是中值滤波后输出的图像。
图4-1经过灰度调整及中值滤波后的图像如图4-4所示,可见,经过中值滤波后,三极管的主体部分有了较大的改善。
图4-3灰度处理中值滤波后图像
图4-4灰度调整中值滤波后的直方图
4.4二值化处理
经过滤波后,即可对图像进行二值化处理,首先,我们采用人工选择阈值的方法进行二值化,由图可见,对于本幅图片,其合适的阈值在50~100之间,通过试验,我们选取的值为80。
对图像二值化处理的程序如下:
[M,N]=size(F);
forx=1:
M
fory=1:
N
ifF(x,y)<80
F(x,y)=0;%低于阈值的值黑
else
F(x,y)=255;%高于阈值的值白
end
end
end
处理后的图像如图4-6所示:
图4-5二值化后结果
4.5阈值分割
当然仍有许多模糊的三极管管脚残影,但已经将三极管的主体很好的识别了出来,采用人工选择阈值的方法虽然可以成功分离出三极管的主体,但是这个阈值这是针对这张图片有效,对于获取的其它图片,这个阈值并不能正确地对图像进行二值化处理,因此我们决定采用自动阈值分割的方法来对图像进行二值化。
我们所选用的自动阈值分割方法为Otsu法,它是一种使类间方差最大的自动确定阈值的方法,该方法具有简单、处理速度快的特点,是一种常用的阈值选取方法。
在matlab中,提供了一个函数graythresh来实现Otsu法阈值分割,其用法如下:
T=graythresh(f);
其中,f为待进行阈值分割的灰度图像,T为返回的分割灰度比例,将其乘于256即为Otsu法划定的分割阈值。
优化后的程序如下:
T=graythresh(F);
T=T*256;
[M,N]=size(F);
forx=1:
M
fory=1:
N
ifF(x,y) F(x,y)=0;%%低于阈值的置黑 else F(x,y)=255;%%低于阈值的置白 end end end 采用Otsu法进行阈值二值化后的图像如图4-7所示: 图4-6Otsu法阈值分割后图像 由上可见,不管是采用人工阈值还是Otsu法自动阈值分割,仍然会残留很多的三极管管脚,它们将会严重干扰到对三极管的统计,对于这些噪声,我们采用图像形态学中的闭运算来进行处理,闭运算的原理是先对图像进行腐蚀后再进行膨胀,matlab提供了函数imclose来实现图像的闭运算。 其格式为: F=imclose(f,B); 其中,B为结构元素,可由以下两种办法生成 (1)B=ones(n); (2)B=strel(‘type’,[mn]); Type可以取以下的值 square生成一个m*n方形矩阵 line生成一条长度为m,斜率为n°的直线 disk生成一个m*n大小的蝶形 ball生成一个m*n大小的球形 滤除三极管管脚后的结果如图4-8所示。 图4-7去噪后的局部图像 由图中可见,噪声被有效的滤除了,但是,去除了噪声的同时,也使部分接触紧密的三极管在闭运算后连成一个整体,如图4-8中的红圈所示,因此在此后的识别统计中需要对其进行特殊的处理。 5.识别统计 5.1图像反色 将以上处理过后的图像反色,如图4-10所示 图4-8反色后的图像 5.2函数bwlabel统计 三极管数目的统计采用函数bwlabel来实现. bwlabel功能: 标注二进制图像中已连接的部分,并将每个连同的部分标上相同的序号。 语法: L=bwlabel(BW,n),[L,num]=bwlabel(BW,n) 统计的过程如下: 1)通过bwlabel计算出图像中所以的连通区域的数目,这包括了单个、两个、及三个以上的三极管。 2)计算每个连通区域的大小,根据大小判断其中包括的三极管数目,分别计算两个三极管,三个三极管,及三个以上三极管的数目。 3)将上面各项统计结果加起来即为三极管的数目。 具体程序如下: %对图像贴标签 [LN]=bwlabel(F1,8) Sum=[]; %统计每个标签的数量 fori=1: N [r,c]=find(L==i); rc=[rc]; Num=length(rc); Sum([i])=Num; end %根据每个标签数量,分别统计2个,3个,4个三极管的数量 fori=1: length(Sum) if(Sum([i]))>2000 N=N+3; elseif(Sum([i]))>1450 N=N+2; elseif(Sum([i]))>900 N=N+1; end end 图4-9Matlab统计分析 经过统计,如图4-11所示,该幅图像的三极管数目约为481个。 6.完整设计程序 完整程序如下所示: clearall; closeall; f=imread('BJT.jpg'); F=rgb2gray(f); figure;imshow(F);title('原图'); figure;imhist(F);title('直方图'); F0=imadjust(F,stretchlim(F),[01]); Ft=medfilt2(F0,[55]); figure;imshow(Ft);title('灰度调整,中值滤波后的图像'); figure;imhist(Ft);title('灰度调整,中值滤波后的直方图'); T=graythresh(Ft); T=T*256-5; [M,N]=size(Ft); forx=1: M fory=1: N ifFt(x,y) Ft(x,y)=0;%低于阈值的值黑 else Ft(x,y)=255;%高于阈值的值白 end end end figure;imshow(Ft);title('二值化结果'); B=ones(10); F0=imclose(Ft,B); figure;imshow(F0);title('闭运算'); F1=imadjust(F0,[0,1],[1,0],1); figure;imshow(F1);title('反色'); %对图像贴标签 [LN]=bwlabel(F1,8) Sum=[]; %统计每个标签的数量 fori=1: N [r,c]=find(L==i); rc=[rc]; Num=length(rc); Sum([i])=Num; end %根据每个标签数量,分别统计2个,3个,4个三极管的数量 fori=1: length(Sum) if(Sum([i]))>2000 N=N+3; elseif(Sum([i]))>1450 N=N+2; elseif(Sum([i]))>900 N=N+1; end end 参考文献 [1]胡学龙等著数字图像处理电子工业出版社,2006.9. [2]朱衡君编著MATLAB语言及实践教程清华大学出版社,2005. [3]陈怀琛.MATLAB机器在理工科课程中的应用.西安电子科技大学出版社,2007. [4]董长虹等.MATLAB信号处理与应用国防工业出版社,2005. [5]李在铭.数字图像处理、压缩与识别技术电子科技大学出版社,2000.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 三极管 个数 检测