数字图像分割及matlab实现

摘 要

 图像分割作为图像分析和理解的一个关键步骤,其结果将直接影响到目标物特征提取和描述,以及进一步的目标物识别、分类和图像理解。本文全面细致地介绍了图像的分割技术及MATLAB实现。包括图像分割的定义和依据,边缘点检测,边缘线跟踪,门限化分割及区域分割法。针对各种算法给出了对比分析,重点介绍了遗传分割算法,并通过MATLAB软件编程实现了这些算法。

关键词:图像分割 ,边缘检测 , 遗传算法 ,Matlab

目 录

 

Abstract

 

第一章 绪论

1.1  图像分割综述

1.2  图像分割的研究意义与发展现状

1.3 本论文所作的工作

1.4 本论文的论述内容

第二章  Matlab简介

2.2 MATLAB的语言特点

2.3 MATLAB 遗传算法工具箱简介

第三章 数字图像基础简介

3.1  图像的基本概念及其特点

3.2 图像的格式

第四章  图像分割

4.1 图像分割算法的定义与分类

4.2 基于阈值的分割

第五章 遗传算法理论简介

5.1遗传算法的基本概念

5.2遗传算法

第六章 基于遗传算法的最大类间方差分割法

6.1 普通最大类间方差法(Otsu法)简介

6.2  最大类间方差图像分割的遗传算法描述

6.3  实验结果与效果对比

结论

 

参考文献

 

第一章 绪论 

1.1  图像分割综述

图像分割就是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程。图像分割是数字图像处理中的一项关键技术,它使得其后的图像分析、识别等高级处理阶段所要处理的数据量大大减少,同时又保留有关图像结构特征的信息。而且,在数字图像处理工程中,一方面,图像分割是目标表达的基础,对特征测量有重要的影响;另一方面,图像分割是自动目标识别的关键步骤,图像分割及其基于分割的目标表达、特征提取和参数测量等将原始图像转化为更抽象更紧凑的形式,分割中出现的误差会传播至高层次处理阶段,因此分割的精确程度是至关重要的。只有通过细致精细的图像分割,才能使得更高层的图像分析和理解成为可能。因此,图像分割是由图像处理进到图像分析的关键步骤,在图像工程中占据重要的位置。

1.2  图像分割的研究意义与发展现状 

作为计算机视觉和图像处理中的难点和热点之一,图像分割的研究受到了研究工作者的高度重视,对图像分割进行了深入、广泛的研究。作为一种重要的图像技术,图像分割在不同领域中有时也用其它名称:如目标轮廓(object delineation)技术,阈值化(thresholding)技术,图像区分或求差(image discrimination)技术,目标检测(target detection)技术,目标识别(target recognition)技术,目标跟踪(target tracking)技术等,但这些技术本身或其核心实际上也就是图像分割技术。图像分割作为图像处理、分析的一项基本内容,其应用非常广泛,几乎出现在有关图像处理的所有领域,并涉及各种类型的图像。在工业自动化、在线产品检验、生产程控、文件图像处理、遥感图像、保安监视、以及军事、体育、农业等行业和工程中,图像分割都有着广泛的应用。例如:在遥感图像中,合成孔径雷达图像中目标的分割、遥感云图中不同云系和背景分布的分割等;在医学应用中,脑部 MR 图像分割成灰质(GM)、白质(WM)、脑脊髓(CSF)等脑组织和其它脑组织区域(NB)等;在交通图像分析中,把车辆目标从背景中分割出来等;在面向对象的图像压缩和基于内容的图像检索中将图像分割成不同的对象区域等。在各种图像应用中,只要需对图像目标进行提取、测量等都离不开图像分割。

自 20 世纪 70 年代至今,已提出上千种各种类型的分割算法。如:门限法、匹配法、区域生长法、分裂-合并法、水线法、马尔可夫随机场模型法、多尺度法、小波分析法、数学形态学等。随着新理论、新技术的发展,一些新的图像分割方法也随之出现,但这些分割算法都是针对某一类型图像、某一具体的应用问题而提出的,并没有一种适合所有图像的通用分割算法。通用方法和策略仍面临着巨大的困难。另外,还没有制定出选择适用分割算法的标准,这给图像分割技术的应用带来许多实际问题。

1.3 本论文所作的工作 

据此,在本论文中只对常用的、并在实践中行之有效的边缘检测方法和阈值分割方法进行深入的了解,并对阈值分割方法中的灰度直方图双峰法和基于遗传算法的最大类间方差法进行详细的讨论,同时用Matlab对上述两种方法进行验证并给出结果。

1.4 本论文的论述内容 

本文对图像分割的整个过程中的一些常用的,经实践检验行之有效的算法进行了讨论和改进。全文共七章。第一章为绪论,主要介绍了现阶段图像分割技术的发展现状和研究意义。其他六章分别在以下几个方面介绍了本文所做的工作:

1.对本文所采用的试验测试工具Matlab 进行简介。

