基于模糊理论的图像分割算法研究

文学乐 人气:4.23K

  论文关键词: 图像分割 边缘检测  模糊理论 遗传算法 Matlab  

基于模糊理论的图像分割算法研究

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

本文介绍讨论了几种目前广泛应用的图像边缘检测、图像阈值分割的各种算法,并给出了对比分析;对遗传算法的基本概念和研究进展进行了综述;给出了标准遗传算法的原理、过程、实验结果及分析. 实验结果表明,本文提出的遗传分割算法优于传统分割算法。

  第一章 绪论 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的概况和产生背景 2.1.1   MATLAB的概况

MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。MATLAB的基本数据单位是矩阵,它的指令表达式与,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等完相同的事情简捷得多.
 当前流行的MATLAB包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,工具包等都属于此类.开放性使MATLAB广受用户欢迎.除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.

2.1.2   MATLAB产生的背景

在70年代中期,Cleve Moler博士和其同事在美国国家科学基金的资助下开发了调用EISPACK和LINPACK的FORTRAN子程序库ACK是特征值求解的FOETRAN程序库,LINPACK是解线性方程的程序库.在当时,这两个程序库代表矩阵运算的最高水平.到70年代后期,身为美国New Mexico大学系系主任的Cleve Moler,在给学生讲授线性代数课程时,想教学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序e Moler给这个接口程序取名为MATLAB,该名为矩阵(matrix)和实验室(labotatory)两个英文单词的前三个字母的组合.在以后的数年里,MATLAB在多所大学里作为教学辅助软件使用,并作为面向大众的软件广为流传。1983年春天,Cleve Moler到Standford大学讲学,MATLAB深深地吸引了工程师John Little敏锐地觉察到MATLAB在工程领域的广阔前景.同年,他和Cleve Moler,Steve Bangert一起,用C语言开发了第二代专业版.这一代的MATLAB语言同时具备了数值计算和数据图示化的功能.1984年,Cleve Moler和John Little成立了Math Works公司,正式把MATLAB推向,并继续进行MATLAB的研究和开发.
 在当今30多个数学类科技应用软件中,就软件数学处理的原始内核而言,可分为两大类.一类是数值计算型软件,如MATLAB,Xmath,Gauss等,这类软件长于数值计算,对处理大批数据效率高;另一类是数学分析型软件,Mathematica,Maple等,这类软件以符号计算见长,能给出解析解和任意精确解,其缺点是处理大量数据时效率较低Works公司顺应多功能需求之潮流,在其卓越数值计算和图示能力的基础上,又率先在专业水平上开拓了其符号计算,文字处理,可视化建模和实时控制能力,开发了适合多学科,多部门要求的新一代科技应用软件MATLAB.经过多年的国际竞争,MATLAB以经占据了数值软件市场的主导地位.
 在MATLAB进入市场前,国际上的许多软件包都是直接以FORTRANC语言等编程语言开发的。这种软件的缺点是使用面窄,接口简陋,程序结构不开放以及没有标准的基库,很难适应各学科的最新发展,因而很难推广。MATLAB的出现,为各国科学家开发学科软件提供了新的基础。在MATLAB问世不久的80年代中期,原先控制领域里的一些软件包纷纷被淘汰或在MATLAB上重建。
 时至今日,经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科,多种工作平台的功能强大大大型软件。在国外,MATLAB已经经受了多年考验。在欧美等高校,MATLAB已经成为线性代数,自动控制理论,数理,数字信号处理,时间序列分析,动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生,硕士生,博士生必须掌握的基本技能。在设计研究单位和部门,MATLAB被广泛用于科学研究和解决各种具体问题。在国内,特别是工程界,MATLAB一定会盛行起来。可以说,无论你从事工程方面的哪个学科,都能在MATLAB里找到合适的功能。

2.2 MATLAB的语言特点

