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

1 绪论

1.1 图像分割的研究背景

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

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

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

1.2 图像分割的基本原理

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

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




false;

true。

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

  1. 以物体的的边界为对象进行分割;
  2. 先检测边缘像素,再将边缘像素连接起来形成分割;
  3. 以区域为对象进行分割,根据图像的灰度、色彩、变换关系或组织结构等方面的特征相似性来划分图像的子区域并将各像素划分到特定区域。

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



3 阈值化分割

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

3.1 双峰法

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

3.1.1 数学推导

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

叠加而成,则图像会出现具有双峰的分布特性的直方图,该特性可以用图3.1表示。



图3.1 具有双峰分布的直方图

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



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

若为多个阈值,则:



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所示。


基于MATLAB的数字图像分割的研究与实现_第1张图片

基于MATLAB的数字图像分割的研究与实现_第2张图片


图3.2 原图与直方图

观察上述直方图可以选择阈值为30,执行下述分割程序:

th=30;

J=im2bw(I,th/255);

figure(3);

imshow(J);

title('分割结果');

分割结果如下图3.3所示。


基于MATLAB的数字图像分割的研究与实现_第3张图片


图3.3 双峰法分割结果

3.2 自动选择法

自动选择法通常根据图像直方图所呈现出的特性来分析图像灰度值的分布情况。

3.2.1 自动选择法推导过程

1 迭代法

双峰发对于目标区域和背景区域像素的分布区域有明显区别是容易使用,对于不明显的图像阈值选择需要进行改进,而迭代法正式基于这种要求产生的。

迭代法可以利用一定的算法原理来完成阈值的自动选取操作,并能根据所选取的阈值进行分割操作,其具体实施步骤如下:

  1. 选择一个初始阈值P,可利用图像像素的最大灰度和最小灰度来选择;
  2. 利用选择的阈值P对图像进行分割分为大于P和小于P两部分;
  3. 计算两个区域的灰度均值

  1. 计算新阈值

2 最大类间方差法

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

根据灰度级,确定阈值T,就可以把一幅数字图像

的像素点分为两个类中,其中图像灰度的最小值、最大值分别表示为

则可以把图像表示为:



图像总的像素为:

,则各灰度出现的概率为,


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

均值为:


则区域B出现的概率为:


均值为:


图像

的均值为:


两个区域的方差为 :


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

最大的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的分割结果。


基于MATLAB的数字图像分割的研究与实现_第4张图片


图3.4 迭代法分割结果

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

MATLAB的库函数中直接提供了最大类间方差法的阈值分割grayhresh函数,语法格式为:level=graythesh(I)

使用MATLAB进行图像分割时,需要的程序如下:

clear all

I=imread('细菌.jpg')

th=graythresh(I);

J=im2bw(I,th);

subplot(1,2,1);

imshow(I);

title('原始图像');

subplot(1,2,2);

str=['最大类间方差法分割结果:TH=',num2str(th)];

imshow(J);

title(str);

程序执行后的分割结果如下图3.5所示。


基于MATLAB的数字图像分割的研究与实现_第5张图片


图3.5 最大类间方差法图像分割结果

4 区域化分割

4.1 区域生长分割算法

4.1.1 区域生长法简介

区域生长是从图片的一个像素出发,即选取一个种子像素,比较与之相邻的像素之间的相似性,将与种子像素在灰度、边缘、纹理等特征具有相似属性的像素归并到同一个区域,然后再将这些像素点作为新的种子像素继续上述归并过程,直到查找不到满足条件的像素为止,从而完成对一幅图片的分割操作。

区域生长算法具体描述如下:

  1. 选取图像目标区域一点作为种子像素点

为中心,与

的邻域像素

进行比较,如果

满足选定的生长准则,则将

合并;

  1. 再将归并的像素点

作为新的种子像素点

,继续步骤(2)的操作;

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

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

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



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

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];

Yout=regiongrow(I,seed,th_mean);

figure(2);

imshow(Yout);

title('区域生长分割');

2 分割结果图

执行程序时,首先在figure1窗口选择需要的种子点选择,在此选择中间的大个细菌作为示例,其中选择不同的阈值th_mean会得到不同的分割结果,当th_mean=40时分割结果如图4.2所示。


基于MATLAB的数字图像分割的研究与实现_第6张图片

基于MATLAB的数字图像分割的研究与实现_第7张图片


图4.2 区域生长法分割效果(th_mean=40)

