数学形态学及其二值运算

数学形态学

  • 数学形态学是一种定性分析图片空间结构的方法,主要用来分析对象的形状和结构。
  • 数学形态学方法最初用来分析地理图像或者生物医学图像,但是因为其强大的功能,成为了许多学术和行业团体分析图像的主要方法之一。
  • 形态学方法在图像邻域有如下应用:


结构化要素

  • 形态学分析中的结构化要素可以认为是跟卷积中的kernel有着同样的作用,为了跟卷积中的kernel进行区分,简称为SE,与kernel不同的是,kernel一般以图像的中心为原点,而SE可以以任意一点为原点,所以SE具有一定的方向性。
  • 一般来说,SE基于图像的原点(original)平移图像每个像素的位置。

几何平移

将一个几何A平移x个单位,可以描述为:
A+x = \{ A+x: a \in A\}

二值膨胀(Binary Dilation)

二值膨胀,也被称为 Minkowski 加法,图像F经由SE进行膨胀化的操作可以被定义为:
D(F,K)= F \oplus K = \bigcup_{b \in K}({a+b| a \in F})
二值膨胀的效果如下图所示:

事实上,可以简单的将二值膨胀算法看作是一个“盖章”的过程,如下图所示:


为了更简单的了解二值膨胀算法的原理和应用,有如下示例:


  • 二值膨胀算法作为一种计算方式,也满足诸如交换律,结合律等运算规律:
  • D(A,B) = A \oplus B = B \oplus A = D(B,A)
  • A\oplus(B \oplus C) = (A \oplus B) \oplus C
  • A \oplus (B \oplus x) = (A \oplus B) \oplus x
  • A_1 \subseteq A_2 \Rightarrow (A_1 \oplus B) \subseteq(A_2 \oplus B)
  • A \oplus (B \cup C) = (A \oplus B) \cup (A \oplus C)
  • nB = \underbrace{(B \oplus B \oplus B\oplus…\oplus B)}

二值腐蚀(Binary Erosion)

与二值膨胀算法相对应的另外一种算法是二值腐蚀算法,可以认为二值腐蚀算法也是一个平移算法,只不过是向右平移,并且平移之后是一个求交集的运算。其数学表达式如下所示:
E(F,K) = F \ominus K =\bigcap_{b \in K} \{a-b | a \in F \}

二值腐蚀的效果如下图所示:


可以将二值腐蚀也认为是一个“盖章”的过程,只不过,与膨胀不同的是,结构化要素和原始图像的边缘是一个求“交集”的过过程,边缘部分只要有“0”(动画中的白色色块)存在,则与此相重叠的部分被舍去。


与二值膨胀相比,二值腐蚀的一些应用和原理示意图如下所示:


如下图所示,更加直观地显示了腐蚀的运算过程,可以看到,腐蚀运算发生时,与结构化要素相对应的接触的部分元素,只要有0,则整个结构化要素所对应的部分全变为0

  • 二值腐蚀作为一种运算方式,和二值膨胀相比,满足一些关系运算。
  • E(A,B) \neq E(B,A)
  • D(E(A,B),B) \neq A \neq E(D(A,B),B)
  • A \ominus (B+x) = (A \ominus B)+x
  • A_1 \subseteq A_2 \Rightarrow (A_1 \ominus B) \subseteq(A_2 \ominus B)
  • B_1 \subseteq B_2 \Rightarrow (A \ominus B_1) \supseteq(A \ominus B_2)
  • A \ominus (B \cup C) = (A \ominus B) \cap (A \ominus C)
  • (A \ominus B) \ominus C = A \ominus (B \oplus C)

膨胀和腐蚀

  • 膨胀和腐蚀并不是相反的运算,但是却是两个相对应的运算。
  • 假设A^c表示对A进行取反,-B代表B的翻转(旋转180度),则满足如下运算关系:
  • A \oplus B = [A^c \ominus(-B)]^c
  • A \ominus B = [A^c \oplus (-B)]^c

二值开运算(Binary Opening)

对一幅图像进行二值开运算可以描述为先进性腐蚀再进行膨胀的运算:
O(F,K) = F \circ K = (F \ominus K) \oplus K
其实现效果如下图所示:


二值开运算总体上可以看作是一个对图像的区域进行缩小的区域。

一些二值开运算的示例和实现效果如下图所示:


二值开运算示例
二值开运算的实现过程

二值开运算,从效果上可以看出,总体上会在原图上移除b比结构化要素更小的部分,如下图所示:


二值开运算满足如下运算定律:

  • O(A+x,B) = O(A,B)+x
  • O(A,B) \subseteq A
  • A_1 \subseteq A_2 \Rightarrow (A_1 \circ B) \subseteq (A_2 \circ B)
  • (A\circ B) \circ B = A \circ B (不可重复性)

二值闭运算(Binary Closing)

与二值开运算相对应的运算是二值闭运算,其计算过程可以描述为,先进行膨胀运算,再进行腐蚀运算,对于一副图像而言,二值闭运算总体上是一个对图像进行“放大”的方式。

C(F,K) = F \bullet K = (F \oplus K) \ominus K

实现效果如下图所示,可以看出,闭运算使得图像的边缘区域更加平滑,闭运算在图像修复上有着广泛的应用。


闭运算对图像内部的空洞进行了修复
闭运算的计算过程

二值闭运算能够对图像内部小于结构化要素的空洞进行填充,如下图所示:

  • C(A+x,B) = C(A,B)+x
  • A \subseteq C(A,B)
  • A_1 \subseteq A_2 \Rightarrow (A_1 \bullet B) \subseteq (A_2 \bullet B)
  • (A\bullet B) \bullet B = A \bullet B (不可重复性)

开运算与闭运算

开运算与闭运算并不是一对互逆运算,若A^C表示对A取反,则满足以下关系:

  • A \circ B = (A^C \bullet B)^C
  • A \bullet B = (A^C \circ B)^C
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。