0. 形态学处理所解决的问题

对图像进行分析时,往往是把图像进行分割,并用其二值图像进行分析,对二值图像首先要提取目标物,然后对不同目标物的特征差异进行描述与计算,最后获得所需要分析的结果

在提取目标物的过程中存在以下难题:

  1. 提取的目标中存在伪目标
  2. 在多目标的情况下存在粘连和断裂
  3. 多个目标形态不同

1 膨胀与腐蚀运算

要解决上述问题,就需要运用数学形态学的一些方法,腐蚀与膨胀是形态学处理的基础,许多形态学算法都是在这两种运算的基础上进行拓展的。

1.1 膨胀运算
1.1.1 定义

集合 A A A被集合 B B B膨胀,定义为: A ⊕ B = {   z ∣ ( B ^ ) z ∩ A ≠ ∅   } A\oplus B=\{\ z|(\hat B)_z\cap A\neq\varnothing\ \} AB={ z(B^)zA= }其中集合 B B B也称为结构元素; ( B ^ ) z (\hat B)_z (B^)z表示 B B B的反射平移 z z z后得到的新集合

于是该定义式解释为:若 ( B ^ ) z (\hat B)_z (B^)z能击中 A A A,则其所有 z z z点组成的集合称为 A A A B B B的膨胀

实例:
在这里插入图片描述

1.1.2 不同结构元素对原始图像的影响

不同结构元素长宽的设计会使原图像膨胀后的形态各不相同,例如下图展示了长宽分别为 d 4 × d 4 \frac{d}{4}×\frac{d}{4} 4d×4d d × d 4 d×\frac{d}{4} d×4d的结构元素对原始图像进行膨胀运算后的结果:
在这里插入图片描述

1.1.3 应用场景

膨胀运算的一些经典应用:
1.1.3.1 桥接裂缝
在这里插入图片描述
1.1.3.2 填充孔洞
在这里插入图片描述

1.2 腐蚀运算
1.2.1 定义

集合 A A A被集合 B B B腐蚀,定义为: A ⊖ B = {   z ∣ ( B ) z ⊆ A   } A\ominus B=\{\ z|(B)_z\subseteq A\ \} AB={ z(B)zA }其中集合 B B B也称为结构元素; ( B ^ ) z (\hat B)_z (B^)z表示 B B B平移 z z z后得到的新集合

于是该定义式解释为:若 ( B ) z (B)_z (B)z仍包含于 A A A中,则其所有 z z z点组成的集合称为 A A A B B B的腐蚀

腐蚀的结果表现在原图的外围被剥除:
在这里插入图片描述

1.2.2 不同结构元素对原始图像的影响

不同结构元素长宽的设计会使原图像腐蚀后的形态各不相同,例如下图展示了长宽分别为 d 4 × d 4 \frac{d}{4}×\frac{d}{4} 4d×4d d × d 4 d×\frac{d}{4} d×4d的结构元素对原始图像进行腐蚀运算后的结果:
在这里插入图片描述这里要注意的是,若结构元素 B B B是对称的,即 B ^ = B \hat B=B B^=B,则原图 X X X B B B B ^ \hat B B^腐蚀的结果一样;若结构元素 B B B是非对称的,则原图 X X X B B B B ^ \hat B B^腐蚀的结果不同

1.3 膨胀与腐蚀运算的性质
1.3.1 对偶性

膨胀与腐蚀运算可以相互转换,对目标进行膨胀就是对背景进行腐蚀,反之同理
( X ⊖ B ) ∁ = X ∁ ⊕ B ^ ∁ (X\ominus B)^{\complement}=X^\complement\oplus\hat B^\complement (XB)=XB^ ( X ⊕ B ) ∁ = X ∁ ⊖ B ^ ∁ (X\oplus B)^{\complement}=X^\complement\ominus\hat B^\complement (XB)=XB^

1.3.2 互换性