2.简介数字图像的基础问题。概述了数字图像的基本概念和特点,简介了各种图像格式的特点和应用,为全文的讨论作一铺垫。

3.详细讨论了图像分割中的基于阈值的图像分割方法,给出了直方双峰法的算法和验证结果,并简要介绍了普通最大类间方差法的算法过程。

4.对遗传算法理论进行简介。详细讨论了遗传算法的定义和标准遗传算法的流程和要素。为应用此方法对最大阈值进行迭代寻优打下基础。

6.应用遗传算法改进了最大类间方差法。给出了整个遗传操作的使用函数与具体进程,并对实例图片进行处理,得到处理结果并得到迭代最优阈值M。

本文研究了图像分割的相关理论和常用技术,并对遗传算法进行了介绍,对遗传算法应用于图像分割进行了验证.

第二章  Matlab简介

2.1 MATLAB的概况 

MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多.

 当前流行的MATLAB包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类.开放性使MATLAB广受用户欢迎.除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.

2.2 MATLAB的语言特点

一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其他语言的特点,正如同FORTRAN和C等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为第四代计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。MATLAB最突出的特点就是简洁。MATLAB用更直观的,符合人们思维习惯的代码,代替了C和   FORTRAN语言的冗长代码。MATLAB给用户带来的是最直观,最简洁的程序开发环境。以下简单介绍一下MATLAB的主要特点:

  1. 语言简洁紧凑,使用方便灵活,库函数极其丰富。
  2. 运算符丰富。

3. MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。

4. 程序限制不严格,程序设计自由度大。

5. 程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。

6. MATLAB的图形功能强大。

7. MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。

8. 功能强大的工具箱是MATLAB的另一特色。

9. 源程序的开放性。

2.3 MATLAB 遗传算法工具箱简介  

鉴于Matlab强大的扩展功能和影响力,各个领域的专家相继突出了许多基于Matlab的专用工具箱。本文所采用的遗传算法工具箱,就是由英国谢菲尔德(Sheffield)大学设计推出的。相对于其他版本的遗传算法工具箱,如:美国北卡莱罗纳州立大学推出的遗传算法优化工具箱GAOT(Genetic Algorithm Optimization Toolbox),以及MathWorks公司最新发布的一个专门设计的Matlab遗传算法和直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox),本工具箱的出现最早,影响较大且功能较为完备。文中所采用的所有遗传操作函数大部分出自本工具箱。

第三章 数字图像基础简介

图像处理的首要一步,就是要了解图像的基本性质与特点。只有充分了解和掌握了所要处理得图像的特点和性质,才能在接下来的处理中根据图像的特点获取所需的信息,并对其进行相应的处理。

本章将介绍数字图像的基础知识,以及图像在计算机处理中的信息表达形式,并对几种常用的图像文件格式Bmp, Jpeg以及Png等做简要的介绍。

3.1  图像的基本概念及其特点 

要对图像进行处理,必须清楚图像的概念。一般来说,二维或三维景物呈现在人眼中的样子就是图像。图像具有以下三个方面的特点:

(1)图像带有大量的信息,一幅图像顶得上千言万语;

(2)图像种类繁多,包括照片、绘图视频图像等;

(3)人类从外界获得的大部分信息来自视觉系统。

人们看到的任何自然界的图像都是连续的模拟图像。其形状和形态表现由图像各位置的颜色来决定。可以用f(x, y)表示一幅模拟图像,其中x, y表示空间坐标点的位置,f表示图像在点(x, y)的某种性质的数值,如亮度、颜色等,f、x、y可以是任意的实数。而把连续空间的图像在坐标空间(X, Y)和性质空间F都离散化,以便于计算机进行加工处理的离散化的图像则称为数字图像。数字图像用I (r, c)来表示,其中:r=row为行,c = col为列,表示空间离散点的坐标,I表示离散化的图像f。I, r, c都是整数。实际中仍习惯用f (x, y)表示数字图像。图像存储画面的形式为栅格结构:即将图像划分为均匀分布的栅格(像素),显式的记录每一像素的亮度和颜色;而将像素的坐标值规则地隐含起来,其位置排列规则,通常为矩形排列。

3.2 图像的格式 

常用的图像文件格式有位图文件、JPEG文件、GIF文件、PNG文件等。每一种格式都有它的特点和用途,在选择输出的图像文件格式时,应考虑图像的应用目的以及图像文件格式对图像数据类型的要求。

第四章  图像分割

4.1 图像分割算法的定义与分类

在图像的研究和应用中,人们往往只对一幅图像中的某些部分感兴趣,这些感兴趣的部分一般对应图像中特定的、具有特殊性质的区域(可以对应单个区域,也可以对应多个区域),称之为目标或前景;而其它部分称为图像的背景。为了辨识和分析目标,需要把目标从一幅图像中孤立出来,这就是图像分割要研究的问题。所谓图像分割,从广义上来讲,是根据图像的某些特征或特征集合(包括灰度、颜色、纹理等)的相似性准则对图像象素进行分组聚类,把图像平面划分成若干个具有某些一致性的不重叠区域。这使得同一区域中的象素特征是类似的,即具有一致性;而不同区域间象素的特征存在突变,即具有非一致性。从集合的角度出发,图像分割定义如下:

