基于MATLAB的数字图像分割的研究与实现.docx
《基于MATLAB的数字图像分割的研究与实现.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的数字图像分割的研究与实现.docx(30页珍藏版)》请在冰豆网上搜索。
![基于MATLAB的数字图像分割的研究与实现.docx](https://file1.bdocx.com/fileroot1/2023-1/7/b30f7930-7a49-48f7-bb23-ad1287cc13be/b30f7930-7a49-48f7-bb23-ad1287cc13be1.gif)
基于MATLAB的数字图像分割的研究与实现
本科毕业论文(设计)
题目:
基于MATLAB的数字图像分割的研究与实现
学院:
计算机与信息工程学院
学生姓名:
学号:
专业:
年级:
完成日期:
2012年04月
指导教师:
基于MATLAB的数字图像分割的研究与实现
摘要:
视觉和听觉是我们认识和感知外部世界的主要途径,而视觉又是其中最重要的,因此要想更细致、全面地把握这些图像信息就需要对其进行必要的处理。
在数字图像处理的研究和应用中很多时候我们只对图像的某些部分和特征感兴趣,此时就需要利用图像分割技术将所需的目标与图片的其他部分区分开,以供我们对图像进一步研究和分析。
图像分割即通过一些必要的算法把图像中有意义的部分或特征提取出来,将图像分为若干有意义的区域,使得这些区域对应图像中的不同目标,进而能够对所感兴趣的区域进行研究。
基于图像分割技术在图像处理之中的重要性,本研究在此对图像分割的一些经典算法进行了学习和对比,并通过MATLAB对其进行了实验,通过不同的算法对不同的图片进行处理,分析其优缺点,以便在进行图像分割时可以根据图片的特征选择合适的算法。
关键字:
数字图像;分割;MATLAB
TheResearchandImplementationofDigitalImageSegmentationBasedontheMATLAB
Abstract:
Visionandauditoryarethemainwayswhichweusetounderstandandperceivetheworldoutside,whilevisionisthemostimportant.Therefore,it'srequiretoprocesstheimagedatatograspthemmorepainstakingandcompletely.Indigitalimageprocessingofresearchandapplicationweareonlyinterestedtosomepartsoftheimageandcharacteristicinmanytimes,thenyouneedtousetheimagesegmentationtechnologytoseparatethegoalandthepictureforotherpartsforourfurtherresearchandanalysisoftheimage.Imagesegmentationisdividingtheimageintosomesignificantareasthroughsomenecessaryalgorithms,thenmaketheseareascorrespondingtodifferentgoalsandwecandosomeresearchabouttheareasweareinterestedto.Basedontheimportanceofimagesegmentationtechnologyinimageprocessing,Icomparedseveralclassicalalgorithmsofimagesegmentation.Inthemeanwhile,IusedtheMATLABtodosomeresearchandtoprocessthevariousimageswithdifferentalgorithmssothatit'sconvinenttofindtheadvantagesofthesealgorithms.Then,Icanbaseonthecharacteristicsoftheimagestochoosethesuitablealgorithmswhentomakesomedigitalimagesegmentation.
Keywords:
DigitalImage;Segmentation;MATLAB
1绪论
1.1图像分割的研究背景
在一幅目标图像下,人们往往只是关注其中的一个或者几个目标,而这些目标必然会占据一定的区域,并且与周围其他目标或背景在一些特征上会有相应的差别。
但是,很多时候这些差别会非常的细微,以至于人眼很难发觉,这就需要用一定的技术对图片做一些处理。
而计算机图像处理技术的发展,很好地解决了这一难题,使得人们可以利用计算机技术来协助理这些信息,例如指纹识别、车牌识别以及医学影像的鉴别操作等方向。
图像分割是图像识别的基础,其通过一些必要的算法把图像中有意义的部分或特征提取出来,将图像分为若干有意义的区域,并形成数字特征,这些区域对应图像中的不同目标。
这些具有某种特征的单元成为图像的基元,这种经过处理的基元更容易被快速处理。
目前,数以千计的研究文献和文章提出了许许多多的图像分割算法,不同种类的图像、不同的应用要求和应用领域所需要提取出的图像特征是不相同的,所以并不存在普遍适用的最优方法,只能根据图像特征选择与值相适应的方法。
1.2图像分割的基本原理
图像分割是根据图像的直方图和结构特性或者一些具体的应用需求将图像划分成两个或多个互不相交的子区域的过程,这些子区域是在特定意义下的具有相同属性的像素的连通集合。
例如,一幅图像中不同目标物体所占的图像区域、背景所占的背景区域等都属于这样的连通集合概念。
对图像分割的定义有多种不同的解释,人们普遍接受的是通过集合定义的图像分割。
用集合R表示整个图像区域,那么对整个图像的分割可以等价于将集合R分成n个满足以下准则的区域:
(1)
(2)
(3)
(4)
false;
(5)
true。
目前提出的图像分割方法很多,在此分为三种不同的途径对其进行分类:
(1)以物体的的边界为对象进行分割;
(2)先检测边缘像素,再将边缘像素连接起来形成分割;
(3)以区域为对象进行分割,根据图像的灰度、色彩、变换关系或组织结构等方面的特征相似性来划分图像的子区域并将各像素划分到特定区域。
上述这些方法是互补的,不同的场合使用不同的方法,或者综合各个方法已达到最佳的分割效果。
2图像处理与MATLAB
2.1MATLAB处理的图像格式与类型
图像格式是指图像文件常用的存储格式,下面是几种MATLAB常用并支持的图像格式以及数据类型,见下表2.1所示。
表2.1MATLAB支持的几种图像格式及数据类型
格式
数据类型说明
bmp
非压缩图像:
1bit、4bit、8bit、16bit、24bit、32bit
行程长编码图像:
4bit、8bit
cur
非压缩图形:
1bit、4bit、8bit
gif
1~8bit
ico
非压缩图像:
1bit、4bit、8bit
jpg
或
jpeg
图像类型
位数
压缩
灰度图像
8bit、12bit
有损压缩
灰度图像
8bit、12bit、16bit
无损压缩
真彩色图像
24bit、36bit
有损压缩和无损压缩
tif
或
tiff
非压缩图形:
1bit、8bit、24bit
packbits压缩图像:
1bit、8bit、24bit
CCITT压缩图像:
1bit
灰度图像:
16bit
索引图像:
16bit
真彩色图像:
48bit
png
灰度图像:
1bit、2bit、4bit、8bit、16bit
索引图像:
8bit、16bit
真彩色图像:
24bit、48bit
另外,MATLAB支持的图像类型可分为5种,分别为:
二值图像、灰度图像、索引图像、RGB图像以及多帧图像阵列。
2.2MATLAB的界面
1CommandWindow窗口
CommandWindow窗口是MATLAB界面中的重要组成部分,利用该窗口可以和MATLAB进行交互操作,即进行数据和命令的输入以及相应的运算。
该窗口不仅可以内嵌在MATLAB工作界面,而且还可以单击
按钮使其独立地浮在界面上。
图2.1是该窗口以及在该窗口进行的一些运算。
图2.1CommandWindow窗口
2Workspace窗口
Workspace窗口是MATLAB中用于存储各种变量和结果的内存空间,与命令窗口一样,既可以内嵌在MATLAB的中作界面中,又可以独立的浮动在界面上,如图2.2所示为浮动的窗口。
图2.2Workspace窗口
在使用过程中该窗口显示工作窗口中所有变量的名称、取值和变量类型说明,可以对变量进行编辑、观察、保存和删除等操作。
3CommandHistory窗口
CommandHistory窗口主要用来显示已执行命令。
MATLAB每次启动时,该窗口都会记录启动时间,并将CommandWindow窗口中的命令记录下来,窗口如图2-3
图2.3CommandHistory窗口
4CurrentDirectory窗口
CurrentDirectory窗口主要显示当前在什么路径下进行的工作,包括文件的保存等都是在当前路径下实现的。
用户可以使用【File】菜单下的【SetPath】命令设置当前路径,SetPath窗口如图2.4所示。
图2.4SetPath窗口
2.3MATLAB图像的基本操作
2.3.1图像文件信息的查询
在MATLAB中,可以使用imfinfo函数来获取图像处理工具箱所支持的各类格式图像信息。
该函数语法格式为:
info=imfinfo(filename,fmt)
info=imfinfo(filename)
info=imfinfo(URL,...)
说明:
info=imfinfo(filename,fmt)返回一个结构info,它反映了该图像各个方面的信息,参数fmt对应于所有图像处理工具箱所支持的图像格式,并且可以省略fmt这一参数。
info=imfinfo(URL,...)用于读取Internet上的图像信息。
2.3.2图像文件的读取
MATLAB进行数字图像处理时,利用imread函数来完成图像的读取,该函数常用语法格式如下:
A=imread(filename,fmt):
用于读取由filename指定的图像数据到数组A,fmt对应于图像文件格式。
若图像为灰度图像,数组A大小为M×N,若为彩色图像,则大小为M×N×3;
[X,map]=imread(filename,fmt):
读取由filename指定的索引图像数据到数组X,并将图像颜色表写入map中;
[...]=imread(URL,...):
用于读取从Internet上超链接的图像,URL必须包含协议的类型,例如http:
//;
[...]=imread(...,'frames',idx)(适用于GIF):
用于读取GIF文件中第idx个图像帧,idx可以取值为'all';
[...]=imread(...,ref)(适用于HDF):
用于读取包含多帧图像的HDF格式图像的第ref帧图像,默认值为1。
2.3.4图像文件的写入
使用MATLAB进行图像处理时,根据需要有时要求我们对处理后的结果图像进行保存,MATLAB提供了imwrite来提供该操作,常用的格式有以下几种:
imwrite(A,filename,fmt):
用于将图像A写入到名为filename、格式为fmt的图像文件中;
imwrite(X,map,filename,fmt):
用于将索引图像以及与之相关的颜色映射map写入到名为filename、格式为fmt的图像文件中;
imwrite(...,filename):
用于将图像写入达到filename的文件中,文件格式由文件名的拓展名决定,扩展名为MATLAB所支持的格式。
2.3.5MATLAB图像工具箱中的图像显示函数
MATLAB工具箱中提供了imshow和imview两个函数来进行图像的显示。
1imshow函数
调用该函数来显示一幅数字图像时,将自动设置图像的窗口、图像的坐标轴和图像属性,imshow函数常用的语法格式为:
imshow(I,n):
利用n个灰度等级来显示一幅灰度图像I,n忽略时,24位显示系统默认为256,其他显示系统默认为64;
imshow(I,[lowhight]):
显示灰度图像I并指定I的数据范围。
I的数据中小于或等于low的像素值被设为黑色,大于等于high的像素值被设为白色;
imshow(BW):
用于显示二进制图像BW,图像中像素值为0的用黑色表示,像素值为1的用白色表示;
imshow(X,map):
用于显示颜色映射表map的图像X;
imshow(RGB):
用于显示真彩色图像RGB;
imshow(x,y,A,...):
利用二维向量x、y建立一个空间坐标系统;
imshowfilename:
用于显示存储在图形文件中文件名为filename的图像文件。
2imview函数
Imview是一个在图像阅览器中显示图像的函数。
图像阅览器可以在窗口中显示一幅数字图像并提供图像的大小信息、像素值的范围、光标所指像素的坐标和像素值的信息等。
其语法格式如下:
imview(I):
显示灰度图像I;
imview(RGB):
显示真彩色图像RGB;
imview(X,map):
显示图像像素映射表为map的索引图像X;
imview(I,range):
显示灰度图像I,参数range是一个二维向量[lowhigh],用于控制显示图像有黑到白的区域;
imview(filename):
用于显示指定文件夹下图像名为filename的图像文件;
imviewcloseall:
用于关闭所有的图像浏览器。
3阈值化分割
阈值分割的基本原理为:
利用一定的方法,设定不同的阈值,把图像的像素点分到若干不同的区域中。
阈值分割是一种比较简单有效的图像分割方法,该方法利用一个或多个阈值将图像像素分为不同的灰度级分,将属于同一灰度级的像素划分为相同的区域。
根据求阈值的不同,可以分为双峰法、迭代法以及最大类间方差法。
3.1双峰法
双峰法即人工选择法,通过人眼对图像直方图的观察,选出合适的阈值。
3.1.1数学推导
假定图像由具有不同灰度级的目标背景组成,图像的灰度分布曲线可以近似地认为有两个正态分布函数
和
叠加而成,则图像会出现具有双峰的分布特性的直方图,该特性可以用图3.1表示。
图3.1具有双峰分布的直方图
如图3-1,选择双峰直方图的波谷处,设其灰度级为P,则可以将图像分为两部分,即可以表示为:
其中,P为分割阈值,结果图像的灰度级取
。
若为多个阈值,则:
3.1.2双峰法图像分割示例
利用双峰法进行图像分割,首先要查看图像直方图的分布情况,即在MATLAB中执行下述程序,来观察所需分割图像的直方图:
clearall
I=imread('细菌.jpg');
figure
(1);
imshow(I);
title('原始图像');
figure
(2);
imhist(I);
title('直方图');
axis([025502000]);
执行结果如图3.2所示。
图3.2原图与直方图
观察上述直方图可以选择阈值为30,执行下述分割程序:
th=30;
J=im2bw(I,th/255);
figure(3);
imshow(J);
title('分割结果');
分割结果如下图3.3所示。
图3.3双峰法分割结果
3.2自动选择法
自动选择法通常根据图像直方图所呈现出的特性来分析图像灰度值的分布情况。
3.2.1自动选择法推导过程
1迭代法
双峰发对于目标区域和背景区域像素的分布区域有明显区别是容易使用,对于不明显的图像阈值选择需要进行改进,而迭代法正式基于这种要求产生的。
迭代法可以利用一定的算法原理来完成阈值的自动选取操作,并能根据所选取的阈值进行分割操作,其具体实施步骤如下:
(1)选择一个初始阈值P,可利用图像像素的最大灰度和最小灰度来选择;
(2)利用选择的阈值P对图像进行分割分为大于P和小于P两部分;
(3)计算两个区域的灰度均值
;
(4)计算新阈值
。
2最大类间方差法
最大类间方差法的计算方法为:
根据灰度级,确定阈值T,就可以把一幅数字图像
的像素点分为两个类中,其中图像灰度的最小值、最大值分别表示为
则可以把图像表示为:
图像总的像素为:
,则各灰度出现的概率为,
假设两个区域分别为A,B,则区域A出现的概率为:
,
均值为:
则区域B出现的概率为:
均值为:
图像
的均值为:
两个区域的方差为:
最大类间方差法是把两类的类间方差作为阈值的选择标准,使得类间方差
最大的T则为最佳阈值。
3.2.2迭代法图像分割
使用MATLAB利用迭代法进行图像分割操作时,根据之前原理的描述,需要编写以下程序代码:
clearall
I=imread('细菌.jpg');
tmin=min(I(:
));
tmax=max(I(:
));
th=(tmin+tmax)/2;
ok=true;
whileok
g1=I>=th;
g2=I
u1=mean(I(g1)); u2=mean(I(g2)); thnew=(u1+u2)/2; ok=abs(th-thnew)>=1; th=thnew; end th=floor(th); J=im2bw(I,th/255); subplot(1,2,1); imshow(I); title('原始图像'); subplot(1,2,2); str=['迭代分割阈值: 阈值Th=',num2str(th)]; imshow(J); title(str); 将以上程序输入MATLAB命令窗口,得到如下图3.4的分割结果。 图3.4迭代法分割结果 3.2.3最大类间方差法图像分割 MATLAB的库函数中直接提供了最大类间方差法的阈值分割grayhresh函数,语法格式为: level=graythesh(I) 使用MATLAB进行图像分割时,需要的程序如下: clearall I=imread('细菌.jpg') th=graythresh(I); J=im2bw(I,th); th=255*th; subplot(1,2,1); imshow(I); title('原始图像'); subplot(1,2,2); str=['最大类间方差法分割结果: TH=',num2str(th)]; imshow(J); title(str); 程序执行后的分割结果如下图3.5所示。 图3.5最大类间方差法图像分割结果 4区域化分割 4.1区域生长分割算法 4.1.1区域生长法简介 区域生长是从图片的一个像素出发,即选取一个种子像素,比较与之相邻的像素之间的相似性,将与种子像素在灰度、边缘、纹理等特征具有相似属性的像素归并到同一个区域,然后再将这些像素点作为新的种子像素继续上述归并过程,直到查找不到满足条件的像素为止,从而完成对一幅图片的分割操作。 区域生长算法具体描述如下: (1)选取图像目标区域内一点作为种子像素点 ; (2)以 为中心,与 的邻域像素 进行比较,如果 满足选定的生长准则,则将 与 合并; (3)再将归并的像素点 作为新的种子像素点 ,继续步骤 (2)的操作; (4)当满足区域生长的停止条件时,结束操作,完成分割算法。 其中,生长准则是评价种子像素与其邻域像素点的相似程度的判断准则;根据设定不同的阈值来确定停止条件,停止条件的选择对分割结果的精确度有至关紧要的作用,在利用区域生长法进行图像的分割时,要根据具体的图像特征来选择合适的生长停止条件。 利用图形形象的表示区域生长法原理如下4.1所示。 a)原始图像和种子点b)阈值T=1c)阈值T=2 图4.1区域生长 4.1.2区域生长法的MATLAB程序与分割操作 1MATLAB程序 (1)先编写区域生长法的算法程序,并保存在MATLAB的m文件中,程序如下: functionYout=regiongrow(I,seed,th_mean) [M,N]=size(I); L=size(seed); Yout=zeros(M,N); fori=1: L Yout(seed(i,1),seed(i,2))=1; end fori=1: L sum(i)=I(seed(i,1),seed(i,2)); end seed_mean=mean(sum); ok=true; s_star=1; s_end=L; whileok ok=false; fori=s_star: s_end x=seed(i,1); y=seed(i,2); ifx>2&&(x+1)2&&(y+1)foru=-1: 1 forv=-1: 1 ifYout(x+u,y+v)==0&abs(I(x+u,y+v)-seed_mean)<=th_mean Yout(x+u,y+v)=1; ok=true; seed=[seed;[x+u,y+v]]; end end end end end s_star=s_end+1; L=size(seed); s_end=L; end (2)对上述m文件保存为regiongrow.m格式,编写区域生长的主程序并调用上述regiongrow算法: clearall I=imread('细菌.jpg'); figure (1); imshow(I); title('原始图像'); I=double(I); [y1,x1]=getpts; x1=round(x1); y1=round(y1); seed=[x1,y1]; th_mean=40; Yout=regiongrow(I,seed,th_mean); figure (2); imshow(Yout); title('区域生长分割'); 2分割结果图 执行程序时,首先在figure1窗口选择需要的种子点选择,在此选择中间的大个细菌作为示例,其中选择不同的阈值th_mean会得到不同的分割结果,当th_mean=40时分割结果如图4.2所示。 图4.2区域生长法分割效果(th_mean=40) 当th_mean=70时,得到的分割结果如图4.3所示。 图4.3区域生长法分割效果(th_mean=70) 由图4.2和图4.3可以发现,当选择th_mean=70时,分割效果已经很好,当选择更大的th_mean时,会归并更多的像素,即有可能将背景像素归到目标区域中,进而影响分割准确性,所以,要根据图片特点选择合适的th_mean值。 4.2分裂合并分割算法 4.2.1分裂合并分割算法简介 分裂合并分割算法的原理是根据图像数据的四叉树的层次结构来将图像划分成几个不相交的区域,然后从这个结构中的任何一个
展开阅读全文
相关搜索
|