当th_mean=70时,得到的分割结果如图4.3所示。


基于MATLAB的数字图像分割的研究与实现_第8张图片


图4.3 区域生长法分割效果(th_mean=70)

由图4.2和图4.3可以发现,当选择th_mean=70时,分割效果已经很好,当选择更大的th_mean时,会归并更多的像素,即有可能将背景像素归到目标区域中,进而影响分割准确性,所以,要根据图片特点选择合适的th_mean值。

4.2 分裂合并分割算法

4.2.1 分裂合并分割算法简介

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

分裂合并分割算法中经常使用的方法就是四叉树分解法,令R表示整个图像区域,如果

,则将图像分成四个区域,如果有任何一个区域依然有

,怎讲这个继续分割为四个区域,以此类推直到

为单个像素。四叉树分解法可以用下图4.4的示意图表示。



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

图4.4 四叉树分解示意图

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

,令

表示该区域中所有像素均具有相同的灰度值。所以根据以上条件先将图(a)分割成四个区域,此时右上角的区域满足

,所以不再进行分割,而其他区域继续进行分割操作,直至分割的每个子区域均满足条件,则分裂停止,进行合并。



(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);

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)

values=repmat(uint8(1),[dim dim numblocks]);

values(2:dim,2:dim,:)=0;

blocks=qtsetblk(blocks,S,dim,values);

end

end

figure(1);

subplot(1,2,1);

imshow(I);

title('原始图像');

subplot(1,2,2);

imshow(blocks,[]);

title('分解图像');

对细菌图像进行分割后的结果图为图4.6所示。


基于MATLAB的数字图像分割的研究与实现_第9张图片


图4.6 细菌图像的四叉树分解

5 图像分割算法的评价

5.1 图像分割算法评价概述

尽管已经有了很多种分割算法,而且该技术也在不断地发展中,但是迄今为止仍然还没有一种通用的分割算法,绝大部分分割算法通常有一定的使用围。而对于某个具体实际图像,为了得到满意的分割结果,通常会面临一个如何选择合适的分割算法的问题,特别是对分割算法不是很了解的情况下,这时就需要参考分割算法的一些性能指标来进行选择。这就是分割算法中的评价问题。尽管很多文献与著作在分割算法的评价方面已有了较深入的研究,但是迄今为止还没有一个通用的客观评价标准,在这个方面就需要我们做出进一步的努力。在做图像处理时要求我们根据不同的要求选择合适的分割算法,因此对不同分割算法作一个比较客观的评价是必需的。

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

图像分割算法的评价可以有一下这些情况:

(1)性能刻划。即同一分割算法在不同的图像情况下,分割的性能比较。

(2)性能比较。比较不同的分割算法在对同一个图像进行分割时,分割性能的比较。

对分割评价算法的一般要求包括:评价算法的通用性、评价算法的复杂性、可靠性,是否需要参考图和是否需要人工参考等。一般通过分析和实验两种方式对分割算法进行客观评价。所以一个客观的评价方法可分为分析与实验方法两类。

1 分析法

分析法对图像的原理和性能进行直接分析。该算法的原则是指所采用的分析方法和理论,经常采用先进的理论方法将得到更精确的结果。虽然分析方法能避免某些因素,但缺乏分割结果的支持,具有较大的局限性,通过分析分割结果的实际评价分割算法具有实际意义。分析方法通常提供辅助信息,它很少单独使用。

2 实验评价方法

实验法是比较不同算法的分割结果,对分割结果图像进行评价的。在实际应用也是经常使用中这种评价方法。实验方法是对测试图像分割结果进行评估,实验方法所提出的评价方法,一般可分为优化方法和偏差的方法。优化方法是基于一般人的一些视觉图像特征为依据来评估分割效果;偏差的方法通常需要提供一个理想的分割图像作为比较标准,根据计算实和理想分割图像分割效果的差异,但可供比较的形象往往难以统一样本。

5.3 本文算法分析与评价

本文中介绍了两种不同的分割算法,分别为阈值化分割和区域化分割,其中阈值分割算法又有三种不同的求阈值方法分别为双峰法、迭代法和最大类间法;区域化分割又包括区域生长法和分裂合并法。

其中各自的适用围如下:

(1)双峰阈值算法适合直方图呈现明显双峰特性的图像,在进行图像分割之前先进行一步对图像的求直方图操作,根据直方图所体现的特性找出谷点即为所需要的阈值,在直接给阈值th赋值为该谷点的值利用函数im2bw进行分割。