设整个图像空间为一集合R 。根据选定的一致性准则P ,R 被划分为互不重叠的非空子集(或子区域):{

,

,

,

},这些子集必须满足下述条件:

(1) 

(2) 对于所有的

,当

 = 空集;

(3) P(

) = True ,对所有的

(4) 所有

,

相邻,P(

) = False

(5) 对

=1,2,L,n,

是连通区域

其中:P(

)为作用于

中所有象素的形似性逻辑谓词,

,

=1,2, 

,…

。上述条件

(1)指出分割后的全部子区域的总和应包含图像中的所有元素,或者说分割应将图像中每个象素都分进一个子区域中。

(2)指出各个子区域相互不重叠。

(3)指出分割后得到的属于同一区域中的元素应该具有某种相同特性。

(4)指出对于分割后得到的属于相邻两个区域中的元素具有某种不同的特性。(5)要求同一个子区域内的元素应当是连通的。

其中分割准则P 适用于所有象素,由它来确定各区域元素的相同特性。上述数学条件说明了图像分割算法的一些特点,凡不符合以上特点的图像处理算法则不能称为图像分割算法。

目前,在己提出的多种类型的分割算法中,大致可以分为基于边缘检测的方法和基于区域的方法。而在实际应用中,这些方法主要又可划分为三种类型: 边缘检测型、阈值型和区域跟踪型。本文的讨论正是基于阈值型图像分割方法展开的。

4.2 基于阈值的分割

4.2.1方法定义与特点

基于阈值的分割方法是一种应用十分广泛的图像分割技术。所谓阈值分割方法的实质是利用图像的灰度直方图信息得到用于分割的阈值。它是用一个或几个阈值将图像的灰度级分为几个部分,认为属于同一个部分的象素是同一个物体。它不仅可以极大的压缩数据量,而且也大大简化了图像信息的分析和处理步骤。因此,在很多情况下,是进行图像分析、特征提取与模式识别之前必要的图像预处理过程。它特别适用于目标和背景占据不同灰度级范围的图像。阈值分割方法的最大特点是计算简单,运算效率高,在重视运算效率的应用场合,它得到了广泛的应用。

4.2.2 阈值的分割的描述

设(x,y)是二维数字图像的平面坐标,图像灰度级的取值范围是G= {0,  1,  2,…L-1 }(习惯上0代表最暗的像素点,L-1代表最亮的像素点),位于坐标点

上的像素点的灰度级表示为

。设t∈G为分割阈值,B= {

,

}代表一个二值灰度级,并且

,

∈B。于是图像函数

在阈值

上的分割结果可以表示为:

阈值分割法实际就是按某个准则函数求最优阈值t的过程。域值一般可写成如下的形式:

                    

其中

是在像素点

处的灰度值,

是该点邻域的某种局部性质。

4.2.3 阈值分割方法的分类

通过上文的讨论,结合所给公式,可以将阈值分割方法分为以下3类:

(1) 全局阈值: 

,即仅根据

来选取阈值,阈值仅与各个图像像素的本身性质有关。

(2) 局部阈值: 

,阈值与图像像素的本身性质和局部区域性质相关。

(3) 动态阈值: 

,阈值与像素坐标,图像像素的本身性质和局部区域性质相关。

   全局阈值对整幅图像仅设置一个分割阈值,通常在图像不太复杂、灰度分布较集中的情况下采用;局部阈值则将图像划分为若干个子图像,并对每个子图像设定局部阈值;动态阈值是根据空间信息和灰度信息确定。局部阈值分割法虽然能改善分割效果,但存在几个缺点:

(1) 每幅子图像的尺寸不能太小,否则统计出的结果无意义。、

(2)每幅图像的分割是任意的,如果有一幅子图像正好落在目标区域或背景区域,而根据统计结果对其进行分割,也许会产生更差的结果。

(3)局部阈值法对每一幅子图像都要进行统计,速度慢,难以适应实时性的要求。

全局阈值分割方法在图像处理中应用比较多,它在整幅图像内采用固定的阈值分割图像。考虑到全局阈值分割方法应用的广泛性,本文所着重讨论的就是全局阈值分割方法中的直方图双峰法和基于遗传算法的最大类间方差法。在本节中,将重点讨论灰度直方图双峰法,最大类间方差法以及基于遗传算法的最大类间方差法留待下章做继续深入地讨论。

4.2.4 直方图双峰法(mode 法)

Prewitt 等人于六十年代中期提出的直方图双峰法(也称 mode 法) 是典型的全局单阈值分割方法。该方法的基本思想是:假设图像中有明显的目标和背景,则其灰度直方图呈双峰分布,如图1所示:

