学习数字图像处理(7)——形态学处理
7.1 什么是形态学
二值图像的形态学处理是图像处理中的一种技术,主要用于处理二值图像,即图像中的像素值只有两种可能:通常是0(代表背景)和1(或255,代表前景)。形态学处理依赖于图像中形状的基本数学运算,是基于集合论的一种图像分析方法。
形态学处理的基本操作主要有四种:
-
腐蚀(Erosion)
腐蚀操作会使图像中的物体边界收缩,可以去除小且无意义的物体。在二值图像中,腐蚀通常用一个结构元素来扫描图像的每一个像素,只有当结构元素内的所有像素都是1时,原始图像中的对应中心像素才被保留。 -
膨胀(Dilation)
与腐蚀相反,膨胀操作使物体边界扩张。膨胀同样使用结构元素来扫描图像,但只要结构元素内有一个像素是1,原始图像中的中心像素就会被设置为1。膨胀可以用来填补物体中的小洞或连接邻近的物体。 -
开运算(Opening)
开运算是先腐蚀后膨胀的过程,它可以去除小物体或细长的突出部分,同时保持较大物体的大小基本不变。在去噪声和平滑边界的同时,不会明显改变图像的面积。 -
闭运算(Closing)
闭运算是先膨胀后腐蚀的过程,它可以填补小的孔洞和断裂,同时保持较大物体的形状和大小。这种操作通常用于桥接小的间隙。
这些基本操作可以组合使用,解决各种图像处理问题,如噪声去除、边界提取、图像分割、形状识别等。形态学处理是一种强大的工具,特别适用于解决涉及物体形状的问题。
在实际应用中,选择合适的结构元素(形状和大小)对于得到好的处理效果至关重要。结构元素定义了操作的本地邻域,不同的结构元素会导致不同的处理结果。
7.2 图像腐蚀和图像膨胀
图像腐蚀
图像腐蚀(Erosion)是数学形态学中的一个基本操作,它用于缩小或者减少图像中的前景物体。在二值图像中,腐蚀可以看作是将图像中的白色区域(通常代表前景)边缘“蚕食”掉一层。这个操作在实际应用中常用于去除小的噪点、断开相邻物体和使边界更加平滑。
腐蚀操作的基础是结构元素(或称核),它是一个定义了邻域形状的小窗口或模板。结构元素可以有多种形状,如矩形、正方形、圆形等,其大小和形状会影响腐蚀的结果。
二值图像腐蚀的过程如下:
-
确定结构元素的形状(例如正方形3x3)和大小,以及结构元素的原点(通常是结构元素的中心点)。
-
将结构元素的原点与二值图像的每一个前景像素(值为1)对齐。
-
对于结构元素覆盖的区域,检查结构元素内的所有像素是否都是前景像素(值为1)。
-
如果结构元素内的所有像素都是前景像素,那么保留原点位置的像素值为1;如果有任何一个像素不是前景像素(值为0),那么原点位置的像素值设为0。
-
将结构元素移至图像的下一个像素位置,重复步骤3和4,直到处理完整个图像。
腐蚀操作的效果是:图像中的小物体可能会被完全移除,物体的边缘会向内收缩,且相邻的物体可能会被分开。腐蚀也可以被视为一种“最小值”滤波器,因为它取覆盖区域的最小值(如果结构元素内包含任何0,结果就是0)。
图像膨胀
图像膨胀(Dilation)是数学形态学中的另一个基本操作,它与腐蚀操作相对。膨胀操作通常用于增加图像中前景物体的尺寸,填充前景物体中的小孔,以及连接靠近的物体。在二值图像处理中,膨胀可以看作是将图像中的白色区域(前景)边缘向外扩展。
膨胀操作同样依赖于一个结构元素来定义邻域的大小和形状。膨胀的过程可以这样描述:
-
选择一个结构元素,它可以是任何形状,如圆形、矩形等,结构元素的中心通常被定义为原点。
-
将结构元素的原点与图像中的每一个像素对齐。
-
对于结构元素覆盖的区域,如果结构元素内的任何一个位置对应图像上的前景像素(值为1),则将原点的像素值设为1。
-
将结构元素移至图像的下一个像素位置,重复步骤3,直到遍历整个图像。
膨胀操作的效果是增加了图像中前景物体的尺寸,可能会填充物体中的小孔,并可能将接近的物体连接起来。在二值图像中,膨胀可以被视为一种“最大值”滤波器,因为它取覆盖区域的最大值(如果结构元素内包含任何1,结果就是1)。
应用:边界提取
先对二值图像进行腐蚀,然后用原图减去腐蚀后的二值图像。
7.3 图像的开启和闭合
图像的开运算(Opening)和闭运算(Closing)是两种基本的形态学操作,它们都是通过结合腐蚀和膨胀操作来实现的。这些操作对于消除噪声、平滑物体的边界以及分离和连接物体等图像处理任务非常有用。
图像开运算(Opening)
开运算是先腐蚀后膨胀的过程。这个操作对于去除小的物体或噪点(即消除前景中的小岛屿),同时保持较大物体的形状和大小非常有效。开运算可以平滑较大物体的轮廓,断开狭窄的连接点,并消除细小的 protrusions。
在数学上,开运算可以表示为:
其中 A 是原始图像,B 是结构元素,\ominus 表示腐蚀操作,\oplus 表示膨胀操作。
开运算降噪:
如图,图像中的噪点被很好的滤除。但是还会一些小裂隙需要用到闭运算进行处理。
图像闭运算(Closing)
闭运算是先膨胀后腐蚀的过程。这个操作对于填充前景物体中的小孔和小裂缝非常有效,同时也能保持物体的主要形状。闭运算可以平滑物体的轮廓,而不显著改变其面积,这对于连接靠近的物体和填充物体内部的小洞非常有用。
在数学上,闭运算可以表示为:
其中 A 是原始图像,B 是结构元素,\oplus 表示膨胀操作,\ominus 表示腐蚀操作。
闭运算修空隙:
如图,之前开运算操作过的图像再次进行闭运算,空隙被修复。
7.4 连通分量的提取
连通分量提取是一种图像分析技术,用于识别图像中的单独的连通区域,即一组相互连接的像素点。在二值图像中,连通分量通常指的是前景像素的集合,这些像素在图像的某种邻接性(通常是4邻接或8邻接)下是相连的。
数学上,连通分量可以定义如下:
给定一个二值图像 I,我们可以将其看作是一个图 G = (V, E),其中 V 是图像中的像素点集合,E 是像素点之间的邻接关系集合。在4-邻接中,一个像素点只与其上下左右的像素点相邻接;在8-邻接中,一个像素点还与其对角线方向的像素点相邻接。
一个连通分量 C 是集合 V 的一个子集,满足以下条件:
-
内部连通性: 对于 C 中的任意两个像素 p 和 q,存在一个像素序列 p_1, p_2, ..., p_n 使得 p_1 = p,p_n = q,并且对于所有的 i,p_i 和 p_{i+1} 在 E 中是相邻的。
-
最大性: C 是最大的,即不存在包含 C 并且具有更多元素的连通分量。
-
外部不连通性: 对于 C 中的任意像素 p 和 V 中不在 C 中的任意像素 s,p 和 s 在 E 中不是相邻的。
在图像处理中,连通分量的提取通常包括以下步骤:
-
图像二值化: 将图像转换为二值图像,确定前景和背景。
-
连通分量标记: 扫描二值图像,为前景的连通像素分配标签。这通常是通过两次扫描算法完成的:
- 第一次扫描:检查每个像素的邻居,如果是前景像素,则根据邻居的标签赋予一个标签。如果邻居间有冲突(即来自不同连通分量的邻居被错误地认为是同一个连通分量的一部分),则记录这些冲突。
- 第二次扫描:解决第一次扫描中发现的标签冲突,确保每个连通分量具有唯一的标签。
-
后处理: 可能需要根据连通分量的大小、形状或其他属性进行过滤或分类。
连通分量的识别和标记可以视为一个图遍历问题,其中图的节点是像素点,边是基于像素邻接性的连接。在这个意义上,连通分量提取类似于图论中的深度优先搜索(DFS)或广度优先搜索(BFS)算法。
评论区