基于MATLAB的数字图像分割的研究与实现

基于MATLAB的数字图像分割的研究与实现
基于MATLAB的数字图像分割的研究与实现

本科毕业论文(设计)

题目:基于MATLAB的数字图像分割的研究与实现

学院:计算机与信息工程学院

学生:

学号:

专业:

年级:

完成日期: 2012年04月

指导教师:

基于MATLAB的数字图像分割的研究与实现

摘要:视觉和听觉是我们认识和感知外部世界的主要途径,而视觉又是其中最重要的,因此要想更细致、全面地把握这些图像信息就需要对其进行必要的处理。在数字图像处理的研究和应用中很多时候我们只对图像的某些部分和特征感兴趣,此时就需要利用图像分割技术将所需的目标与图片的其他部分区分开,以供我们对图像进一步研究和分析。图像分割即通过一些必要的算法把图像中有意义的部分或特征提取出来,将图像分为若干有意义的区域,使得这些区域对应图像中的不同目标,进而能够对所感兴趣的区域进行研究。基于图像分割技术在图像处理之中的重要性,本研究在此对图像分割的一些经典算法进行了学习和对比,并通过MATLAB对其进行了实验,通过不同的算法对不同的图片进行处理,分析其优缺点,以便在进行图像分割时可以根据图片的特征选择合适的算法。

关键字:数字图像;分割;MATLAB

The Research and Implementation of Digital Image

Segmentation Based on the MATLAB

Abstract :Vision and auditory are the main ways which we use to understand and perceive the world outside, while vision is the most important. Therefore, it's require to process the image data to grasp them more painstaking and completely. In digital image processing of research and application we are only interested to some parts of the image and characteristic in many times, then you need to use the image segmentation technology to separate the goal and the picture for other parts for our further research and analysis of the image.Image segmentation is dividing the image into some significant areas through some necessary algorithms, then make these areas corresponding to different goals and we can do some research about the areas we are interested to. Based on the importance of image segmentation technology in image processing, I compared several classical algorithms of image segmentation. In the meanwhile, I used the MATLAB to do some research and to process the various images with different algorithms so that it's convinent to find the advantages of these algorithms. Then, I can base on the characteristics of the images to choose the suitable algorithms when to make some digital image segmentation.

Key words : D igital Image; Segmentation; MATLAB

目录

1 绪论 (1)

1.1 图像分割的研究背景 (1)

1.2 图像分割的基本原理 (1)

2 图像处理与MATLAB (2)

2.1 MATLAB处理的图像格式与类型 (2)

2.2 MATLAB的界面 (3)

2.3 MATLAB图像的基本操作 (5)

2.3.1 图像文件信息的查询 (5)

2.3.2 图像文件的读取 (5)

2.3.4 图像文件的写入 (5)

2.3.5 MATLAB图像工具箱中的图像显示函数 (6)

3 阈值化分割 (7)

3.1 双峰法 (7)

3.1.1 数学推导 (7)

3.1.2 双峰法图像分割示例 (7)

3.2 自动选择法 (9)

3.2.1 自动选择法推导过程 (9)

3.2.2 迭代法图像分割 (10)

3.2.3 最大类间方差法图像分割 (11)

4 区域化分割 (11)

4.1 区域生长分割算法 (11)

4.1.1 区域生长法简介 (11)

4.1.2 区域生长法的MATLAB程序与分割操作 (12)

4.2 分裂合并分割算法 (14)

4.2.1 分裂合并分割算法简介 (14)

4.2.2 分裂合并法的MATLAB程序与分割操作 (15)

5 图像分割算法的评价 (16)

5.1 图像分割算法评价概述 (16)

5.2 图像分割算法评价方法和要求 (17)

5.3 本文算法分析与评价 (17)

6 总结 (23)

参考文献 (24)

致谢..................................................... 错误!未定义书签。

1 绪论

1.1 图像分割的研究背景

在一幅目标图像下,人们往往只是关注其中的一个或者几个目标,而这些目标必然会占据一定的区域,并且与周围其他目标或背景在一些特征上会有相应的差别。但是,很多时候这些差别会非常的细微,以至于人眼很难发觉,这就需要用一定的技术对图片做一些处理。而计算机图像处理技术的发展,很好地解决了这一难题,使得人们可以利用计算机技术来协助理这些信息,例如指纹识别、车牌识别以及医学影像的鉴别操作等方向。