图1

当灰度级直方图具有双峰特性时,选取两峰之间的谷对应的灰度级作为阈值。如果背景的灰度值在整个图像中可以合理地看作为恒定,而且所有物体与背景都具有几乎相同的对比度,那么,选择一个正确的、固定的全局阈值会有较好的效果。如图4.2所示:

   

图4.2原始灰度图像                         图4.3灰度直方图

灰度直方图,当选定阈值M为100时,分割效果如下:

     

图4.4

分割后图像通过对上示图片的比照,对于简单的,背景图像和目标图像对比鲜明的图片,我们很容易通过其灰度直方图找到分割用的阈值(M=100),从而将图像按照灰度的不同区分开来。这种方法虽然简单易行,但是因为同一个直方图可能对应若干种不同的图像,所以使用双峰法需要有一定的图像先验知识,而且该方法不适合用于直方图中的双峰差别很大或双峰之间的谷部较宽广而平坦或者只有单峰的图像。例如,在对于下示图4.5,图4.8,图片的处理:

  

图4.5原始图像                    图4.6灰度图像

    

图4.7灰度直方图

图片4.5的直方图平坦,无法找出两峰之间的峰谷。

   

图4.8 原始图像                      图4.9灰度图像

图4.10灰度直方图

图片4.9的直方图的各峰差别大,无法通过峰谷判定阈值。因此,阈值的难以确定,导致对这两幅图片采用灰度直方图法的失败:

  

图4.11分割结果                      图4.12分割结果

由于图片4.6直方图的平坦,无法找出两峰之间的峰谷,而图片4.9的直方图各峰差别很大,导致图片4.6和图片4.9都无法获得足够的图像先验知识,从而使本方法的使用遇到困难,阈值的寻找困难直接导致在采用本方法处理图片后,分割后的图像与原图像的差别很不明显,并未达到实际的分割效果。因此,本方法的使用的局限性很大,只适于对一些简单的背景和目标图像的灰度差别很大的图像的处理,(程序源代码参见附录一),而且不便于阈值的自动选择,无法完全自动的有程序实现。

第五章 遗传算法理论简介

分割的目的是将图像划分为不同区域。图像分割算法一般是基于亮度值的两个基本特性之一:不连续性和相似性。第一类性质的应用途径是基于亮度的不连续变化分割图像,比如图像的边缘。第二类的主要应用途径是依据事先制订的准则将图像分割为相似的区域。门限处理、区域生长、区域分离和聚合都是这类方法的实例。遗传算法具有简单、鲁棒性好和本质并行的突出优点。其在应用领域取得的巨大成功,引起了广大学者的关注。在图像分割领域,遗传算法常用来帮助确定分割阈值。

5.1遗传算法的基本概念 

遗传算法(GA-Genetic Algorithms)是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,由Michigan大学的J. Holland教授于1975年首先提出。它将“适者生存”的进化理论引入串结构,并且在串之间进行有组织但又随机的信息交换。通过遗传操作,使优良品质被不断保留、组合,从而不断产生出更佳的个体。子代个体中包含父代个体的大量信息,并在总体上胜过父代个体,从而使种群向前进化发展,即不断接近最优解。由于遗传算法是自然遗传学和计算机科学相互结合渗透的产物,因此借用了许多自然进化的基础术语。

·种群(population)和个体(individuals)  

遗传算法处理的是染色体,或者叫基因型个体,通常以一维串结构资料来表现。一定数量的个体组成了种群(population ),或叫集团。

·种群规模(population size)

种群中个体的数目称为种群大小,也叫种群规模。

·适应度函数(fitness function)

各个个体对环境的适应程度叫做适应度。对于优化问题,适应度函数就是目标函数。遗传算法对适应度函数并不要求可导等条件,只要求适应度函数为可加以比较的非负函数。

·编码(coding)、译码(decoding)操作

遗传算法必须包含两个必须的资料转换操作,即把搜索空间中的参数或解转换成遗传空间中的染色体或个体,称为编码操作;反之,称为译码操作。

·选择(selection)、交叉(crossover)和变异(mutation)操作

