基于MATLAB的水果识别的数字图像处理.docx
《基于MATLAB的水果识别的数字图像处理.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的水果识别的数字图像处理.docx(23页珍藏版)》请在冰豆网上搜索。
基于MATLAB的水果识别的数字图像处理
图像处理(报告)
题目:
基于MATLAB的水果识别的数字图像处理
指导教师:
职称:
教授
学生姓名:
学号:
专业:
院(系):
完成时间:
2016年5月1日
第一章绪论
随着计算机的普遍使用,人类已经进入了一个高速发展的信息化时代,图像处理技术也愈来愈成为科学技术领域中必不可少的手段。
计算机图像处理及识别是计算机应用技术的一个重要方面,图像识别所提出的问题,是研究用计算机代替人们自动的去处理大量的物理信息,解决人类生理器官所不能识别的问题,从而部分代替人的脑力劳动。
它属于模式识别的范畴,也可以把模式识别狭义的理解为图像识别。
图像识别与图像处理的关系非常密切,互相交错,很难把它们截然分开。
为了进行图像识别,首先要进行图像处理,而有时候处理和识别是同时进行的。
一般来说,图像处理包括图像编码,图像增强,图像压缩,图像复原,图像分割等内容。
对图像处理环节来说,输入是图像(通常是处理过的图像),输出是类别和图像的结构分析。
在图像识别的特征提取过程中,常常也包括图像的分割。
我国是世界蔬菜,水果的生产大国,总产量均居世界第一位。
但由于品种结构不合理,产后商品化处理技术和设备落后,导致产品缺乏市场竞争力,出口数量少,价格低。
在我国,水果分级分类基本上仍由人工完成。
我国拥有世界最大的劳动力市场,人工拣选,分级果蔬产品是现代农副产品分类加工的主要方式。
这种方式虽然成本低廉,但却违背了解放生产力的根本目标,同时也带来了诸多无法客服的缺点:
劳动量大,生产率低。
机械分拣具有短时,高效等特点。
因此,研究和开发水果自动实时分类系统具有很重要的意义。
通过研究这个课题不但可以加深对图像处理基本思想的理解和对其方法的掌握,还熟悉了图像处理中的精髓内容-------目标分类识别。
本课题的研究具有分厂重要的经济和使用价值,应用前景十分广阔。
因此,很有必要对本课题进行深入细致的研究。
本课题以各种常见的水果识别为例,通过MATLAB编程,介绍了数字图像识别的一种基本方法,包括对图像的预处理以及特征提取,并根据不同水果的特征进行识别和分类,实现智能识别与处理的目的。
第二章数字图像处理基础
2.1图像采集
在进行图像处理之前,需要对图像进行采集,而图像经过采光设备采集后,得到的是连续的模拟信号,但计算机仅仅能够处理离散化的信息,因此,为了使图像能够在计算机里进行存储和处理,必须先将其进行数字化处理。
由于大多数传感器的输出是连续电压波形,所以为了产生一副数字图像,需要把连续的感知数据转化为数字形式,就要进行相应的处理,其处理分为两个步骤进行,即采样和量化。
采样就是将连续的图像空间的电压转换成离散采样集合的操作;量化就是图像函数值的数字化处理。
2.1.1图像的采样
对于图像的采样可以采取不同的措施,这些采样措施包括垂直方向的采样,水平方向的采样,二维采样等。
在实际应用时,要根据不同的需要选择适当的方式进行采样。
例如,在Vid-icon真空管摄像机中,采用行扫描方式形成一行行的视频信号结构,如图2-1和2-2所示。
在模拟信号送到采集卡后,要对其做垂直方向的采样,如图2-3所示,这就形成了矩形像元,称为Pixel点阵。
CCD摄像机由半导体光敏阵列组成,在使用CCD摄像机采样时,靶面直接对图像做点阵采样,将连续变化的二维图像投影到半导体光敏阵列,形成二维像元Pixel,如图2-3所示。
采样一般按等间距进行,称为均匀采样,如图2-4所示。
均匀采样是从空间上连续变化的图像中,按一定的数据和间隔采集数据,将图像在空间上分割成规则排列的一系列离散数据点的过程。
有时根据需要也可以采用非均匀采样,在变化比较剧烈,细节丰富的区域用较大的采样密度,在变化缓慢,细节较少的平缓区或背景区用较稀的采样密度,这种采样被称为自适应采样方法,如图2-5
图2-1
图2-2
图2-3
图2-4
图2-5
采样频率是指单位时间内采样的次数。
采样频率越高,得到的图像样本越逼真,图像的质量越高,但要求的存储量也越大。
实际应用中,原图像中的画面越复杂,色彩越丰富,则采样间隔应越小,即采样频率越高。
由于二维图像的采样时是一维的推广,要从取样样本中精确地复原图像,图像采样的频率必须大于或等于原图像最高频率分量的两倍,这就是图像采样的奈奎斯特定理。
2.1.2图像的量化
图像量化就是将采样得到的图像函数值(灰度值或颜色)进行数字化,通常每个像素的灰度值量化到0~255共256个灰度级。
以图2-6中的水平线AB的灰度值采样为例。
假设水平方向的像素个数为640,将水平方向分成640份,每一个等份中读取一个电压的采样值,作为对该像素采样的结果,见图2-7;再将采样的电压按照0~255之间的灰度值进行映射,便是图像量化的结果,见图2-8.从以上各图可以看出,该图像的水平扫描线AB经过采样和量化处理后,得到的是离散的,数值化的结果,便于在计算机内进一步存储,表达和处理。
图2-6物体的水平扫描线
图2-7AB上采样电压
图2-8AB上像素采样量化结果
图2-9给出了图像的采样,量化以及得到数字图像的过程,图像经过采样,量化处理后,便可以利用计算机对其进行处理了。
数字图像是真实场景的一种近似的表示结果。
如图2-10所示,。
从该图中可以明显的看出,数字图像中并不含有客观物体中的全部精确信息。
图2-9图像采样量化及显示示意图
图2-10数字图像是真实场景的近似表示
2.2图像处理的编程基础
利用软件实现图像处理时,常用的工具有MATLAB,OpenCV以及CDib类方法。
其中MATLAB是20世纪70年代美国新墨西哥大学计算机科学系主任CleveMoler为了减轻学生编程负担,用Fortran编写的;1984年由MathWorks公司正式推向市场。
目前,MATLAB已成为自动控制领域的标准计算软件,被广泛应用于工程计算及数值分析领域,并已成为国际公认最优秀的工程开发环境。
MATLAB是一个交互式软件系统,具有很强的数值计算功能和编程功能;具有结构控制,函数调用,输入输出等程序语言特征;有丰富的工具箱,图像处理就是其中一个功能强大的工具。
MATLAB利用M文件来实现图像处理功能,在命令窗口运行M文件并显示运行结果。
MATLAB支持灰度图像,二值图像,真彩图像和索引图像4种类型的图像,编程效率较其它高级语言高。
2.3图像的基本操作
图像处理的过程主要包括三个部分:
图像读入,图像处理过程以及图像的显示。
下面先介绍图像读入和显示方法,图像处理的相关方法将在下一章介绍。
2.3.1图像读入方法
为了便于阐述图像运算的实现方法,在每一种运算前要进行读入图像的操作。
用MATLAB读入图像的方法如下:
I=imread(‘x.bmp’);
或
I=imread(‘x’,‘bmp’)
MATLAB读入图像的类型包括强度图像(即灰度图像),二值图像,索引图像和真彩图像。
2.3.2图像显示方法
MATLAB常用imshow()显示各类图像,其功能如下
Imshow(BW)显示二值图像,BW为黑白二值图像矩阵
Imshow(X,map)显示索引图像,X为索引图像矩阵,map为色彩图示
Imshow(I)显示灰度图像,I为图像矩阵
Imshow(RGB)显示RGB图像。
RGB为RGB图像矩阵
Imshow(I,[lowhigh])将非图像数据显示为图像,这需要考虑数据是否超出了所显示类型的最大允许范围,其中[lowhigh]用于定义要显示数据的范围
第三章图像特征提取与分类
3.1总体设计思路
本课题的任务是基于苹果,桔子,香蕉,菠萝和桃子的不同图像特征,把需要的水果从中识别(提取)出来。
总体框架图如3-1所示:
图3-1框架图
(1)计算机读取图像
为了在计算机上进行处理,必须把作为处理对象的模拟图像转换成数字图像。
图像信息的获取一般包括图像的摄取,转换和数字化等几个步骤。
(2)图像去噪和对比度增强
图像有噪声和对比度较差的时候,这些会给最终的识别分类带来困难。
所以必须先对所给图像进行去噪和增强对比度的预处理。
(3)图像的二值化
所谓图像的二值化,就是使图像上所有点的灰度值只有两种可能,不为“0”就为“255”,也就是使整个图像呈现出明显的黑白效果。
(4)图像特征提取,特征参数计算
本课题中需要提取的图像特征有:
面积,周长,弧度,颜色等等。
利用这些参数就能将水果相互区分开来。
3.2图像预处理
3.2.1图像数据获取
计算机图像是图像以计算机文件的形式存在的,实质上是一些数字代码,它与通常所说的(传统意义上的)图像最大区别是计算机的图像是数据化的,而不是模拟化的(数字图像是模拟图像数据化的结果),它是一般图像的离散采样,因而具有一些传统图像中所没有的概念:
在计算机上,由更基本的单元构成,这些基本单元称为“像素”。
像素是被逐点描述的,具有一个明确的位置和色彩数值。
“计算机读取图像”就是把图像以数字代码形式存储起来。
用Matlab实现图像读取比C++简单,图像数据以矩阵的形式存放,其扫描规则是从左向右,从上到下。
程序如下:
functionShibie()
CaiTu=imread('D:
\图片\fruit01.jpg');%读取图像
HuiTu=rgb2gray(CaiTu);
YuanTu=im2double(HuiTu);
figure
(1);imshow(YuanTu);title('灰度图像');%显示原彩色图像的灰度图像
其中“D:
\MATLAB6p1\work\fruit01.jpg”是图像文件存放的路径,YuanTu是一个矩阵,它以数字形式表示图像。
Matlab以“%”后的文字作注释。
读取的灰度图像如图3-2所示:
图3-2灰度图像
3.2.2图像二值化处理
二值化就是把具有多级灰度的输入图像变换成灰度值只有0或1两种值的输出图像。
图像阈值分割是最常用的图像分割技术,主要利用图像中背景与对象之间的灰度差异。
理想状态下,背景与对象之间的灰度差异很大,且同一个对象具有基本相同的灰度值。
为了得到理想的二值图像,一般采用阈值分割技术。
它对物体与背景有较强对比的图像的分割特别有效,计算简单而且总能用封闭、连通的边界定义不交叠的区域。
二值化处理的关键是确定适当的阈值Th。
所谓的阈值,是指在图像分割时,作为区分物体与背景像素的门限,大于或等于阈值的像素属于物体,其他像素则属于背景。
如果阈值过大,过多的目标点被误认为背景点,目标被削弱,甚至会消失;如果阈值过小,过多的背景点被误认为目标点,噪声过大,目标特性也会被削弱,不利于正确识别。
所有灰度大于或等于阈值的像素被判决为属于物体,灰度值用"255"表示;否则这些像素点被排除在物体区域以外,灰度值为"0",表示背景。
这样一来物体的边界就成为这样一些内部的点的集合,这些点都至少有一个邻点不属于该物体。
通过二值化,设置一个阈值,把明亮的部分(图像中水果的灰度值比背景灰度值大)提取出来,即实现了目标对象的提取。
阈值法是一种简单有效的图像分割方法,它用一个或几个阈值将图像的灰度级分为几个部分,将属于同一部分的像素视为相同的物体。
利用阈值法,对于物体与背景之间存在明显差别(对比)的景物,分割效果十分有效。
只要阈值选取合适,将每个像素与之比较,进行二值化或者半二值化处理,就可以很好地将对象从背景中分离出来。
二值化后的图像如图3-3所示,阈值处理后图像如图3-4所示:
图3-3二值化图像
图3-4阈值处理后图像
3.2.3图像边缘检测处理
数字图像的边缘检测是图像分割、目标区域识别、区域形状提取等图像分析领域十分重要的基础,也是图像识别中提取图像特征的一个重要属性。
利用边缘检测来分割图像,其基本思想就是先检测图像中的边缘点,再按照某种策略将边沿点连接成轮廓,从而构成分割区域。
由于边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开,因此边缘检测技术对于数字图像十分重要。
由于受原始图像中灰度分布不均匀和光照等的影响,使得二值化后的图像不是很理想,如同一类水果中出现空洞,并且个别边缘处出现断裂等。
所以要进行边缘提取以弥补断裂的边缘部分,然后再基于数学形态学算子进行去除断边、图像填充等必要的后续处理。
(1)数学形态学
近年来,形态学图像处理已经发展成为图像处理的一个重要研究领域。
形态学运算是针对二值图像,并依据数学形态学(MathematicalMorphology)集合论方法发展起来的图像处理方法。
数学形态学是图像处理和模式识别领域的新方法,其基本思想是用具有一定形态的结构元素去量度和提取图像中的对应形状,以达到对图像分析和识别的作用。
(2)形态学基本运算
通常,形态学图像处理表现为一种邻域运算形式。
有一种特殊定义的邻域称为“结构元素”(StructureElement),在每个像素位置上它与二值图像对应的区域进行特定的逻辑运算,运算结果为输出图像的相应像素。
形态学运算的效果取决于结构元素的大小、内容以及逻辑运算的性质。
常见的形态学运算有腐蚀和膨胀两种。
常用的简单对称结构元素有:
圆形(disk)、方形(square)、菱形(diamond)。
①腐蚀(imerode):
腐蚀是一种消除边界点,使边界向内部收缩的过程。
利用该操作,可以消除小且无意义的物体。
②膨胀(imdilate):
膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。
利用该操作,可以填补物体中的空洞。
③开运算(imopen):
先腐蚀后膨胀的过程称为开运算。
利用该运算可以消除小物体,在纤细点处分离物体,平滑较大物体的边界,同时并不明显改变原来物体的面积。
④闭运算(imclose):
先膨胀后腐蚀的过程称为闭运算。
利用该运算可以填充物体内细小的空洞,连接邻近物体,平滑其边界,同时并不明显改变原来物体的面积。
通常,由于噪声的影响,图像在阈值化后得到边界通常都很不平滑,物体区域有一些噪声孔,背景区域上则散布着一些小的噪声物体。
连续的开和闭运算可以有效地改善这种情况。
Sobel算子是一种简单常用的微分算子,它不仅能检测边缘点,而且能进一步抑制噪声的影响。
Sobel算子是对数字图像f(x,y)的每个像素考查其相邻点像素灰度的加权差,即
S(x,y)=[f(x-1,y-1)+2f(x-1,y)+f(x-1,y+1)]-
[f(x+1,y-1)+2f(x+1,y)+f(x+1,y+1)]+
[f(x-1,y-1)+2f(x,y-1)+f(x+1,y-1)]-
[f(x-1,y+1)+2f(x,y+1)+f(x+1,y+1)]
利用Sobel算子进行边缘检测;利用数学形态学重新填充一下图像中的洞,最终处理后的图像符合我们的要求,其效果如图3-4:
图3-5sober算子边缘检测
3.3图像特征参数计算
特征提取前首先应用bwlabel函数对图中的五个图像进行编号,利用matlab相关函数对水果的周长、面积、圆率、平均色度等特征进行提取。
利用圆度,周长,面积,离心率,扩展度,矩形度等几何参数进行形状特征的图像检索。
识别完成后显示,并把其他水果都滤去
(1)周长的提取采用的是数边界像素点个数的方式,即像素点的个数越多代表周长越长。
(2)面积的提取采用的是数连接像素点个数的方式,跟周长类似,即像素点的个数越多代表面积越大。
(3)圆率的计算公式应用公式:
Ecllipseratio(i)=4*pi*Area(i)/Premeter(i)^2。
几种水果识别的程序如下:
fork=1:
row
Y=(labeled==k);
BY=bwperim(Y,8);%检测边缘跟踪,用于计算周长
%=========检测垂直方向连读的周长像素点==========%
P1=0;
P3=0;
Ny=0;%记录垂直方向连续周长像素点的个数
fori=1:
x
forj=1:
y
if(BY)
P3=j;
if((P3-P1)==1)%判断是否为垂直方向连续的周长像素点
Ny=Ny+1;
end
P1=P3;
end
end
end
%========检测水平方向连读的周长像素点=============%
P1=0;
P2=0;
Nx=0;%记录水平方向连续周长像素点的个数
forj=1:
y
fori=1:
x
if(BY)
P2=i;
if((P2-P1)==1)%判断是否为水平方向连续的周长像素点
Nx=Nx+1;
end
P1=P2;
end
end
end
SN=sum(sum(BY));%计算周长像素点的总数
Nd=SN-Nx-Ny;%计算奇数码的链码数目
H=max(sum(Y));%计算高度
W=max(sum(Y'));%图象Y经矩阵转置后,计算宽度
L=sqrt
(2)*Nd+Nx+Ny;%计算周长
%========四个形态特征值计算=========%——几何参数法
A(k)=bwarea(Y);%计算面积
CC(k)=4*pi*A(k)/(L*L);%计算圆度
R(k)=A(k)/(H*W);%计算矩形度
E(k)=min(H,W)/max(H,W);%计算扩展度
end
fori=1:
row
if(CC(i)==min(CC))%菠萝——圆度最小
dis
(1)=i;
[r,c]=find(labeled==i);
rbar=mean(r1);
cbar=mean(c1);
plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k','MarkerFaceColor','r','MarkerSize',10);
plot(cbar,rbar,'Marker','*','MarkerEdgeColor','w');
elseif(CC(i)==max(CC))%苹果——圆度最大
dis
(2)=i;
[r,c]=find(labeled==i);
rbar=mean(r2);
cbar=mean(c2);
plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k','MarkerFaceColor','y','MarkerSize',10);
plot(cbar,rbar,'Marker','*','MarkerEdgeColor','w');
elseif(yuan(i)==max(yuan))%香蕉——(e)离心率最大
dis(3)=i;
[r,c]=find(labeled==i);
rbar=mean(r3);
cbar=mean(c3);
plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',10);
plot(cbar,rbar,'Marker','*','MarkerEdgeColor','w');
elseif(E(i)==max(E))%梨——扩展度最大
dis(4)=i;
[r,c]=find(labeled==i);
rbar=mean(r4);
cbar=mean(c4);
plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',10);
plot(cbar,rbar,'Marker','*','MarkerEdgeColor','w');
elseif((CC(i)R(i)))%桃——圆度小于离心率,扩展度大于矩形度
dis(5)=i;
[r,c]=find(labeled==i);
rbar=mean(r5);
cbar=mean(c5);
plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',10);
plot(cbar,rbar,'Marker','*','MarkerEdgeColor','w');
end
End
3.4结论
(1)菠萝:
圆度最小
(2)苹果:
圆度最大
(3)香蕉:
离心率最大
(4)梨:
扩展度最大
(5)桃:
圆度小于离心率,扩展度大于矩形度
3.5结束语
通过这次课题设计,对数字图像处理的相关知识有了基本的认识,对图像处理中的前沿内容——模式识别也有了一定的了解。
在设计本系统的过程中,对于数字图像处理中的一些常用的处理方法,如去噪锐化、阈值分割、区域划分、数学形态学、边缘检测等也有了较为清晰的掌握。
对Matlab语言在图像处理中的应用有了更进一步的认识。
此次课题也有很多不足之处,例如对各个水果识别的条件需要进一步的细化,应将分类条件设置在多个以上,这样能提高识别的准确度。
参考文献
[1].冈萨雷斯(Gonzalez,R.C.)等著;阮秋琦等译.数字图像处理[M].第3版.电子工业出版社.2011
[2].胡小风,赵辉.VisualC++/MATLAB图像处理与识别实用案例精选[M].北京邮电出版社.2004
[3].刘刚.MATLAB数字图像处理[M].机械工业出版社.2010
[4].高成.Matlab图像处理与应用[M].国防工业出版社.2007
[5].高展宏等.基于MATLAB的图像处理案例教程[M].清华大学出版社.2011
[6].王晓丹等.基于MATLAB的系统分析与设计[M].西安电子科技大学出版社.2000
[7].徐惠荣.基于机器视觉的树上柑桔识别方法研究[D].浙江大学.2004
[8].丁亚兰.基于机器视觉的猕猴桃果实识别与定位关键技术研究[D].西北农林科技大学.2009