图像分割是图像识别的基础,其通过一些必要的算法把图像中有意义的部分或特征提取出来,将图像分为若干有意义的区域,并形成数字特征,这些区域对应图像中的不同目标。这些具有某种特征的单元成为图像的基元,这种经过处理的基元更容易被快速处理。

目前,数以千计的研究文献和文章提出了许许多多的图像分割算法,不同种类的图像、不同的应用要求和应用领域所需要提取出的图像特征是不相同的,所以并不存在普遍适用的最优方法,只能根据图像特征选择与值相适应的方法。

1.2 图像分割的基本原理

图像分割是根据图像的直方图和结构特性或者一些具体的应用需求将图像划分成两个或多个互不相交的子区域的过程,这些子区域是在特定意义下的具有相同属性的像素的连通集合。例如,一幅图像中不同目标物体所占的图像区域、背景所占的背景区域等都属于这样的连通集合概念。

对图像分割的定义有多种不同的解释,人们普遍接受的是通过集合定义的图像分割。用集合R 表示整个图像区域,那么对整个图像的分割可以等价于将集合R 分成n 个满足以下准则的区域:

(1);R R R R R n =Y Y Y Y (321)

(2)是相连的;

时,,,当i R n 3,2,1i ?=?i, (3);,有,对Φ=≠?j i R R j i j i I

(4)=≠?)

