第五章二值图像的形态学分割算法5.1概述图像分割是计算机视觉领域中的一项关键技术,是实现自动图像分析时首先需要完成的操作。它是根据图像的某些特征或特征集合的相似性准则,对图像进行分类,将图像平面划分成一系列“有意义”的区域。分类结果的好坏直接影响到后面的目标检测、特征提取和目标识别等工作,因此分割的方法和精确程度是至关重要的。5.1.1图像分割的数学描述图像分割是将图像分成若干个区域,每一个区域内部有相同或者相似的特性,而相邻区域的特性不同,下面给出图像分割的确切数学描述[26]:设(x,y)为数字图像象素的空间坐标,G={0,1,…,k}为象素的灰度层次。一幅数字化图像I由M×M个象素组成,M={1,2,…,n},(x,y)∈M×M,于是图像函数可以定义为一种映射f:M×M→G,图像在点(x,y)处的强度记为f(x,y)。根据灰度和纹理结构的特征,可将图像中的区域B定义为I的相互连通的均匀的子集。设F为定义在B区域上一致性测量的逻辑准则,则有定义H:B→~D为B的一致性估计的函数,~D是已经定义的D的子区域。图像分割就是将图像阵列I分割成若干个邻近且互不交迭的非空的子集B1、B2…、Bm,即Bi应满足下面的条件:5.1.2图像分割的一般方法[27]图像分割大致可以分为基于边缘检测的方法和基于区域的方法。基于边缘检测的方法使用局部窗口操作,检测出通过给定点的边缘或边界,这些边界把图像分成不同的区域。基于区域的方法按某种准则人为地把图像分为若干规则块,以后按属性一致的原则,反复分开属性不一致的图像块,合并具有一致属性的相邻图像块,直至形成一张区域图。在实际应用中,从不同的理论角度提出了许多方法,这些方法主要可划分为三种类型:闽值型,边缘检测型和区域跟踪型。(l)灰度阈值分割法灰度阈值分割法是一种简单的基于区域的技术。这种方法是先确定一个处于图像灰度取值范围之中的灰度阈值,然后将图像中各个象素的灰度值都与这个阈值相比较,并根据比较结果将对应的象素划分为两类:象素的灰度值大于阈值的为一类,象素的灰度值小于阈值的为另一类。这两类象素一般分属于图像中的两类区域,所以对象素根据闭值分类达到了区域分割的目的。由以上步骤中可知,确定阈值是分割的关键。阈值一般可写成如下形式[1]:T=T[x,y,P(X,y),q(x,y)](5.1)其中p(x,y)代表象素点(x,y)处的灰度值,q(x,y)代表该点邻域的局部特性。如果p(x,y)T,则点(x,y)记作物体点,反之则记作背景点。根据对T的不同限制,可得到三种不同类型的阈值,即全局阈值:T=T[p(x,y)](只与全图各象素的本身性质有关)局部阈值:T=T[p(x,y),q(x,y)](与区域内各象素的值,相邻象素值的关系等有关)动态阈值:T=T[x,y,p(x,y),q(x,y)](与象素空间坐标、该点象素性质、该点的局部邻域特征有关)阈值的选择通常是利用直方图。基于直方图分析的门限分割法最直观、应用最普遍。这种方法对于直方图具有明显的双峰图像,可获得很好的分割效果。在图像内容不太复杂、灰度分布较集中的情况下,往往采用最简单的全局阈值,并不考虑图像中点的位置和其邻域性质。但现实生活中大多数自然景象的图像直方图变化丰富,很少表现为明显的双峰。对于这类图像,一种方法是将图像分成若干小块即子图像,并对每块设定局部阈值。另一种方法是根据空间信息和灰度信息值采用动态阈值。(2)边缘检测分割法边缘检测分割法是通过检测出不同区域边界来进行分割的。边缘总是以强度突变的形式出现,可以定义为图像局部特性的不连续性,如灰度的突变、纹理结构的突变等。边缘常常意味着一个区域的终结和另一个区域的开始。图像的边缘包含了物体形状的重要信息,它不仅在分析图像时大幅度地减少了要处理的信息量,而且还保护了目标的边界结构。因此,边缘检测可以看作是处理许多复杂问题的关键。对于边缘的检测常常借助于空域微分算子进行。通过将其模板与图像卷积完成。两个具有不同灰度值的相邻区域之间总存在灰度边缘。灰度边缘是灰度值不连续(或突变)的结果,这种不连续常可利用求一阶和二阶导数方便的检测到。己有的局部技术边缘检测方法,主要有一次微分(Sobel算子、Roberts算子等)、二次微分(拉普拉斯算子等)和模板操作(Prewitt算子、Kirsch算子、Robinson算子等)等。这些边缘检测器对边缘灰度值过渡比较尖锐且噪声较小等不太复杂的图像,大多数提取算法均可以取得较好的效果。但对于边缘复杂、采光不均匀的图像来说,则效果不太理想。主要表现为边缘模糊、边缘非单象素宽、弱边缘丢失和整体边缘的不连续等方面。在噪声较大的情况下常用的边缘检测算法,如Marr算子,递归滤波器和Canny算子等都是先对图像进行适当的平滑,抑制噪声,然后求导数、或先对图像进行局部拟合,然后再用拟合的光滑函数的导数来代替直接的数值导数。Canny算子较为简单,而且考虑了梯度方向,效果比较好。(3)区域跟踪分割法上面所讲述的两种方法感兴趣的是象素值的差别,而区域跟踪是寻找具有相似性的象素群,它们对应某种实体世界的平面或物体,它的方法是从某一象素出发按照属性一致性原则(一致性可以是灰度级、彩色、组织、梯度或其他特性)逐步地增加象素,即区域增长。对由这些象素组成的区域使用某种均匀测度函数测试其均匀性,若为真,则继续扩大区域,直到均匀测度为假。常用的方法有区域分割、区域生长法和区域分裂合并法。区域生长法是从满足检测准则的点开始,从各个方向开始“生长”物体。因为物体同一区域中象素点的灰度级相差很小,可假设1为一个已满足检测准则的一小块物体,那么开始检查它所有邻近点的灰度值,如果满足检测准则,则将该邻点并入上述小块中。当邻近点被接受后“生长”成新的1,再用得到的新1重复上面的过程,直到没有可接受的邻近点可并入为止。区域分裂合并方法首先将图像分割为初始的区域,然后分裂合并这些区域,逐步改善区域分割的性能,直到最后将图像分割为最少的均匀区域为止。下面给出一种用金字塔形四叉树数据结构指导下的分割方法[2]:设R代表整个正方形区域,P代表检验准则。(l)四叉树分裂对任意一个区域Ri,如果P(Ri)=FALSE,将其分裂成不重叠的四等分。(2)四叉树合并对相邻的两个区域Ri和Rj(它们可以大小不同,即不在同一层),如果条件P(Ri∪Rj)=TRUE满足,就将它们合并起来。(3)如果进一步的分裂和合并都不可能,则结束。区域生长算法更多的把灰度或纹理的同一性与空间的位置联系在一起,因此能得到满意的效果。目前,图像块的初始划分常常或是固定的或是人为规定的。实际上,每幅图像应当存在一个适合它的初始块的最佳划分,因此有必要自适应地确定图像块的初始划分。对于图像块的一致性度量,现有文献中常常利用灰度或灰度统计特性的方法。用灰度的方法比较简单但效果不很好,用灰度统计特性的方法效果比较好,但计算量大,影响处理速度,因此也有必要探求更有效的度量图像块属性一致性的方法。5.2区域分水岭算法数学形态学是研究区域整体形状特征的数学工具,它的基本思想是用一定形状的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的,涉及到微分几何、拓扑逻辑、集合论以及自动机等领域的知识,利用膨胀、腐蚀、开启和闭合四个基本运算进行推导和组合。分水岭法是一种基于拓扑理论发展起来的数学形态学分割方法,其基本思想是把图像看作测地学上的拓扑地貌,图像中的每一点的象素值表示该点的海拔高度,图像中的每一个局部极小值及其影响区域被称为集水盆,而集水盆的边界则为分水岭。分水岭算法比较好地解决了边缘的连续性和区域的标注问题,为进行图像区域特征分析提供了可能。分水岭的形成可以通过模拟浸入过程实现,在图像每一个局部极小值表面刺穿一小孔,然后把整个图像模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩散,在两个集水盆汇合的地方,将产生一峰顶线,即为分水岭。显然,如果输入的是梯度图像,分水岭表示的就是图像的边缘信息。区域分水岭算法是一种典型的分割图像中相接触目标的形态学方法,它的基本步骤是连续腐蚀二值图像。这个算法包括三个步骤[l8]:(l)产生距离图距离图是一种其中各个象素的灰度与该象素到图像或目标边界成比例的图。考虑一幅包含目标和背景的二值图,如将较大的值赋予接近目标内部的象素(与距离成反比)就可得到一幅距离图。为了用形态学方法产生距离图,可迭代地腐蚀二值图,在每次腐蚀后将所有剩下的象素值加1。图5.1给出距离图计算的一个实例,图5.1(a)是一幅二值图,图5.1(b)是结构元素。图5.1距离图计算示例用图5.1(b)腐蚀图5.1(a),将第一次腐蚀所剩下的元素标记为2就得到图5.1(c),继续腐蚀,将第二次腐蚀所剩下的元素标记为3就得到图5.1(d)。如果继续腐蚀,将除去所有象素,所以腐蚀停止。此时综合前面各次腐蚀的结果并对每个象素保留最大值就得到如图5.1(e)的距离图。利用形态学的术语,迭代腐蚀可写为:A、=AkB,k=1,...,.,m(5.2)其中,{m:Am≠},这里m是非空图的最大个数。Ak的下标代表迭代腐蚀中的不同迭代次数。从拓扑的角度来看,把距离图当作山脉,则其中的最大值对应山峰而最小值对应山谷。这些山谷就是分水岭。将各山峰周围的分水岭连起来可得到对目标的分割。(2)计算最终腐蚀了的集合在条件X(X可看作是一个限定集合)的情况下,用B膨胀A记为“AB;X”,并定义为:AB;X=(AB)∩X(5.3)反复条件膨胀是上述操作的扩展并记为A{B};X(这里{B}代表迭代地用B膨胀A直到不再有变化):A{B};X=[[[(AB)∩X]④B]∩X]B…(5.4)最终腐蚀(也称极限腐蚀)的意思是指反复腐蚀一个目标直到它消失,此时保留这之前最后一步的结果(这个结果也称为目标的种子)。令Ak=AKB,其中B是单位圆,kB是半径为k的圆。最终腐蚀Yi可定义为Ai中元素,如果lk,则Ak在Al中消失。最终腐蚀的第一步是:Uk=(AK+1{B});Ak(5.5)最终腐蚀的第二步是从A的腐蚀中减去上述膨胀结果。Yk二Ak-Uk(5.6)如果图像中有多个目标,可求它们各自Yk的并集就得到最终腐蚀了的目标集合A。换句话说,最终腐蚀图像是:其中m是腐蚀的次数。从5.1(e)中可看出种子就是图中的山峰区域。这些山峰区域很容易被认证出来,因为它们周围都被较小距离的象素所包围。(3)从种子开始生长回原始尺寸但不使各区域相连这里要使用条件粗化,条件粗化算法由初始化和迭代计算两步构成,分别见下两式:其中最后得到的W1是分水岭运算的结果,m对应前面第一步腐蚀的次数,T(k),k=l,2,…12,代表图6.2中的12个结构元素。图5.2用于分水岭区域分割的结构元素图5.3给出了一个结合图5.1的例子。首先将图5.1中的最后两个种子结合(如图5.3(a)所示),接下来考虑使用击中击不中变换。利用图5.2的第一个结构元素,将其中心与包围种子的第一个象素,例如Wn重合。为生长这个种子,结构元素中的各象素必须准确地与其下的种子区域匹配。换句话说,在结构元素中象素为1的地方,种子区象素也必须为1,在结构元素为0的地方,种子区域也必须为0。结构元素中没有指定的象素可以是1或者0,它所定对应的种子区象素也可以是1或者是0。如果以上匹配条件都满足,就给对应结构元素中心象素的Wn赋一个1。这样种子区域在尺寸上就增加了一个象素。依次使用图5.2的12个结构元素,每个结构元素都有零象素,需要将结构元素的零象素与Wn匹配以避免生长的区域相连。图5.3(b)给出对图5.3(a)进行一次粗化的结果。在对12个结构元素T(k)都使用后,求Wn和一幅图像的交集。这样所得的结果是将一个象素宽的区域加在种子周围,除非另一个种子区域与它非常接近。图5.3(c)给出求图53(b)和图5.1(c)交集的结果。图5.3种子生长过程上述生长和求并集步骤再次对12个结构元素重复进行,直到没有变化为止。由各对应步骤得到的最终腐蚀了的集合要加起来,条件是生长限定在对应腐蚀步骤