第 9 章 形态学图像处理
( Morphological Image Processing**)**
目录
[9.1. 预备知识(Preliminaries)](#9.1. 预备知识(Preliminaries))
[9.2. 侵蚀和膨胀(Erosion and Dilation)](#9.2. 侵蚀和膨胀(Erosion and Dilation))
[9.2.1 侵蚀(Erosion)](#9.2.1 侵蚀(Erosion))
[9.2.2 膨胀(Dilation)](#9.2.2 膨胀(Dilation))
[9.2.3 对偶(Duality)](#9.2.3 对偶(Duality))
[9.3. 开合运算(Opening and Closing)](#9.3. 开合运算(Opening and Closing))
[9.4. 中脱变换(The Hit-or-Miss Transform)](#9.4. 中脱变换(The Hit-or-Miss Transform))
[9.5. 一些基本形态学算法(Some Basic Morphological Algorithms)](#9.5. 一些基本形态学算法(Some Basic Morphological Algorithms))
[9.5.1 边界提取(Boundary Extraction)](#9.5.1 边界提取(Boundary Extraction))
[9.5.2 孔洞填充(Hole Filling)](#9.5.2 孔洞填充(Hole Filling))
[9.5.3 提取连通分量(Extraction of Connected Components)](#9.5.3 提取连通分量(Extraction of Connected Components))
[9.5.4 凸包(Convex Hull)](#9.5.4 凸包(Convex Hull))
[9.5.5 薄化(Thinning)](#9.5.5 薄化(Thinning))
[9.5.6 粗化(Thickening)](#9.5.6 粗化(Thickening))
[9.5.7 骨架(Skeletons)](#9.5.7 骨架(Skeletons))
[9.5.8 裁剪(Pruning)](#9.5.8 裁剪(Pruning))
[9.6. 形态学重建(Morphological Reconstruction)](#9.6. 形态学重建(Morphological Reconstruction))
[9.6.1 测地线之膨胀和侵蚀(Geodesic Dilation and Erosion)](#9.6.1 测地线之膨胀和侵蚀(Geodesic Dilation and Erosion))
[9.6.2 用膨胀和侵蚀进行形态学重建(Morphological Reconstruction by Dilation and by Erosion)](#9.6.2 用膨胀和侵蚀进行形态学重建(Morphological Reconstruction by Dilation and by Erosion))
[9.6.3 应用示例(Sample Applications)](#9.6.3 应用示例(Sample Applications))
[9.6.3.1 籍重建开运算(Opening by Reconstruction)](#9.6.3.1 籍重建开运算(Opening by Reconstruction))
[9.6.3.2 自动填孔算法(Automatic Algorithm for Filling Holes)](#9.6.3.2 自动填孔算法(Automatic Algorithm for Filling Holes))
[9.6.3.3 边界清除(Border Clearing)](#9.6.3.3 边界清除(Border Clearing))
[9.7. 二值图像形态学运算概述(Summary of Morphological Operations on Binary Images)](#9.7. 二值图像形态学运算概述(Summary of Morphological Operations on Binary Images))
[9.8. 灰度图像形态学 (Grayscale Morphology)](#9.8. 灰度图像形态学 (Grayscale Morphology))
[9.8.1 灰度图像之侵蚀和膨胀(Grayscale Dilation and Erosion)](#9.8.1 灰度图像之侵蚀和膨胀(Grayscale Dilation and Erosion))
[9.8.2 灰度图像之开合运算(Grayscale Opening and Closing)](#9.8.2 灰度图像之开合运算(Grayscale Opening and Closing))
[9.8.3 一些基本灰图像形态学算法(Some Basic Grayscale Morphological Algorithms)](#9.8.3 一些基本灰图像形态学算法(Some Basic Grayscale Morphological Algorithms))
[9.8.3.1 形态学平滑(Morphological Smoothing)](#9.8.3.1 形态学平滑(Morphological Smoothing))
[9.8.3.2 形态学梯度运算(Morphological Gradient)](#9.8.3.2 形态学梯度运算(Morphological Gradient))
[9.8.3.3 顶帽和底帽变换(Top-Hat and Bottom-Hat Transformations)](#9.8.3.3 顶帽和底帽变换(Top-Hat and Bottom-Hat Transformations))
[9.8.3.4 粒度分析(Granulometry)](#9.8.3.4 粒度分析(Granulometry))
[9.8.3.5 纹理分割(Textural Segmentation)](#9.8.3.5 纹理分割(Textural Segmentation))
[9.8.3.6 纹理分割(Grayscale Morphological Restruction)](#9.8.3.6 纹理分割(Grayscale Morphological Restruction))
导读( Preview**)**
形态学( morphology**)** 一词通常指生物学的一个分支,其研究动植物的形式( form**)** 和结构( structure**)** 。在这里,我们将其用于数学形态学 的语境中,将其作为一种提取图像成分的工具,这些成分对于表示和描述区域形状(例如边界 、骨架 (skeletons)和凸包(convex hull))非常有用。我们也对用于图像预处理或后处理的形态学技术感兴趣,例如形态学滤波、薄化和剪枝。
在接下来的章节中,我们将阐述数学形态学中的一些基本概念,并说明它们在图像处理中的应用。本章内容标志着从以图像为输入和输出的方法过渡到以图像属性为输出的方法,例如用于目标提取和描述。**形态学是本书后续章节中介绍的几种工具之一,其他工具还包括图像分割、特征提取和目标识别,这些工具构成了从图像中提取"含义"的技术基础。**本章接下来的章节将讨论处理二值图像和灰度图像的方法。
9.1. 预备知识( Preliminaries**)**
数学形态学的语言是集合论 。因此,形态学为众多图像处理问题提供了一种统一而强大的方法。在处理图像时,数学形态学中的集合代表图像中的对象。对于二值图像,这些集合属于二维整数空间 ,其中,集合的每一个元素都是一个元组(二维向量),其坐标是图像中对象(通常是前景)像素的坐标。灰度数字图像可以表示为集合,其分量属于
。在这种情况下,集合中的每一个元素的两个分量对应于像素的坐标,第三个分量对应于其离散强度值。更高维空间中的集合可以包含其他图像属性,例如颜色和时变分量。
形态学运算是基于集合定义的 。在图像处理中,我们使用形态学处理两种类型的像素集合:对象和结构元素 (SE-structuring elements)。通常,对象 定义为前景像素的集合 。结构元素 可以由前景像素 和背景像素 共同构成。此外,结构元素有时包含所谓的"无关紧要"元素,用"×"表示,表明该元素的值无关紧要。在这种情况下,该值可以忽略,或者在表达式求值时,可以使其取值与期望值相符;例如,在以值匹配为目标的应用中,它可以取图像中某个像素的值。
**由于我们处理的图像是矩形阵列,而集合通常是任意形状的,因此形态学在图像处理中的应用要求将集合嵌入矩形阵列中。**在构建此类阵列时,我们将所有不属于对象集合的像素赋予一个背景值。图 9.1 的第一行展示了一个示例。左侧是你在书籍插图中常见的图形格式的集合。中间的集合被嵌入到一个矩形背景(白色)中,形成一个图形图像(注:集合以任意形状的物体(例如正方形和三角形)的图形形式呈现。图形图像包含嵌入背景中形成矩形阵列的集合。当我们希望将图形解释为数字图像(或结构元素)时,我们会在可能产生歧义的插图中添加网格。所有图形中的物体都带有阴影,背景为白色。在处理实际的二值图像时,我们称物体为前景像素,所有其他像素为背景像素)。右侧展示了一个数字图像(注意网格),这是我们用于数字图像处理的格式。
结构元素的定义方式相同,图 9.1 的第二行给出了一个示例。数字图像和数字结构元素的表示方式存在一个重要的区别。请注意右上角,图像中对象周围有一圈背景像素,而结构元素中则没有。稍后你将了解到,结构元素的使用方式类似于空间卷积核 (参见图 3.28),而刚才描述的图像边界类似于我们在 3.4 节和 3.5 节中讨论的填充。形态学中的操作有所不同,但填充和滑动操作与卷积中的操作相同。

-----------------图 9.1:第一行。左图:以图形集合形式表示的对象。中图:嵌入背景中的对象形成图形图像。右图:对象和背景数字化后形成数字图像(注意网格)。第二行:结构元素示例,分别以集合、图形图像和数字结构元素(SE)的形式表示。------------
除了第 2.6 节给出的集合定义,集合反射和平移的概念在形态学中与结构元素密切相关。集合(结构元素)B 关于其原点的反射 ( 记为 )定义为
(9-1)
即,若 B 是一个二维点集,则 是 B 中其 ( x ,y ) 坐标已被 ( -x ,-y ) 替换的点集。图 9.2 展示了几个数字集(结构元素)及其反射的示例。图中的点表示结构元素的原点。请注意,反射操作只需将结构元素绕其原点旋转 180° 即可,所有元素(包括背景元素和无关元素)都会旋转。

------------------------图 9.2:结构元素及其关于原点的反射( × 表示无关元素,点表示原点)。反射是指结构元素绕其原点旋转 180°(译注:即镜像)。----------------
一个集合 B 平移一个点 ( 表示为
) 定义为
(9-2)
即,若 B 是一个二维像素集,则 是 B 中其 ( x ,y ) 坐标已被
替换的像素集。这种构造用于在图像上平移(滑动)结构元素,每一个位置都对结构元素与其正下方图像区域执行集合运算,正如我们在图 3.28 中解释的相关性和卷积运算一样。反射和平移都是相对于 B 的原点定义的。
为了介绍图像与结构元素之间的形态学运算是如何进行的,请参考图 9.3。图 9.3 展示了一个简单的二值图像I ,它由一个对象(集合)A (以阴影显示)和一个 3 × 3 的结构元素(SE)组成,其中结构元素的所有元素均为 1 (前景像素)。背景像素 (0) 以白色显示。我们希望执行以下形态学运算:(1) 生成一个与 I 大小相同的新图像,该图像初始时仅包含背景值;(2) 将 B 在图像 I 上平移(滑动);(3) 在每次平移时,如果 B 完全包含在 A 中,则将 B 的原点标记为新图像中的前景像素;否则,将其保留为背景点。图 9.3(c) 显示了B 的原点遍历I 中所有元素后的结果。我们可以看到,当 B 的原点位于 A 的边界元素上时,B 的一部分不再包含在 A 内,从而排除了 B 原点所在位置作为新图像前景点的可能性。最终结果是集合 A 的边界被侵蚀,如图 9.3(e) 所示。由于我们对操作的定义方式,B 在 I 中所需的最大移动距离是当 B 的原点(位于其中心)包含在 A 内时。由于 B 的大小为 3 × 3,我们需要的最小背景填充宽度为 1 像素,如图 9.3(a) 所示。通过使用操作所需的最小边界,我们可以保持图形尺寸较小。实际上,我们根据所用结构元素的最大尺寸来指定填充宽度,而与执行的操作无关。
当我们使用诸如"结构元素 B 包含在集合 A 中"之类的术语时,我们特指 B 的前景元素仅与 A 的元素重叠。当 B 还包含背景元素以及可能存在的无关元素时,这一点就变得尤为重要。此外,我们使用集合 A 来表示图像 I 的所有前景像素。这些前景元素可以是单个对象,如图 9.3 所示;也可以表示前景元素的互不相交的子集,如图 9.1 第一行所示。我们将从 9.2 节到 9.7 节讨论二值图像和结构元素。然后,在 9.8 节中,我们将把二值图像的概念扩展到灰度图像和结构元素。

--------------------------图 9.3:(a) 包含一个对象(集合)A 的二值图像。(b) 结构元素 B 。(c)形态学运算产生的图像(见正文)。-------------------------------------
9.2. 侵蚀和膨胀( Erosion and Dilation**)**
我们首先通过研究两种操作------侵蚀和膨胀------来探讨形态学。这两种操作是形态学处理的基础。事实上,本章讨论的许多形态学算法都基于这两种基本操作。
9.2.1 侵蚀( Erosion**)**
形态学表达式可以用结构元素和一个前景像素集合A 来表示,也可以用结构元素和包含 A 的图像 I 来表示。我们首先考虑前一种方法。设A 和 B 为 中的集合,则A 被 B 侵蚀( 记为 A ⊖B)定义为
(9-3)
其中,A 是前景像素集合,B 是结构元素,而 z 是前景值(1) 。总之,该公式表示 A 被 B 侵蚀是使得B 平移 z 后包含在A 中的所有点 z 之集合。(记住,位移 (displacement)是相对于B的原点定义的。) 公式 (9-3) 是图 9.3(c) 中图像前景像素的公式。
如前所述,我们处理的是嵌入在背景像素集中的前景像素集,以此形成完整的图像 I 。因此,我们形态学过程的输入和输出是图像,而不是单独的像素集。我们原本可以通过将公式 **(9-3)**写成
(9-4)
从而明确地表明这一事实,其中,I 是前景和背景像素的矩阵数组。第一个大括号内的内容与公式 (9-3) 相同,并补充说明A 是 I 的一个子集(即包含在 I 中)。第二个大括号内的并集运算将不在子集 A 中的像素( 即 ------背景像素集合)"添加"到第一个大括号的结果中,同时要求背景像素位于 I 定义的矩形内。换言之,该公式表明,B 对 I 的侵蚀结果是使得 B 平移 z 后包含在 A 中的所有点 z 的集合。该公式还明确指出 A 包含于 I 中,结果嵌入在背景像素集合中,并且整个过程的大小与 I 相同。
当然,我们不会使用公式 (9-4) 中繁琐的符号,我们展示它只是为了强调一个重要的观点。相反,当形态学操作仅使用前景元素时,我们使用符号 A ⊖ B ;当操作同时使用前景和背景元素时,我们使用符号 I ⊖ B 。这种区别看似微不足道,但假设我们想使用公式 (9-3) 执行侵蚀操作,并使用图 9.2 最后一列中结构元素的前景元素。该结构元素也包含背景元素,但公式 (9-3) 假设 B 仅包含前景元素。事实上,侵蚀操作仅定义于前景元素之间的操作,因此,如果没有公式 (9-4) 中蕴含的"解释",写成 I ⊖ B 将毫无意义。为避免混淆,我们在形态学表达式中,当运算仅涉及前景元素时使用 A ,当运算还涉及背景和/或"无关紧要"的元素时使用I 。此外,我们在处理"混合"SE 时,避免使用标准形态学符号,例如 ⊖ 。例如,在后面的公式 (9-17) 中,我们在表达式 中使用符号 ⊛ ,该表达式与公式 (9-3) 的形式相同,但涉及的是整幅图像和混合值 SE,如图 9.2 最后一列所示。正如你将看到的那样,使用混合值 SE ( 结构元素)可以显著增强形态学运算的能力。
回到我们对公式(9-3)的讨论,因为 B 必须包含在 A 中的表述等价于 B 不与背景(即A 的补集)共享任何公共元素,我们可以将侵蚀等价地表述为
(9-5)
其中,同 2.6节中的定义,∅ 表示空集 。
图 9.4 展示了一个侵蚀示例。集合 A (阴影部分)的元素是图像 I 的前景像素,背景与之前一样显示为白色。图 9.4(c) 中虚线边界内的实线边界是极限,超出此边界,B 的原点进一步位移将导致结构元素的某些元素不再完全包含在 A 中。因此,位于(并包含)此边界内的点( B 的原点位置) 的轨迹构成了 B 对A 进行侵蚀后的前景元素。我们在图 9.4(c ) 中用阴影部分显示了侵蚀结果,背景为白色。侵蚀是满足公式 (9-3) 或 (9-5) 的 z 值集合。图 9.4(c) 和 (e) 中的虚线显示了 A 的边界,作为参考;它不属于侵蚀过程的一部分。图 9.4(d) 显示了一个细长的结构元素,图 9.4(e) 显示该元素对 A 的侵蚀作用。请注意,原对象被侵蚀成一条线。正如你所见,侵蚀结果由结构元素的形状控制 。在这两种情况下,假设图像都经过填充以容纳 B 的所有变化,并且结果被裁剪到与原图像相同的大小,正如我们在第 3 章中处理空间卷积图像时所做的那样。
公式 (9-3) 和 (9-5) 并非侵蚀的唯一定义(参见习题 9.12 和 9.13,其中给出了另外两个等价的定义)。然而,当将结构元素 B 视为在集合上滑动的空间核(例如卷积)时,前两个公式的优势在于它们更直观。

-----------------------------------图9.4:(a) 图像 I ,由集合(对象)A 和背景组成。(b)正方形 SE ,B(点为原点)。(c) A 被 B 侵蚀(在侵蚀后的图像中以阴影显示)。(d) 拉长的 SE。(e) A 被 B 侵蚀。( 侵蚀线为一条线。) 图 (c) 和 (e) 中的虚线边界为 A 的边界,仅供参考。-------------------------------------------------------
例子 9.1:利用侵蚀去除图像成分。
图 9.5(a) 是一幅二值图像,描绘了一个简单的引线键合掩模。如前所述,我们通常将二值图像中的前景像素显示为白色,背景像素显示为黑色。假设我们想要去除图 9.5(a) 中连接中心区域和边界焊盘的线条。使用大小为 11 × 11 的正方形结构元素(其所有分量均为 1)对图像进行侵蚀(即侵蚀图像的前景像素),可以去除大部分线条,如图 9.5(b) 所示。中心两条垂直线被变细但未完全去除的原因是它们的宽度大于 11 像素。将结构元素的大小更改为 15 × 15 并再次侵蚀原始图像,可以去除所有连接线,如图 9.5(c) 所示。另一种方法是使用相同的 11 × 11 或更小的结构元素再次侵蚀图 9.5(b) 中的图像。进一步增大结构元素的尺寸可以去除更大的组件。例如,如图 9.5(d) 所示,使用 45 × 45 元素大小的结构元素应用于原始图像,可以去除连接线和边界区域。
从这个例子中我们可以看出,侵蚀会使二值图像中的物体缩小或变细 。实际上,我们**可以将侵蚀视为一种形态学滤波操作,其中小于结构元素的图像细节会被滤除(移除)。**在图 9.5 中,侵蚀起到了"线滤波器"的作用。我们将在 9.4 节和 9.8 节中再次讨论形态学滤波器的概念。

-----------------图 9.5:使用侵蚀法去除图像成分。(a) 486 × 486 像素的线键合掩模二值图像,其中前景像素显示为白色。(b)--(d) 分别使用尺寸为 11 × 11、15 × 15 和 45 × 45 像素的正方形结构元素进行侵蚀,所有元素的值均为 1。----------------
9.2.2 膨胀( Dilation**)**
设 A 和 B 为 中的集合,则 A 被 B 膨胀( 表示为 A ⊕B ) 定义为
(9-6)
该公式基于将 B 绕其原点反射,然后将反射面平移 z ,类似于侵蚀。A 被 B 膨胀则定义为使得 前景元素至少与 A 的一个元素重叠的所有位移 z 之集合。(记住,z 是
的原点的位移。) 基于这种解释,公式 **(9-6)**可以等价地写成
(9-7)
公式 (9-6) 和 (9-7) 并非目前使用的唯一膨胀定义(参见习题 9.14 和 9.15,其中给出了两种不同但等价的定义)。与侵蚀类似,前面的定义在将结构元素 B 视为卷积核时更具直观性。如前所述,将 B 绕其原点翻转(旋转),然后依次平移使其在集合 A 上滑动的基本过程类似于空间卷积。但是,请记住,膨胀基于集合运算,因此是一种非线性运算,而卷积是积之和,是一种线性运算。
与侵蚀(一种收缩或变薄的操作)不同,膨胀会使二值图像中的物体"增大"或"增厚"。这种增厚的方式和程度由所用结构元素的形状和大小控制 。图 9.6(a) 显示了与图 9.4 中相同的物体(背景区域更大以适应膨胀),图 9.6(b) 显示了一个结构元素(在本例中, ,因为结构元素关于其原点对称)。图 9.6(c) 中的虚线显示了原物体的边界,以供参考,实线显示了
原点再移动 z 的极限,超过该极限,
和 A 的交集将为空。因此,该边界上和边界内的所有点构成 A 乘以 B 的膨胀。图 9.6(d) 显示了一个结构元素,该结构元素旨在实现垂直方向比水平方向更大的膨胀,图 9.6(e) 显示使用该元素实现的膨胀。

---------------------图 9.6 :(a) 图像 I ,由集合(对象)A 和背景组成。(b) 正方形 SE(点为原点)。(c) A 被 B 膨胀(阴影部分)。(d) 拉长的 SE。(e) A 被该元素膨胀。(c) 和 (e) 中的虚线是 A 的边界,仅供参考。-----------------------------------
例子 9.2:利用膨胀来修复图片中的受损字符。
膨胀最简单的应用之一是用于桥接间隙 。图 9.7(a) 显示了与我们在图 4.48 中研究的低通滤波相关的同一幅图像,其中包含断裂的字符。断裂的最大长度为两个像素。图 9.7(b) 显示了一个可用于修复间隙的结构元素。如前所述,我们在处理图像时使用白色 (1) 表示前景,黑色 (0) 表示背景。图 9.7(c) 显示了使用该结构元素对原图像进行膨胀后的结果。间隙已被桥接。与我们在图 4.48 中用于桥接间隙的低通滤波方法相比,形态学方法的一个重要优势在于,形态学方法直接生成二值图像。而低通滤波则从二值图像开始,生成灰度图像,需要通过阈值处理才能将其转换回二值图像(我们将在第 10 章讨论阈值处理)。请注意,本应用中的集合 A 由许多不相连的前景像素对象组成。

-------------------------图 9.7 :(a) 低分辨率文本,显示断字(见放大图)。(b)结构元素。(c) (a)被(b)膨胀,断字部分已连接。-------------------------------
9.2.3 对偶( Duality**)**
侵蚀和膨胀关于集合补集和反射互为对偶。即,
(9-8)
和
(9-9)
公式 (9-8) 表明,A 被 B 侵蚀是 被
膨胀的补集,反之亦然。当结构元素的值关于其原点对称时(这种情况很常见),这种对偶性质非常有用,因为此时
。然后,我们可以简单地通过用相同的结构元素膨胀其背景(即膨胀
) 并取补集来获得 A 的侵蚀。类似的结论也适用于方程 (9-9)。
接下来,我们将正式证明公式 (9-8) 的有效性,以说明建立形态学表达式有效性的典型方法。从侵蚀的定义出发,可以得出
若 包含于 A ,则其可推出
,在这种情况下,则前述表达式成为
但 z 的满足 的集合之补集是 z 的满足
的集合。因此
最后一步可由公式 (9-6) 中膨胀的定义及其等价形式 (9-7) 得出。这样就推导出了证明。类似的推理也可用于证明公式 (9-9)(参见习题 9.16)。
9.3. 开合运算( Opening and Closing**)**
正如你在上一节中看到的那样,膨胀操作会扩大集合的各个组成部分 ,而侵蚀操作则会缩小它们。在本节中,我们将讨论另外两种重要的形态学操作:开运算和合运算 。开运算通常会平滑一个物体的轮廓,打破狭窄的峡部 (isthmuses),并消除细小的凸起 (protrusions)。包运算也倾向于平滑轮廓的各个部分,但与开运算不同的是,它通常会融合狭窄的断裂和细长的缝隙,消除小孔,并填充轮廓中的间隙。
按结构元素B 进行的 A 的开运算 ( 表示为 A ∘ B ) 定义为
(9-10)
因此,用 B 开 A 是 A 按 B 进行侵蚀,再将结果用 B 进行膨胀。
类似地,按结构元素 B 进行的集合 A 的合运算( 表示为 A ⦁ B ) 定义为
(9-11)
这表明,用 B 合 A 只是先用 B 对 A 进行膨胀,再将结果用 B 进行侵蚀。
公式 (9-10) 具有简单的几何解释:B 开A 是使 B 完全包含于 A 中的 B 的所有平移之并集 。图 9.8(a) 显示了一个包含集合(对象)A 的图像,图 9.8(b) 显示了一个实心圆形结构元素 B 。图 9.8(c) 显示了 B 的一些使其包含于 A 中的平移 ,图 9.8(d) 中阴影部分所示的集合是所有此类可能平移的并集。注意,在这种情况下,开运算是一个由两个不相交子集组成的集合,这是因为 B 无法包含于 A 中心的狭窄区域内。正如你稍后将看到的那样,消除比结构元素更窄的区域的能力是形态开运算的关键特征之一。

---------------图 9.8:(a) 图像 I ,由集合(对象)A 和背景组成。(b) 结构元素 B 。(c) B 在 A 内平移。( 为清晰起见,A 显示为深色。) (d) B 开 A。---------------
将 A 与 B 的开运算解释为 B 的使其完全包含于A中的得所有平移之并集,可以用公式表示为
(9-12)
其中,∪ 表示花插号内集合之并集。
合运算具有类似的几何解释,只不过现在我们将 B 平移到 A 之外。合运算的结果就是 B 的所有不与 A 重叠的平移的并集之补集 。图 9.9 说明了这一概念。注意,合运算的边界由 B 在不进入 A 的任何部分的情况下所能到达的最远点决定。基于这种解释,我们可以将 A 与 B 的合运算写成
(9-13)

--------------------------------图 9.9 :(a) 图像 I ,由集合(对象) A 和背景组成。(b)结构元素 B 。(c) B 的平移,使得 B 不与 A 的任何部分重叠。( 为清晰起见,A 显示为黑色。) (d) B 对 A 的合运算。---------------------------------------
例子 9.3:形态学开合运算。
图 9.10 更详细地展示了开合运算的过程及特性。与主要侧重于整体几何解释的图 9.8 和图 9.9 不同,本图展示了各个过程,并且更加关注最终结果的尺度与结构元素尺寸之间的关系。
图 9.10(a) 显示了一幅包含单个对象(集合) A 和一个圆盘结构元素的图像。图 9.10(b) 显示了结构元素在侵蚀过程中的不同位置。该过程导致了图 9.10(c) 中所示的不相交集合。请注意两个主要部分之间的桥梁是如何消除的。相对于结构元素的直径而言,它的宽度很窄,无法完全包含在集合的这一部分中,因此违反了侵蚀的定义。对象最右侧的两个成员也存在同样的情况。圆盘无法容纳的凸起元素被消除。图 9.10(d) 显示了对侵蚀后的集合进行膨胀的过程,图 9.10(e) 显示了开运算的最终结果。形态开运算会去除无法包含结构元素的区域,平滑对象轮廓,断开细小的连接,并去除细小的凸起。
图 9.10( f ) 至 ( i ) 展示了使用相同结构元素对集合 A 进行闭合运算的结果。与开运算类似,合运算也能平滑对象的轮廓。然而,与开运算不同的是,合运算倾向于连接狭窄的断点,填充细长的缝隙,并填充小于结构元素的对象。在本例中,合运算的主要结果是填充了集合 A 左侧的小缝隙。

------------------------图 9.10:形态学开合运算。(a) 图 I ,由集合(对象)A 和背景组成;图中还显示了一个实心圆形结构元素。(点为原点。) (b) 结构元素在不同位置。(c)-(i) 用于获得开运算和合运算的形态学操作。---------------------------------
与侵蚀和膨胀一样,开合关于集合的补和反射互为对偶:
(9-14)
和
(9-15)
我们将这两个公式的证明留作习题 ( 见问题 9.20 ) 。
形态学运算具有下列属性:
( a ) A ∘ B 是 A 的一个子集。
( b ) 若 C 是 D 的一个子集,则 C ∘ B 是 D ∘ B 的一个子集。
( c ) (A ∘ B )∘ B = A ∘ B。
类似地,合运算具有下列属性:
( a ) A 是 A ⦁ B 的一个子集。
( b ) 若 C 是 D 的一个子集,则 C ⦁ B 是 D ⦁ B 的一个子集。
( c ) (A ⦁ B )⦁ B = A ⦁ B。
从属性 (c) 可以看出,在两种情况下,对集合进行多次开或合操作,在操作再次应用后,不会产生任何效果。
例子 9.4:利用开合运算进行形态学滤波。
形态学运算可用于构建与第三章讨论的空间滤波器概念类似的滤波器。图 9.11(a) 中的二值图像显示了受噪声污染的指纹区域。按照我们之前的符号,A 是所有前景(白色)像素的集合,其中包括感兴趣的对象(指纹纹线)以及随机噪声的白色斑点。背景与之前一样是黑色。噪声表现为深色背景上的白色斑点以及指纹白色部分上的深色斑点。目标是在尽可能减少指纹失真的情况下,消除噪声及其对指纹的影响。可以使用由开运算和闭运算组成的形态学滤波器来实现这一目标。
图 9.11(b) 显示了我们使用的结构元素。图 9.11 的其余部分显示了滤波操作的步骤顺序。图 9.11(c) 是 A 被B 侵蚀后的结果。背景中的白色斑点噪声在开运算的侵蚀阶段几乎完全消除,因为在这种情况下,大多数噪声分量都小于结构元素。指纹中包含的噪声元素(暗点)的尺寸实际上增大了。原因是这些元素是内部边界,随着对象被侵蚀而增大。这种增大是通过对图 9.11(c) 进行膨胀来抵消的。图 9.11(d) 显示了结果。
上述两个操作构成了A 被 B 开口的过程。如图 9.11(d) 所示,开口操作的最终效果是降低了背景和指纹本身的所有噪声成分。然而,指纹脊线之间出现了新的间隙。为了消除这种不良影响,我们对开口进行膨胀操作,如图 9.11(e) 所示。大部分断裂被修复,但脊线变粗,这种情况可以通过侵蚀操作来改善。图 9.11( f ) 显示了图 9.11(d) 开口的闭合结果。最终结果的噪声斑点非常少,但仍然存在一些表现为单个像素的噪声斑点。这些斑点可以通过我们将在本章后面讨论的方法消除。

-------------------------图 9.11:(a) 含噪图像。(b) 结构元素。(c) 侵蚀图像。(d) 侵蚀后的膨胀( A 的开口 )。(e) 开口的膨胀。( f )开口的闭合。( 原图像由美国国家标准与技术研究院提供。)---------------------------------------------------------
9.4. 中脱变换( The Hit-or-Miss Transform**)**
形态学中脱变换 (HMT) 是一种用于形状检测的基本工具。设 I 为由前景像素(A )和背景像素(B )组成的二值图像。与目前讨论的形态学方法不同,HMT 利用两个结构元素: 用于检测前景中的形状,
用于检测背景中的形状。 图像 I 的 HMT 定义为:
(9-16)
其中第二行源自公式 (9-3) 中侵蚀的定义。换句话说,该公式表明形态学 HMT 是结构元素 和
的满足后述条件的平移 z 之集合,即使得
在前景中找到匹配项(即
包含于 A 中 ),且
在背景中找到匹配项(即
包含于
中 )。"且(simultaneous)"一词意味着 z 是两个结构元素的共有平移。HMT 中的"脱(miss)"一词源于这样一个事实 :
在
中找到匹配项等同于
在 A 中找不到(缺失)匹配项。
图 9.12 展示了刚才介绍的概念。假设我们要找到图像 I 中对象(集合)D 的原点位置。这里,A 是所有对象集合的并集,因此 D 是A 的子集。显然,我们需要两个能够同时检测前景和背景属性的结构元素。所有三个对象都由前景像素组成,它们呈现不同形状的一种解释是,每一个对象占据了背景的不同区域。换言之,形状的性质取决于前景和背景像素的几何排列。
图 9.12(a) 显示 I 由前景 (A ) 和背景像素组成。图 9.12(b)是 ( I 的补集) 。
的前景定义为
中像素之集合,而背景是三个对象的补集之并集。图 9.12(c) 显示检测 D 所需的两个结构元素。元素
等于 D 自身,正如预期,但其也包含对象 C 的部分。
结构元素 设计用于检测
中的 D 。因为 D 由
中的背景元素构成,而侵蚀利用的是前景元素,
必须设计得用于检测 D 的边界,此边界由
中的前景元素构成。图 9.12(c) 中的 SE 正是如此。它由一像素厚的前景元素矩形组成。矩形的大小使其包含 D 的大小。图 9.12(e) 显示了
对
前景的侵蚀(阴影部分)。它包含 D 的原点,但也包含集合
和 C 的部分。(图 9.12(e) 中的外部阴影区域比图中所示更大(参见问题 9.25);为了保持一致性,结果裁剪为与图像 I 相同的大小。) 图 9.12(d) 和 (e) 中唯一共同的元素是D的原点,因此这两个元素集合的交集给出了该点的位置,正如我们预期。图 9.12( f ) 显示了最终结果。
上述解释是使用侵蚀来表示 HMT 的经典方法,它仅针对前景像素定义。此时一个值得思考的问题是:为什么不尝试使用单个结构元素直接在图像 I 中检测 D ,而不是经历如此繁琐的过程呢?答案是可以这样做,但不能在公式 (9-3) 和 (9-5) 中定义的"传统"侵蚀框架内进行。为了直接在图像 I 中检测D,我们需要能够同时处理前景和背景像素,而不是像侵蚀的定义所要求的那样仅处理前景像素。
为了展示如何对图 9.12 中的示例进行操作,我们定义一个结构元素 B ,它与 D 相同,但额外具有一个宽度为 1 像素的背景元素边框。我们可以使用以这种方式形成的结构元素将 HMT 重述为
(9-17)
这种型与公式 (9-3) 中的型相同,但现在我们测试一下,看看是否 是图像 I (其由前景和背景像素构成)的一个子集。这种公式具有普遍性,因为 B 可以构建成检测图像 I 中像素的任何排列,如图 9.13 和 9.14 所示。

-----------------------图 9.12:(a) 由前景(1)和背景(0)组成的图像,前景等于一组对象集的并集 A 。(b) 前景定义为 的图像。(c) 设计用于检测对象 D 的结构元素。(d) A 被
侵蚀。(e)
被
侵蚀。( f )(d) 和 (e) 的交集,显示了 D 的原点位置,符合预期。图中的点表示各个分量的原点。每一个点代表一个像素。---------------
图 9.13 以图形方式展示了与图 9.12( f ) 相同的解决方案,但使用的是上一段讨论的单个结构元素。图 9.14 展示了基于公式 (9-17) 的几个示例。第一行展示了使用由前景(阴影)元素和背景元素组成的小型结构元素的结果。该结构元素旨在检测图像 I 中包含的单像素孔洞(即一个背景像素被一组相连的前景像素包围)。第二行的结构元素能够检测图像 I 中物体右上角的前景角像素。将该结构元素代入公式 (9-17) 得到右侧的图像。正如你所看到的,正确的像素已识别。图 9.14 的最后一行更有意思,因为它展示了一个由前景、背景和"无关紧要"元素组成的结构元素,如前所述,我们用"×"表示这些"无关紧要"元素。你可以把"无关元素"的价值理解为始终与其在图像中对应的像素相匹配。在这个例子中,当 SE 以右上角像素为中心时,SE 顶部的"无关元素"可以视为背景,而底部一行的"无关元素"则视为前景,从而产生正确的匹配。当 SE 以右下角像素为中心时,"无关元素"的角色则相反,同样能够产生正确的匹配。两个角之间的其他边界像素也通过将所有"无关元素"视为前景来检测。因此,使用"无关元素"可以提高元素结构的灵活性,使其能够执行多种角色。

------------------------------图 9.13:与图 9.12 中的方法相同,但使用公式 (9-17) 和单个结构元素。---------------------------------

------------------------------图 9.14:以下三个示例展示了如何使用单个结构元素和公式(9-17)检测特定特征。第一行:检测单像素孔洞。第二行:检测右上角。第三行:检测多个特征。--------------------------------------------------------------
9.5. 一些基本形态学算法( Some Basic Morphological Algorithms**)**
在前文讨论的基础上,我们现在可以探讨形态学的一些实际应用。在处理二值图像时,形态学的主要应用之一是提取图像中用于表示和描述形状的组件 。具体来说,我们将讨论用于提取边界( boundaries**)** 、连通分量( connected components**)** 、凸包( convex hull ) 和区域骨架( skeleton of a region**)** 的形态学算法 。我们还将开发几种常用于预处理或后处理的方法(用于区域填充、薄化、粗化和修剪)。在本节中,我们将大量使用"微图像",旨在阐明每地种形态学方法的原理。这些二值图像以图形方式呈现,前景(1)为阴影,背景(0)为白色,与之前相同。
9.5.1 边界提取( Boundary Extraction**)**
前景像素集合 A 的边界(记为β (A ))可以通过以下方式求得:首先用合适的结构元素 B 对 A 进行侵蚀,然后计算 A 与其侵 **蚀后结果之间的集合差。**即
(9-18)
图 9.15 展示了边界提取的机制。它显示了一个简单的二值对象、一个结构元素 B 以及使用公式 (9-18) 的结果。图 9.15( b ) **中的结构元素是最常用的结构元素之一,但并非唯一。**例如,使用一个 5 × 5 的全 1 结构元素会得到一个厚度为 2 到 3 像素的边界。需要注意的是,图 9.15(a) 中的图像边界填充了背景元素,并且在形态学运算完成后,结果裁剪回原尺寸。
例子 9.5:边界提取。
图 9.16 进一步展示了公式 (9-18) 在使用 3 × 3 的全 1 结构元素时的应用。与之前处理图像时一样,我们将前景像素(1)显示为白色,背景像素(0)显示为黑色。结构元素(SE)中的 1 也视为白色。由于所用结构元素的大小,图 9.16(b) 中的边界为一个像素厚。

----------------------------图 9.16:(a)二值图像。(b)使用公式(9-18)和图 9.15(b)中的结构元素得到的结果。-------------------------------------------------
9.5.2 孔洞填充( Hole Filling**)**
如图 9.14 的讨论中所述,孔洞可以定义为被前景像素连通边界包围的背景区域 。本节将介绍一种基于集合扩张、补集和交集的填充图像中孔洞的算法。令 A 表示一个其元素为 8 连通边界的集合,每一个边界包围一个背景区域(即一个孔洞)。已知每一个孔洞中的一个点,目标是用前景元素(1)填充所有孔洞。
首先,我们构成一个 0 元素的数组 ( 其大小同 I , 同像包含 A ),只不过在
中与称为孔洞的像素对应的位置处我们置其值为 1 。则下述过程实现了用 1 填充所有的孔洞:
(9-19)
其中,B 是图 9.17 (c) 中的对称结构元素。若 ,则算法在迭代的第 k 步终止。则
包含所有填充的孔洞。则
与 I 的集合之并集包含所有填充孔空极其边界。
若不加检验,则公式 (9-19) 中的膨胀会填充整个面积,但每一步与 取交集则将结果限制在感兴趣的区域内。 这是我们展示如何通过条件控制形态学过程以满足所需属性的第一个例子。在本应用中,该过程贴切地称为条件膨胀(conditional dilation)。图 9.17 的其余部分进一步说明了公式 (9-19) 的机制。此示例只有一个孔,但该概念适用于任何有限数量的孔,前提是每个孔内都有一个点已知(我们将在 9.6 节中移除此要求)。

--------------- 图 9.17:孔洞填充。(a) 图像 I 中包含的集合A (阴影部分)。(b) I 的补集。(c) 结构元素 B 。计算中仅使用前景元素。(d) 孔洞内的初始点,设为 1。(e)--(h) 公式 (9-19) 的各个步骤。(i) 最终结果 [(a) 和 (h) 的并集]。----------------
例子 9.6:形态学孔洞填充。
图 9.18(a) 显示了一幅由白色圆圈和黑色空洞组成的图像。这样的图像可能是通过对包含抛光球体(例如滚珠轴承)的场景进行阈值分割而得到的。球体内部的黑色圆形区域是由反射造成的。目标是通过填充图像中的空洞来消除反射。图 9.18(b) 显示了填充所有球体的结果。由于必须知道黑点是背景点还是球体内部点(即空洞),因此要完全自动化此过程,需要在算法中构建额外的"智能"。我们将在 9.6 节中给出一种基于形态学重建的全自动方法(另见问题 9.36)。

--------------------------图 9.18:(a) 二值图像。区域内的白点(为清晰起见已放大显示)是孔洞填充算法的起始点。(b) 填充所有孔洞后的结果。-----------------------
9.5.3 提取连通分量( Extraction of Connected Components**)**
从二值图像中提取连通分量是许多自动化图像分析应用的核心 。设 A 为一组前景像素,由一个或多个连通分量组成。我们生成一幅图像 大小与包含 A 的图像I 相同),其元素均为 0(背景值),只不过,在已知对应于 A 中每一个连通分量的点的位置,我们将其设置为 1(前景值)。目标是从
开始,并求得 I 中的所有连通分量。以下迭代过程可以实现此目标:
(9-20)
其中,是 B 是图 9.19(a) 中的 SE ,当 时,该过程终止,这时
包含图像中前景像素的所有连续分量。公式 (9-19) 和公式 (9-20) 均使用了条件膨胀来限制集合膨胀的增长,但公式 (9-20) 使用了 I 而非
。 这是因为这里我们寻找的是前景点,而公式 (9-19) 的目标是找到背景点。图 9.19 展示了公式 (9-20) 的运行机制,当 k = 6 时收敛。注意,所用结构元素的形状基于像素间的 8 连通性。与孔洞填充算法类似,公式 (9-20) 适用于 I 中包含的任意有限个连通分量,前提是每一个连通分量中已知一个点。参见问题 9.37,其中提供了一个完全自动化的程序,该程序消除了此要求。

-------------------------------------图 9.19:(a) 结构元素。(b) 包含一个连通分量的集合的图像。(c) 初始数组,其中连通分量区域内包含值为 1 。(d)--(g) 公式(9-20)迭代的各个步骤。-------------------------------------------------------------
例子 9.7:利用连通分量检测包装食品中的异物。
连通组件常用于自动化检测。图 9.20(a) 显示了一块含有骨碎片的鸡胸肉的 X 射线图像。在加工食品装运前检测出此类异物至关重要。在本应用中,骨骼的密度使其标称强度值与背景显著不同。因此,使用单个阈值即可轻松地从背景中提取骨骼(阈值分割已在 3.1 节中介绍,我们将在 10.3 节中详细讨论)。结果如图 9.20(b) 所示。
图中最重要的特征是阈值处理后剩余的点聚集形成物体(骨骼),而不是分散分布。我们可以通过侵蚀前景来确保二值图像中只包含"显著"大小的物体。 在本例中,我们将侵蚀后剩余且 5 × 5 区域内所有点均为 1 的物体定义为显著物体。图 9.20(c) 显示了侵蚀的结果。下一步是分析剩余物体的大小。我们通过提取图像中的连通分量来标记(识别)这些物体 。图 9.20(d) 中的表格列出了提取结果。**共有 15 个连通分量,其中 4 个在尺寸上占主导地位。**这足以证明原图像中包含显著的、不期望的物体。如有需要,可以使用第 11 章讨论的技术进行进一步的特征描述(例如形状)。

-------------------------图 9.20:(a) 鸡胸肉 X 射线图像,可见骨碎片。(b) 阈值处理后的图像(为清晰起见,显示为负片(底片))。(c) 图像经 5×5 区域 1 的侵蚀处理后。(d) (c)中连通分量的像素数。(图像 (a) 由德国迪普霍尔茨 NTB Elektronische Geraete GmbH 公司提供,网址:www.ntbxray.com。)-------------------------------------
9.5.4 凸包( Convex Hull**)**
对于 Euclid 平面上的一个点集 S ,当且仅当连接 S 中任意两点的直线段完全位于 S 内时,我们称其为凸集 (convex)。S 的凸包 H 是包含 S 的最小凸集。S 的凸亏 (convex deficiency)定义为集合 H -- S 。与 Euclid 平面不同,数字图像平面(见图 2.19)只允许离散坐标上的点。因此,我们处理的是数字集。凸性的概念同样适用于数字集,但凸数字集的定义略有不同。对于一个数字集 A ,当且仅当其 Euclid 凸包只包含属于A 的数字点时,其称为凸集 。判断一个前景点数字集是否是凸集的一个简单方法是用直(连续的)Euclid 线段连接其边界点。如果由线段构成的集合仅包含前景点,则该集合是凸集;否则,其不是凸集。上述针对集合 S 给出的凸包和凸亏的定义可以直接推广到数字集合。以下形态学算法可用于获得嵌入在二值图像 I 中的前景像素集合 A的凸包近似值。
令 ( i = 1 , 2 , 3 ,4 ) 表示图 9.21(a) 中的 4 结构元素。这个过程由实现的形态学公式
(9-21)
构成,其中, 。 当这个过程使用第 i 个结构元素收敛时( 即当
时 ),我们令
。则 A的凸包是四个结果之并集:
(9-22)
因此,因此,这个方法包括携 并迭代地应用中脱变换于 I 直至收敛,然后再令
,其中,k 是出现收敛的这一步。携
并重复这个过程( 于 I ) 直到没有变化出现为止,如此等等。这四个最终的
之并集就构成了 A 的凸包。每一次 i (即,结构元素)改变时,这个算法的初始化都设置 k = 0 且
。
图 9.21 展示了公式 (9-21) 和 (9-22) 的用法。图 9.21(a) 显示了用于提取凸包的结构元素。每个元素的原点位于其中心。与之前一样,× 标记表示"无关紧要"的元素。回想一下,如果结构元素 的所有元素在图像 I 的 3 × 3 区域内都能找到对应的匹配项,则称 HMT 在 I 的该区域内找到了结构元素
的匹配项。如前所述,在计算匹配项时,"无关紧要"的元素可以解释为始终与其在图像中对应的元素的值匹配。请注意,在图 9.21(a) 中,
是
顺时针旋转 90°后的结果。
图 9.21(b) 展示了一个待求凸包的集合 A 。与之前一样,该集合被嵌入到一组背景元素中,形成图像I 。从 开始,经过五次公式 (9-21) 迭代后,得到图 9.21(c) 中的集合。然后,令
并再次使用公式 (9-21),得到图 9.21(d) 中的集合(在这种情况下,仅需两步即可收敛 )。接下来的两个结果以相同的方式获得。最后,将图 9.21(c)、(d)、(e) 和 ( f ) 中的集合并集,得到图 9.21( g ) 中的凸包。图 9.21( h ) 所示的复合集合突出了每一个结构元素的贡献。

------------------图 9.21:(a) 结构元素。(b) 集合 A。(c)--( f ) 使用 (a) 中所示结构元素的收敛结果。(g)凸包。(h)显示每一个结构元素贡献的凸包。----------------
刚才讨论的方法的一个明显缺陷是,凸包可能会超出保证凸性所需的最小尺寸,从而违反凸包的定义 。事实上,这正是本例中发生的情况。一种减少这种增长的简单方法是设置限制,使其不超过集合 A 的垂直和水平尺寸。对图 9.21 中的示例施加此限制后,得到图 9.22(a)。连接缩减后集合的边界像素(记住,像素是正方形的中心点)表明,没有集合点位于这些线之外,这表明该集合是凸的。通过观察,可以看出,从该集合中删除任何点都不会失去凸性,因此缩减后的集合是 A 的凸包。
当然,我们用于生成图 9.22 的极限并非获取包含目标集合的最小凸集的通用方法;它仅仅是一种易于实现的启发式方法。凸包算法未能更精确地逼近实际凸包的原因在于所使用的结构元素。 图 9.21(a) 中的结构元素仅"观察"了四个正交方向。如果我们观察其他方向,例如对角线方向,则可以获得更高的精度。但代价是算法复杂度增加,计算量增大。

-------------------------------图 9.22:(a)凸包算法限制增长的结果。(b)连接边界点的直线表明,新集合也是凸集。------------------------------------------------
9.5.5 薄化( Thinning**)**
通过结构元素 B 对前景像素集合 A 进行薄化,记为 A ⊗B,可以用中脱变换( hit-or-miss )来定义:
(9-23)
其中第二行由公式 (2-40) 中给出的集合差定义得出。一个更有用的对称薄化 A 的表达式是基于一个结构元素序列:
(9-24)
利用这个概念,现在我们用一个结构元素序列将薄化定义为
(9-25)
该过程就是利用 过一次扫描薄 A ,然后再利用
通过一次扫描对前一步的结果进行一次薄化,如此等等,再到用
对 A进行一次扫描薄化。整个过程重复进行,直至所有结构元素完全经过一次扫描后不再发生任何变化。每一次薄化过程均使用公式(9-23)进行。
图 9.23(a) 展示了一组用于薄化的常规结构元素( 注意 等于
顺时针旋转 45°),图 9.23(b) 展示了待薄化的集合 A ,薄化过程如上所述。图 9.23(c) 展示 了使用
进行一次扫描薄化得到
的结果。图 9.23(c) 展示了使用
进行薄化得到
的结果,图 9.21(e) 至 (k) 展示了使用剩余结构元素进行扫描薄化的结果 (
到
以及
到
之间没有变化)。在第二次使用
扫描后达到收敛。图 9.23(l) 展示了薄化后的结果。最后,图 9.23(m) 展示了薄化后的集合转换为m 连通性(参见第 2.5 节和习题 9.29 )以消除多路径。

---------------图 9.23:(a) 结构元素。(b) 集合 A 。(c) 使用 (阴影部分)对 A 进行薄化后的结果。(d) 使用
对
进行薄化后的结果。(e)--(i) 使用接下来的六个结构元素进行薄化后的结果。(
和
之间没有变化。) ( j )--( k )再次使用前四个元素的结果。( l )收敛后的结果。( m )转换为 m 连通性的结果。---------------
9.5.6 粗化( Thickening**)**
粗化是薄化的形态学对偶,其定义为
(9-26)
其中B是适用于粗化的结构元素。与薄化类似,粗化也可以定义为一个序列运算:
(9-27)
用于粗化的结构元素与图 9.23(a) 所示的元素形式相同,只是所有 1 和 0 的位置互换。然而,在实践中很少使用单独的粗化算法。通常的做法是先对目标集合的背景进行薄化,然后对结果进行补集运算。 换言之,要对集合 A 进行粗化,我们先构造 ,然后对
进行薄化,最后对薄化的集合进行补集运算,从而得到 A 的粗化版本。图 9.24 展示了这一过程。与之前一样,我们只展示了集合 A 和图像 I ,而没有展示 I 的填充版本。
根据 A 的结构,此过程可能会导致出现断点,如图 9.24(d) 所示。因此,通常需要对使用此方法进行粗化后进行后处理以去除断点。从图 9.24( c ) 可以看出,薄化的背景构成了粗化过程的边界。直接使用公式 (9-27) 进行粗化并不具备这一优势,这也是使用背景薄化来实现粗化的主要原因之一。

-----------图 9.24:(a) 集合A 。(b) 集合 A的补集。(c)对补集进行薄化处理后的结果。(d)对(c)进行补集处理后得到的粗化集合。(e)最终结果,无不连通的点。---------
9.5.7 骨架( Skeletons**)**
如图 9.25 所示,集合 A 的骨架 S (A) 的概念在直观上很简单。我们从图中可以推断出
(a) 若z 是 S (A ) 的一个点,且 是包含于 A 且圆心位于 z 点的最大圆盘,我们不能求得包含
且同时包含于 A 中的一个更大的圆盘( 中心不必位于 z 点 )。满足这些条件的这样一个圆盘
称为一个极大圆盘(maximum disk)。
(b) 若 是一个极大圆盘,它与 A 的边界相交于(touches)两个或多个不同的位置。
A 的骨架可以用侵蚀和开运算表示。也就是说,可以证明(Serra [1982]):
(9-28)
且
(9-29)
其中,B 是一个结构元素,且 ( A ⊖kB ) 表示从 A 开始的 k 个连续的侵蚀;即 ,A 先用 B 侵蚀,再将结果用 B 侵蚀,如此等等:
(9-30)
k 次。公式 (9-28) 中的 K 是 A 侵蚀为一个空集前的最后一步迭代。换言之,
(9-31)
公式 (9-28) 和 公式 (9-29) 中的计算公式表明,S ( A ) 可通过对骨架子集
取并集而获得。
可以证明( Serra[1982] ),A可以基于这些子集进行重建而获得:
(9-32)
其中, 表示始于
的 k 个连续的膨胀;即,
(9-33)

--------------图 9.25:(b) 极大圆盘的各种位置,其中心部分定义了 A 的骨架。(c) 另一个极大圆盘,其中心定义了 A 骨架的不同部分。(d)完整的骨架(虚线)。----------
例子 9.8:计算一个简单集合的骨架。
图 9.26 展示了刚才讨论的概念。第一列显示了原集合(位于顶部)以及图中所示的结构元素 B 的两次侵蚀。注意,再进行一次侵蚀将得到空集,因此本例中 K = 2。第二列显示了第一列集合经 B 开集后的结果。这些结果很容易用图 9.8 中讨论的开集操作的拟合特征 (fitting characterization)来解释。第三列包含第一列和第二列之间的集合差异。因此,第三列中的三个元素分别为 ,
,和
。
第四列包含两个部分骨架,最终结果位于该列底部。最终骨架不仅比所需更粗,更重要的是,它不连通。这一结果并不出乎意料,因为先前的形态学骨架公式中没有任何内容能够保证连通性。形态学通过对给定集合进行侵蚀和开运算,可以得到一个简洁的公式。然而,如果像通常情况一样,骨架必须尽可能细、连通且侵蚀程度最小,则需要使用启发式公式(参见第 11.2 节)。

-------------------图 9.26:公式(9-28)至(9-33)的实现。原数据集位于左上角,其形态骨架位于第四列底部。重构后的数据集位于第六列底部。--------------------------
9.5.8 裁剪( Pruning**)**
**裁剪方法是对薄化和骨架化算法的重要补充,**因为这些过程往往会留下需要通过后处理"清理"的"寄生(parasitic)"成分("分量")。我们首先讨论一个裁剪问题,然后基于前几节介绍的内容提出解决方案。因此,我们借此机会说明如何结合目前讨论过的几种形态学技术来解决一个问题。
在手写字符自动识别中,一种常见的方法是分析字符骨架的形状。这些骨架通常包含一些突起,这些突起是由噪声侵蚀和笔画不均匀造成的。本节将介绍一种形态学方法来解决这个问题,该方法首先假设寄生成分的长度不超过指定的像素数。
图 9.27(a) 展示了手写字母"a"的骨架。字符最左侧的短线正是我们想要去除的部分。解决方案是:通过逐一消除短线的端点来抑制其分支 。当然,这样做也会缩短(或消除)字符中的其他分支,但由于缺乏其他结构信息,本例假设:任何长度不超过三个像素的分支都将消除。通过对集合A进行薄化,并结合一系列旨在仅检测端点的结构元素,即可实现所需的结果。即,令
(9-34)
其中 { B } 表示图 9.27(b) 中的结构单元序列 [关于结构单元序列,请参见公式 (9-24)]。该结构单元序列由两种不同的结构组成,每种结构旋转 90°,总共包含八个单元。图 9.27(b) 中的 × 表示"无关紧要"条件,如前所述。( 注意,每一个结构单元 ( SE ) 都是特定方向上的端点检测器。)
将公式 (9-34) 应用于 A 三次,得到图 9.27(c) 中的集合 。下一步是将特征"恢复"到其原始形式,但要去除寄生分支。这需要我们首先形成一个包含
中所有端点的集合
[图 9.27(e)]:
(9-35)
其中 , 是图 9.27(b) 中的端点探测器。下一步是对端点进行膨胀。通常,膨胀次数少于端点移除次数,以降低"重新生长"一些分支的概率。在本例中,我们通过检查得知没有产生新的分支,因此我们使用 A作为分隔符对端点进行三次膨胀。这与薄化过程的次数相同:
(9-36)
其中 H 是一个 3 × 3 的以为 1 为元素的结构元素,并且在每一步执行之后都应用与 A 取交集。与区域填充的情况类似,这种条件膨胀可以防止在感兴趣区域之外创建值 1 的元素,如图 9.27(e) 所示。最后, 和
的并集
(9-37)
即得到如图 9.27( f ) 所示的预期结果。
在更复杂的场景中,使用公式 (9-36) 有时会捕获到某些分支的"末端"。这种情况可能发生在这些分支的端点靠近骨架时。尽管公式 (9-36) 可能消除它们,但由于它们是 A 中的有效点,因此在膨胀过程中它们可能会再次被捕获。然而,除非再次捕获到整个寄生元素(如果这些元素相对于有效笔画较短,则这种情况很少见),否则检测和消除重建的元素很容易,因为它们是不连续的区域。
此时,我们自然会想到,一定有更简便的方法来解决这个问题。例如,我们可以记录所有被删除的点,然后简单地将相应的点重新连接到应用公式 (9-34) 后剩余的所有端点。这种想法固然没错,但我们刚才提出的方法的优势在于,我们利用了现有的形态学结构来解决问题。当有这样一套工具可用时,优势就在于无需编写新的算法。我们只需将必要的形态学函数组合成一系列操作即可。
有时你会遇到基于单个结构元素的端点探测器,类似于图 9.27(b) 中的第一个结构元素,但它在第一列中设置了"无关"条件,而不是像图 9.27(a) 那样,用前景元素分隔角点"×"。这是不正确的。例如,前者会将图 9.27(a) 中第八行第四列的点识别为端点,从而将其排除并破坏该部分笔画的连接性。

-----------------------------------图 9.27:(a) 前景像素集合 A(阴影部分)。(b)用于删除端点的 SE。(c) 三次薄化循环的结果。(d)(c) 的端点。(e) 基于 (a) 的端点膨胀。( f ) 修剪后的图像。-----------------------------------------------------
9.6. 形态学重建( Morphological Reconstruction**)**
迄今为止讨论的形态学概念都涉及单个图像和一个或多个结构元素。在本节中,我们将讨论一种强大的形态学变换,称为形态学重建,它涉及两个图像和一个结构元素。其中一个图像(即标记 (marker))我们用 F 表示,包含重建的起始点。另一个图像(即掩模 (mask))用 G 表示,用于约束(条件)重建。结构元素用于定义连通性 。(注:在许多关于形态重建的文献中,结构元素 通常默认为各向同性 (isotropic),通常称为基本各向同性结构元素( elementary isotropic structuring element**)**。在本章的语境下,这样一个此类结构元素的例子是一个中心位于原点的 3×3 全 1 阵列 。) 对于二维应用,连通性通常定义为 8 连通,这意味着,其实际上默认是由一个大小为 3 × 3 且所有元素均为 1 的结构元素构成。
9.6.1 测地线之膨胀和侵蚀 ( Geodesic Dilation and Erosion**)**
形态学重建的核心概念是测地线膨胀和测地线侵蚀 。令F 表示标记图像,G 表示掩模图像。在本讨论中,我们假设两者都是二值图像且 。标记图像相对于掩模的大小为 1 的测地线膨胀 ( 记为
) 定义为
(9-38)
其中,照例,符号 ∩ 表示集合之交集( 在这里 ,符号 ∩ 可以解释为逻辑 AND,因为我们正在处理二进制量) 。 F 针对 G 的大小为 n 的测地线膨胀定义为
(9-39)
其中,n ≥ 1 是一个整数,且 。在这个递归表达式中,公式 (9-38) 所示的集合之交集运算在每一步都会执行。( 注:尽管使用递归公式开发形态学重建方法(如本文所述)更为直观,但它们的实际实现通常基于计算效率更高的算法(例如,参见 Vincent [1993] 和 Soille [2003])。9.6 关于连通性,请参见第 2.5 节。 ) 注意,交集运算保证了掩码 G 将限制标记 F 的增长(膨胀)。 图 9.28 展示了一个大小为 1 的测地线膨胀的简单示例。图中的步骤直接实现了公式 (9-38)。注意,标记 F 仅由 G 中对象的一个点组成。其思路是逐步增长(膨胀)该点,并在每一步中用 G 对结果进行掩模运算。继续此过程将产生一个形状受G 结构影响的结果。在这个简单示例中,重建最终将得到与 G 相同的图像(参见图 9.30 )。

-------------图 9.28:图示为大小为 1 的测地线膨胀。请注意,标记图像包含 G 中对象的一个点。如果继续进行后续的膨胀和掩蔽,最终将得到 G 中包含的对象。---------
标记 F 针对模板 G 的大小为 1 的测地线膨胀定义为
(9-40)
其中,∪ 表示集合之并集( 或者逻辑 OR 运算 ) 。F 针对模板 G 的大小为 n 的测地线膨胀定义为
(9-41)
其中,n ≥ 1 是一个整数,且 。公式 (9-40) 中的集合并集在每一个步骤中都会执行,从而保证图像的测地线侵蚀结果始终大于或等于其掩模图像。正如你可能从公式 (9-38) 和 (9-40) 的形式中预期的那样,测地线膨胀和侵蚀关于集合补集是互为对偶的(参见习题 9.41)。图 9.29 展示了一个大小为 1 的测地线侵蚀示例。图中的步骤是公式 (9-40) 的直接实现。
经过有限次迭代后,测地线膨胀和侵蚀会收敛,因为标记图像的传播或收缩受到掩模的约束。

----------------------图 9.29:大小为 1 的测地线侵蚀示意图。-----------------
9.6.2 用膨胀和侵蚀进行形态学重建 ( Morphological Reconstruction by Dilation and by Erosion**)**
基于前面的概念,通过一个标记图像 F 关于一个掩模图像 G 的膨胀的形态学重建( 用 表示 ) 定义为 F 关于 G 的测地线膨胀,其迭代直到达到稳定为止;即,
(9-42)
其中,k 使得 。
图 9.30 例释了用膨胀实现的重建。图 9.30(a) 继续了图 9.28 中开启的这个过程。在获得 之后, 重建过程的下一步是对这个结果进行膨胀,然后再次膨胀的结果与掩模进行 AND 运算而得到
,如此等等。这个过程一直重复执行直到达到稳定为止。分多步执行这个例子会得到
,因此,这幅(能过膨胀实现的形态学)图像由公式
给出,正如公式 (9-42)所示 。这个重建图像等同于掩模,正如预期。

----------------------------图 9.30:图示为膨胀法的形态重建。集合 , B 和 F 取自图 9.28。掩模 ( G) 以虚线显示,仅供参考。------------------------
按类似的一种方式,通过一个标记图像 F 关于一个掩模图像 G 的侵蚀的形态学重建( 用 表示 ) 定义为 F 关于 G 的测地线侵蚀,其迭代直到达到稳定为止;即,
(9-43)
其中,k 使得 。作为练习,生成一个类似于图 9.30 的图形,用于侵蚀形态重建。膨胀和侵蚀重建在集合补集方面是对偶的(参见问题 9.42)。
9.6.3 应用 示例 ( Sample Applications**)**
形态学重建具有广泛的实际应用,其应用范围取决于标记图像和掩模图像的选择、结构元素的选取以及前述讨论中定义的形态学运算的组合。以下示例说明了这些概念的实用性。
9.6.3.1 籍重建开运算( Opening by Reconstruction**)**
在形态学开运算中,侵蚀操作会去除小物体,然后膨胀操作会尝试恢复剩余物体的形状。这种恢复的精度取决于形状的相似性以及所使用的结构元素。重建开运算能够精确地恢复侵蚀后剩余物体的形状。图像 F 的大小为n 的籍重建开运算定义为对 F 针对 F 的大小为 n 的侵蚀之膨胀;即,
(9-44)
其中,F ⊖ n B 用 B 进行的表示始于 F 的 n 个侵蚀,如公式 (9-30) 所定义。注意,F 本身用作掩模。通过将此公式与公式 (9-42) 进行比较,我们发现,公式 (9-44) 表明籍重建开运算使用 F 的一个侵蚀版本作为重建中膨胀使用的标记。
如图 9.31 所示,公式 (9-44) 可以得出一些有趣的结果。通常,公式 (9-44) 中使用的结构元素 B 旨在基于侵蚀提取一些感兴趣的特征。然而,正如本节开头所述,重建中使用的结构元素( 即用于获得 的膨胀操作中的结构元素 )旨在定义连通性,并且对于二维情况,该结构元素通常是一个 3 × 3 的全 1 阵列。重要的是,不要将此结构元素与公式 (9-44) 中用于侵蚀的结构元素 B 混淆。最后,我们指出,该公式最常用于 n = 1 的情况。
图 9.31 展示了一个籍重建开运算的示例。我们感兴趣的是从图 9.31(a) 中提取包含长竖笔的字符。这一目标决定了公式 (9-44) 中 B 的性质。图中这些高竖笔字符的平均高度为 51 像素。通过使用尺寸为 51 × 1 的细长结构元素对图像进行侵蚀,我们应该能够分离出这些字符。图 9.31(b)展示了使用上述结构元素对图 9.31(a) 进行一次侵蚀[公式 (9-44) 中 n = 1 ]的结果。如图所示,高竖笔字符的位置被依次提取出来 。为了进行比较,我们使用相同的结构元素计算了图像的开运算(记住,这是先侵蚀后膨胀)。图 9.31(c) 展示了结果。如前所述,简单地膨胀侵蚀后的图像并不总是能恢复原图像。最后,图 9.31(d) 是使用原图像作为掩模,侵蚀后的图像作为标记,通过膨胀重建原图像的结果。重建中的膨胀操作使用了 1 值 3 × 3 结构元素 ,原因如前所述。由于我们只进行了一次侵蚀,因此接下来的步骤构成了对 F [ 即 ] 的重建开运算(大小为 1),如公式 (9-44) 所示。如图所示,包含长竖笔的字符从侵蚀后的图像(即标记)中被精确地恢复;所有其他字符都被移除。

-------------------------------------图 9.31:(a) 尺寸为 918 × 2018 像素的文本图像。高字符的平均高度约为 51 像素。(b) 使用 51 × 1 个元素(全部为 1值) 的结构元素对 (a) 进行侵蚀。(c) 使用相同的结构元素对 (a) 进行开运算,以作比较。(d) 通过重建得到的开运算结果。----------------------------------------------------
对于籍重建闭运算,可以写出类似于公式 (9-44) 的表达式(参见表 9.1 和习题 9.44)。区别在于,籍重构闭运算使用的标记是 F 之膨胀,并且使用 代替
。如你所见,**重建开运算适用于背景为黑色 (0) 且前景为白色 (1) 的图像。重构闭运算则相反。**例如,如果我们处理的是图 9.31(a) 的补图,则背景为白色,前景为黑色。为了解决提取高字符的问题,我们将使用重建开运算。图 9.31 中的所有其他图像都相同,只是背景为黑底白字。两种情况下使用的结构元素相同,因此重建闭运算将在背景像素上执行。
9.6.3.2 自动填孔算法( Automatic Algorithm for Filling Holes**)**
在第 9.5 节中,我们开发了一种基于已知每个孔洞起始点的孔洞填充算法。这里,我们开发了一种基于形态学重建的全自动程序。令 I (x , y ) 表示二值图像,并假设我们生成一个标记图像 F ,其值除图像边界(border)外均设为 0,在图像边界处设为 1 --I ,即,
(9-45)

则,
(9-46)
是一幅其所有孔洞都被填充的等于 I 的同像。为了理解公式 (9-45) 和 (9-46) 如何填充图像中的孔洞,请参考图 9.32(a) 和 (b),它们分别展示了包含一个孔洞的图像I 及其补图。I 的补图会将所有前景(值为 1)像素转换为背景(值为 0)像素,反之亦然。根据定义,孔洞周围是前景像素。因此,此操作会在孔洞周围构建一个由 0 组成的"墙"。由于 用作 AND 掩码,因此我们实际上是在迭代过程中保护所有前景像素不发生变化。图 9.32(c) 是根据公式 (9-45) 生成的数组 F ,图 9.32(d) 则使用元素值为 1 的 3 × 3 的结构元素 。标记 F 的边界由 1 组成( I 为 1 的位置除外),因此标记点的膨胀从边界开始向内进行。图 9.32(e) 显示了以
为掩模对F 进行测地线膨胀的结果。我们可以看到,结果中所有对应于I 的前景像素的位置现在都变为 0,孔洞像素也是如此。再进行一次迭代将得到相同的结果,根据公式 (9-46) 的要求取反后,即可得到图 9.32( f ) 中的结果。此时孔洞已被填充,图像 I 的其余部分保持不变。如图 9.32(g) 所示,运算
生成一个图像,其中对应于 I 中孔洞位置的像素值为 1,其余位置的像素值为 0。

--------------------------图 9.32:利用形态重建进行孔洞填充。----------------
图 9.33 展示了一个更实际的例子。图 9.33(b) 显示了图 9.33(a) 中文本图像的补集,图 9.33(c) 是使用公式 (9-45) 生成的标记图像 F。该图像整体为黑色,带有白色 (1) 边框,但与原图像边框中 1 对应的位置除外(在所示放大倍数下,边框值不易用肉眼辨别,而且页面几乎是白色的)。最后,图 9.33(d) 显示了填充所有孔洞后的图像。

--------------------------图 9.33:(a) 尺寸为 918 × 2018 像素的文本图像。(b) (a) 的补图,用作掩模图像。(c) 标记图像。(d) 使用公式(9-45)和(9-46)进行孔填充的结果。-----------------------------------------------------------------------
9.6.3.3 边界清除( Border Clearing**)**
**从图像中提取物体以进行后续的形状分析是自动化图像处理中的一项基本任务。检测与图像边界接触(即连接)的物体的算法非常有用,原因在于: (1)它可以用于筛选图像,仅保留完整的物体以供进一步处理;或者,(2) 它可以作为视野中存在部分物体的信号。**作为本节介绍概念的最终示例,我们开发了一种基于形态学重建的边界清除方法。在本应用中,我们使用原图像作为掩模,并使用以下标记图像:
(9-47)

边界清除算法首先计算形态学重建 ( 提取与边界接触的物体 ),然后再计算下列差:
(9-48)
从而获得一幅没有与边界接触的物体之图像 X 。
例如,再次考虑来自图 9.31(a)的原文体图像。图 9.34(a) 展示一幅通过使用元素为 1 的 3 × 3 结构元素而获得的重建 。与原图像边界接触的物体在图 9.34(a) 的右侧可见。图 9.34(b) 显示了使用公式 (9-48) 计算得到的图像 X 。如果任务是自动字符识别,那么拥有一张没有字符与边界相接的图像最为有用,因为这样可以避免仅识别部分字符(这本身就是一项艰巨的任务)的问题。

--------------------------图 9.34:(a) 通过对标记图像进行膨胀重建。(b)图像中没有与边界接触的物体。原图像为图 9.31(b)。--------------------------------------
9.7. 二值图像形态学运算概述( Summary of Morphological Operations on Binary Images**)**
图 9.35 总结了迄今为止讨论的各种二元形态学方法中使用的结构元素类型。阴影元素为前景值(通常在数值数组中用 1 表示),白色元素为背景值(通常用 0 表示),而"×"表示"无关"元素。表 9.1 总结了前几节中得到的二元形态学结果。表 9.1 第三列中的罗马数字对应于图 9.35 中的结构元素。

----------------图 9.35:二元形态学中使用的五种基本结构元素-------------------
表 9.1------二值形态学运算及其属性概述。A 是二值图像I 中包含的前景像素集合,B 是一个结构元素。I 是一个二值图像(包含 A ),其中A 的元素对应 1,其余部分对应 0。罗马数字对应于图 9.35 中的结构元素。(由三个续表组成)



9.8. 灰度图像形态学 ( Grayscale Morphology**)**
在本节中,我们将膨胀、侵蚀、开运算和合运算等基本操作扩展到灰度图像。然后,我们利用这些操作开发几种基本的灰度形态学算法。在接下来的讨论中,我们将处理形如 f ( x , y ) 和b ( x , y ) 的数字函数,其中 f ( x , y ) 是灰度图像,b ( x , y ) 是结构元素。假设这些函数是离散的,其离散性定义见第 2.4 节。即,如果 Z 表示实数集,则坐标 ( x , y ) 是笛卡尔积 中的整数,并且 f ( x , y ) 和 b ( x , y ) 是为每对不同的坐标 ( x , y ) 赋予一个强度值( 实数集 R 中的一个实数) 的函数。如果强度级别也是整数,则用 Z 代替 R。
灰度形态学中的结构元素执行与二值结构元素相同的基本功能:它们用作"探针"来检查给定图像的特定属性 。灰度形态学中的结构元素分为两类:非平坦结构元素和平坦( flat**)结构元素** 。图 9.36 分别展示了这两类结构元素的示例。图 9.36(a) 是一个半球形灰度结构元素,以图像形式呈现;图 9.36(c) 是穿过其中心的水平强度分布图。图 9.36(b) 显示了一个圆盘状的平面结构元素,图 9.36(d) 是其对应的强度分布图。(该分布图的形状解释了"平坦(flat)"一词的由来。) 为了清晰起见,图 9.36 中的元素以连续量的形式呈现;它们的计算机实现基于数字近似。由于本节后面将讨论的一些困难,非平面灰度结构元素在实践中并不常用。最后,我们指出,与二值情况一样,灰度结构元素的原点必须明确标定。 除非另有说明,本节中的所有示例均基于对称的、单位高度的平面结构元素,其原点位于中心。结构元素在灰度形态学中的反射如第 9.1 节所定义;在以下讨论中,我们将其表示为 。

图 9.36:非平坦和平坦的结构单元,以及穿过其中心的相应水平强度分布。本节中的所有示例均基于平坦的结构单元。---------------------
9.8.1 灰度图像之侵蚀和膨胀 ( Grayscale Dilation and Erosion**)**
平坦结构元素 b 在位置 ( x , y ) 处对图像f 进行灰度侵蚀的定义为 :当 b 的原点位于 ( x , y ) 时,与 b ( x , y )重合的区域内图像的最小值。用公式表示,结构元素 b 对图像 f 在 ( x , y) 处的侵蚀为
(9-49)
其中,类似于空间相关性(参见第 3.4 节),x 和 y 的值依次递增,直至 b 的原点遍历 f 中的每个像素。即,为了求出 f 被 b 侵蚀的程度,我们将结构元素的原点放置在图像中的每一个像素位置。任意位置的侵蚀程度由与 b 重合的区域内 f 的最小值确定。例如,若 b 是一个 3 × 3 的正方形结构元素,那么要计算某一点的侵蚀,需要求得当 b 的原点位于该点时 f 的包含于由 b 张成的 3 × 3 区域内的九个值之最小值。
类似地,在任意位置 ( x , y ) 处由一个平坦结构元素b 实现的 f 的灰度膨胀定义为, 当
的原点位于 ( x , y ) 处时由
张成的窗口中的图像的极大值。即,
(9-50)
其中,我们使用了 。该公式的解释与上一段的解释相同,只是使用了极大值运算而非极小值运算,并且需要注意结构元素关于其原点反射,我们在函数的自变量中使用 (-s , -t) 来考虑这一点。这类似于 3.4 节中解释的空间卷积。
例子 9.9:灰度侵蚀和膨胀。
由于使用一个平坦结构元素进行的灰度侵蚀计算出的 f 在 ( x , y ) 的每一个领域内极小强度值与用 b 计算所得值重叠 ,因此我们通常预期侵蚀后的灰度图像会比原图更暗,亮部特征的尺寸(相对于结构元素的大小)会减小,而暗部特征的尺寸会增加。图 9.37(b) 显示了使用高度为 1、半径为 2 像素的圆盘结构元素侵蚀对图 9.37(a) 进行侵蚀的结果。上述效应在侵蚀后的图像中清晰可见。例如,请注意小亮点的强度是如何降低的,以至于它们在图 9.37(b) 中几乎不可见,而暗部特征的厚度则增加了。侵蚀后图像的整体背景比原图的背景略暗。
类似地,图 9.37(c) 是使用相同结构元素值进行膨胀处理的结果。其效果与侵蚀相反。明亮的特征被加粗,而较暗的特征强度则降低。特别是,图 9.37(a) 左下、中下和右下角的细黑连接线在图 9.37(c) 中几乎不可见。由于膨胀,暗点的尺寸减小了,但与图 9.37(b) 中被侵蚀的小白点不同,它们在膨胀后的图像中仍然清晰可见。这是因为相对于 结构元素值而言,黑点原本比白点大。最后,可以观察到膨胀后图像的背景比图 9.37(a) 的背景略亮。

------------------------图 9.37:(a) 尺寸为 448 × 425 像素的灰度 X 射线图像。(b) 使用半径为 2 像素的平面圆盘结构元素进行侵蚀。(c) 使用相同的结构元素进行膨胀。(原图像由 Lixi, Inc. 提供)----------------------------------------------------
非平坦结构元素的灰度值在其定义域内变化。由非平坦结构元素 实现的图像 f 的侵蚀定义为
(9-51)
在这里,我们从 f 中减去一些值来确定任意点的侵蚀量。与公式 (9-49) 不同,使用一个非平坦结构元素实现的侵蚀通常不受 f 值的限制,这可能会导致结果解释困难。由于上述原因,以及在选择有意义的 元素时可能遇到的困难,且与公式 (9-49) 相比计算量更大,因灰度结构元素在实践中很少使用。
按照类似的一种方式,使用一个非平坦结构元素实现的膨胀定义为
(9-52)
前一段中的评论同样适用于具有非平坦结构元素实现的膨胀。当 的所有元素都是常数时(即结构元素是平坦型时),公式 (9-51) 和 (9-52) 分别简化为方程(9-49)和(9-50),其中标量常数等于结构元素的振幅。
同二元情况,灰度侵蚀和膨胀关于互补和反射是互为对偶的;即,
(9-53)
其中, 而
。对于非平坦结构元素,同样的表达式也适用。为了清晰起见,除必了要情况,我们在以下讨论中简化符号,省略所有函数的自变量,此时前面的公式可写成
(9-54)
类似地,
(9-55)
单独使用侵蚀和膨胀操作在灰度图像处理中作用不大。 但与二值图像处理一样,当这些操作组合使用时,就能发挥强大的作用,从而衍生出更高级的算法。
9.8.2 灰度图像之开合运算 ( Grayscale Opening and Closing**)**
灰度图像开合运算的表达式与二值图像的开合运算具有相同的形式。图像 f 籍结构元素 b 的灰度开运算( 表示为 ) 是
(9-56)
照例,开运算只是用 b 对 f 进行侵蚀,然后再用 b 对侵蚀结果进行膨胀。类似地,用 b 对对 f 进行的灰度闭运算( 表示为 f ⦁ b) 是
(9-57)
灰度图像开合运算针对其补集和结构元素反射呈对偶关系:
(9-58)
类似地,
(9-59)
因为 ,我们可以将公式 (9-58) 写为 --( f ⦁ b ) = ( - f ° b) ,对公式 (9-59) 也类似。
灰度图像的开运算和闭运算具有简单的几何解释。假设视图像函数 f ( x , y ) 为一个三维曲面;即,其强度值解释为 xy 平面上的高度值,如图 2.18(a) 所示。则,f 被 b 开运算在几何上可以解释为将结构元素从下方向上推挤到 f 的下表面。在b 的原点处,开运算的值是 b 的任何部分向上推挤到f 的下表面时所达到的最高值。完整的开运算值则是b 的原点访问 f 的每一个 ( x , y) 坐标时所获得的所有此类值的集合。
图 9.38 以一维方式阐释了这一概念。假设图 9.38(a) 中的曲线是图像中单行的强度分布。图 9.38(b) 显示了位于曲线底部几个位置的平坦结构元素。图 9.38(c) 中的粗曲线是完整的开口。由于结构元素太大,无法完全容纳在曲线的上升峰值内,因此开口会截断峰值的顶部,截断量与结构元素能够深入峰值的程度成正比。通常,开口用于去除细小的明亮细节,同时保持整体强度水平和较大的明亮特征相对不受影响。
图 9.38(d) 是图像合运算的示例。请注意,结构元素在平移到所有位置的同时,被向下推到曲线顶部。如图 9.38(e) 所示,合运算是通过找到结构元素沿曲线上侧滑动时所达到的最低点而构建的。灰度开运算满足以下属性:
(a) f ° b ↵f
(b) 若 ↵
, 则
↵
(c) ( f ° b ) ° b =f ° b
符号 q ↵ r 用于表明 q 的域(domain) 是 r 域的一个子集,且同样表明,对于 q 的域内的任意 ( x , y ),有 q ( x , y ) ≤ r ( x , y ) 。
类似地,合运算满足下列属性:
( a ) f ↵f ⦁ b
(b) ↵
, 则
↵
( c ) ( f ⦁ b ) ⦁ b =f ⦁ b
这些属性的用途与它们的二值图像的对应形式类似。

--------图 9.38:一维灰度开合运算。(a) 原一维信号。(b) 平坦结构元素向上推至信号下方。(c) 开运算。(d) 平坦结构元素沿信号顶部向下推。(e) 闭合运算。---------
例子 9.10:灰度开合运算。
图 9.39 将图 9.38 中所示的一维概念扩展到了二维。图 9.39(a) 是我们在例 9.9 中使用的同一幅图像,图 9.39(b) 是使用单位高度、半径为 3 像素的圆盘结构元素进行开运算的结果。正如预期的那样,所有明亮特征的强度都降低了,降低的程度取决于特征相对于结构元素大小的比例。将此图与图 9.37(b) 进行比较,我们可以看到,与侵蚀的结果不同,开运算对图像的暗部特征的影响可以忽略不计,对背景的影响也可以忽略不计。类似地,图 9.39(c) 显示了使用半径为 5 的圆盘对图像进行闭运算的结果(小的黑色圆点比小的白色圆点大,因此需要更大的圆盘才能获得与开运算相当的结果)。在这张图像中,明亮的细节和背景相对不受影响,但暗部特征被削弱了,削弱程度取决于特征相对于结构元素的相对大小。

----------图 9.39:(a) 尺寸为 448 × 425 像素的灰度 X 射线图像。(b) 使用半径为 3 像素的圆盘 SE 进行开运算。(c)使用半径为 5 像素的 SE 进行闭合运算。-----------
9.8.3 一些基本 灰图像形态学算法 ( Some BasicGrayscale Morphological Algorithms**)**
许多灰度形态学技术都基于目前介绍的灰度形态学概念。我们将在下文中阐述其中的一些算法。
9.8.3.1 形态学平滑( Morphological Smoothing**)**
由于开运算会抑制小于指定 SE 的明亮细节,而对暗细节的影响相对较小,而闭合运算通常则相反,因此这两种操作经常结合使用,作为形态学滤波器进行图像平滑和去噪。图 9.40(a)展示了天鹅座环状超新星在 X 射线波段拍摄的图像(有关该图像的详细信息,请参见图1.7)。为了便于讨论,假设中心明亮区域是感兴趣的目标,而较小的成分是噪声。我们的目标是去噪。图 9.40(b)展示了使用半径为 1 的平坦圆盘对原图像进行开运算,然后用相同大小的 SE 对开运算进行闭合运算的结果。图 9.40(c)和(d)分别展示了使用半径为 3 和 5 的 SE 进行相同操作的结果。正如预期,该序列显示了随着 SE 大小的增加,小成分逐渐去除。在最后一个结果中,我们可以看到噪声几乎已消除。图像右下角的噪声成分无法完全去除,因为它们的尺寸比其他已成功去除的图像元素要大。
图 9.40 的结果基于对原始图像进行开运算,然后再对开运算结果进行闭运算。有时采用交替顺序滤波的方法,即开运算和闭运算序列从原图像开始,但后续步骤则对前一步的结果进行开运算和闭运算。这种滤波方法在自动图像分析中非常有用,因为每一步的结果都会与指定的指标进行比较。与图 9.40 所示的方法相比,这种方法在相同尺寸的 SE 下通常会导致更严重的图像模糊。

------------------------图 9.40:(a) 天鹅座环状超新星的 566×566 像素图像,由NASA 哈勃望远镜在 X 射线波段拍摄。(b)-(d) 分别使用半径为 1, 3 和 5 的圆盘结构元素对原图像进行开运算和合运算后的结果。(原图像由 NASA 提供。)---------------
9.8.3.2 形态学梯度运算( Morphological Gradient**)**
膨胀和侵蚀可以与图像相减结合使用,以获得灰度图像 f 的形态梯度 g ,如下所示:
(9-60) g = ( f ⊕b ) -- ( f ⊖b)
其中,b 是一个合适的结构元素。使用该公式的总体效果是,膨胀会使图像中的某些区域增厚,而侵蚀会使这些区域缩窄。它们的差会突出区域之间的边界 。均匀区域不受影响(前提是膨胀系数相对于图像分辨率不太大),因此减法运算会将其消除。最终结果是得到一幅边界增强、均匀区域影响减弱的图像,从而产生类似导数(梯度)的效果。
图 9.41 展示了一个示例。图 9.41(a) 为头部 CT 扫描图像,接下来的两幅图分别展示了使用 3 × 3 平面 SE(值为 1)进行扫描后的开场和闭场过程。请注意前面提到的增厚和缩窄现象。图 9.41(d) 是使用公式 (9-60) 计算得到的形态梯度图。如图所示,各区域之间的边界清晰可见,这与二维导数图像的预期结果一致。

------------------------图 9.41:(a) 头部 CT 扫描的 512×512 图像。(b) 膨胀。(c) 侵蚀 。( d ) 形态梯度,计算方法为(b)与(c)之差。(原图由范德比尔特大学(Vanderbilt University)的 David R. Pickens 博士提供。) ---------------------------
9.8.3.3 顶帽和底帽变换( Top-Hat and Bottom-Hat Transformations**)**
将图像相减与开合运算相结合,可以得到所谓的顶帽变换和底帽变换。灰度图像f 的顶帽变换定义为 f 减去其开运算:
(9-61)
类似地,f 的底帽变换定义为 f 的合运算减去 f :
(9-62)
这些变换的主要应用之一是通过在开运算或闭合运算中使用与待移除对象不匹配的结构元素来从图像中移除对象。然后进行差集运算,即可得到仅保留被移除对象的图像。顶帽变换用于处理深色背景上的浅色对象,而底帽变换则用于处理相反的情况。因此,在提及这两种变换时,人们经常分别使用"白顶帽(white top-hat)"和"黑顶帽(black bottom-hat)"这两个名称。
顶帽变换的一个重要用途是校正非均匀光照的影响。正如你将在第 10 章中了解到的,适当的(均匀的)光照对于从图像背景中提取目标物体至关重要。这一过程是自动图像分析的基础,并且通常与阈值分割结合使用,你也将在第 10 章中学习到这一点。
为了说明这一点,请看图 9.42(a),图中显示了一粒粒米的图像。该图像是在光照不均匀的情况下拍摄的,图像右下角的暗区就证明了这一点。图 9.42(b) 显示了使用 Otsu 阈值分割法的结果,Otsu 阈值分割法是一种将在 10.3 节中讨论的最优阈值分割方法。光照不均匀导致暗区(一些米粒未能从背景中提取出来)以及图像左上角(部分背景被误判为米粒)出现了分割错误。图 9.42(c) 显示了用半径为 40 的圆盘对图像进行开运算的结果。这个开运算区域足够大,无法容纳任何物体。因此,物体被剔除,只留下背景的近似值。图中阴影图案清晰可见。通过从原图中减去该图像(即应用顶帽变换),背景应该会变得更加均匀。如图 9.42(d) 所示,情况确实如此。背景并非完全均匀,但明暗极端之间的差异较小,这足以获得正确的阈值分割结果,从而使用 Otsu 方法正确提取出所有米粒,如图 9.42(e) 所示。

--------------------图 9.42:使用顶帽变换进行阴影校正。(a) 原图像,大小为 600 × 600 像素。(b) 阈值化后的图像。(c) 使用半径为 40 的圆盘 SE 进行开运算后的图像。(d) 顶帽变换(图像减去其开运算)。(e) 阈值化后的顶帽变换图像。--------------
9.8.3.4 粒度分析( Granulometry**)**
在本文中,粒度分析学是研究图像中颗粒尺寸分布的学科 。颗粒很少能完全分离,这使得基于识别单个颗粒的计数变得十分困难。形态学可以用来间接估计颗粒尺寸分布,而无需识别和测量单个颗粒。
该方法很简单。对于形状规则且比背景更亮的粒子,该方法通过应用尺寸递增的开运算来实现。其基本思想是,特定尺寸的开运算应该对输入图像中包含相似尺寸粒子的区域产生最大的影响。对于每一个开运算后的图像,我们计算像素值的总和。这个总和称为表面积,它会随着尺寸递增而减小,因为正如我们之前讨论的,开运算会降低图像中光特征的强度。这个过程会生成一个一维数组,数组中的每个元素都是对应尺寸为该位置的开运算中像素值的总和。为了突出连续开运算之间的变化,我们计算一维数组中相邻元素之间的差异。如果将这些差异绘制成图,图中的峰值就指示了图像中粒子的主要尺寸分布。
例如,考虑图 9.43(a) 中两种主要尺寸的木榫(sǔn)(dominant)图像。木榫的木纹可能会在开口处引入变化,因此平滑处理是一个合理的预处理步骤。图 9.43(b) 显示了使用前面讨论过的形态学平滑滤波器进行平滑处理后的图像,平滑圆盘半径为 5 。图 9.43(c) 至 ( f ) 分别显示了使用半径为 10,20,25 和 30 的平滑圆盘进行图像开运算的结果。请注意,在图 9.43(d) 中,小木榫造成的强度贡献几乎消除。在图 9.43(e) 中,大木榫的贡献显著降低,而在图 9.43( f ) 中则降低得更多。如图 9.43(e) 所示,图像右上角附近的大木榫颜色比其他木榫深得多,因为它的尺寸比其他较大的木榫要小。如果我们试图检测有缺陷的木榫,这将是一个有用的信息。

----------------------图 9.43:(a) 531 × 675 像素的木榫(sǔn)图像。(b) 平滑处理后的图像。(c) 至 ( f ) 分别为 (b) 中半径为 10,20,25 和 30 像素的圆盘开运算。(原图由 MathWorks 公司的 Steve Eddins 博士提供。)----------------------------------
图 9.44 显示了差分阵列(difference array)的示意图。如前所述,我们预期在 SE 足够大以包含一组直径大致相同的粒子时,半径附近会出现显著差异(图中的峰值)。图 9.44 中的结果有两个明显的峰值,清楚地表明图像中存在两种主要物体尺寸。

----------------------图 9.44:表面积随 SE 圆盘半径r 的变化而变化。两个峰值表明图像中存在两种主要的颗粒尺寸。---------------------------------------------
9.8.3.5 纹理分割( Textural Segmentation**)**
图 9.45(a) 显示了一张噪声图像,图像中深色斑点叠加在浅色背景上。该图像包含两个纹理区域:右侧区域由较大的斑点组成,左侧区域由较小的斑点组成。目标是根据纹理内容找到这两个区域之间的边界,在本例中,纹理内容由斑点的大小和空间分布决定(我们将在第 11 章讨论纹理)。将图像分割成多个局部区域的过程称为图像分割,这是第 10 章的主题。
目标物体比背景更暗,我们知道,如果用一个比小斑点更大的结构元素来闭合图像,这些小斑点就会被移除。图 9.45(b) 的结果(使用半径为 30 像素的圆盘闭合输入图像得到)证实了这一点。(小斑点的半径约为 25 像素。) 因此,此时我们得到一幅图像,其中浅色背景上分布着较大的深色斑点。如果我们用一个相对于这些斑点间距较大的结构元素来打开这幅图像,最终结果应该是:斑点之间的浅色区域被移除,只留下深色斑点,以及这些斑点之间原本存在的深色区域。图 9.45(c) 显示了使用半径为 60 像素的圆盘得到的结果。
对该图像进行形态学梯度运算,例如使用值为 1 的 3 × 3 结构元素,即可得到两个区域之间的边界。图 9.45(d) 显示了通过形态学梯度运算得到的边界,并将其叠加在原图像上。边界右侧的所有像素都属于以大斑点为特征的纹理区域,反之亦然。结合图 9.38 中所示的开合运算的图形类比,更详细地分析这个例子会很有帮助。

----------------------------图 9.45:纹理分割。(a) 一张 600 × 600 像素的图像,包含两种类型的斑点。(b) 通过闭合运算去除 (a) 中的小斑点后的图像。(c) 通过开运算去除 (b) 中大斑点之间的浅色斑块后的图像。(d) 原图像,叠加了 (c) 中两个区域之间的边界。该边界是使用形态学梯度获得的。---------------------------------------
9.8.3.6 纹理分割( Grayscale Morphological Restruction**)**
灰度形态学重建的定义与第 9.6 节中针对二值图像的定义相同。令f 和 g 分别表示标记图像和掩模图像。我们假设两者都是相同大小的灰度图像,并且 f ≤ g ,这意味着 f 在图像中任意一点的强度都小于g 在该点的强度。f 关于 g 的大小为 1 的测地线膨胀定义为
(9-63)
其中,符号 ⋀ 表示逐点极小算子 (point-wise minimum operator),其中 b 是一个合适的结构元素。我们看到,大小为 1 的测地线膨胀是通过以下方式获得的:首先计算 f 相对于 b 的膨胀,然后在每一个点 ( x , y ) 处选择结果与 g 之间的极小值。若 b 是一个平坦的结构元素,则膨胀由公式 (9-50) 给出;否则,则由公式 (9-52) 给出。
f 关于 g 的大小为 n的测地线膨胀定义为
(9-64)
其中, 。
类似地,f 关于 g 的大小为 1 的测地线侵蚀定义为
(9-65)
其中,符号 ⋁ 表示表示逐点极大算子 (point-wise maximum operator)。f 关于 g 的大小为 n的测地线侵蚀定义为
(9-66)
其中, 。
通过一个灰度标记图像 f 实现的籍一个灰度掩模图像 g 的膨胀形态学重建( 表示为 ) 定义为 f 关于 g 的测地线膨胀,其迭代直至达到稳定;即 ,
(9-67)
其中,k 满足公式 。类似地,由 f 实现的籍 g 侵蚀的形态学重建 ( 表示为
) 定义为
(9-68)
其中,k 满足公式 。
与二值图像的情况类似,灰度图像的重建开运算首先对输入图像进行侵蚀,并将其用作标记,然后使用图像本身作为掩模。图像 f 的大小为 n 的重建开运算定义为 f 的大小为 n 的侵蚀图像相对于 f 的膨胀之重建;即,
(9-69)
其中,f ⊖nb 表示用 b 进行的始于 f 的 n 个连续的侵蚀,如公式 (9-30) 所述(注意 f 本身用作掩模 )。此外,回顾公式 (9-44) 对二值图像的讨论,重建开运算的目标是保持侵蚀后剩余图像分量的形状。
类似地,由一幅图像 f 的大小为 n 的重建实现的闭合运算定义为,籍 f 的大小为 n 的膨胀关于 f 的侵蚀之重建,即,
(9-70)
其中, f ⊕nb 表示用 b 进行始于 f 的 n个连续膨胀。由于对偶性,图像的重建闭运算可以通过对图像取补、得到重建开运算以及对结果取补来获得。最后,如下例所示,一种称为重建顶帽变换的实用技术是通过从图像中减去其重建开运算得到的。
例子 9.11:利用灰度形态重建来简化复杂背景。
在这个例子中,我们将分几个步骤演示灰度重建的应用。目标是对图 9.46(a) 中不规则的背景进行归一化,只保留背景强度恒定的文本。该问题的解决方案很好地展现了灰度形态学的强大功能。首先,我们抑制按键顶部的水平反射。这些反射比图像中的任何单个字符都要宽,因此我们可以通过在侵蚀操作中使用一条较长的水平线来进行重建开运算来抑制它们。此操作将得到包含按键及其反射的背景。从原图像中减去该背景(即进行重建的顶帽运算)将消除原图像中的水平反射和背景变化。
图 9.46(b) 显示了使用 1 × 71 像素的水平线作为侵蚀操作中的 SE 进行原图像重建开运算的结果。我们可以使用开运算来去除字符,但得到的背景不会像图 9.46(c) 中那样均匀(比较两幅图像中键之间的区域)。图 9.46(d) 显示了从图 9.46(a) 中减去图 9.46(b) 的结果。正如预期的那样,水平反射和背景变化被抑制了。为了进行比较,图 9.46(e) 显示了仅执行顶帽变换(即从图像中减去"标准"开运算)的结果。正如从图 9.46(c) 的背景特征所预期的那样,图 9.46(e) 中的背景远不如图 9.46(d) 中的背景均匀。
下一步是去除按键边界的垂直反射,如图 9.46(d) 所示。我们可以通过对图 9.46( f ) 进行重建开运算来实现这一点,使用一条宽度与反射宽度大致相等(本例中约为 11 像素)的线段 SE 。图 9.46( f ) 显示了对图 9.46(d) 进行此操作的结果。垂直反射被抑制了,但一些有效的细垂直笔画(例如 SIN 中的 I )也被抑制了,因此我们需要找到一种方法来恢复这些笔画。被抑制的字符与其他字符非常接近,因此,如果我们水平膨胀剩余的字符,膨胀后的字符将覆盖之前被抑制字符占据的区域。图 9.46(g) 是通过使用大小为 1 × 21 个元素的线段 SE 对图 9.46( f ) 进行膨胀得到的,结果表明确实如此。
剩下的工作就是恢复被抑制的字符。考虑这样一幅图像:它是图 9.46(g) 中膨胀图像与图 9.46(d) 中重建得到的顶帽图像之间逐点取最小值形成的。图 9.46(h) 显示了极小值图像(尽管这个结果看起来已经接近我们的目标,但请注意 SIN 中的 I 仍然缺失)。通过将该图像作为标记,并将膨胀图像作为掩模进行灰度重建 [公式 (9-67)],我们得到了图 9.46(i) 中的最终结果。该图像表明,所有字符都已从原始的不规则背景中正确提取出来,包括按键的背景。图 9.46(i) 中的背景是均匀的。

-----------------------图 9.46:(a) 原图像,尺寸为 1134 × 1360 像素。(b) 对 (a) 进行重建开运算,侵蚀过程中使用由一条 71 像素长的水平线构成的结构元素。(c) 对 (a) 进行开运算,使用相同的结构元素。(d) 通过重建进行顶帽变换。(e) 仅应用顶帽变换的结果。( f ) 对 ( d ) 进行重建开运算,使用一条 11 像素长的水平线。( g ) 对 ( f ) 进行膨胀运算,使用一条 21 像素长的水平线。(h) (d) 和 (g) 的最小值。(i) 最终重建结果。(图像由 MathWorks 公司的 Steve Eddins 博士提供。)---------------