一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其他语言的特点,正如同FORTRAN和C等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为第四代计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。MATLAB最突出的特点就是简洁。MATLAB用更直观的,符合人们思维习惯的代码,代替了C和   FORTRAN语言的冗长代码。MATLAB给用户带来的是最直观,最简洁的程序开发。以下简单介绍一下MATLAB的主要特点。
1. 语言简洁紧凑,使用方便灵活,库函数极其丰富。MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数 的可靠性。可以说,用MATLAB进行科技开发是站在专家的肩膀上。 更为难能可贵的是,MATLAB甚至具有一定的智能水平,所以用户根本不用怀疑MATLAB的准确性。
2. 运算符丰富。由于MATLAB是用C编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。
3. MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。
4. 程序限制不严格,程序设计自由度大。例如,在MATLAB里,用户无需对矩阵预定义就可使用。
5. 程序的可移植性很好,基本上不做修改就可以在各种型号的和操作系统上运行。
6. MATLAB的图形功能强大。在FORTRAN和C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。MATLAB还具有较强的编辑图形界面的能力。
7. MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。
8. 功能强大的工具箱是MATLAB的另一特色。MATLAB包含两个部分:核心部分和各种可选的工具箱。核心部分中有数百个核心内部函数。其工具箱又分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱用于多种学科。而学科性工具箱是专业性比较强的,如control,toolbox,signl proceessing toolbox,commumnication toolbox等。这些工具箱都是由该领域内学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高,精,尖的研究。
9. 源程序的开放性。开放性也许是MATLAB最受人们欢迎的特点。除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。

2.3 MATLAB 遗传算法工具箱简介

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

第三章  数字图像基础简介

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

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

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

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

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

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

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

人们看到的任何自然界的图像都是连续的模拟图像。其形状和形态表现由图像各位置的颜色来决定。可以用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 图像的格式

组成数字图像的基本单位称为像素(Pixel),把像素按不同的方式进行组织和存储,就得到不同的图像格式;把图像数据存为文件就得到图像文件。图像文件按其格式的不同一般具有不同的扩展名。常用的图像文件格式有位图文件、JPEG文件、GIF文件、PNG文件等。每一种格式都有它的特点和用途,在选择输出的图像文件格式时,应考虑图像的应用目的以及图像文件格式对图像数据类型的要求。下面我们介绍几种常用的图像文件格式及其特点。

3.2.1 BMP图像格式

这是一种DOS和Windows兼容计算机系统的标准图像格式。BMP格式支持索引色、灰度等色彩模式。图像存储为BMP格式时,每一个像素所占的位数可以是1位、4位、8位或32位,相对应的颜色数也从黑白一直到真彩色。对于使用Windows格式的4位和8位图 像,可以指定采用RLE压缩。BMP图像文件含文件头、调色板数据和图像数据三个层次。其中文件头由定义文件标识、大小即图像数据偏移量的BITMAPF工LEHEADER以及指定BMP图像自身的若干参数的BITMAPINFOHEADER两部分组成。这种格式在PC机上应用非常普遍。

3.2.2 JPEG图像格式

JPEG是由联合照片专家组(JiontPhotographic Experts Group)开发的一种图像文件格式。它采用有损压缩方式去除冗余的图像和彩色数据,在获取极高的压缩率的同时也能展现十分丰富生动的图像。也就是说,可以用较少的磁盘空间得到较好的图像质。另外,JPEG还是一种比较灵活的格式,当将图像保存为JPEG格式时,允许用户用不同的压缩比例对文件进行压缩,就是可以指定图像的品质和压缩级别。

3.2.3 TIFF图像格式

TIFF文件主要由三部份组成,包括文件头、标识信息区和图像数据区。T工FF文件的图像数据区以行扫描的方式存取图像,存储图像前先将图像分割成若干部分,压缩后再存储。存储时,单色图像一个字节存储8个点,16色图像一个字节2个点,而256色图像就是一个字节存储一个点。TIFF图像格式是一种应用非常广泛的位图图像格式,几乎被所有绘画、图像编辑和页面排版应用程序所支持。TIFF格式常常用于在应用程序之间和平台之间交换文件。

3.2.4 GIF图像格式

CIF是Graphics Interchange Format(图形交换格式)的缩写,是由ComputerServe公司推出的一种图像格式。该种图像格式的特点是压缩比高,可以极大地节省存储空间。最初的GIF只是简单的用来存储单幅静止图像,后来可以同时存储若干幅静止图像从而形成连续的动画;同时,GIF格式支持透明背景,可以较好地与网页背景融合在一起。因此,GIF常常用于保存作为网页数据进行传输的图像文件,成为网络和BBS上使用频率较高的一种图像文件格式。但是GIF最多只能处理256种色彩,不能用于存储真彩色的图像文件。

3.2.5 PNG图像格式