但是,很多时候图像的直方图并不能体现出明显的双峰特性,这时候找到的谷点值就不能很好地把目标图像分割出来,会把大量的目标像素归为背景或者把大量的背景元素归为目标,这样则会是分割的准确性下降,进而影响对图像下一步的处理操作。

例如对lena图像进行双峰法的阈值分割过程与结果如下:

先对其进行求直方图操作,结果如下图5.1所示。

基于MATLAB的数字图像分割的研究与实现_第10张图片


基于MATLAB的数字图像分割的研究与实现_第11张图片

图5.1 lena图像的直方图

lena的直方图特点如上,如果利用双峰法进行分割则需要确定阈值,若选择阈值th=60,进行分割结果如图5.2所示。

基于MATLAB的数字图像分割的研究与实现_第12张图片

基于MATLAB的数字图像分割的研究与实现_第13张图片

图5.2 阈值th=60分割结果 图5.3 阈值th=90分割结果

若选择阈值th=90,进行分割的结果如上图5.3所示。

由图5.2与图5.3可以看出,图5-3显示的当th=90时的分割效果就比th=60时的分割效果要好,但是两个不同阈值的效果都没有达到理想的分割结果,即未能把目标图像很好地分割出来。

可以得出结论:如果图像的直方图没有呈现明显的双峰特性,那么利用双峰法进行的分割结果就不准确,即双峰法适合对一些背景简单、直方图具有双峰特性的图像来进行分割。

  1. 有些时候,图像直方图呈现一定的双峰特性,但是并不能直观、准确的观察出图像的阈值特点,这就需要利用一定的算法实现自动选取阈值,迭代法就是在这个方面对双峰法的改进,该方法可以完成阈值的自动选取。

例如对之前lena图像进行分割,如果使用迭代法分割结果如下5.4所示。

基于MATLAB的数字图像分割的研究与实现_第14张图片

图5.4 迭代法对lena图像进行分割

再对cameraman图像的分割示例:

首先,求出该图像的直方图,结果为图5.5所示。


基于MATLAB的数字图像分割的研究与实现_第15张图片


图5.5 cameraman的直方图特性

如利用双峰法选择阈值th=60,进行的分割结果如图5.6所示


基于MATLAB的数字图像分割的研究与实现_第16张图片

图5.6 对cameraman选择阈值为60进行分割结果

而利用迭代法进行的分割结果如图5.7所示。

基于MATLAB的数字图像分割的研究与实现_第17张图片

图5.7 迭代法分割结果

比较图5.6与图5.7能发现迭代法分割的效果就比双峰法分割效果要更准确,例如,迭代法就把图片的下半部分很好的分割了出来。

可以得出结论:对于那些具有一定的双峰特性但又不是能明确观察出阈值的图像就要求我们利用迭代法来进行分割,即迭代法是对双峰法的改进。

  1. MATLAB中提供了一种最大类间方差阈值分割的阈值函数graythresh,用法为:th=graythresh(I),I可以使uint8、uint16或者是double型的图像。该分割算法能根据不同的图像调用graythresh函数来获得最佳阈值,选择lena图像进行示,结果如图5.8所示。


基于MATLAB的数字图像分割的研究与实现_第18张图片

图5.8 最大类间方差法图像分割

对于一些不存在双峰特性的图像也能进行比较理想的分割效果,例如下图5.9所示图像。


基于MATLAB的数字图像分割的研究与实现_第19张图片

基于MATLAB的数字图像分割的研究与实现_第20张图片


图5.9 原图像与直方图

观察上图的直方图并不体现双峰特性,利用该方法进行分割结果如下图5.10所示。


基于MATLAB的数字图像分割的研究与实现_第21张图片

图5.10 原始图像与分割结果

  1. 以上三种都能针对特定的图像进行目标分割,但是很多时候我们只需要对目标图像的一部分进行研究,那么就只要求我们将所需的部分分割出来,根据这一要求生成了区域生长算法,利用这种算法能根据需要自主地选择种子像素点,从而分割出需要的部分。例如下图5.11的示例。

基于MATLAB的数字图像分割的研究与实现_第22张图片

基于MATLAB的数字图像分割的研究与实现_第23张图片

图5.11 区域生长法分割示例

