文档视界 最新最全的文档下载
当前位置:文档视界 › 基于MATLAB的数字图像分割的研究与实现

基于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 MATLABto 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)R1 R2 R3 ... R n R ;

(2)i,当i 1,2,3,,n时,R i是相连的;

(3)对i,j i j ,有R i R j ;

(4)对i,j i j,有P(R i R j)false ;

(5)对i 1,2,3,,n,P(R i)true 。

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

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

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

(3)以区域为对象进行分割,根据图像的灰度、色彩、变换关系或组织结构等方面的特征相

似性来划分图像的子区域并将各像素划分到特定区域。

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

2 图像处理与MATLAB

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

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

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

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

2.2 MATLAB 的界面

1 Command Window 窗口

CommanWd indow 窗口是 MATLAB 界面中的重要组成部分, 利用该窗口可以和

MATLAB 进行交互操作,即进行数据和命令的输入以及相应的运算。 该窗口不仅可以嵌在

MATLAB 工作界面,而且还可以单击 按钮使其独立地浮在界面上。图 2.1 是该窗口以及在该 窗

口进行的一些运算

2 Workspace 窗口 Workspace 窗口是 MATLAB 中用于存储各种变量和结果的存空间, 与命令窗口一样, 既

可以嵌在 MATLAB 的中作界面中, 又可以独立的浮动在界面上, 如图 2.2 所示为浮动 的窗

口。

图 2.1 Command Window 窗口

图 2.2 Workspace 窗口

在使用过程中该窗口显示工作窗口中所有变量的名称、取值和变量类型说明,可

以对变量进行编辑、观察、保存和删除等操作 。

3 Command 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

为有两个正态分布函数 1 , 12和 2 , 22叠加而成,则图像会出现具有双峰的分布特性的直方图,该特性可以用图3.1 表示。

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

P

P

其中,P为分割阈值,结果图像的灰度级取t 0 0(黑色)、t1 1(白色) 若为多个阈值,则:

t0 f (x,y) P0 t1P0 f (x,y) P1

g(x,y)

t k P k 1 f(x, y) P k

3.1.2 双峰法图像分割示例

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

g (x, y) t t0f f((x x,,y y))

t1 f (x, y)

图3

.1

3 -1

行下述程序,来观察所需分割图像的直方图: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) 计算两个区域的灰度均值 1和 2 ;

(4) 计算新阈值 p ( 1 2 ) 2

。 2 最大类间方差法 最大

类间方差法的计算方法

为:

根据灰度级,确定阈值 T ,就可以把一幅数字图像 f (x, y) 的像素点分为两个类中, 其中

图像灰度的最小值、最大值分别表示为 Z min 和Z max 则可以把图像表示为: f(x,y)

f min f(x,y) T T f(x, y) f max

图像总的像素为: N N i ,则各灰度出现的概率为,

P(i) N i N 假设两个区域分别为 A ,B ,则区域 A 出现的概率为:

P A T

P(i), i f min

均值为: A

i f mi T iP(i

则区域 B 出现的概率为: P B

f max

P(i) iT1 均值为: B fmax iP(i)

iT1 P B

f

max iP(i) i f min 两个区域的方差为 : 2 (T) P A ( T iP(i)

f min A )2 P B ( f max iP(i) iT1 B)2

最大类间方差法是把两类的类间方差作为阈值的选择标准,

图像 f(x,y)的均值为: P A A P

B B 使得类间方差

2(T)

最大的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

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

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

则将 (x, y)与(x 0,y 0)合并;

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

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

其中,生长准则是评价种子像素与其邻域像素点的相似程度的判断准则;根据设 定不同的

阈值来确定停止条件,停止条件的选择对分割结果的精确度有至关紧要的作 用,在利用区域生

长法进行图像的分割时,要根据具体的图像特征来选择合适的生长 停止条件。

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

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

图4.1 区域生长

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

1 MATLAB 程序

(1)先编写区域生长法的算法程序,并保存在 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

5

6 8 8 4

3 2 1 5

4 6 7 3

3

2 1 MATLAB 的 m 文件中,程序如下:

a) c)

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表示整个图像区域,如果

P(R i) false ,则将图像分成四个区域,如果有任何一个区域依然有P(R i) false ,怎讲这个继续分割为四个区域,以此类推直到R i 为单个像素。四叉树分解法可以用下

4.4 的示意图表示。

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

图4.4 四叉树分解示意图

如图4.5 所示,假设图中灰色区域为我们所需要的目标区域,白色为背景区域。

对整个图像P(R i) false ,令P(R i) ture 表示该区域中所有像素均具有相同的灰度值。

所以根据以上条件先将图(a) 分割成四个区域,此时右上角的区域满足P(R i) ture ,所以不再进行分割,而其他区域继续进行分割操作,直至分割的每个子区域均满足条件,

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

根据四叉树分解示意图,MATLAB中提供了三种函数来实现这一规则。具体操作步

骤是,首先将图像分成四个小区域,然后根据一定的准则判断各个区域是否具有特定的相似性,不满足则进行进一步的分裂,直至分裂的每一小块都达到一定的相似准则,再对各个区域进行合并。

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

qtgeblk 函数用于经过四叉树分解后的各个区域的图像信息;qtsetblk 函数用于设定分解区域的灰度值。

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

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

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

S=qtdecomp(I,.2);

blocks=repmat(uint8(0),size(S)); for dim=[512 256 128 64 32 16 8 4 2 1];

numblocks=length(find(S==dim)); if(numblocks>0)

R1R2

R3

R41R42

R43R44R44

a

R

R4

则分裂停止,进行合并

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

相关文档