这种格式称为可移植网络图像文件格式(Portable Network Graphics),由Thomas Boutell, Tom Lan。等人提出并设计。其特点是:①支持48位真彩色图像、16位灰度图像和颜色索引数据图像;②主要面向网络图像传输和图像编辑,其提供的二维交叉存储机制使用户在图像网络传输过程中能更快的观察到接近真实的近似图像;③对用户完全透明且无专利限制,用户可以从Internet上随时下载与PNG文件格式配套的图像数据压缩算法源程序代码:④ 具有比GIF高5-20%的压缩效率;⑤ 具有可扩展性。

作为目前最不失真的图像格式, PNG格式图像吸取了GIF和JPEG二者的优点。它可以把文件压缩到极限以利于网络传输,但由于采用无损压缩方式来减少文件大小,PNG格式能保留所有与图像品质有关的信息。同时,PNG支持图像背景透明,显示速度快。

本文的所有图像的处理都是对由JPG格式图像通过图像格式转化得来的Bmp格式的索引色图像进行的,其具体转换程序参见附录[一]。

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

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

设整个图像空间为一集合R 。根据选定的一致性准则P ,R 被划分为互不重叠的非空子集(或子区域):{R1, R2,L, Rn},这些子集必须满足下述条件:

(1) R =

(2) 对于所有的i和j ,当i ≠ j, =空集

(3) P(Ri) = True ,对所有的i

(4) 所有i ≠ j;Ri ,Rj相邻,P(Ri U Rj) = False

(5) 对i =1,2,L,n, Ri是连通区域

其中:P(Ri)为作用于Ri 中所有象素的形似性谓词,i, j =1,2,L,…n。上述条件

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

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

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

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

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

目前,在己提出的多种类型的分割算法中,大致可以分为基于边缘检测的方法和基于区域的方法。而在实际应用中,这些方法主要又可划分为三种类型: 边缘检测型、阈值型和区域跟踪型。本文的讨论 /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.2

灰度图象

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

图6.3

索引图像

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

通过50次迭代寻优后,找到最优化阈值M=162:

图6.4

                   基于遗传算法的最大类间方差法分割后图像

图6.5

直方图双峰法分割后的图像

6.4实验结论

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

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

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

其相关试验结论列于下表:

基于遗传算法的图象分割实验结论总表:

参   考   文   献

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

[2]陈传波,金先级.数字图像处理[M].北京:出版社,2004.

[3]夏德深,傅德胜等.现代图象处理技术与应用[M].南京:东南大学出版社,1997.

[4]章毓晋.图象工程(上册)图象处理和分析.北京:清华大学出版社,1999.

[5]王小平,曹立明.遗传算法理论、应用与软件实现.西安:西安交大出版社,2002.

[6]徐立中,数字图像的智能信息处理。北京:国防工业出版社,2001

[7]王耀南,李树涛,毛建旭,图像处理与识别技术,北京:高等出版社,2001

[8]雷英杰,张善文,李绪武,周创明AB遗传算法工具箱及应用,西安:西安科技大学出版社

[9]何新贵.模糊知识处理的理论与计算, 国防出版社,1999

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

[11]阮秋琦.数字图象处,工业出版社,2001

[12]王博等.图像平滑与边缘检测的模糊向量描述,小型微型统,Vol. 20(3), 1999

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

[14]李鉴庆,左坤隆,图像阈值选取的一种快速算法.计算机与现代化,2001年第6期

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

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

[17]王保平,基于模糊技术的图像处理方法研究[博士学位论文],西安:西安电子科技大学,2004, 9

[18]杜亚娟,潘泉,周德龙等,图像多级灰度非线性模糊增强算法研究,数据采集与处Vo1.14 No.2

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

[20]L A y Sets[J]rmation and Contro1,1965, (8):338-353

[21]Lotfi h,A fuzzy-set-theoretic interpretation of linguistic hedges, Journal of Cybernetic, 1972, 64(2):4-34

[22]S. K. Pal, R. A. King. Image Enhancement Using Fuzzy Sets. Electron. Let t.,1980 16 (9):376-378.

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

[24]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);

附录 二

Crtbp 函数源代码:(由谢菲尔德大学Andrew Chipperfield编写)

% CRTBP.m - Create an initial population%

% This function creates a binary population of given size and structure.

%

% Syntax: [Chrom Lind BaseV] = crtbp(Nind, Lind, Base)

%

% Input Parameters:

%

%           Nind       - Either a scalar containing the number of individuals