如上图的示例所示,该分割方法可以根据图像特点在m文件里设定graythresh函数的不同阈值,选取特定的种子像素点利用区域生长法找到它周围相近或者说像素差值在一定阈值的像素点,归并为一个区域,然后显示出来。

  1. 区域生长过程是从一组生长点开始,通过不断地接纳新像素最后得到整个目标区域。而分裂合并法是在开始时将图像分割成一系列任意不相交的区域,直到最后所分得的每个区域的像素都满足一定的灰度值则分裂停止,进行合并。该方法能对所有图片进行分割,但是对那些目标区域灰度值较相近的并且与背景区域灰度值有明显差别的图像能进行较好的分割。例如对cameraman和硬币图像的分割效果,如图5.12和5.13所示。


基于MATLAB的数字图像分割的研究与实现_第24张图片


图5.12 分裂合并法对cameraman分割示例


基于MATLAB的数字图像分割的研究与实现_第25张图片


图5.13 分裂合并法对cameraman分割示例

由图5.12与图5.13可以明显的观察到,当图像的目标区域像素灰度值相近时使用分裂合并分割算法进行分割的效果会比较准确,分割效果更接近所需结果。但对于类似cameraman类型图片时,即目标区域像素的灰度值分布较离散,不具有相似性的图片时,利用该算法就无法将所需目标精确地分割出来,分割的效果就比较粗糙。在精确性要求较高的情况下,该算法就不能完成要求。

6 总结

根据前几章的研究,本文具体概括了一下阈值化分割和区域化分割的基本理论和实验。其中,阈值化分割算法根据求阈值的不同又可以分为人工选择法(主要包括双峰法)和自动选择法(包括迭代法和最大类间方差法),而区域化分割算法又可以分为区域生长法和区域分裂合并法。在前面章节的研究中,不仅对同一分割算法使用不同的图像进行分割,来比较分割的性能,而且还比较不同的分割算法在对同一个图像进行分割时,分割性能的好坏。使用这样的方法能对每一种分割算法进行全面的分割效果分析,能够得出更准确的结论。

至今,各种文献和专著已经提出了多种不同的分割算法,每种算法的实现方式均不相同,但是都基于图像在像素级的不连续性和相似性。每种算法都有其一定的适用围,但是却没有哪种算法能够适合所有的图像特点,只能根据图像的不同特性或者一定的应用要求来找到适合的算法。

参考文献

[1] 德丰.数字图像处理(MATLAB版)[M].北京:人民邮电,2009:258-296.

[2] 刚.MATLAB数字图像处理[M].北京:机械工业,2010:198-222.

[3] 余松煜,周源华,瑞.数字图像处理[M].上海:上海交通大学,2007.

[4] 天华.数字图像处理[M].北京:清华大学.2007.

[5] 秦襄培.MATLAB图像处理与页面编程[M].北京.电子工业,2009:441-469.

[6] 万毅.指纹图像分割技术算法研究[D].:大学,2011.

[7] 徐琳俊.数字图像分割算法研究[D].:科技大学,2011.

[8] 猛.静态图像中的人体分割与姿态估计[D].:理工大学,2011.

[9] 钱智明.图像分割方法研究[D].:国防科技大学,2010.

[10] 冯艳平,王徽.基于阈值分割和边缘检测的枪支THz图像识别[J].红外,2011,32(12):23-26.

[11] 肖辉.彩色图像分割[J].测绘科技情报,2004,53(4):6-11.

[12] 罗志宏,冯国灿.一种新变方法在图像分割中的应用[J].计算机科学,2011,38(12):263-265.

[13] 强.图像分割中的阈值法研究[J].职业技术学院学报(自然科学版),2008.6(6):52-54.

[14] 王丽.相似背景下的苹果图像分割方法仿真研究[J].计算机仿真,2011,28(12):281-284.

[15] 龚声荣.数字图像处理与分析[M].北京:清华大学,2006:168-208.

[16] 敏.数字图像处理[M].北京:机械工业,2006:225-262.

[17] Kong W Z,Zhu Sh A.Multi-face detection based on down sampling and modified subtractive clustering for color images[J].Journal of Zhejiang University Science,2007,8(1):72-78.

[18] Jain A K,Hsu R L,Mohamed A M.Face detection in color images[J].IEEE Trans on Pattern Analysis and Machine Intelligence,2002,24(5):696-706.

你可能感兴趣的:(算法,python,计算机视觉,机器学习,人工智能)