本文从原理和应用效果上对经典的图像分割方法如边缘检测、阈值分割技术和区域增长等进行了分析。对梯度算法中的Roberts算子、Sobel算子、Prewitt算子、拉普拉斯(Laplacian)算子、LoG(Laplacian-Gauss)算子、坎尼(Canny)算子的分割步骤、分割方式、分割准则相互比较可以看出根据坎尼(Canny)边缘算子的3个准则得出的边缘检测结果最满意。而阈值分割技术的关键在于阈值的确定,只有阈值确定好了才能有效的划分物体与背景,但这种方法只对于那些灰度分布明显,背景与物体差别大的图像的分割效果才明显。区域增长的基本思想是将具有相似性质的像素集合起来构成新区域。与此同时本文还分析了图像分割技术研究的方向。
目 录(一般目录要求最多是三级目录,不要出现四级目录)
1.1.1数字图像处理的信息大多是二维信息,处理信息量很大(三级标题有问题) 1
4.2.4LoG(Laplacian-Gauss)算子 24
5.4改进意见(改进可另外做为一章比如说某某算法等的若干改进等,不要放入总结一章中)(总结是对整篇文章的一个概述,应该是写比如得出些什么结论,一些算法间比较等相关问题。) 46
第一章 绪论
1.1.1数字图像处理的信息大多是二维信息,处理信息量很大
如一幅256×256低分辨率黑白图像,要求约64kbit的数据量;对高分辨率彩色512×512图像,则要求768kbit数据量;如果要处理30帧/秒的电视图像序列,则每秒要求500kbit~22.5Mbit数据量。因此对计算机的计算速度、存储容量等要求较高。
1.1.2数字图像处理占用的频带较宽
与语言信息相比,占用的频带要大几个数量级。如电视图像的带宽约5.6MHz,而语音带宽仅为4kHz左右。所以在成像、传输、存储、处理、显示等各个环节的实现上,技术难度较大,成本亦高,这就对频带压缩技术提出了更高的要求。
1.1.3数字图像中各个像素是不独立的,其相关性大
在图像画面上,经常有很多像素有相同或接近的灰度。就电视画面而言,同一行中相邻两个像素或相邻两行间的像素,其相关系数可达0.9以上,而相邻两帧之间的相关性比帧内相关性一般说还要大些。因此,图像处理中信息压缩的潜力很大。
1.1.4作合适的假定或附加新的测量
由于图像是三维景物的二维投影,一幅图像本身不具备复现三维景物的全部几何信息的能力,很显然三维景物背后部分信息在二维图像画面上是反映不出来的。因此,要分析和理解三维景物必须作合适的假定或附加新的测量,例如双目图像或多视点图像。在理解三维景物时需要知识导引,这也是人工智能中正在致力解决的知识工程问题。
1.1.5数字图像处理后的图像受人的因素影响较大
由于人的视觉系统很复杂,受环境条件、视觉性能、人的情绪爱好以及知识状况影响很大,作为图像质量的评价还有待进一步深入的研究。另一方面,计算机视觉是模仿人的视觉,人的感知机理必然影响着计算机视觉的研究。例如,什么是感知的初始基元,基元是如何组成的,局部与全局感知的关系,优先敏感的结构、属性和时间特征等,这些都是心理学和神经心理学正在着力研究的课题。
1.2.1再现性好
数字图像处理与模拟图像处理的根本不同在于,它不会因图像的存储、传输或复制等一系列变换操作而导致图像质量的退化。只要图像在数字化时准确地表现了原稿,则数字图像处理过程始终能保持图像的再现。
1.2.2处理精度高
按目前的技术,几乎可将一幅模拟图像数字化为任意大小的二维数组,这主要取决于图像数字化设备的能力。现代扫描仪可以把每个像素的灰度等级量化为16位甚至更高,这意味着图像的数字化精度可以达到满足任一应用需求。对计算机而言,不论数组大小,也不论每个像素的位数多少,其处理程序几乎是一样的。换言之,从原理上讲不论图像的精度有多高,处理总是能实现的,只要在处理时改变程序中的数组参数就可以了。回想一下图像的模拟处理,为了要把处理精度提高一个数量级,就要大幅度地改进处理装置,这在经济上是极不合算的。
1.2.3适用面宽
图像可以来自多种信息源,它们可以是可见光图像,也可以是不可见的波谱图像(例如X射线图像、 射线图像、超声波图像或红外图像等)。从图像反映的客观实体尺度看,可以小到电子显微镜图像,大到航空照片、遥感图像甚至天文望远镜图像。这些来自不同信息源的图像只要被变换为数字编码形式后,均是用二维数组表示的灰度图像(彩色图像也是由灰度图像组合成的,例如RGB图像由红、绿、蓝三个灰度图像组合而成)组合而成,因而均可用计算机来处理。即只要针对不同的图像信息源,采取相应的图像信息采集措施,图像的数字处理方法适用于任何一种图像。
1.2.4灵活性高
图像处理大体上可分为图像的像质改善、图像分析和图像重建三大部分,每一部分均包含丰富的内容。由于图像的光学处理从原理上讲只能进行线性运算,这极大地限制了光学图像处理能实现的目标。而数字图像处理不仅能完成线性运算,而且能实现非线性处理,即凡是可以用数学公式或逻辑关系来表达的一切运算均可用数字图像处理实现。
图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大。
1.3.1航天和航空技术方面的应用
数字图像处理技术在航天和航空技术方面的应用,除了上面介绍的JPL对月球、火星照片的处理之外,另一方面的应用是在飞机遥感和卫星遥感技术中。许多国家每天派出很多侦察飞机对地球上有兴趣的地区进行大量的空中摄影。对由此得来的照片进行处理分析,以前需要雇用几千人,而现在改用配备有高级计算机的图像处理系统来判读分析,既节省人力,又加快了速度,还可以从照片中提取人工所不能发现的大量有用情报。从60年代末以来,美国及一些国际组织发射了资源遥感卫星(如LANDSAT系列)和天空实验室(如SKYLAB),由于成像条件受飞行器位置、姿态、环境条件等影响,图像质量总不是很高。因此,以如此昂贵的代价进行简单直观的判读来获取图像是不合算的,而必须采用数字图像处理技术。如LANDSAT系列陆地卫星,采用多波段扫描器(MSS),在900km高空对地球每一个地区以18天为一周期进行扫描成像,其图像分辨率大致相当于地面上十几米或100米左右(如1983年发射的LANDSAT-4,分辨率为30m)。这些图像在空中先处理(数字化,编码)成数字信号存入磁带中,在卫星经过地面站上空时,再高速传送下来,然后由处理中心分析判读。这些图像无论是在成像、存储、传输过程中,还是在判读分析中,都必须采用很多数字图像处理方法。现在世界各国都在利用陆地卫星所获取的图像进行资源调查(如森林调查、海洋泥沙和渔业调查、水资源调查等),灾害检测(如病虫害检测、水火检测、环境污染检测等),资源勘察(如石油勘查、矿产量探测、大型工程地理位置勘探分析等),农业规划(如土壤营养、水分和农作物生长、产量的估算等),城市规划(如地质结构、水源及环境分析等)。我国也陆续开展了以上诸方面的一些实际应用,并获得了良好的效果。在气象预报和对太空其它星球研究方面,数字图像处理技术也发挥了相当大的作用。
1.3.2生物医学工程方面的应用
数字图像处理在生物医学工程方面的应用十分广泛,而且很有成效。除了上面介绍的CT技术之外,还有一类是对医用显微图像的处理分析,如红细胞、白细胞分类,染色体分析,癌细胞识别等。此外,在X光肺部图像增析、超声波图像处理、心电图分析、立体定向放射治疗等医学诊断方面都广泛地应用图像处理技术。
1.3.3通信工程方面的应用
当前通信的主要发展方向是声音、文字、图像和数据结合的多媒体通信。具体地讲是将电话、电视和计算机以三网合一的方式在数字通信网上传输。其中以图像通信最为复杂和困难,因图像的数据量十分巨大,如传送彩色电视信号的速率达100Mbit/s以上。要将这样高速率的数据实时传送出去,必须采用编码技术来压缩信息的比特量。在一定意义上讲,编码压缩是这些技术成败的关键。除了已应用较广泛的熵编码、DPCM编码、变换编码外,目前国内外正在大力开发研究新的编码方法,如分行编码、自适应网络编码、小波变换图像压缩编码等。
1.3.4工业和工程方面的应用
在工业和工程领域中图像处理技术有着广泛的应用,如自动装配线中检测零件的质量、并对零件进行分类,印刷电路板疵病检查,弹性力学照片的应力分析,流体力学图片的阻力和升力分析,邮政信件的自动分拣,在一些有毒、放射性环境内识别工件及物体的形状和排列状态,先进的设计和制造技术中采用工业视觉等等。其中值得一提的是研制具备视觉、听觉和触觉功能的智能机器人,将会给工农业生产带来新的激励,目前已在工业生产中的喷漆、焊接、装配中得到有效的利用。
1.3.5军事公安方面的应用
在军事方面图像处理和识别主要用于导弹的精确末制导,各种侦察照片的判读,具有图像传输、存储和显示的军事自动化指挥系统,飞机、坦克和军舰模拟训练系统等;公安业务图片的判读分析,指纹识别,人脸鉴别,不完整图片的复原,以及交通监控、事故分析等。目前已投入运行的高速公路不停车自动收费系统中的车辆和车牌的自动识别都是图像处理技术成功应用的例子。
1.3.6文化艺术方面的应用
目前这类应用有电视画面的数字编辑,动画的制作,电子图像游戏,纺织工艺品设计,服装设计与制作,发型设计,文物资料照片的复制和修复,运动员动作分析和评分等等,现在已逐渐形成一门新的艺术——计算机美术。
利用计算机进行图像处理有两个目的:一是产生适合人观察和识别的图像,二是希望能由计算机自动识别和理解图像。无论为了哪种目的,图像处理中关键的一步就是对包含有大量各式各样景物信息的图像进行分割。分割的最终结果是图像被分解成一些具有某种特征的最小成分,称为图像的基元。相对于整幅图像来说,这种图像基元更容易被快速处理。图像特征是指图像中可用作标志的属性,它可以氛围图像的统计特性和图像的视觉特征两类。图像的统计特性是指一些人为定义的特征,通过变换才能得到,如图像的直方图、矩、频谱等;图像的视觉特征是指人的视觉可直接感受到的自然特征,如区域的亮度、纹理或轮廓等。利用这两类特征把图像分解成一系列有意义的目标或区域的过程称为图像的分割。
1.4.1 基于分形的图像分割技术
基于特征的图像分割方法包括两个重要的部分:特征抽取与模式聚类。特征提取是图像分割最重要的问题之一,能否抽取出有效的特征值对分割结果有很大的影响,如果没有好的特征值,分类方法再好也无法获得理想的结果。
特征抽取大致可以分为三类,即基于特征、基于模型以及基于结构。基于特征的方法就是寻找具有相同特性的区域或区域边界,基于模型的方法就是假设一个基本的随机过程并用过程参数作为特征。由于模型参数也可用作纹理特征,基于模型的方法可看成是基于特征方法的一个子集。结构特征基于假设图像中有可检测的基本结构元素并按一定的规则排列。
基于模型的方法最典型的模型主要有两种:分形几何模型与随机模型。分形函数近年来受到越来越多的重视。分形是B.B.Mandelbrot在总结了自然界中的非规整几何图形后,于1975年第一次提出了分形的概念。Mandelbrot给分形的定义为:设的豪斯道夫维数是D,如果这个维数恒大于集合A的拓扑维数Dt,则称集合A是分形集,简称分形。上述定义没有其他任何条件要求。1986年,Mandelbrot又给出了分形的第二个定义:组成部分与整体以某种相似的形叫做分形。这个定义突出了相似性的作用,反映了自然界中很广泛一类物体的基本属性;局部与局部,局部与整体在形态、功能、信息、时间与空间等方面具有统计意义上的相似性。简单地说分形就是一个维数大于拓扑维数的集合。分形维数的一大特点是尺度变换不变性。分形几何学已经广泛应用于图像压缩和图像编码,并且取得了较好的效果。同时也有一些研究者将分形特征用于自然纹理图像和自然景物的分割与识别中。分形维数特征对图像尺度变换不敏感,与人对物体表面粗糙度的判断有很大的相关性,由于许多自然纹理都具有线形对数功率谱,而分形维数就对应于这种线形对数功率谱斜率的估计值,因而用分形维数描述自然纹理有一定的合理性。
1.4.2 基于神经网络的图像分割技术
使用神经网络模型可以实现图像分割算法。Blanz and Gish使用一个多层前向神经网络用于图像分割,输入层神经元的数目取决于输入特征数,而输出层神经元的数目等同于分类的数目。由于BP网络能完成n维空间(输入节点数为n)到m维空间(输出节点数m)的复杂非线形映射,因此它具有Laplacian算子的能力,用神经网络可以获得良好的结果,而且用神经网络处理,一旦训练完毕,各节点间的互联权就完全确定,在识别时具有很快的速度。Babaguchi等使用多层BP神经网络,用于阈值分割图像,输入是统计直方图,输出是想要的阈值。使用这种方法,在神经网络学习阶段需要大量的已知阈值的样本图像,以用于调节网络参数产生合适的输出。但在实际应用中,要获得大量的样本图像是十分困难的。M.Liang借助于松弛标记技术与人工神经网络的有关理论,提出了一种用Kohonen网络作从网络粗分的主从神经网络分割方法,从网络的分割结果用于确定主网络中各神经元的初始状态,然后主网络从这一初始状态出发进行状态的动态演变,直至收敛到主网络的某一吸引子,这时主网络的状态对应于分割后的图像。这种方法能够分割低信噪比条件下图像,实验证明它比最佳鉴别门限准则门限分割法与矩阵保持门限分割法具有更好的效果,并且可以实现实时处理。类似的用于从高度噪声破坏的景物中提取对象的方法还可以使用Hopfield类型神经网络。
1.5本文的主要流程图
图1-1 主要流程图
由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理)。目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。
图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。
图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;如强化低频分量可减少图像中噪声影响。图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立“降质模型”,再采用某种滤波方法,恢复或重建原来的图像。
图像分割是数字图像处理中的关键技术之一。图像分割是将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一。
图像描述是图像识别和理解的必要前提。作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。对于特殊的纹理图像可采用二维纹理特征描述。随着图像处理研究的深入发展,已经开始进行三维物体描述的研究,提出了体积描述、表面描述、广义圆柱体描述等方法。
图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类,近年来新发展起来的模糊模式识别和人工神经网络模式分类在图像识别中也越来越受到重视。
MATLAB自1984年由美国Mathworks公司推向市场以来,历经十几年的发展,现已成为国际公认的最优秀的科技应用软件。MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。MATLAB以矩阵作为基本编程单元,将数值分析、矩阵计算、科学数据可视化以及非线形动态系统的建模和仿真等许多强大功能集成在一个易于使用的视窗环境之中,为科学研究、工程设计以及必须进行有效数值计算的众多学科领域提供了一个简捷、高效大编程工具,为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互回变成以完成各自的计算。借助于这种编程环境,任何复杂的计算问题及其解大描述十分适合人们的逻辑思维方式和数学表达习惯,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编程模式,为自然科学和工程设计诸多领域或全面解决复杂数值计算问题提供了综合解决方案。MATLAB语言还提供可与C、Fortran语言的借口,可以很容易与用C、Fortran语言写的程序混合编译。
矩阵语句——MATLAB的核心上控制流语句、函数、数据结构、输入/输出及面向对象编程特征的高级矩阵/数组语言。MATLAB不但允许用户交互地即算的小程序,也允许建立完整和复杂的庞大应用程序。
工作环境——MATLAB的工作环境是随使用者(作为MATLAB用户或程序员)一同工作的庞大工具和功能性程序的集合。MATLAB在用户工作区中执行变量管理和输入、输出数据的功能。MATLAB也包含一些游泳的工具,并提供了一个集成的开发环境。
句柄图形——句柄图形上MATLAB的图形系统。包括二维、三维数据的可视化、图形、图像处理、动画和显示图形的高级指令,也包括允许拥护全面控制图形外观以及在用户MATLAB应用程序中建立完整图形用户界面(GUI)的底层指令。
数学函数库——MATLAB为满足复杂高科技计算任务大需要汇集了大量有价值的科学和工程计算算法,范围从初等函数、复数运算直到复杂函数如矩阵求逆、矩阵特征值、奇异值、Bessel程序的文件库。其功能包括从MATLAB中调用C或Fortran程序、调用MATLAB作为(C或Fortran)计算引擎以及读写MAT文件。
MATLAB之所以成为世界顶尖的科学计算与数学应用软件,是因为它随着版本的升级与不断完善而具有越来越强大的功能。
MATLAB出色的数值计算功能是使之优于其他数学应用软件的决定性因素之一,尤其是当今流行的MATLAB6.1版本,其数值计算功能可谓十分完善了。
科学计算有数值计算与符号计算之分,仅有优异的数值计算功能并不能满足解决科学计算时的全部需要。在数学科学、应用科学和工程计算领域,常常会遇到符号计算问题。1993年,MathWorks公司从加拿大Waterloo大学购买了Maple的使用权,并以Malple的“内核”作为符号计算功能的引擎,依靠Maple已有的库函数,开发出了在MATLAB环境下实现符号计算功能的系统组件。
MATLAB不但在科学计算方面具有强大的功能,而且在数值计算结果的分析和数据可视化方面也有着其他同类软件难以匹敌的优势。在科学计算和工程应用中,技术人员经常会遇到大量的原始数据和数值计算结果需要进行分析,而对数据的分析并非易事。MATLAB能将这些数据以图形的方式显示出来,不仅使数据间的关系清晰明了,而且对于揭示其内在本质往往有着非常重要的作用。
MATLAB提供了一个模拟动态系统的交互式Simulink,允许用户在屏幕上绘制框图来模拟一个系统,并能动态地控制该系统。Simulink采用鼠标驱动方式,能处理线形、非线形、连续、离散等多种系统。
MATLAB提供了方便的应用程序借口(API),用户可以在MATLAB环境下直接调用已经编译过的CFortran子程序,可以在MATLAB和其他应用程序之间建立客户机/服务器关系。同样,在C和Fortran程序中,也可以调用MATLAB的函数命令,使得这些语言可以充分利用MATLAB强大矩阵运算功能和方便的绘图功能。
MATLAB Notrbook能成功地将MATLAB与文字处理系统Microsoft word集成一个整体。为用户进行文字处理、科学计算、工程设计等营造了一个完美统一的工作环境。用户不仅可以利用word强大曲文字编辑处理功能极其方便地创建MATLAB的系统手册、技术报告、命令序列、函数程序、注释文档以及与MATLAB有关的教科书等6种文档,而且还能从word访问MATLAB的数值计算和可视化结果,直接利用word对由MATLAB所生成的图形图像进行移动、缩放、剪裁、编辑等加工处理。
总的来说,MATLAB有三大特点:
3.2.1功能强大,可扩展性强
MATLAB语言不但为用户提供了科学计算、数据分析与可视化、系统仿真、数学和文字同意处理等强大的功能,而且还具有独树一帜的可扩展性特征。
MathWorks公司针对不同领域的应用,推出了自动控制、信号处理、图像处理、模糊逻辑、神经网格、小波分析、通信、最优化、数理统计、偏微分方程、财政金融等30多个具有专门功能的MATLAB工具箱。
MATLAB支持用户自由地进行二次开发。用户的应用程序既可以作为新的函数添加到相应的工具箱中,也可以扩充为新的工具箱。这些年来,国外许多不同应用领域的专家使用MATLAB开发出了相当多的应用程序。
MATLAB是一种以矩阵为基本变量单元的可视化程度设计语言,语法结构简单,数据类型单一,指令表达方式非常接近于常用的数学公式。即使对于那些不大熟悉计算机编程的用户,只要有一点windows操作的经验,在短时间内就能快速掌握MATLAB的主要内容和基本操作,甚至能解决大量复杂的手工难以完成的工作。
MATLAB不仅能使用户免去大量经常重复的基本数学运算,收到事半功倍之效,而且其编译和执行速度都远远超过了采用C和Fortran语言设计的程序。可以说,MATLAB在科学计算与工程应用方面的编程效率远远高于其他高级语言。
MATLAB具有灵活的二维与三维绘图功能,在程序的运行过程中。可以方便迅速地用图形、图像、声音、动画等多媒体技术直接表述数值计算,可以选择不同的坐标系,设置颜色、线型、视角等,并且还可以将图形嵌入到用户的word文件中。
MATLAB的这些特点使它获得了对应用学科(特别是边缘学科和交叉学科)的极强适应力,并很快成为应用学科计算机辅助分析、设计、教学,乃至科技文字处理不可缺少的基础软件。
MATLAB的数字图像处理功能很强大,其自带的图像处理工具箱(image processing toolbox)包括了经典图像处理的许多方面,如图像的集合操作、邻域和区域操作、图像变换、图像的恢复、增强和分割、线性滤波器和滤波器设计、图像分析和统计、色彩、集合及形态操作等方面。它集数值分析、矩阵运算、信号处理和图形显示于一体,其强大的扩展功能为各个领域的应用提供了基础。Matlab工具箱中主要包括信号处理(signal processing),控制系统(control system),神经网络(neural network),图像处理(image processing),鲁棒控制(robust control),非线形系统控制(nonlinear system control design),系统辨识(system identification),小波(wavelet)等工具箱。同时,MATLAB还提供了多种图像文件格式的读写和显示,这使得在MATLAB的集成环境中可以轻松实现图像处理。这些工具箱给各个领域的研究和工程应用提供了有力的工具。
在图像集合操作方面,MATLAB的图像集合操作提供了插值函数,图像尺寸调整,以及任意角度的图像旋转,可以对图像进行缩放、旋转和剪切等操作。
图像滤波方面,MATLAB图像处理工具箱提供了Fourier变换,离散余弦变换,Radon变换以及这些变换的逆变换等,同时也可以利用MATLAB的小波变换工具箱来实现图像的小波变换。
在二值图像处理方面,MATLAB图像处理工具箱的二值图像操作实现了二值图像的数学形态算法。MATLAB预定义的形态学操作有二值图像的腐蚀、膨胀,开运算、闭运算等数学形态学算法和对象标识和测量算法。同时还提供了灰度图像的形态学变换,包括Top-hat变换,Watershed等。
图像分割(Image Segmentation)是把图像分割成若干个特定的、具有独特性质的区域并提取出感兴趣的目标的技术和过程。在对图像的研究和应用中,人们往往仅对图像的某些部分感兴趣(目标或背景),他们一般对应图像中的特定的、具有独特性质的区域。为了分析和识别目标,需要将他们分割并提取出来。
图像分割是由图像处理转到图像分析的关键。一方面,它是目标图像表达的基础,对特征测量有重要的影响。另一方面,图像分割和分割的目标表达、特征提取和参数测量等将原始图像转化为数学表达形式,使得利用计算机进行图像分析和理解成为可能。本章主要介绍图像分割的基本概念和分割所用的主要方法。
有关图像分割的解释和表述很多,借助于集合概念对图像分割可以给出如下比较正式的定义:
令集合R代表整幅图像的区域,对R的分割可看成将
个满足以下5个条件的非空子集(子区域)
:
①
;
②对所有的i和j,有i≠j,
Φ;
③对i=1,2,…,N,有P(
)=True;
④对i≠j,P(
)=False;
⑤i=1,2, …,N,
是连通的区域。
其中P(
)是对所有在集合中元素的逻辑谓词,Φ代表空集。
下面先对上述各个条件分别给予简略解释。条件①指出对一幅图像所得的全部子区域的综合(并集)应能包括图像中所有像素(就是原图像),或者说分割应将图像的每个像素都分进某个区域中。条件②指出在分割结果中各个子区域是互不重叠的,或者说在分割结果中一个像素不能同时属于两个区域。条件③指出在分割结果中每个子区域都有独特的特性,或者说属于同一个区域中的像素应该具有某些相同特性。条件④指出在分割结果中,不同的子区域具有不同的特性,没有公共元素,或者说属于不同区域的像素应该具有一些不同的特性。条件⑤要求分割结果中同一个子区域内的像素应当是连通的,即同一个子区域的两个像素在该子区域内互相连通,或者说分割得到的区域是一个连通组元。
另外,上述这些条件不仅定义了分割,也对进行分割有指导作用。对图像的分割总是根据一些分割准则进行的。条件①与条件②说明正确的分割准则应可适用于所有区域和所有像素,而条件③和条件④说明合理的分割准则应能帮助确定各区域像素有代表性的特性,条件⑤说明完整的分割准则应直接或间接地对区域内像素的连通性有一定的要求或限定。
最后需要指出,实际应用中图像分割不仅要把一幅图像分成满足上面5个条件的各具特性的区域而且需要把其中感兴趣的目标区域提取出来。只有这样才算真正完成了图像分割的任务。
4.1.2图像分割算法分类
图像分割算法的研究一直受到人们的高度重视,到目前为止,提出的分割算法已经多达上千种,由于现有的分割算法粉肠多,所以将它们进行分类的方法也提出了不少。例如有把分割算法分成3类的:①边缘检测、②阈值分割和③区域生长。但事实上阈值分割算法分割的方法在本质上也是一种区域提取方法,所以③实际上包含了①。
本章从实际应用的角度考虑,详细介绍了图像分割的如下算法:分割检测、阈值分割、区域生长等。
4.2边缘检测方法
边缘(Edge)是指图像局部亮度变化最显著的部分。边缘主要存在于目标、目标与背景、区域与区域(包括不同色彩)之间,是图像分割、纹理特征提取和形状特征提取等图像分析的重要基础。图像分析和理解的第一步常常是边缘检测(Edge Detection)。由于边缘检测十分重要,因此成为机器视觉研究领域最活跃的课题之一。本节主要讨论边缘检测和定位的基本概念,并通过几种常用的边缘检测器来说明边缘检测的基本问题。
图像中的边缘通常与图像亮度或图像亮度的一阶导数的不连续性有关。图像亮度的不连续可分为:①阶跃不连续,即图像亮度在不连续处的两边的像素灰度值有着显著的差异:②线条不连续,即图像亮度从一个值变化到另一个值,保持一个较小的行程后又返回到原来的值。在实际中,阶跃和线条边缘图像是很少见的,由于大多数传感元件具有低频特性,使得阶跃边缘变成斜坡型边缘,线条边缘变成屋顶形边缘,其中的亮度变化不是瞬间的,而是跨越一定的距离。
对一个边缘来说,有可能同时具有阶跃和线条特性。例如在一个表面上,由一个平面变化到法线方向不同的另一个平面就会产生阶跃边缘;如果这一表面具有镜面反射特性且两平面形成的棱角比较圆滑,则当棱角圆滑表面的法线经过镜面反射角时,由于镜面反射分量,在棱角圆滑表面上会产生明亮光条,这样的边缘看起来像在阶跃边缘上叠加了一个线条边缘。由于边缘可能与场景中物体的重要特性对应,所以它是很重要的图像特征。比如,一个物体的轮廓通常产生阶跃边缘,因为物体的图像亮度不同于背景的图像亮度。
在讨论边缘算子之前,首先给出下列术语的定义。
边缘点:图像中亮度显著变化的点。
边缘段:边缘点坐标[i,j]及其方向θ的综合,边缘的方向是可以是梯度角。
边缘检测器:从图像中抽取边缘(边缘点或边缘段)集合的算法。
轮廓:边缘列表,或是一条边缘列表的曲线模型。
边缘连接:从无序边缘表形成有序边缘表的过程。习惯上边缘的表示采用顺时针方向来排序。
边缘跟踪:一个用来确定轮廓图像(指滤波后的图像)的搜索过程。
边缘点的坐标可以是边缘位置像素点的行、列整数标号,也可以在子像素分辨率水平上表示。边缘坐标可以在原始图像坐标系上表示,但大多数情况下是在边缘检测滤波器的是输出图像的坐标系上表示,因为滤波过程可能导致图像坐标平移或者缩放。边缘段可以用像素点尺寸大小的小线段定义,或用具有方向属性的一个点定义。在实际应用中,边缘点和边缘段都称为边缘。
由于边缘检测器生成的边缘集分成两个:真边缘和假边缘集。真边缘集对应场景中的边缘,假边缘集不是场景中的边缘。还有一个边缘集,即场景中的漏边缘集。假边缘集称之为假阳性(False Positive),而漏掉的边缘集则称之为假阴性(False Negative)。
边缘连接和边缘跟踪之间的区别在于:边缘连接是把边缘检测器产生的无序边缘集作为输出,输入一个有序边缘集;边缘跟踪则是将一幅图像作为输入,输出一个有序边缘集。另外,边缘检测使用局部信息来决定边缘,而边缘跟踪使用整个图像信息来决定一个像素点是不是边缘。
梯度边缘检测算法有如下4个步骤。
- 滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的功能。需要指出的是,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折中。
- 增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度幅值来完成的。
- 检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某些方法来确定哪些点是边缘带内。最简单的边缘检测判据是梯度幅值阈值判据。
- 定位:如果某一应用场合要求来确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位可以被估计出来。
在边缘检测算法中,前3个步骤用得十分普遍。这是因为大多数场合下,仅仅需要边缘检测器指出边缘出现在图像某一像素点的附近,而没必要指出边缘的精确位置或方向。
在这本文主要讨论常用的几种边缘检测器,并调用其中的函数进行边缘检测得出效果图。
b.Robert算子
Robert交叉算子为梯度幅值计算提供了一种简单的近似方法:
(4-1)
用卷积模板表示方法,上式变成:
(4-2)
其中
和
由下面的模板(4-3)计算:
=
=
在计算梯度时,计算空间同一位置(x,y)的真实偏导数非常重要。采用上述2×2邻域模板计算的梯度近似值
和
并不位于同一位置,
实际上是内差点
处的近似梯度,
实际上是内差点
出的近似梯度。因此,Robert算子是该点连续梯度的近似值,而不是所预期点
c.Sobel算子
正如前面所讲,采用3×3邻域可以避免在像素之间内插点上计算梯度。考虑下图中所示的点
周围点的排列。
| | |
| | |
| | |
Sobel算子也是一种梯度幅值:
(4-4)
其中的偏导数用下式计算:
(4-5)
(4-6)
其中常系数c=2.
和其他的梯度算子一样
和
可分别用卷积模板表示为:
-1 | 0 | 1 |
-2 | 0 | 2 |
-1 | 0 | 1 |
1 | 2 | 1 |
0 | 0 | 0 |
-1 | -2 | -1 |
这一算子把重点放在接近于模板中心的像素点。Sobel算子是边缘检测中最常用的算子之一。
Prewitt与Sobel算子的方程完全一样,只是常系数c=1。所以
和
可分别用卷积模板表示为:
-1 | 0 | 1 |
-1 | 0 | 1 |
-1 | 0 | 1 |
1 | 1 | 1 |
0 | 0 | 0 |
-1 | -1 | -1 |
下面使用MATLAB图像处理工具箱中的edge函数利用以上算子来检测边缘。Edge函数提供许多微分算子模板,对于某些模板可以指定其是对水平边缘还是对垂直边缘(或者二者都有)敏感(即主要检测是水平边缘还是垂直边缘)。Edge函数在检测边缘时可以指定一个灰度阈值,只有满足这个阈值条件的点才视为边界点。Edge函数的基本调用格式如下:
其中,I表示输入图像,type表示使用的算子类型,parameter则是与具体算子有关的参数。
下面用其中的Prewitt算子检测图像4-2(a),检测结果如图4-2(b)所示。程序清单见附录,以下用Prewitt算子检测边缘:
(a)原始图像 (b)Prewitt算子检测的边缘
图4-2 边缘检测效果图
前面讨论了计算一阶导数的边缘检测器,如果所求的一阶导数高于某一阈值,则可确定该点为边缘点,这样做会导致检测的边缘点太多。一种更好的方法就是求梯度局部最大值对应的点,并认定它们是边缘点,如图4-3所示。在图4-3中,若用阈值来进行边缘检测,则在a和b之间的所以点都被记为边缘点。但通过去除一阶导数中的非局部最大值,可以检测出更精确的边缘。一阶导数的局部最大值对应着二阶导数的零交叉点(Zero crossing)。这样,通过找图像强度的二阶导数的零交叉点就能找到精确边缘点。拉普拉斯(Laplacian)算子是常用的二阶导数算子。
图4-3 阈值边缘检测和二阶导数的零交叉边缘检测比较
平滑过的阶跃边缘二阶导数是一个在边缘点处过零的函数(见图4-2)。拉普拉斯算子是二阶导数的二维等效式,函数
的拉普拉斯算子公式为:
(4-7)
使用差分方程对x和y方向上的二阶偏导数近似如下:
(4-8)
上式近似是以点
为中心的,以点
为中心的近似为:
(4-9)
类似地有:
(4-10)
将(4-9)和(4-10)两式合并为一个算子,用近似的拉普拉斯算子模板表示:
(4-11)
当拉普拉斯输出出现过零点时就表明有边缘存在,但是要去除无意义的零点(灰度值为0的区域)。
前面介绍的梯度算子和拉普拉斯算子实质都是微分或查分算法,因此算法对噪声十分敏感。所以,在边缘检测前,必须滤除噪声。Mar和Hildreth将高斯滤波和拉普拉斯边缘检测结合在一起,形成LoG(Laplacian-Gauss)算法。LoG边缘检测器的基本特征是:
- 平滑滤波器是高斯滤波器;
- 增强步骤采用二阶导数(二维拉普拉斯函数);
- 使用线性内插方法在子像素分辨率水平上估计边缘的位置。
这种方法的特点是图像首先与高斯滤波器进行卷积,这一步既平滑了图像又降低了噪声,孤立的噪声点和较小的结构组织将被滤除。由于平滑会导致边缘的延展,因此边缘检测器只考虑那些具有局部梯度最大值的点为边缘点。这一点可以用二阶导数的零交叉点来实现。拉普拉斯函数用作二维二阶的近似,是因为它是一种无方向算子。为了避免检测出非显著边缘,应选择一阶导数大于某一阈值的零交叉点作为边缘点。
LoG算子对图像
进行边缘检测,输出
是通过卷积运算得到的,即:
(4-12)
滤波(或平滑)、增强和检测3个边缘检测的步骤对LoG算子边缘检测依然成立。其中高斯滤波器对图像进行平滑,拉普拉斯算子将边缘点转换成零交叉点来实现,边缘检测通过零交叉点的检测实现。
前一节介绍过,图像的平滑会引起边缘的模糊。高斯平滑元素导致图像中边缘和其他尖锐不连续的部分模糊,其中模糊量取决于σ值。σ值越大,噪声滤波效果越好,但同时也丢失了重要的边缘信息,影响了边缘检测器的性能。如果取小σ值,又有可能平滑不完全而留有太多的噪声。大σ值滤波器在平滑相互邻近的两个边缘时,可能会将它们连在一起,这样只能检测出一个边缘。因此,在不知道物体尺寸和位置的情况下,很难准确确定滤波器的σ值。一般来说,使用大σ值的滤波器产生鲁棒边缘,小σ值的滤波器产生精确定位的边缘,两者结合,能够检测出图像的最佳边缘。
LoG算子也可以用MATLAB中的edge函数来检测边缘:
BW=edge(I,’log’,thresh,sigma)
式中thresh是边缘检测的阈值,sigma是高斯滤波器的σ值,默认为2。
下面用不同σ值的LoG算子检测图像的边缘。程序清单见附录,检测结果分别如图4-3(a)和4-3(b)所示。
(a) σ=2 (b)σ=3
图4-4 不同σ值的LoG算子边缘检测效果图
比较上述两幅图像可以发现,σ值小,平滑程度轻,会出现零星的假边缘;σ值大,平滑程度重,但是大部分真实的边缘丢失,出现边缘间断现象。
检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。检测阶跃边缘的大部分工作集中在寻找能够用于实际图像的梯度数字逼近。由于实际的图像经过了摄像机光学系统和电路系统(带宽限制)固有的低通滤波器的平滑,因此,图像中的阶跃边缘不是十分陡立。图像也受到摄像机噪声和场景中不希望的细节的干扰。图像梯度逼近必须满足两个要求:①逼近必须能够抑制噪声效应:②必须尽量精确地确定边缘的位置。抑制噪声和边缘精确定位是无法同时得到满足的,也就是说,边缘检测算法通过图像平滑算子去除了噪声,但却增加了边缘定位的不确定性;反过来,若提高边缘检测算子对边缘的敏感性,同时也提高了对噪声的敏感性。有一种先行算子可以在抗噪声干扰和精确定位之间选择一个最佳折衷方案,它就是高斯函数的一阶导数,对应于图像的高斯函数平滑和梯度计算。
在高斯噪声中,一个典型的边缘代表一个阶跃的强度变化。根据这个模型,好的边缘检测算子应该有3个指标:①低失误概率,即真正的边缘点尽可能少的丢失又要尽可能避免将非边缘点检测为边缘:②高位置精度,检测的边缘应尽可能接近真实的边缘;③对每一个边缘点有惟一的响应,得到单像素宽度的边缘。坎尼算子提出了边缘算子的如下3个准则。
- 信噪比准则
信噪比越大,提取的边缘质量越高。信噪比
定义为:
(4-13)
其中G(x)代表边缘函数,h(x)代表宽度为W的滤波器的脉冲响应。
- 定位精确度准则
边缘定位精度L如下定义:
(4-14)
其中
和
分别是
和
的导数。L越大表明定位精度越高。
- 单边缘响应准则
为了保证单边缘只有一个响应,检测算子的脉冲响应导数的零交叉点平均距离
应满足:
(4-15)
是
的二阶导数
以上述指标和准则为基础,利用泛函数求导的方法可导出坎尼边缘检测器是信噪比与定位之乘积的最优逼近算子,表达式近似于高斯函数的一阶导数。将坎尼3个准则相结合可以获得最优的检测算子。坎尼边缘检测的算法步骤如下:
- 用高斯滤波器平滑图像;
- 用一阶偏导的有限差分来计算梯度的幅值和方向;
- 对梯度幅值进行非极大值抑制;
- 用双阈值算法检测和连接边缘。
坎尼算子也可以用MATLAB中的edge函数来检测边缘:
BW1=edge(I,’canny’,thresh,sigma)
式中的thresh是边缘检测的阈值,sigma是高斯滤波器的σ值,默认为2。
用Canny算子检测图像4-2(a)的边缘,程序清单见附录,检测结果如图4-5所示。
图4-5 Canny算子边缘检测
比较前面梯度算子、LoG算子和Canny算子,由图4-2(b)、4-3、4-4和4-5,可以发现坎尼算子的边缘检测结果最满意。
阈值化分割算法是图像分割中应用数量最多的一类。简单地说,对灰度图像的阈值分割就是先确定一个处于图像灰度取值范围内的灰度阈值,然后将图像中各个像素的灰度值与这个阈值相比较,并根据比较的结果将对应的像素划分为(分割)为两类:像素灰度大于阈值的一类,像素灰度值小于阈值的为另一类,灰度值等于阈值的像素可以归如这两类之一。分割后的两类像素一般分属图像的两个不同区域,所以对像素根据阈值分类达到了区域分割的目的。由此可见,阈值分割算法主要有两个步骤:
- 确定需要分割的阈值;
- 将分割阈值与像素点的灰度值比较,以分割图像的像素。
以上步骤中,确定阈值是分割的关键,如果能确定一个合适的阈值就可准确地将图像分割开来。阈值确定后,将阈值与像素点的灰度值比较和像素分割可对像素并行地进行,分割的结果直接给出图像区域。
在利用取阈值方法来分割灰度图像时一般对图像的灰度分布有一定的假设,或者说是基于一定的图像模型。最常用的模型可描述如下:假设图像由具有单峰灰度分布的目标和背景组成,处于目标和背景内部相邻像素间的灰度值是高度相关的,但处于目标和背景交界处两边的像素在灰度值上有很大的差别。若一幅图像满足这些条件,它的灰度直方图基本上可看作是由分别对应于目标和背景的两个单峰直方图混合构成的。而且如果这两个分布大小(数量)接近且均值相距足够远,两部分的均方差也足够小,则直方图应为较明显的双峰。类似地,如果图像中有多个单峰灰度分布的目标,则直方图有可能表现为较明显的多峰。对这类图像常可用取阈值方法来较好地分割。
把图像中各种灰度的像素分成两个不同的类,需要确定一个阈值。如果要把图像中各种灰度的像素分成多个不同的类,那么需要选择一系列阈值以将每个像素分到合适的类别中去。如果只用一个阈值分割称为单阈值分割方法,如果用多个阈值分割称为多阈值分割方法。单阈值分割可以看作是多阈值分割的特例,许多单阈值分割算法可推广以进行多阈值分割。反之,有时候也可以将多阈值分割问题转化为一系列单阈值分割问题来解决。不管用任何方法选取阈值,一幅原始图像f(x,y)取单阈值T分割后的图像可定义为:
(4-16)
这样得到的
是一幅二值图像。
在一般的多阈值情况下,取阈值分割后的图像可表示为:
(4-17)
其中
是一系列分割阈值,k表示赋予分割后图像各区域不同的标号。
需要指出,无论是单阈值分割或多阈值分割,分割结果中都有可能出现不同区域具有相同标号或区域值的情况。这是因为取阈值分割时只考虑了像素本身的值,未考虑像素的空间位置。所以根据像素值划分到同一类的像素有可能分属于图像中不相连通的区域。这时候往往需要借助一些对场景的先验知识来进一步确定目标的区域。
已提出的阈值化分割算法很多,相应的分类方法也很多,例如,对文档图像的阈值化技术可油种分类的方法:
- 考虑分割过程是否需要人工干预,可分为交互的与自动的;
- 根据阈值的不同作用范围,可分为全局的与局部的;
- 考虑阈值选取中所采用的灰度分布统计特性,可分为上下文相关与上下文无关的,前者基于灰度分布的一阶统计,后者基于灰度分布的二阶统计;
- 从处理策略角度考虑,可分为迭代的与非迭代的;
- 根据为进行分割是否选用训练像素集以估计目标或背景的特性参数,可分为有监督的与无监督的。
在前面关于阈值化原理的讨论中已指出选取合适的分割阈值化算法的关键问题,据此可根据阈值选取本身的特点对算法分类。阈值一般可写成如下形式:
(4-18)
其中
代表在像素点
处的灰度值,
代表在该点邻域的某种局部性质。即阈值T在一般情况下可以是(
),
,
的函数。借助上式,可将取阈值分割方法分成如下3类,相应的阈值分别称为:
- 基于各像素值的阈值 阈值仅根据
来选取,所得到的阈值仅与全图各像素的本身性质(像素值)有关; - 基于区域性质的阈值 阈值是根据
和
来选取的,所得的阈值与区域性质(区域内各像素的值,相邻像素值的关系等)有关; - 基于坐标位置的阈值 阈值进一步(除根据
和
来选取外)还与
有关,即阈值要考虑位置(
),来确定,则所得的阈值是与像素空间坐标有关的。
上面确定第一类阈值的技术有时称为点相关技术,而确定第二类阈值的技术有时间称为区域相关技术,确定第三类阈值的技术有时称为动态阈值技术。前两类阈值也有称为全局阈值(或称固定阈值)的,因为此时确定的阈值对全图使用,或者说,对各个像素使用相同的阈值来分割;与此对应,第三类阈值也有叫局部阈值或动态阈值的,因为此时确定的阈值是针对图像中的局部区域(也可是单个像素)的。在一定意义上可以局部阈值化是全局阈值化技术的局部化特例。
以上对取阈值分割方法的分类思想是通用的。近年来,许多取阈值分割算法借用了视觉神经、神经网络和模糊数学等工具,但仍可把它们归纳到以上3种方法类型中。
对灰度图像,基于各像素值的阈值是仅考虑各像素本身灰度值而确定的,因而算法一般较简单,但抗噪声能力不强。所确定的阈值(对多阈值分割是阈值序列)作用于整幅图像的每个像素,因而对目标和背景的灰度有梯度变化的图像效果较差或失效。
图像的灰度直方图是图像各像素灰度值的一种统计度量。许多常用的阈值选取方法就是根据直方图来进行的。如果对双峰直方图选取两峰之间的谷所对应的灰度值作为阈值就可将目标和背景分开(多峰直方图时也类似)。谷的选取有许多方法,下面介绍3种比较典型的方法。
将图像的灰度直方图的包络看作一条曲线,则选取直方图的谷可借助求曲线极小值的方法。设用
代表直方图,那么极小值点应同时满足:
和
(4-19)
和这些极小值点对应的灰度值就可用作分割阈值。
实际图像的直方图由于图像噪声等原因经常有很多起伏,使得按式(4-19)计算出的极小值点有可能对应虚假的谷。解决的方法之一是先对直方图进行平滑处理。
有时图像中目标和背景的灰度值有部分交错,这时如用一个全阈值进行分割则总会产生一定的误差。实际中常希望能尽可能减少误分割(包括把目标分成背景和把背景分成目标两类)的概率,而选取最优阈值是一种常用的方法。这里最优阈值指能使误分割率最小的分割阈值。图像的直方图可看成像素灰度值的概率分布密度函数的一个近似,设一幅图像仅包括两类主要的灰度值区域(目标和背景),那么其直方图所代表的像素灰度值概率分布密度函数实际上是对应目标和背景的两个单峰分布密度函数之和。如果已知密度函数的形式,就有可能计算出一个最优阈值,用它可把图像分成两类区域而使误分割率最小。
设有这样一幅混有加性高斯噪声的图像,背景和目标的概率密度分别是
和
,整幅图像的混合概率密度:
(4-20)
其中
和
分别是 背景和目标区域的平均灰度值,
和
分别是关于均值的均方差,
和
分别是北京和目标区域灰度值的先验概率。根据概率定义有
+
=1,所以混合概率密度公式(4-20)中只有5个未知的参数。如果能求得这些参数。如果能求得这些参数就可以确定混合概率密度。
图4-6 最优阈值选取示意图
如图4-6所示。假设
﹤
,需确定一个阈值T使得灰度值小于T的像素分割为背景而使得灰度值大于T的像素分割为目标。这时错误地将目标像素划分为背景的概率和将背景像素错误地划分为目标的概率分别是:
(4-21)
(4-22)
总的误差概率为:
(4-23)
为求得使该误差最小的阈值可将
对T求导并令导数为零,这样得到:
(4-24)
将这个结果用于高斯密度(即将式(4-20)代入)可解得:
(4-25)
当
=
=
时:
(4-26)
若先验概率相等,即
,则:
(4-27)
这表示如果图像灰度值从正态分布时,最佳阈值可按上式求得。
阈值也可以通过迭代计算得到。首先选取图像的灰度范围的中值作为初始值
,然后按下式迭代:
(4-28)
式中
是灰度为k值的像素个数,共有L个灰度级。迭代一直进行到
结束,取结束时的
为阈值。
对图像4-8(a)进行阈值分割。其灰度直方图如图4-8(b)所示,阈值分割结果如图4-8(c)所示。程序清单见附录。
(a)原始图像 (b)原始图像的灰度直方图
(c)阈值分割结果
图4-8 灰度阈值分割效果图
当图像中有如下一些情况:有阴影、光照不均匀、各处的对比度不同、突发噪声、背景灰度变化等,如果只用一个固定的全局阈值对整幅图进行分割,则由于不能兼顾图像各处的情况而使分割效果受到影响。有一种解决方法是用与坐标相关的一组阈值(即阈值是坐标的函数)来对图像各部分分别进行分割。这种与坐标相关的阈值也叫动态阈值,这种取阈值分割方法也叫变化阈值法(也有称自适应阈值法的)。这类算法的时间复杂度和空间复杂度比较大,但抗噪声能力强,对一些用全局阈值法不易分割的图像(如目标和背景的灰度有梯度变化的图像)有较好的效果。这种动态阈值化方法在二值化文档图像分割时有较好的性能。
一种比较简单的动态阈值算法是对每个像素确定以它为中心的一个窗口,计算窗口内的最大值和最小值,再取它们的平均值作为该点的阈值,可以证明图像像素点灰度值和该阈值的差具有二阶导数的性质,所以取差的过零点就可以得到二值分割结果。下面再介绍另外的两个办法。
可以将变化阈值技术当作全局固定阈值技术的局部技术的局部特例。首先将图像分解成一系列子图像,这些子图像可以互相重叠也可以只相接。如果子图像比较小,则又阴影或对比度空间变化等带来的问题就会比较小。然后可对每个子图像计算一个阈值,此时阈值可用任一种固定阈值法选取。通过对这些子图像所得阈值的插值就可得到对图像中每个像素进行分割所需的阈值。这里对应每个像素的阈值合起来组成图像(幅度轴)上的一个曲面,也可以叫阈值曲面。一种方法的具体步骤如下:
- 将整幅图像分成一系列互相之间有50%重叠的子图像;
- 做出每个子图像的直方图;
- 检测各个子图像的直方图是否为双峰,如是可采用上述介绍的阈值选取方法确定子图像的阈值,否则不进行处理;
- 根据对直方图为双峰的子图像得到的阈值,通过插值得到所以子图像的阈值;
- 根据对各子图像的阈值,再通过插值得到所有像素的阈值,然后对图像进行分割。
水线(也称为分水岭或流域,Watershed)阈值算法和直接在最佳阈值处分割不用,它是一种特殊的自适应迭代阈值分割算法。利用图4-6来说明水线阈值算法的原理。
图4-9中给出的是一幅图像中的一个剖面,其中灰度较高的两个目标从背景
和
中取出来并相互分开。先用一个较大的阈值
进行分割,它可以将图中的两个目标与背景分开,只是其间的间隙太宽。如果接下来逐渐减小阈值,目标的边界会随阈值的减少而相向扩展,最终两个目标会接触(相遇),但此时不让两个目标合并,这样它们相接触前所保留的最后像素集合就给出两目标间最终的边界。上述过程在将阈值减小到背景灰度前就可以结束。
实际中水线算法首先用一个比较高但是得到的结构仍能把每个目标孤立开的阈值进行分割。然后,当阈值逐渐减小并逼近最佳阈值时,不再合并原已分开的目标。这样就可以解决采用全局阈值方法在目标很接近时造成的目标合并问题。这里初始阈值的选取非常重要,只要初始阈值选合适,那么就可保证最终分割结果的正确性,如果初始阈值太大(如图4-9中的
),那么低反差的目标在开始时会被漏掉,其后在减少阈值的过程中会被合并;反之,如果初始阈值选得太小(如图4-9中的
所示),那么目标在开始时就会被合并。另外最终阈值的选取也很重要,它确定了最终边界与目标吻合的情况。
MATLAB中用函数watershed找到流域,调用格式L=watershed(A)。
阈值分割的方法很多,每一种方法几乎都有其独特指出和实际应用的背景。实际应用中,阈值分割经常需要和其他方法相互结合使用,才能取得最佳或满意的分割结果。
用水线阈值法分割图像4-10(a)。图像高帽变换的结果如图4-10(b)所示,低帽变换的结果如图4-10(c)所示,高帽变换与低帽变换相减的结果如图4-10(d)所示,阈值分割进一步增强图像如图4-10(e)所示,最后水线阈值分割图像如图4-10(f)所示。程序清单见附录。
(a)原始图像 (b)高帽变换图像
(c)低帽变换图像 (d)高帽与低帽相减后的图像
(e)进一步增强图像 (f)水线阈值分割图像
图4-10 水线阈值法分割
区域生长的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素(根据某些事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。将这些新像素当作新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来。这样一个区域就长成了。
图4-8给出已知种子点进行区域生长的一个示例。图4-12(a)给出需分割的图像,设已知有两个种子像素(标为深浅不同的灰色方块),先要进行区域生长。设这里采用的判断准则是:如果所考虑的像素与种子像素灰度差的绝对值小于某个门限T,则将该像素包括进种子像素所在区域。图4-12(b)给出了T=3时的区域生长结果,整幅图被较好地分成2个区域;图4-12(c)给出了T=1时的区域生长结果,有些像素无法判定;图4-12(d)给出T=6时的区域生长结果,整幅图都被分在一个区域中了。由此可见门限的选择是很重要的。
从上面的示例可知,在实际因果能够区域生长方法时需要解决3个问题:
- 如何选择一组能正确代表所需区域的种子像素;
- 如何确定在生长过程中能将相邻像素包括进来的准则;
- 如何确定生长终止的条件和规则。
第一个问题通常可以根据具体图像的特点来选取种子像素。例如,在红外图像检测技术中,通常目标的辐射都比较大,所以可以选择图像中最亮的像素作为种子像素。如果没有图像的先验知识,那么可以借助生长准则对像素进行相应的计算。如果计算结果可以看出聚类的情况,那么可以选择聚类中心作为种子像素。
第二个问题的解决不但依赖于具体问题的特征,还与图像的数据类型有关。如果图像是RGB彩色图像,那么如果使用单色准则就会影响分割结果。另外,还需要考虑像素间的连通性是否有时会出现无意义的分割结果。
一般生长过程在进行到再没有满足生长准则需要的像素时停止。但常用的基于灰度、纹理、彩色的准则大都基于图像中的局部性质,并没有充分考虑生长的“历史”。为增加区域生长的能力长需要考虑一些与尺寸、形状等图像和目标的全局性质有关的准则。在这种情况下需对分割结果建立一定的模型或辅以一定的先验知识。
区域生长的一个关键是选择合适的生长或相似准则,大部分区域生长准则使用图像的局部性质。生长准则可根据不同原则制定,而使用不同的生长准则会影响生长的过程。下面介绍3种基本的生长准则和方法。
区域生长方法将图像以像素为基本单位来进行操作,基于区域灰度差的方法主要有如下步骤:
- 对图像进行逐行扫描,找出尚没有归属的像素;
- 以该像素为中心检查它的邻域像素,即将邻域中的像素逐个与它相比较,如果灰度差小于预先确定的阈值,将它们合并;
- 以新合并的像素为中心,返回到步骤(2),检查新像素的邻域,直到区域不能进一步扩张;
- 返回到步骤(1),继续扫描直到不能发现没有归属的像素,则结束整个生长过程。
采用上述方法得到的结果对区域生长起点的选择有较大依赖性。为克服这个问题可采用下面的改进方法:
- 设灰度差的阈值为零,用上述方法进行区域扩张,使灰度相同像素合并;
- 求出所以邻接区域之间的平均灰度差,并合并具有最小灰度差的邻接区域;
- 设定终止准则,通过反复进行上述步骤(2)中的操作将区域依次合并直到中指准则满足为止。
另外,当图像中存在缓慢变化的区域时,上述方法有可能会将不同区域逐步合并而产生错误。为克服这个问题,可不用新像素的灰度值去与邻域像素的灰度值比较,而用新像素所在区域的平均灰度值去与各邻域像素的灰度值进行比较。
对一个含N个像素的区域R,其均值为:
(4-29)
对像素是否合并的比较测试表示为:
(4-30)
其中T为给定的阈值。
区域生长的过程中,要求图像的同一区域的灰度值变化尽可能小,而不同的区域之间,灰度差尽可能大。两种情况进行讨论:
- 设区域为均匀的,各像素灰度值为均值m与一个零均值高斯噪声的叠加。当用式(4-30)测试某个像素时,条件不成立的概率为:
(4-31)
这就是误差概率函数,当T取3倍的方差时,误判概率为1~99.7%。这表明,当考虑灰度均值时,区域内的灰度变化应尽量小。
- 设区域为非均匀,且由两部分不同目标的图像像素构成。这两部分像素在R中所占比例分别为
和
,灰度值分别为
和
,则区域均值为
。对灰度值为m的像素,它与区域均值的差为:
(4-32)
根据式(4-30),可知正确的判决概率为:
(4-33)
这表明,当考虑灰度均值时,不同部分像素间的灰度差距离应尽量大。
这里考虑以灰度分布相似性作为生长准则来决定区域的合并,具体步骤为:
- 把图像分成互不重叠的小区域;
- 比较邻接区域的累积灰度直方图根据灰度分布的相似性进行区域合并;
- 设定终止准则,通过反复进行步骤(2)中的操作将各个区域依次合并直到终止准则满足。
这里对灰度分布的相似性常用两种方法检测(设
,
分别为两邻接区域的累积灰度直方图):
Kolmogorov—Smirnov检测
(4-34)
Smoothed—Difference检测
(4-35)
如果检测结果小于给定的阈值,即将两区域合并。
采用灰度分布相似判别准则合并法形成区域的处理过程与灰度差别准则的合并法相类似。灰度分布相似合并法生成区域的效果与微区域的大小和阈值的选取关系密切,一般说来,微区域太大,会造成因过渡合并而漏分区域;反之,则因合并不足而割断区域。而且,图像的复杂程度,原图像生成状况的不同,对上述参数的选择会有很大影响。通常,微区域大小q和阈值T由特定条件下的区域生成效果确定。
在决定对区域的合并时也可以利用对目标形状的检测结果,常用的方法有两种:
- 把图像分割成灰度固定的区域,设两邻接区域的周长分别为
和
,把两区域共同边界线两侧灰度差小于给定值的那不凡长度设为L,如果(
为预定阈值):
(4-36)
则合并两区域;
- 把图像分割成灰度固定的区域,设两邻接区域的共同边界长度B,把两区域共同边界线两侧灰度差小于给定值的那部分长度设为L,如果(
为预定阈值)
(4-37)
则合并两区域。
上述两种方法的区别是:第一种方法是合并两邻接区域的共同边界中对比度比较低部分占整个区域边界份额较大的区域,而第二种方法则是合并两邻接区域的共同边界中对比度较低部分比较多的区域。
4.4.2中介绍的区域生长方法是先从单个种子像素开始通过不断接纳新像素最后得到整个区域。另一种分割的想法可以是从整幅图像开始通过不断分裂得到各个区域。实际中长先把图像分成任意大小且不重叠的区域。然后再合并或分裂这些区域以满足分割的要求。
在这类方法中,最常用的方法是四叉树分解法。设R代表整个正方形图像区域(如图4-13所示),P代表逻辑谓词。从最高层开始,把R连续地分裂成越来越小的1/4的正方形子区域
,并且始终使
。换句话说,如果
,那么就将图像分成4等分。如果
,那么就将R分成4等分。如此类推,直到
为单个像素。
如果仅仅允许使用分裂,最后有可能出现相邻的两个区域具有相同的性质但并没有合成一体的情况。为解决这个问题,在每次分裂后允许其后继续分裂或合并。这里合并只合并那些相邻且合并后组成的新区域满足逻辑谓词P的区域。换句话说,如果能满足条件
,则将
和
合并起来。
总结前面所述的基本分裂合并算法步骤如下:
- 对任一个区域,如果
就将其分裂成不重叠的4等分; - 对相邻的两个区域
和
它们也可以大小不同,即不在同一层,如果条件
满足,将它们合并起来; - 如果进一步的分裂合并都不可能了,则结束。
MATLAB中可以调用图像处理工具中的qtdecomp函数来实现四叉树分解。这个函数首先将图像分为相等大小的正方形,然后对每一个块进行测试,观察它们是否与标准具有相同性。对不符合标准的块进行进一步分割,重复执行至每一个块都符合标准为止。
qtdecomp的基本调用方法如下:
s=qtdecomp(I,Threshold,[MinDim MaxDim])
其中I是输入图像。Threshold是一个可选参数,如果某个子区域中的最大的像素灰度值减去最小的像素灰度值大雨Threshold设定的阈值,那么继续进行分解,否则停止并返回。[MinDim MaxDim]也是可选参数,用来指定最终分解得到的子区域大小。返回值S是一个稀疏矩阵,其非零元素的位置回应于块的左上角,每一个非零元素值代表块的大小。
本文基于Matlab软件平台,提出边缘检测、灰度阈值检测和区域分割方法,并分析总结了几种分割方法的优劣。也对存在的一些问题做进一步的研究。
检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。检测阶跃边缘的大部分工作集中在寻找能够用于实际图像的梯度数字逼近。由于实际的图像经过了摄像机光学系统和电路系统(带宽限制)固有的低通滤波器的平滑,因此,图像中的阶跃边缘不是十分陡立。图像也受到摄像机噪声和场景中不希望的细节的干扰。图像梯度逼近必须满足两个要求:①逼近必须能够抑制噪声效应:②必须尽量精确地确定边缘的位置。抑制噪声和边缘精确定位是无法同时得到满足的,也就是说,边缘检测算法通过图像平滑算子去除了噪声,但却增加了边缘定位的不确定性;反过来,若提高边缘检测算子对边缘的敏感性,同时也提高了对噪声的敏感性。对梯度算法中的Roberts算子、Sobel算子、Prewitt算子、拉普拉斯(Laplacian)算子、LoG(Laplacian-Gauss)算子、坎尼(Canny)算子的分割步骤、分割方式、分割准则相互比较可以看出根据坎尼(Canny)边缘算子的3个准则得出的边缘检测结果最满意。这种方法即使对画质较低的图像也能有效的分离出所需部分,取得理想的效果。
阈值化分割算法是图像分割中应用数量最多的一类。简单地说,对灰度图像的阈值分割就是先确定一个处于图像灰度取值范围内的灰度阈值,然后将图像中各个像素的灰度值与这个阈值相比较,并根据比较的结果将对应的像素划分为(分割)为两类:像素灰度大于阈值的一类,像素灰度值小于阈值的为另一类,灰度值等于阈值的像素可以归如这两类之一。阈值分割的关键在于阈值的确定,只有阈值确定好了才能有效的划分物体与背景。但这种方法只对于那些灰度分布大,背景与物体差别大的图像效果才明显。
区域生长的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素(根据某些事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。将这些新像素当作新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来。这样一个区域就长成了。但是如何选择一组能正确代表所需区域的种子像素,如何确定在生长过程中能将相邻像素包括进来的准则,如何确定生长终止的条件和规则仍是一个棘手的问题。另外一种方法是先进行分裂后进行合并成分割所要求的条件。即从整幅图像开始通过不断分裂得到各个区域。实际中长先把图像分成任意大小且不重叠的区域。然后再合并或分裂这些区域以满足分割的要求。
通过对上述图像分割方法的研究,可以看出各种分割方法各自的优点与缺点,(1)阈值方法简单但效果差;(2)边缘检测只使用了局部信息,难以保证分割区域内部的颜色一致,且不能产生连续的闭区域轮廓;(3)区域生长常得到不规则的边界和小洞,区域个数严重依赖于初始种子数,且计算量较大;(4)迭代像素聚类计算量巨大;(5)全局优化方法难于找到最优解或次优解。我们可以在实际应用中根据自己对图像分割的要求而选定适当的分割方法,以得到最佳的效果图。
除了上述提出的3种常见的分割算法还有其他的分割方法,如彩色分割,基于数学形态学的分割技术,还有借助于统计模式识别方法的分割技术等,他们也有各自的优缺点,以进一步的研究与应用。
为了能够得到更好更快的分割效果,可以采用下面的方法,先均匀的选定若干个区域生长种子同时进行生长,两区域相交时进行区域竞争,最后坏种子所在的区域被包含直至消亡。
具体的做法是首先根据需要进行边缘检测,分割得到多个边缘点,接着进行边缘生长形成边缘封闭最后进行竞争而形成大的区域,最后达到分割目的。
具体操作步骤:
- 边缘点的提取。在这里选用Canny算子作为边缘点提取的工具,在Canny算子的 3个准则下既能抑制噪声又能精确的定位边缘点位置。
- 边缘生长。在求梯度极值点时选取较大的梯度阈值,可以得到重要的边缘点,这样在能除去少数孤立的边缘点的同时重要的边缘点已经连成了小段的边缘线,他们再向两端生长直至遇到图像边界或其他边缘点为止。可以利用数学形态学中的方法来进行。
- 寻找大的区域。选定一个标准的间隔,用栅格扫描的方式对所形成的区域扫描,当种子间隔大于标准时归于一类,即归入一个区域中。
通过上述的步骤,理论上能取得比较好的分割效果。但其中也存在许多的问题,只有通过不断的实践予以改进以得到更好的分割方法。
[1]边肇祺等.模式识别[M].清华大学出版社,1988
[2]王爱民,沈兰荪.图像分割研究综述.测控技术[J],2000
[3]岳海萍.利用Matlab进行数字图像的边缘检测[J].辽阳石油化工高等专科学校学报,2002
[4]赵荣椿,迟耀斌,朱重光.图像分割技术进展[J].中国体视学与图像分析.
1998
[5]邹益民.MATLAB与C语言的混合编程.计算机应用,2000
[6]张军平,王珏.主曲线研究综述[J].计算机学报,2003,26(2):129~146.
[7] Steve Rimmer.Windows图像处理实用技术和范例[M].学苑出版社,1994
[8] Acharya RS.et al. Proc of SPIE.1991,1652:50~61
[9] Boire JY.et al. Proc Ann Int Conf IEEE Eng Med Biol Soc. 1990:421~422
[10]Dougherty ER. Introduction to Mathematical Morphology. SPIE Optical Engineering Press,1992
[11] Higgins WE.et al. IEEE Transactions on Medical Imaging.1990.19(8):384~395
[12]M.liang,Z.K.Sun.A neural network model for image segmentation.Swizerland
[13] S.D.Yanowitz,A.M.Bruckstein. Anewmethodforimage segmentation.
Computer Vision Vision.Graphics,and Image Processing,1989
[14]Skolnik. Mathematical Morphology.CVGIP,1986,35:281~282
1.用Prewitt算子检测边缘:
I=imread('sunset1.bmp');
BW1=edge(I,'prewitt',0.04); % 0.04为梯度阈值
figure(1);
imshow(I);
figure(2);
imshow(BW1);
2.用不同σ值的LoG算子检测图像的边缘
I=imread('pic1.bmp');
BW1=edge(I,'log',0.003,2); % σ=2
imshow(BW1);
title('σ=2的LoG算子检测的边缘')
BW1=edge(I,'log',0.003,3); % σ=3
figure,imshow(BW1);
title('σ=3的LoG算子检测的边缘')
3.用Canny算子检测图像的边缘
I=imread('sunset1.bmp');
BW1=edge(I,'canny',0.2);
figure,imshow(BW1);
title('canny算子边缘检测');
4. 阈值分割
I=imread('pic1.bmp');
imhist(I); %观察灰度直方图,灰度140处有谷,确定阈值T=140
I1=im2bw(I,140/255); % im2bw函数需要将灰度值转换到[0,1]范围内
figure,imshow(I1);
5. 水线阈值法分割图像
afm= imread (’cell.tif’);
figure, imshow(afm);
se=strel (’disk’,15);
Itop=imtophat(afm,se);figure,imshow(Itop,[ ]);
Ibot=imbothat(afm,se);figure,imshow(Ibot,[ ]);
Ienhance=imsubtract(imadd(Itop,afm),Ibot) ;
figure,imshow(Ien2hance);
Iec=imcomplement(Ienhance);
Iimpose=imimposemin(Iec,Iemin) ;
wat=watershed(Iimpose);
figure,imshow(wat) ;
6.对下列矩阵进行四叉树分解程序及结果
I=[1 1 1 1 2 3 6 6
1 1 2 1 4 5 6 8
1 1 1 1 10 15 7 7
1 1 1 1 20 25 7 7
20 22 20 22 1 2 3 4
20 22 22 20 5 6 7 8
20 22 20 20 9 10 11 12
22 22 20 20 13 14 15 16];
S=qtdecomp(I,5);
full(S)
ans =
4 0 0 0 2 0 2 0
0 0 0 0 0 0 0 0
0 0 0 0 1 1 2 0
0 0 0 0 1 1 0 0
4 0 0 0 2 0 2 0
0 0 0 0 0 0 0 0
0 0 0 0 2 0 2 0
0 0 0 0 0 0 0 0