%                    in the new population or a row vector of length two

%                    containing the number of individuals and their length.

%

%           Lind     - A scalar containing the length of the individual

%                    chromosomes.

%

%           Base    - A scalar containing the base of the chromosome

%                    elements or a row vector containing the base(s)

%                    of the loci of the chromosomes.

%

% Output Parameter

%    RecOpt    - (optional) Scalar containing the probability of

%                recombination/crossover occurring between pairs

%                of individuals.

%                if omitted or NaN, 1 is assumed

%    SUBPOP    - (optional) Number of subpopulations

%                if omitted or NaN, 1 subpopulation is assumed

%

% Output parameter:

%    NewChrom  - Matrix containing the chromosomes of the population

%                after recombination in the same format as OldChrom.

%  Author:    Hartmut Pohlheim

%  History:   18.03.94     file created

function NewChrom = recombin(REC_F, Chrom, RecOpt, SUBPOP);

% Check parameter consistency

   if nargin < 2, error('Not enough input parameter'); end

   % Identify the population size (Nind)

   [Nind,Nvar] = size(Chrom);

 

   if nargin < 4, SUBPOP = 1; end

   if nargin > 3,

      if isempty(SUBPOP), SUBPOP = 1;

      elseif isnan(SUBPOP), SUBPOP = 1;

      elseif length(SUBPOP) ~= 1, error('SUBPOP must be a scalar'); end

   end

   if (Nind/SUBPOP) ~= fix(Nind/SUBPOP), error('Chrom and SUBPOP disagree'); end

   Nind = Nind/SUBPOP;  % Compute number of individuals per subpopulation

   if nargin < 3, RecOpt = 0.7; end

   if nargin > 2,

      if isempty(RecOpt), RecOpt = 0.7;

      elseif isnan(RecOpt), RecOpt = 0.7;

      elseif length(RecOpt) ~= 1, error('RecOpt must be a scalar');

      elseif (RecOpt < 0 | RecOpt > 1), error('RecOpt must be a scalar in [0, 1]'); end

   end

% Select individuals of one subpopulation and call low level function

   NewChrom = [];

   for irun = 1:SUBPOP,

      ChromSub = Chrom((irun-1)*Nind+1:irun*Nind,:); 

      NewChromSub = feval(REC_F, ChromSub, RecOpt);

      NewChrom=[NewChrom; NewChromSub];

   end

% End of function

附录 七

变异函数mut源代码 :(由谢菲尔德大学Andrew Chipperfield编写)

% MUT.m

%

% This function takes the representation of the current population,

% mutates each element with given probability and returns the resulting

% population.

%

% Syntax:       NewChrom = mut(OldChrom,Pm,BaseV)

%

% Input parameters:

%

%           OldChrom - A matrix containing the chromosomes of the

%                     current population. Each row corresponds to

%                     an individuals string representation.

%

%           Pm  - Mutation probability (scalar). Default value

%                     of Pm = 0.7/Lind, where Lind is the chromosome

%                     length is assumed if omitted.

%

%           BaseV     - Optional row vector of the same length as the

%                     chromosome structure defining the base of the

%                     individual elements of the chromosome. Binary

%                     representation is assumed if omitted.

%

% Output parameter:

%

%           NewChrom - A Matrix containing a mutated version of

%                     OldChrom.

%

% Author: Andrew Chipperfield

% Date: 25-Jan-94

function NewChrom = mut(OldChrom,Pm,BaseV)

% get population size (Nind) and chromosome length (Lind)

[Nind, Lind] = size(OldChrom) ;

% check input parameters

if nargin < 2, Pm = 0.7/Lind ; end

if isnan(Pm), Pm = 0.7/Lind; end

if (nargin < 3), BaseV = crtbase(Lind);  end

if (isnan(BaseV)), BaseV = crtbase(Lind);  end

if (isempty(BaseV)), BaseV = crtbase(Lind);  end

if (nargin == 3) & (Lind ~= length(BaseV))

   error('OldChrom and BaseV are incompatible'), end

% create mutation mask matrix

BaseM = BaseV(ones(Nind,1),:) ;

% perform mutation on chromosome structure

NewChrom = rem(OldChrom+(rand(Nind,Lind)<Pm).*ceil(rand(Nind,Lind).*(BaseM-1)),BaseM);

附录 八

基于遗传算法的最大类间方差法对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;                                         %个体