(,有,对j i R R P j i j i Y false ; (5)=?=)(,,,,,对i R P 321

i n true 。 目前提出的图像分割方法很多,在此分为三种不同的途径对其进行分类:

(1)以物体的的边界为对象进行分割;

(2)先检测边缘像素,再将边缘像素连接起来形成分割;

(3)以区域为对象进行分割,根据图像的灰度、色彩、变换关系或组织结构等方面的特征相似性来划分图像的子区域并将各像素划分到特定区域。

上述这些方法是互补的,不同的场合使用不同的方法,或者综合各个方法已达到最佳的分割效果。

2 图像处理与MATLAB

2.1 MATLAB处理的图像格式与类型

图像格式是指图像文件常用的存储格式,下面是几种MATLAB常用并支持的图像格式以及数据类型,见下表2.1所示。

表2.1 MATLAB支持的几种图像格式及数据类型

另外,MATLAB支持的图像类型可分为5种,分别为:二值图像、灰度图像、索引图像、RGB图像以及多帧图像阵列。

2.2 MATLAB的界面

1 Command Window窗口

Command Window窗口是MATLAB界面中的重要组成部分,利用该窗口可以和MATLAB 进行交互操作,即进行数据和命令的输入以及相应的运算。该窗口不仅可以嵌在MATLAB 工作界面,而且还可以单击按钮使其独立地浮在界面上。图2.1是该窗口以及在该窗口进行的一些运算。

图2.1 Command Window窗口

2 Workspace窗口

Workspace窗口是MATLAB中用于存储各种变量和结果的存空间,与命令窗口一样,既可以嵌在MATLAB的中作界面中,又可以独立的浮动在界面上,如图2.2所示为浮动的窗口。

图2.2 Workspace窗口

在使用过程中该窗口显示工作窗口中所有变量的名称、取值和变量类型说明,可以对变量进行编辑、观察、保存和删除等操作。

3Command History窗口

Command History窗口主要用来显示已执行命令。MATLAB每次启动时,该窗口都会记录启动时间,并将Command Window窗口中的命令记录下来,窗口如图2-3

图2.3 Command History窗口

4 Current Directory窗口

Current Directory窗口主要显示当前在什么路径下进行的工作,包括文件的保存等都是在当前路径下实现的。用户可以使用【File】菜单下的【Set Path】命令设置当前路径,Set Path窗口如图2.4所示。

图2.4 Set Path窗口

2.3 MATLAB图像的基本操作

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.5 MATLAB图像工具箱中的图像显示函数

MATLAB工具箱中提供了imshow和imview两个函数来进行图像的显示。

1 imshow函数

调用该函数来显示一幅数字图像时,将自动设置图像的窗口、图像的坐标轴和图像属性,imshow函数常用的语法格式为:

imshow(I,n):利用n个灰度等级来显示一幅灰度图像I,n忽略时,24位显示系统默认为256,其他显示系统默认为64;

imshow(I,[low hight]):显示灰度图像I并指定I的数据围。I的数据中小于或等于low的像素值被设为黑色,大于等于high的像素值被设为白色;

imshow(BW):用于显示二进制图像BW,图像中像素值为0的用黑色表示,像素值为1的用白色表示;

imshow(X,map):用于显示颜色映射表map的图像X;

imshow(RGB):用于显示真彩色图像RGB;

imshow(x,y,A,...):利用二维向量x、y建立一个空间坐标系统;

imshow filename:用于显示存储在图形文件中文件名为filename的图像文件。

2 imview函数

Imview是一个在图像阅览器中显示图像的函数。图像阅览器可以在窗口中显示一幅数字图像并提供图像的大小信息、像素值的围、光标所指像素的坐标和像素值的信息等。其语法格式如下:

imview(I):显示灰度图像I;

imview(RGB):显示真彩色图像RGB;

imview(X,map):显示图像像素映射表为map的索引图像X;

imview(I,range):显示灰度图像I,参数range是一个二维向量[low high],用于控制显示图像有黑到白的区域;

imview(filename):用于显示指定文件夹下图像名为filename的图像文件;

imview close all:用于关闭所有的图像浏览器。

3 阈值化分割

阈值分割的基本原理为:利用一定的方法,设定不同的阈值,把图像的像素点分到若干不同的区域中。阈值分割是一种比较简单有效的图像分割方法,该方法利用一个或多个阈值将图像像素分为不同的灰度级分,将属于同一灰度级的像素划分为相同的区域。根据求阈值的不同,可以分为双峰法、迭代法以及最大类间方差法。

3.1 双峰法

双峰法即人工选择法,通过人眼对图像直方图的观察,选出合适的阈值。

3.1.1 数学推导

假定图像由具有不同灰度级的目标背景组成,图像的灰度分布曲线可以近似地认

为有两个正态分布函数

22

如图3-1,选择双峰直方图的波谷处,设其灰度级为P ,则可以将图像分为两部分,即可以表示为:

???≥<=P y x f t P y x f t y x g ),(),(),(1

0 其中,P 为分割阈值,结果图像的灰度级取)(

1)(010白色、黑色==t t 。 若为多个阈值,则:

???????<<<<≤=-k

k k P y x f P t P y x f P t P y x f t y x ),(),(),(),(g 110

100M 3.1.2 双峰法图像分割示例

利用双峰法进行图像分割,首先要查看图像直方图的分布情况,即在MATLAB 中执

行下述程序,来观察所需分割图像的直方图:

clear all

I=imread('细菌.jpg');

figure(1);

imshow(I);

title('原始图像');

figure(2);

imhist(I);

title('直方图');

axis([0 255 0 2000]);

执行结果如图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)计算两个区域的灰度均值21μμ和;

(4)计算新阈值2

)(21μμ+=p 。 2 最大类间方差法

最大类间方差法的计算方法为:

根据灰度级,确定阈值T ,就可以把一幅数字图像),(y x f 的像素点分为两个类中,其中图像灰度的最小值、最大值分别表示为max min Z Z 和则可以把图像表示为:

?

??≤<≤≤=max min ),(),(),(f y x f T T y x f f y x f 图像总的像素为:∑=i i N N ,则各灰度出现的概率为,N N i P i =

)(

假设两个区域分别为A ,B ,则区域A 出现的概率为:∑==

T

f i A i P P min )(, 均值为:∑==T f i A A P

i iP min )(μ 则区域B 出现的概率为:∑+==max 1)(f T i B i P P 均值为:∑+==max 1)(f T i B B P i iP μ 图像),(y x f 的均值为:B B A A f T i T f i f f i P P i iP i iP i iP μμμ+=+==

∑∑∑+===max min max min 1)()()(

两个区域的方差为 :222)()()(B B A A P P T μμμμσ-+-=

最大类间方差法是把两类的类间方差作为阈值的选择标准,使得类间方差)(2T σ

最大的T则为最佳阈值。

3.2.2 迭代法图像分割

使用MATLAB利用迭代法进行图像分割操作时,根据之前原理的描述,需要编写以

下程序代码:

clear all

I=imread('细菌.jpg');

tmin=min(I(:));

tmax=max(I(:));

th=(tmin+tmax)/2;

ok=true;

while ok

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 进行图像分割时,需要的程序如下:

clear all

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) 选取图像目标区域一点作为种子像素点),(00y x ;

(2) 以),(00y x 为中心,与),(00y x 的邻域像素),(y x 进行比较,如果),(y x 满足选定的生长准则,则将),(y x 与),(00y x 合并;

(3) 再将归并的像素点),(y x 作为新的种子像素点),(00y x ,继续步骤(2)的操作;

(4) 当满足区域生长的停止条件时,结束操作,完成分割算法。

其中,生长准则是评价种子像素与其邻域像素点的相似程度的判断准则;根据设定不同的阈值来确定停止条件,停止条件的选择对分割结果的精确度有至关紧要的作用,在利用区域生长法进行图像的分割时,要根据具体的图像特征来选择合适的生长停止条件。

利用图形形象的表示区域生长法原理如下4.1所示。

a)b)c)

