图像OTSU阈值分割的程序设计_第1页
图像OTSU阈值分割的程序设计_第2页
图像OTSU阈值分割的程序设计_第3页
图像OTSU阈值分割的程序设计_第4页
图像OTSU阈值分割的程序设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1概述数字图像处理(DigitalImageProcessing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。数字图像处理的产生和迅速开展主要受三个因素的影响:一是计算机的开展;二是数学的开展(特别是离散数学理论的创立和完善);三是广泛的农牧业、林业、环境、军事、工业和医学等方面的应用需求的增长。数字图像处理研究的内容主要有:(1)图像获取和图像表现阶段主要是把模拟图像信号转化为计算机所能接受的数字形式,以及把数字图像用所需要的形式显示出来。(2)图像复原当造成图像退化的原因时,复原技术可用来进行图像的校正。复原技术是基于模型和数据的图像恢复,其目的是消除退化的影响,从而产生一个等价于理想成像系统所获得的图像。(3)图像增强当无法知道与图像退化有关的定量信息时,可以使用图像增强技术较为主观地改善图像的质量。(4)图像分析对图像中的不同对象进行分割、特征提取和表示,从而有利于计算机对图像进行分类、识别、理解或解释。(5)图像重建由图像的多个一维投影重建该图像,可看成是特殊的图像复原技术。(6)图像编码和压缩对图像进行编码的主要目的是为了压缩数据,便于存储和传输。当前的一些编码方法对图像分析和图像加密也有越来越多的应用。MATLAB是矩阵实验室〔MatrixLaboratory〕的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大局部。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创立用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。2MATLAB常用图像操作函数2.1图像的读写(1)imreadimread函数用于读入各种图像文件,如:a=imread('e:\w01.tif')注:计算机E盘上要有w01相应的.tif文件。(2)imwriteimwrite函数用于写入图像文件,如:imwrite(a,'e:\w02.tif',’tif’)(3)imfinfoimfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:\w01.tif')2.2图像的显示(1)imageimage函数是MATLAB提供的最原始的图像显示函数,如:a=[1,2,3,4;4,5,6,7;8,9,10,11,12];image(a);(2)imshowimshow函数用于图像文件的显示,如:i=imread('e:\w01.tif');imshow(i);(3)colorbarcolorbar函数用显示图像的颜色条,如:i=imread('e:\w01.tif');imshow(i);colorbar;(4)figurefigure函数用于设定图像显示窗口,如:figure(1);/figure(2);3理论知识3.1图像分割的定义图像分割是图像识别和图像理解的根本前提步骤。图像分割算法一般是基于灰度的两个性质之一:不连续性和相似性。第一个性质的应用是基于灰度的不连续变化来分割图像,比方图像的边缘。第二个性质的主要应用是根据事先制定的准那么将图像分割为相似的区域,比方阈值分割和区域生长。图像分割是将数字图像划分成互不相交〔不重叠〕区域的过程,区域〔region〕是像素的联通集,是所有像素都有相邻或相邻或相接触像素的集合。联通〔connectedness〕是指在一个联通集中的任意两个像素之间,存在一条完全由这个集合的元素构成的连通路径。连通路径是一条可在相邻像素间移动的路径。因此,在一个连通集中,可以跟踪在任意两个像素间的连通路径而不离开这个集合。有两种可供选择的连通性准那么,如果只依据相邻的像素〔上、下、左、右〕确定连通,就称为4连通〔four-connect〕,物体也就被称为是4连通的。因此任意一个像素只有4个邻点可以与它相连通。如果再加上对角相邻的〔45度邻点〕像素也被认为是连通的,那么,就得到8连通。于是,任意像素有8个邻点可以与它相连通。这两种中的任意一种都可用,只要具有一致性即可。通常8连通的结果与人的感觉更接近。当人观察景物时,在视觉系统中对景物进行分割的过程是必不可少的。这个过程可以使人看到的并不是一个复杂的景物,而只不过是一种对象的集合体。但是,使用数字图像处理,必须设法别离图像中的对象,把图像分裂成像素集合,每个集合代表一个对象的图像。图像分割可以采用三种不同的原理来实现。在利用区域的方法时,把各像素划归到各个对象或区域中。在边缘方法中,那么先确定边缘像素并把它们连接在一起以构成所需的边缘在边界方法中,只需确定存在于区域间的边界。这三种方法使要解决的问题更加具体。3.2阈值分割阈值分割是一种区域分割技术,它适用于物体与背景有较强比照的景物分割。它计算简单,而且总能用封闭而且连通的边界定义不交叠的区域。当使用阈值规那么进行图像分割时,所有灰度值大于或等于某阈值的像素都被判属于物体。所有灰度值小于该阈值的像素被排除在物体之外。于是,边界就成为这样一些内部点的集合,这些点都至少有一个邻点不属于该物体。如果受关注的物体在其内部具有均匀一致的灰度值并分布在一个具有另一个灰度值的均匀背景上,使用阈值方法效果就很好。如果物体与背景的差异在于某些性质而不是灰度值〔如纹理等〕,那么,可以首先把那个性质转换为灰度,然后,利用灰度阈值化技术分割待处理的图像。3.3最大类间方差法(OTSU)最大类间方差法又称为OTSU算法,该算法是在灰度直方图的根底上用最小二乘法原理推导出来的,具有统计意义上的最正确分割阈值。它的根本原理是以最正确阈值将图像的灰度直方图分割成两局部,使两局部之间的方差取最大值,即别离性最大。设X是一幅具有L级灰度级的图像,其中第i级像素为个,其中i的值在0~L-1之间,图像的总像素点个数为:第i级出现的概率为:在OTSU算法中,以阈值k将所有的像素分为目标和背景两类。其中,类的像素灰度级为0~k-1,类的像素灰度级为k~L-1。图像的总平均灰度级为:类像素所占的总面积的比例为:类像素所占的总面积的比例为:类像素的平均灰度级为:类像素的平均灰度级为:其中,那么类间方差公式为:令k从0~L-1变化,计算在不同k值下的类间方差,使得最大值时的那个k值就是所要求的最优阈值。3.4全局阈值采用阈值确定边界的最简单做法是在整个图像中将灰度阈值的值设置为常数,也就是全局阈值。如果背景的灰度值在整个图像中可合理地看做恒定,而且所有物体与背景都具有几乎相同的比照度,那么,只要选择了正确的阈值,使用一个恒定的全局阈值一般会有较好的效果。4实验程序根据题目要求,此程序根据OTSU原理,能完成求取阈值,并与用Matlab的库函数求得的阈值进行比拟的功能。为了表达OTSU算法的优越性,更进一步用全局阈值法分割图片,来进行两种方法的比照。functionmain%主程序clear;closeall;%去除变量,关闭所有窗口[namepath]=uigetfile('*.jpg');%获取图片路径及文件名I=imread([pathname]);%读图I=rgb2gray(I);%彩色转黑白while1%循环执行disp('0原图1OTSU2全局阈值');%提示信息select=input('请选择:');%选择相应功能switchselectcase0yuantu(I);%输入0显示原图case1%输入1OTSU法fun1(I);case2%输入2全局阈值法fun2(I);otherwise%其他值不处理endendfunctionyuantu(I)%显示原图figureimshow(I);title('原图')functionfun1(I)%阈值计算程序Ni=imhist(I);%计算直方图数组N=sum(Ni);%总像素点个数delamax=0;%类间方差最大值threshold=0;%阈值fork=2:255u=dot([0:255],Ni/N);%图像的总平均灰度级w0=sum(Ni(1:k)/N);%C0类像素所占面积的比例w1=1-w0;%C1类像素所占面积的比例ifw0==0|w0==1%当w0为1或0时提前结束本次循环continueendu0=dot([0:k-1],Ni(1:k)/N)/w0;%C0类像素的平均灰度u1=dot([k:255],Ni(k+1:256)/N)/w1;%C1类像素的平均灰度dela(k)=w0*(u-u0)^2+w1*(u-u1)^2;%类间方差公式%求出类间方差的最大值,最大时的那个值对应的k值存入delamaxifdela(k)>delamaxdelamax=dela(k);threshold=k-1;endendBW1=im2bw(I,threshold/255);%阈值分割figureimshow(BW1),title('自编程序运行结果')%显示图片disp('自编程序求的的阈值:')%显示提示信息disp(threshold)%显示结果%调用系统函数OTSU阈值分割level=graythresh(I);%调用系统函数计算阈值BW2=im2bw(I,level);%阈值分割figureimshow(BW2),title('调用库函数运行结果')level=round(level*255);disp('调用库函数求得的阈值:')disp(level)functionfun2(I)%阈值分割程序[widthheight]=size(I);;%获取图片宽高th=input('请输入阈值:');fori=1:widthforj=1:heightif(I(i,j)<th)%灰度小于阈值时那么为黑色BW1(i,j)=0;else%灰度大于等于阈值时那么为白色BW1(i,j)=1;endendendfigureimshow(BW1),title('全局阈值')5程序运行结果及分析5.1程序运行结果根据提示输入相应的序号,按回车键后即可得到相应的运行结果,如下所示:图5.1命令窗口运行结果图5.2原图图5.3自编程序运行结果图5.4调用库函数运行结果图5.5全局阈值5.2结果分析由图5.1结果显示可以看出自编程序和调用库函数的阈值都是124,得到同样的分割阈值,由图5.3和图5.4两幅处理后的结果图也可以看出,处理的效果根本相同,满足设计要求。当使用全局阈值法时,只要输入的阈值和OTSU算出的阈值一样,即输入124时,处理结果就完全一样。6心得体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术开展的日新日异,数字图像处理已经成为当今计算机应用中空前活泼的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。回忆起此次专业课程设计,至今我仍感慨颇多,确实,从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以稳固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会效劳,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的缺乏之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比方说傅里叶卷积的计算,MATLAB软件的应用技巧,对编程掌握得不好

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论