到现在为止,已经讨论了基于3种主要概念的分割方法:(a)间断的检测;(b)门限处理和(c)区域处理。每种方法各有优点(例如,全局门限处理的速度优势)和缺点(如,以灰度级的间断检测为基础的方法需要诸如边线连接等后处理)。本节中,讨论基于所谓的形态学分水岭概念的方法。接下来将要说明,形态学分水岭分割将其他3种方法中的许多概念进行了具体化,包括连续的边界分割在内,它生成的分割结果通常更为稳定。这条途径也为在分割过程中结合基于知识的约束提供了一个简单的框架。
一.基本概念
分水岭概念是以对图像进行三维可视化处理为基础的:其中两个是坐标,另一个是灰度级。对于这样:一种“地形学”的解释,我们考虑三类点:(a)属于局部性最小值的点;(b)当一滴水放在某点的位置上的时候,水一定会下落到一个单一的最小值点;(c)当水处在某个点的位置上时,,水会等概率地流向不止一个这样的最小值点。对一个特定的区域最小值,满足条件(b)的点的集合称为这个最小值的“汇水盆地”或“分水岭”。满足条件(c)的点的集合组成地形表面的峰线,术语称做“分割线”或“分水线”。
基于这些概念的分割算法的主要目标是找出分水线。基本思想很简单:假设在每个区域最小值的位置上打一个洞并且让水以均匀的上升速率从洞中涌出,从低到高淹没整个地形。当处在不同的汇聚盆地中的水将要聚合在一起时,修建的大坝将阻止聚合。水将只能到达大坝的顶部处于水线之上的程度。这些大坝的边界对应于分水岭的分割线。所以,它们是由分水岭算法提取出来的(连续的)边界线。
这些思想可以用图10.44作为辅助做进一步的解释。图10.44(a)显示了一个简单的灰度级图像。图10.44(b)是地形图。其中“山峰”的高度与输入图像的灰度级值成比例。为了易于解释,这个结构的后方被遮蔽起来。这是为了不与灰度级值相混淆;三维表达对一般地形学是很重要的。为了阻止上升的水从这些结构的边缘溢出,我们想像将整幅地形图的周围用比最高山峰还高的大坝包围起来。最高山峰的值是由输入图像灰度级可能具有的最大值决定的。
假设在每个区域最小值中打一个洞[如图10.44(b)中的深色区域],并且让水以均匀的上升速率从洞中涌出,从低到高淹没整个地形。图10.44(c)说明被水淹没的第一个阶段,这里水用浅灰色表示,覆盖了对应于图中深色背景的区域。在图10.44(d)和(e)中,我们看到水分别在第一和第二汇水盆地中上升。由于水持续上升,最终水将从一个汇水盆地中溢出到另一个之中。图10.44(f)中显示了溢出的第一个征兆。这里,水确实从左边的盆地溢出到右边的盆地,并且两者之间有一个短“坝”(由单像素构成)阻止这一水位的水聚合在一起(在接下来的章节中将讨论坝的构筑)。由于水位不断上升,实际的效果要超出我们所说的。如图10.44(g)所显示的那样。这幅图中在两个汇水盆地之间显示了一条更长的坝,另一条水坝在右上角。这条水坝阻止了盆地中的水和对应于背景的水的聚合。这个过程不断延续直到到达水位的最大值(对应于图像中灰度级的最大值)。水坝最后剩下的部分对应于分水线,这条线就是要得到的分割结果。
对于这个例子,在图l0.44(h)中显示为叠加到原图上的一个像素宽的深色路径。注意一条重要的性质就是分水线组成一条连通的路径,由此给出了区域之间的连续的边界。
分水岭分割法的主要应用是从背景中提取近乎一致(类似水滴的)的对象。那些在灰度级上变化较小的区域的梯度值也较小。因此,实际上,我们经常可以见到分水岭分割方法与图像的梯度有更大的关系,而不是图像本身。有了这样的表示方法,汇水盆地的局部最小值就可以与对应于所关注的对象的小的梯度值联系起来了。
二.水坝构造
在进行讨论之前,让我们考虑一下如何构造分水岭分割方法所需的水坝或分水线。水坝的构造是以二值图像为基础的,这种图像属于二维整数空间Z2(见2.4.2节)。构造水坝分离二元点集的最简单的方法是使用形态膨胀(见9.2.1节)。
图l0.45说明了如何使用形态膨胀构造水坝的基本点。图l0.45(a)显示了两个汇水盆地的部分区域在淹没步骤的第n-1步时的图像。图10.45(b)显示了淹没的下一步(第n步)的结果。水已经从一个盆地溢出到另一个盆地,所以,必须建造水坝阻止这种情况的发生。为了与紧接着要介绍的符号相一致,令M1和M2表示在两个区域极小值中包含的点的坐标集合。然后,将处于汇水盆地中的点的坐标集合与这两个在溢出的第n-1个阶段的最小值联系起来,并用Cn-1(M1)和Cn-1(M2)表示。这就是图10.45(a)中的两个黑色区域。
令这两个集合的联合用C[n—1]表示。图l0.45(a)中有两个连通分量(见2.5.2节关于连通分量的部分),而图10.45(b)中只有一个连通分量。这个连通分量包含着前面的两个分量,用虚线表示。两个连通分量变成一个连通分量的事实说明两个汇水盆地中的水在淹没的第n步聚合了。用q表示此时的连通分量。注意,第n-1步中的两个连通分量可以通过使用“与”操作(q∩C[n-1])从q中提取出来。我们也注意到,属于独立的汇水盆地的所有点构成了一个单一的连通分量。
假设图10.45(a)中的每个连通分量通过使用图l0.45(e)中显示的结构元膨胀,在两个条件下:(1)膨胀受到q的约束(这意味着在膨胀的过程中结构化元素的中心只能定位于q中)并且(2)在引起集合聚合的那些点上不能执行膨胀(成为单一的连通分量)。图l0.45(d)显示首轮膨胀(浅灰色表示)使用了每个初始连通分量的边界。注意,在膨胀过程中每个点都满足条件(1)。条件(2)在膨胀处理中没有应用于任何的点;因此,每个区域的边界都进行了均匀的扩展。
在第二轮膨胀中(中等灰度表示),几个不满足条件(1)的点符合条件(2)时,得到图中显示的断开周界。很明显,只有满足上述两个条件的属于q中的点描绘了图10.45(d)中交叉阴影线表示的一个像素宽度的连通路径。这条路径组成在淹没的第n个阶段我们希望得到的水坝。在这个淹没水平上,水坝的构造是由置所有刚好在这条路径上的点的值为比图像中灰度级的最大值还大的值完成的。所有水坝的高度通常设定为1加上图像中灰度级最大允许值。这样设定可以阻止在水位不断升高的情况下水越过部分水坝。应该特别注意到的是通过这一过程建立的水坝是连通分量,就是我们希望得到的分割边界。就是说,这种方法消除了分割线产生间断的问题。
尽管刚刚讨论的过程是用一个简单的例子说明的,但是处理更为复杂情况的方法是完全相同的,包括图10.45(c)中显示的3×3对称结构元素的使用也是相同的。
三.分水岭分割算法
令M1,M2,…,MR为表示图像g(x,y)的局部最小值点的坐标的集合。如同在10.5.1节结尾说明的那样,这是一幅典型的梯度图像。令G(Mi)为一个点的坐标的集合,这些点位于与局部最小值Mi (回想无论哪一个汇水盆地内的点都组成一个连通分量)相联系的汇水盆地内。符号min和max代表g(x,y)的最小值和最大值。最后,令T[n]表示坐标(s,t)的集合,其中g(s,t)<n,即
在几何上,T[n]是g(x,y)中的点的坐标集合,集合中的点均位于平面g(x,y)=n的下方。
随着水位以整数量从n=min+1到n=max+1不断增加,图像中的地形会被水漫过。在水位漫过地形的过程中的每一阶段,算法都需要知道处在水位之下的点的数目。从概念上来说,假设T[n]中的坐标处在g(x,y)=n平面之下,并被“标记”为黑色,所有其他的坐标被标记为白色。然后,当我们在水位以任意增量n增加的时候,从上向下观察xy平面,会看到一幅二值图像。在图像中黑色点对应于函数中低于平面g(x,y)=n的点。这种解释对于理解下面的讨论很有帮助。
令Cn(Mi)表示汇水盆地中点的坐标的集合。这个盆地与在第n阶段被淹没的最小值有关。参考前一段的讨论,Cn(Mi)也可以被看做由下式给出的二值图像:
换句话说,如果(x,y)∈Cn(Mi)且(x,y)∈T[n],则在位置(x,y)有Cn(Mi)=1。否则Cn(Mi)=0.对于这个结果几何上的解释是很简单的。我们只需在水溢出的第n个阶段使用“与(AND)”算子将T[n]中的二直图像分离出来即可。T[n]是与局部最小值Mi相联系的集合。
接下来,我们令C[n]表示在第n个阶段汇水盆地被水淹没的部分的合集:
然后令C[max+1]为所有汇水盆地的合集:
可以看出处于Cn( Mi)和T[n]中的元素在算法执行期间是不会被替换的,而且这两个集合中的元素的数目与n保持同步增长。因此,C[n-1]是集合C[n]的子集。根据式(10.5.2)和式(10.5.3),C[n]是T[n]的子集,所以,C[n-1]是T[n]的子集。从这个结论我们得 出重要的结果:C[n-1]中的每个连通分量都恰好是T[n]的一个连通分量。
找寻分水线的算法开始时设定C[min+1]=T[min+1]。然后算法进入递归调用,假设在第n步时,已经构造了C[n-1]。根据C[n-1]求得C[n]的过程如下:令Q代表T[n]中连通分量的集合。然后,对于每个连通分量q∈Q[n],有下列3种可能性:
(a) q∩C[n-1]为空。
(b) q∩C[n-1]包含C[n-1]中的一个连通分量。
(c) q∩C[n-1]包含C[n-1]多于一个的连通分量。
根据C[n-1]构造C[n]取决于这3个条件。当遇到一个新的最小值时符合条件(a),则将q并人C[n-1]构成C[n]。当q位于某些局部最小值构成的汇水盆地中时,符合条件(b),此时将q合并入C[n-1]构成C[n]。当遇到全部或部分分离两个或更多汇水盆地的山脊线的时候,符合条件(c)。进一步的注水会导致不同盆地的水聚合在一起,从而使水位趋于一致。因此,必须在q内建立一座水坝(如果涉及多个盆地就要建立多座水坝)以阻止盆地内的水溢出。正如前一节中的解释,当用3×3个1的结构元素膨胀q∩C[n-1]并且需要将这种膨胀限制在q内时,一条一个像素宽度的水坝是能够构造出来的。
通过使用与g(x,y)中存在的灰度级值相对应的n值,可以改善算法效率;根据g(x,y)的直方图,可以确定这些值及其最小值和最大值。
例10.18 分水岭分割算法的说明
分别考虑图10.46(a)和(b)中显示的图像和它的梯度。应用刚才讨论的分水岭算法得到图10.46(c)中显示的梯度图像的分水线(白色路径)。这些分割的边界叠加在原图上示于图10.46(d)。如在本节中开始时所注意到的,分割边界具有那些被连接起来的路径的重要性质。
四.应用标记
直接以前一节中讨论的形式使用分水岭分割算法通常会由于噪声和其他诸如梯度的局部不规则性的影响造成过度分割。如图10.47所示,过度分割足以令应用算法得到的结果变得毫无用处。此时,过度分割意味着分割区域过多。一个较实际的解决方案是通过合并预处理步骤来限制允许存在的区域的数目,这些预处理步骤是为将附加知识应用于分割过程而设置的。
用于控制过度分割的方法是以标记的概念为基础的。一个标记是属于一幅图像的连通分量。我们有与重要对象相联系的内部标记,还有同背景相联系的外部标记。选择标记的典型过程包括两个主要步骤:(1)预处理;(2)定义一个所有标记必须满足的准则集合。为了对此进行说明,再次考虑图10.47(a)。导致图10.47(b)中过度分割结果的一部分原因是大量隐含的最小值。由于这些区域的尺寸很小,所以这些最小值中有很多是不相关的细节。在前面的讨论中,已经不止一次地提到,将很小的细节对于图像的影响降至最低的有效 方法是用一个平滑滤渡器对图像进行过滤。在这种特殊情况下,这是一种合适的预处理方案。
假设在此时将内部标记定义为(1)被更高“海拔”点包围起来的区域;(2)区域中的点组成一个连通分量;并且(3)所有属于这个连通分量的点具有相同的灰度级值。在图像经过平滑处理之后,满足这些定义的内部标记以图10.48(a)中浅灰色、斑点状区域表示。下一步,对平滑处理后的图像使用分水岭算法,并限制这些内部标记只能是允许的局部最小值。图l0.48(a)显示了得到的分水线。将这些分水线定义为外部标记。注意,沿着分水线的点是很好的背景候选点。因为它们经过相邻的标记之间的最高点。
图10.48(a)中显示的外部标记有效地将图像分割成不同区域。每个区域包含一个惟一的内部标记和部分背景。问题是因此变为将每个这样的区域一分为二:单一的对象和它的背景。我们对这个简单的问题能够应用多种在本章前面讨论过的分割技术。另一种简单的方法是对每个单独的区域使用分水岭分割算法。就是说,我们只求得平滑后的图像的梯度[如图10.46(b)],然后约束算法只对包含特定区域中标记的分水岭进行操作。使用这种方法得到的结果显示于图10.48(b)中。相对于图10.47(b)的改善之处是显而易见的。
标记的选择可以用基于灰度级值和连通性的简单的过程分类,如刚才所说明的那样,更复杂的描述涉及尺寸、形状、位置、相对距离、纹理内容等等(见第11章关于描绘子的部分)。关键是标记的使用给我们带来关于分割问题的某种带有先验性质的知识。应该提醒读者注意的是:人类经常以先验知识用日常的视觉辅助,进行各种分割和更高级的工作,最熟悉的例子就是在阅读上下文时所用到的方法。因此,分水岭分割方法提出了一种能有效使用这类知识的机制。这是这种方法的一个突出优点。