a) 原始图像和种子点 b) 阈值T=1 c) 阈值T=2

图4.1 区域生长

4.1.2 区域生长法的MATLAB 程序与分割操作

1 MATLAB 程序

(1)先编写区域生长法的算法程序,并保存在MATLAB 的m 文件中,程序如下: function Yout=regiongrow(I,seed,th_mean)

[M,N]=size(I);

L=size(seed);

Yout=zeros(M,N);

for i=1:L

Yout(seed(i,1),seed(i,2))=1;

end

for i=1:L

sum(i)=I(seed(i,1),seed(i,2));

end

seed_mean=mean(sum);

ok=true;

s_star=1;

s_end=L;

while ok

ok=false;

for i=s_star:s_end

x=seed(i,1);

y=seed(i,2);

if x>2&&(x+1)2&&(y+1)

for u=-1:1

for v=-1:1

if Yout(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算法:

clear all

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 分裂合并分割算法简介

分裂合并分割算法的原理是根据图像数据的四叉树的层次结构来将图像划分成几个不相交的区域,然后从这个结构中的任何一个区域开始,依照一定的准则来分裂、合并这些区域。当一个区域中的数据特征不满足这一准则时,则对这一区域继续进行分裂操作,直至相邻的区域之间满足一定的特征时,分裂结束,进行合并。

分裂合并分割算法中经常使用的方法就是四叉树分解法,令R 表示整个图像区域,如果false R P i =)(,则将图像分成四个区域,如果有任何一个区域依然有false R P i =)(,怎讲这个继续分割为四个区域,以此类推直到i R 为单个像素。四叉树分解法可以用下

图4.4的示意图表示。

b a) 图像分割示意图 b) 四叉树表示

图4.4 四叉树分解示意图

如图4.5所示,假设图中灰色区域为我们所需要的目标区域,白色为背景区域。对整个图像false R P i =)(,令ture R P i =)(表示该区域中所有像素均具有相同的灰度值。所以根据以上条件先将图(a)分割成四个区域,此时右上角的区域满足ture R P i =)(,所以不再进行分割,而其他区域继续进行分割操作,直至分割的每个子区域均满足条件,

则分裂停止,进行合并。

(a) 原图像 (b) 分裂过程1 (c) 分裂过程2 (d) 分裂过程3

图4.5 区域分裂与合并分割法图解

根据四叉树分解示意图,MATLAB 中提供了三种函数来实现这一规则。具体操作步骤是,首先将图像分成四个小区域,然后根据一定的准则判断各个区域是否具有特定的相似性,不满足则进行进一步的分裂,直至分裂的每一小块都达到一定的相似准则,再对各个区域进行合并。

qtdecomp 函数用于对图像进行四叉树分解;

qtgeblk 函数用于经过四叉树分解后的各个区域的图像信息;

qtsetblk 函数用于设定分解区域的灰度值。

4.2.2 分裂合并法的MATLAB 程序与分割操作

对数字图像进行分裂合并分割的MATLAB 程序为:

clear all

I=imread('细菌.jpg');

S=qtdecomp(I,.2);

相关主题
相关文档
最新文档