这三个操作数是遗传算法的三个主要操作操作数,即遗传操作(genetic operation,是遗传算法的特点。

5.2遗传算法

5.2.1遗传算法的基本流程

标准遗传算法(SGA)的基本流程如图所示,算法主要步骤如下图5.1所示:

图5.1

(1)随机产生初始种群,作为第一代。个体长度、种群规模、交叉概率、变异概率为固定值;

(2)对父代种群计算适应度值;

(3)判断是否满足终止条件,是,则执行步骤4:否则,进行选择、交叉、变异操作形成子代种群,并将子代种群作为下一次叠代的父代种群,转入执行步骤2;

(4)输出最佳个体,退出。

5.2.2遗传算法的要素

遗传算法具有5个基本要素:编码机制,初始种群的设定,适应度函数的设定,遗传操作,控制参数的设定。具体步骤如下:

    1.   编码机制:编码机制是遗传算法的基础。
    2. 初始化种群设定:遗传算法处理流程中,编码设计之后的任务是初始种群的设定,并以此为起点一代一代的进化直到按照某种进化终止准则终止。最常用的初始方法是无指导的随机初始化。
    3. 适应度函数:遗传算法在搜索过程中基本不采用外部信息,仅以适应度函数为依据引导搜索。
    4. 遗传操作:遗传操作主要包括:选择(selection )、交叉(crossover)、变异(mutation)三个操作数。
    5. 控制参数:控制参数主要有:种群规模、迭代次数、交叉概率、变异概率等。

可见,遗传算法从任一初始化种群出发,通过选择(使优秀个体有更多机会传给子代),交叉(体现优秀个体间的信息交换),变异(引入新的个体,保持种群的多样性)操作种群一代一代的进化到搜索空间中最优点附近,直至收敛到最优解点。遗传算法不是直接作用在问题空间中,而是编码空间中,而且遗传操作非常简单。这使得遗传算法具有了简单,通用,鲁棒性强的特点。

第六章 基于遗传算法的最大类间方差分割法

6.1 普通最大类间方差法(Otsu法)简介

由 Otsu于 1978 年提出的最大类间方差法以其计算简单、稳定有效而一直广为使用。该方法又称为大津阈值分割法,是在判决分析最小二乘法原理的基础上推导得出的,算法较为简单。此方法由于其简便性和分割准确性在图像分割中被大量采用,但是缺点在于与,与后文所述的基于遗传算法最大类间方差法相比,要求得最佳阈值,需要遍历灰度范围0~L-1内的所有像素并计算方差,最后比较得出最大方差,计算量大同时效率也很低,运算时间偏长。鉴于本文着重讨论遗传算法最大类间方差法,因此对于普通最大类间方差法讨论只作简介,详细内容参阅参考文章[6]。

基本思路:选取的最佳阈值t应当使得不同类间的分离性最好。首先计算基于直方图得到各分割特征值的发生概率,并以阈值变量t将分割特征值分为两类,然后求出每一类的类内方差及类间方差,选取使得类间方差最大,类内方差最小的t作为最佳阈值。具体步骤如下:

设原始灰度图像灰度级为

,灰度级为

的象素点数目为

,则图像的全部象素数为

按阈值t可将所有象素划分两类:

= (0,1,2,…,t)和

 = (t +1,t + 2,…,L -1) 。而

类的类出现概率w及均值μ 分别由下列各式给出:

式中:

不难得出,对任何t值,下式都能成立:

里的方差可由下式求得:

                           

定义类内方差

、类间方差

、总体方差

 为:

引入:

则最佳阈值t*可选择为:t* = maxη(t)

在图像处理过程中,原有的图像分割方法都不可避免的会产生误差,这些误差会影响到图像处理和识别的效果。如何使这些误差最小是使计算机视觉达到实用化的重要要求。遗传算法其固有的并行性和不易陷入局部最优的特点使之非常适于大规模搜索空间的寻优,因此,己广泛应用于图像处理领域。图像分割是一个在复杂的参量空间中寻找最优分割参量的问题,遗传算法可以有效的寻找参量空间的全局最优值,从而为解决图像分割中的参量选择难题提供了有力的保证。本章将着重讨论基于遗传算法的最大类间方差分割法在图像分割中的应用。

6.2  最大类间方差图像分割的遗传算法描述 

正如前文所述,最大类间方差的求解过程就是在解空间中找到一个最优解,使得类间方差最大。为了改进普通最大类间方差法,采用遗传算法,求其寻找最优解的过程进行改进。遗传算法的最大类间方差法步骤如下:

(1)  建立初始种群并编码。

在Matlab中,通过函数crtbp建立初始种群,在0~255之间以同等概率随机产生初始种群,通常初始种群的规模选取不易过大。随机的在0~255之间以同等概率生成40个个体A 1 ~A40作为第一次寻优的初始的种群。通过函数bs2rv进行二进制码和实值的转变。因为图像的灰度级在0~255之间,所以将染色体编码成8位二进制码,它代表某个阈值。(函数源代码参见附录[一])

(2) 适应度函数计算各个体的适应度值。采用公式

P1=S1/I; P2=S2/J,F(k)=I*J*(P1-P2)* (P1-P2)/(256*256)

作为适应度函数对个体进行适应度计算。式中,F(k)为适应度函数;I为目标图像的像素数J为背景图像的像素数;S1 为目标图像的像素和,S2为背景图像的像素和。(函数源代码参见附录[二])

(3) 选择:与标准遗传算法略有不同,本例未采用轮盘赌方法进行选择操作,而是以Matlab中的高级函数select作为选择程序。在这种方法中,需要设定代沟,即整个种群在每一代中没有完全被复制,有部分剩余。本例设代沟GGAP=0.9,即每次遗传后子代数量为父代的90%。(函数源代码参见附录[三])。

(4)交叉:在Matlab中使用高级函数recombin实现。即在当前种群中每次选取两个个体按设定的交叉概率(0.7)进行交叉操作,生成新的一代种群; (函数源代码参见附录[四])。

(5)变异:在Matlab中使用函数mut实现。即根据一定的变异概率Pm,选取当前种群的每一行对应一个个体并用概率Pm变异每一个元素,从而形成新一代群体。(函数源代码参见附录[五])

(6)终止:本程序中选择指定代数(50代)作为寻优循环跳出的判断条件。判断跳出条件是否满足,若不满足,则以新生成的群体作为第一代群体,转到步骤3继续寻优,否则转到步骤7。

(7)将最后一代群体中适应度最大的个体作为最优结果,将其反编码(采用bs2rv函数),即为所求的最佳分割阈值。

6.3  实验结果与效果对比

为了验证算法的效果,选用一幅SHE的JPG图像进行实验,原始图像6.1显示:

     

图6.1原始图像                        图6.2灰度图像

对上图进行灰度变化后的灰度图像如下图6.2;

在对灰度图像转化为索引图像并将其数据类型转化为双精度型之后的图片如下图6.3:

图6.3索引图像

此时,就可对上图进行基于遗传算法的最大类间方差分割法进行处理了。设定初始群体的数目N=40,交叉概率P c=0. 9,代沟为0.9,变异率为Pm采用默认值。最大迭代数G=50。实验结果及数据如下:通过50次迭代寻优后,找到最优化阈值M=162:

         

图6.4基于遗传算法的最大类间方              6.5直方图双峰法分割后的图像

差法分割后图像图

结论 

  本文所讨论的基于遗传算法的图像分割算法,采用标准遗传算法作为计算流程,但对其中的选择算子进行了改变,用高级选择函数select代替了传统的单一选择算子,使得在每次选择运算后所得的父辈更为健壮,更好的保持了第一代父辈的表现型,使得分割更加精确。通过设计变异概率,使得每次迭代遗传运算后,子代的表现型略有改变,从而更以获得最优的表现型(即最优阈值),减少了迭代寻优次数,降低了程序运行时间。同时考虑到过多迭代不利于降低程序运行时间,以及在寻优过程中的最佳值收敛问题,指定迭代次数为50次时即跳出整个程序,通过反编码求得最优阈值,并通过变量调用,直接应用于下面的分割程序,达到了整个算法的自动完成。

相对于灰度直方图双峰法,本方法对图像的先验信息要求不高,不需要像灰度直方图法那样,先通过获得图像的灰度直方图取得分割阈值后再对图像处理,整个程序的自动化程度高,且对于那些灰度直方图不呈双峰分布的图像,本算法程序一样可以处理,这就扩大了本算法程序的灵活性,从而更具有实际意义。而且,由于灰度直方图双峰法的阈值是通过人眼观察获得,其误差必然大于机器迭代运算所取得的最优阈值,而普通的阈值分割法,如ostu法,虽然实现了阈值的自动选择,但其运算时间与本算法相比偏长,实时性差于本算法。因此,在图像分割算法中,基于遗传算法的图像分割算法更优于其它传统的图像分割算法。

通过上述讨论,以及两种方法的处理结果图片的对比,基于遗传算法的最大类间方差法分割后图像与直方图双峰法分割后的图像像比,效果更明显,且无须事先测量图像的灰度直方图,更加灵活,更加精确。

参考文献

[1]张兆礼,赵春晖,梅晓丹.现代图像处理技术及MATLAB实现[M].北京:人民邮电出版社,2001.1

[2]徐建华.图像处理与分析[M],北京:科学出版,1992.

[3]阮秋琦.数字图象处理学[M],北京:电子工业出版社,2001

[4]吴谨,李娟,刘成云,基于最大熵的灰度阈值选取方法,武汉科技大学学报[J] (自然科学版),Vol. 27, No. 1, Mar, 2004

[5]魏宝刚,鲁东明,潘云鹤等.多颜色空间上的互式图像分割.计算机学报[J],2001, 24 (7):770-775

[6]杜亚勤,基于模糊集的图像边缘检测技术研究:[硕士学位论文].西安:西安工业学院,2004年4月

[7]Russ J C, The image processing handbook[J]. New York:CRC Press,1994

[8]L A Zadeh.Fuzzy Sets[J].Information and Contro1,1965, (8):338-353

[9]Lotfi A.Zadeh,A fuzzy-set-theoretic interpretation of linguistic hedges, Journal of Cybernetic[J], 1972, 64(2):4-34

[10]S. K. PaI, R. :A. King, On Edge Detection of R-Ray Images Using Fuzzy Sets. IEEE Trans.Patt. Anal and MachineIntell.1983,PAMI-5 (1):69-77.

[11]Otsu N. A Threshold Selection Method From Gray Level Histograms. IEEE Trans on Syst Man Cybernet, 1979, SMC-9:62-66

附 录

附录 一

灰度直方图双峰法分割源代码

clear, close all

B=imread('2.jpg');                                           %读入原始jpg格式图像

figure(1);

imshow(B),title('原始jpg格式图像');

I1=rgb2gray(B);                                          %将原图像转化为灰度图象

figure(2);

imshow(I1),title('灰度格式图像');

[I1,map1]=gray2ind(I1,255);                              %将灰度图像转化为索引图像

figure(3), imhist(I1)                                    %画出灰度直方图,以判断域值

 I1=double(I1);                                    %将unit8数组转化为double型数组

 Z=I1                                            %将double型数组I1转存到Z中

[m, n]=size(Z);

for i=1:m

    for j=1:n

        if Z(i,j)>240                                 %灰度值大于域值时是白色

            Z(i,j)=256;

        end

    end

end

figure(4)                                                  %画出分割后目标图像

image(Z),title('分割后图像');colormap(map1);

图像I图像格式转化及灰度直方图双峰法分割源代码

clear, close all

B=imread('she.jpg');                                       %读入原始jpg格式图像she

figure(1);

imshow(B),title('原始jpg格式图像');

I1=rgb2gray(B);                                          %将原图像转化为灰度图象

figure(2);

imshow(I1),title('灰度格式图像');

[I1,map1]=gray2ind(I1,255);                              %将灰度图像转化为索引图像

figure(3), imhist(I1)                                    %画出灰度直方图,以判断域值

 I1=double(I1);                                    %将unit8数组转化为double型数组

 Z=I1                                             %将double型数组I1转存到Z中

[m, n]=size(Z);

for i=1:m

    for j=1:n

        if Z(i,j)>240                                     %灰度值大于域值时是白色

            Z(i,j)=256;

        end

    end

end

figure(4)                                                    %画出分割后目标图像

image(Z),title('分割后图像');colormap(map1);

图像II图像格式转化及灰度直方图双峰法分割源代码

clear, close all

B=imread('she.jpg');                                      %读入原始jpg格式图像月亮

figure(1);

imshow(B),title('原始jpg格式图像');

I1=rgb2gray(B);                                          %将原图像转化为灰度图象

figure(2);

imshow(I1),title('灰度格式图像');

[I1,map1]=gray2ind(I1,255);                              %将灰度图像转化为索引图像

figure(3), imhist(I1)                                    %画出灰度直方图,以判断域值

 I1=double(I1);                                    %将unit8数组转化为double型数组

 Z=I1                                             %将double型数组I1转存到Z中

[m, n]=size(Z);

for i=1:m

    for j=1:n

        if Z(i,j)>240                                     %灰度值大于域值时是白色

            Z(i,j)=256;

        end

    end

end

figure(4)                                                    %画出分割后目标图像

image(Z),title('分割后图像');colormap(map1);

附录 二

function [Chrom, Lind, BaseV] = crtbp(Nind, Lind, Base)

nargs = nargin ;

if nargs >= 1, [mN, nN] = size(Nind) ; end

if nargs >= 2, [mL, nL] = size(Lind) ; end

if nargs == 3, [mB, nB] = size(Base) ; end

if nN == 2

   if (nargs == 1)

      Lind = Nind(2) ; Nind = Nind(1) ; BaseV = crtbase(Lind) ;

   elseif (nargs == 2 & nL == 1)

      BaseV = crtbase(Nind(2),Lind) ; Lind = Nind(2) ; Nind = Nind(1) ;

   elseif (nargs == 2 & nL > 1)

      if Lind ~= length(Lind), error('Lind and Base disagree'); end

      BaseV = Lind ; Lind = Nind(2) ; Nind = Nind(1) ;

   end

elseif nN == 1

   if nargs == 2

      if nL == 1, BaseV = crtbase(Lind) ;

      else, BaseV = Lind ; Lind = nL ; end

   elseif nargs == 3

      if nB == 1, BaseV = crtbase(Lind,Base) ;

      elseif nB ~= Lind, error('Lind and Base disagree') ;

      else BaseV = Base ; end

   end

else

   error('Input parameters inconsistent') ;

end

Chrom = floor(rand(Nind,Lind).*BaseV(ones(Nind,1),:)) ;

附录 三

function Phen = bs2rv(Chrom,FieldD)

[Nind,Lind] = size(Chrom);

[seven,Nvar] = size(FieldD);

if seven ~= 7

       error('FieldD must have 7 rows.');

end

len = FieldD(1,:);

lb = FieldD(2,:);

ub = FieldD(3,:);

code = ~(~FieldD(4,:));

scale = ~(~FieldD(5,:));

lin = ~(~FieldD(6,:));

uin = ~(~FieldD(7,:));

if sum(len) ~= Lind,

       error('Data in FieldD must agree with chromosome length');

end

if ~all(lb(scale).*ub(scale)>0)

       error('Log-scaled variables must not include 0 in their range');

end

Phen = zeros(Nind,Nvar);

lf = cumsum(len);

li = cumsum([1 len]);

Prec = .5 .^ len;

logsgn = sign(lb(scale));

lb(scale) = log( abs(lb(scale)) );

ub(scale) = log( abs(ub(scale)) );

delta = ub - lb;

Prec = .5 .^ len;

num = (~lin) .* Prec;

den = (lin + uin - 1) .* Prec;

for i = 1:Nvar,

    idx = li(i):lf(i);

    if code(i) % Gray decoding

           Chrom(:,idx)=rem(cumsum(Chrom(:,idx)')',2);

    end

    Phen(:,i) = Chrom(:,idx) * [ (.5).^(1:len(i))' ];

    Phen(:,i) = lb(i) + delta(i) * (Phen(:,i) + num(i)) ./ (1 - den(i));

end

expand = ones(Nind,1);

if any(scale)

       Phen(:,scale) = logsgn(expand,:) .* exp(Phen(:,scale));

end

附录 四

适应度函数target源代码:

function f=target(T,M)                     %适应度函数,T为待处理图像,M为域值序列

[U, V]=size(T);

W=, , length(M);

f=zeros(W,1);

for k=1:W

    I=0;s1=0;J=0;s2=0;                 %统计目标图像和背景图像的像素数及像素之和

    for i=1:U

        for j=1:V

            if T(i,j)<=M(k)

                s1=s1+T(i,j);I=I+1;

            end

            if T(i,j)>M(k)

                s2=s2+T(i,j);J=J+1;

            end

        end

    end

    if I==0,  p1=0;  else p1=s1/I; end

    if J==0,  p2=0;  else p2=s2/J; end

    f(k)=I*J*(p1-p2)*(p1-p2)/(256*256);

end

附录 五

基于遗传算法的最大类间方差法对JPG格式图像分割的程序源代码:

clear, close all

B=imread('she.jpg');                                          %读入原始jpg格式图像

figure(1);

imshow(B),title('原始jpg格式图像');

I1=rgb2gray(B);                                          %将原图像转化为灰度图象

figure(2);

imshow(I1),title('灰度格式图像');

BW1 = edge(I1,'sobel');

BW2 = edge(I1,'canny');

figure(6),imshow(BW1),title('边缘检测1');                                 %边缘检测

figure(5), imshow(BW2),title('边缘检测2');

[I1,map1]=gray2ind(I1,255);                              %将灰度图像转化为索引图像

I1=double(I1);                                     %将unit8数组转化为double型数组

 Z=I1                                             %将double型数组I1转存到Z中

figure(3)                                              %画出未进行分割的原始图像

image(Z),title('未进行分割的原始图像');colormap(map1);         

NIND=40;                                         %个体

数目(Number of individuals)

MAXGEN=50;                        %最大遗传代数(Maximum number of generations)

PRECI=8;                                  %变量的二进制位数(Precision of variables)

GGAP=0.9;                                                       %代沟(Generation gap)

FieldD=[8;1;256;1;0;1;1];                        %建立区域描述器(Build field descriptor)

Chrom=crtbp(NIND,PRECI);                                         %创建初始种群

gen=0;    

phen=bs2rv(Chrom,FieldD);                                    %初始种群十进制转换

ObjV=target(Z,phen);                                           %计算种群适应度值

while gen<MAXGEN                                                %代沟(Generation gap)

    FitnV=ranking(-ObjV);                        %分配适应度值(Assign fitness values)

    SelCh=select('sus',Chrom,FitnV,GGAP);                                    %选择

    SelCh=recombin('xovsp',SelCh,0.7);                                        %重组

    SelCh=mut(SelCh);                                                     %变异

    phenSel=bs2rv(SelCh,FieldD);                                  %子代十进制转换

    ObjVSel=target(Z,phenSel);

    [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);                      %重插入

    gen=gen+1;

end

[Y, I]=max(ObjV);

M=bs2rv(Chrom(I,:),FieldD);                                             %估计域值

[m, n]=size(Z);

for i=1:m

    for j=1:n

        if Z(i,j)>M                                      %灰度值大于域值时是白色

            Z(i,j)=256;

        end

    end

end

figure(4)                                                    %画出分割后目标图像

image(Z),title('分割后图像');colormap(map1);

target求适应度函数代码:

function f=target(T,M)                     %适应度函数,T为待处理图像,M为域值序列

[U, V]=size(T);

W=length(M);

f=zeros(W,1);

for k=1:W

    I=0;s1=0;J=0;s2=0;                 %统计目标图像和背景图像的像素数及像素之和

    for i=1:U

        for j=1:V

            if T(i,j)<=M(k)

                s1=s1+T(i,j);I=I+1;

            end

            if T(i,j)>M(k)

                s2=s2+T(i,j);J=J+1;

            end

        end

    end

    if I==0,  p1=0;  else p1=s1/I; end

    if J==0,  p2=0;  else p2=s2/J; end

    f(k)=I*J*(p1-p2)*(p1-p2)/(256*256);

end;

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值