膨胀运算具有互换性,即结构元素对原图进行操作的顺序可以互换,但腐蚀运算不具有互换性
( X ⊕ B 1 ) ⊕ B 2 = ( X ⊕ B 2 ) ⊕ B 1 (X\oplus B_1)\oplus B_2=(X\oplus B_2)\oplus B_1 (XB1)B2=(XB2)B1 ( X ⊖ B 1 ) ⊖ B 2 ≠ ( X ⊖ B 2 ) ⊖ B 1 (X\ominus B_1)\ominus B_2\neq (X\ominus B_2)\ominus B_1 (XB1)B2=(XB2)B1

1.3.3 组合性

若结构元素可分解,即有 B = B 1 + B 2 B=B_1+B_2 B=B1+B2,则有: X ⊕ B = X ⊕ ( B 1 ⊕ B 2 ) = ( X ⊕ B 1 ) ⊕ B 2 X\oplus B=X\oplus(B_1\oplus B_2)=(X\oplus B_1)\oplus B_2 XB=X(B1B2)=(XB1)B2在结构元素较大时可以将之分解以提高运算速度

2 开运算与闭运算

膨胀与腐蚀运算对目标物的后期处理有非常好的作用,但同时却改变了原目标的大小。考虑到膨胀与腐蚀是一对对偶运算,将膨胀与腐蚀运算相结合,便构成了开运算与闭运算

2.1 开运算

使用结构元素 B B B对集合 X X X进行开运算,定义为: A ∘ X = ( A ⊖ B ) ⊕ B A\circ X = (A\ominus B)\oplus B AX=(AB)B常见应用:

  1. 消除细小对象
  2. 消除微小连粘
  3. 平滑目标边缘

例如:
在这里插入图片描述
在进行开运算的过程中需要注意的是,若结构元素 B B B非对称,则做膨胀运算时应用 B B B的对称集 B ^ \hat B B^,否则开运算结果将发生平移

2.2 闭运算

使用结构元素 B B B对集合 X X X进行闭运算,定义为: A ∙ X = ( A ⊕ B ) ⊖ B A\bullet X = (A\oplus B)\ominus B AX=(AB)B常见应用:

  1. 填充对象内部细小空洞
  2. 连接邻近对象
  3. 平滑目标边缘

例如:
在这里插入图片描述

同样的,若结构元素 B B B非对称,则做膨胀运算时应用 B B B的对称集 B ^ \hat B B^,否则闭运算结果将发生平移

2.3 开闭运算的性质
2.3.1 对偶性

开闭运算可以相互转换,对目标进行开运算就是对背景进行闭运算,反之同理 OPEN ( X ) ∁ = CLOSE ( X ∁ ) \text{OPEN}(X)^\complement=\text{CLOSE}(X^\complement) OPEN(X)=CLOSE(X) CLOSE ( X ) ∁ = OPEN ( X ∁ ) \text{CLOSE}(X)^\complement=\text{OPEN}(X^\complement) CLOSE(X)=OPEN(X)

2.3.2 开运算性质
  1. 缩小性: X ∘ B X\circ B XB X X X的子集
  2. 单增性:若 X 1 X_1 X1 X 2 X_2 X2的子集,则 X 1 ∘ B X_1\circ B X1B X 2 ∘ B X_2\circ B X2B的子集
  3. 单运算性: ( X ∘ B ) ∘ B = X ∘ B (X\circ B)\circ B = X\circ B (XB)B=XB
2.3.3 闭运算性质
  1. 扩大性: X X X X ∙ B X\bullet B XB的子集
  2. 单增性:若 X 1 X_1 X1 X 2 X_2 X2的子集,则 X 1 ∘ B X_1\circ B X1B X 2 ∘ B X_2\circ B X2B的子集
  3. 单运算性: ( X ∙ B ) ∙ B = X ∙ B (X\bullet B)\bullet B = X\bullet B (XB)B=XB
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