影像處理的形態學(Morphology)應用

膨脹(Dilation)、侵蝕(Erosion)、關閉(Closing)、開啟(Opening)

Ken Huang
電腦視覺
Oct 21, 2020

--

形態學有四個重要算子在影像處理上可以對物件之間的區塊做「連結」、「去除雜訊」的動作,

  • 膨脹(Dilation)
  • 侵蝕(Erosion)
  • 關閉(Closing)
  • 開啟(Opening)

以下會個別說明其運算方式,再用真實圖片作為範例,來看視覺上的效果。

一、膨脹(Dilation)

假設我們有一張長方形的圖 A,其四個角落座標為

{ (1, 2), (1, 4), (2, 2), (2, 4) }

並且有一個移動向量集 B(又稱結構化元素集,Structuring Elements):

{ (1, 0), (0, 1), (-1, 0), (0, -1) }

如下圖:

若將 A 圖上下左右各移一個單位長之後取「聯集」則如下圖:

這就是膨脹運算子(Dilation)的運算結果,若寫成數學公式則為:

二、侵蝕(Erosion)

沿用上方的 A 圖與移動向量集 B 做為例子,但這次我們改取「交集」:

就會發現結果是空集合,因為移動的結果完全沒有交疊到任何地方,這就是侵蝕運算子(Erosion)的運算結果,若寫成數學公式則為:

接下來兩種運算子是將前述的 Dilation 和 Erosion 綜合運用,差異在於使用時的「先後順序」。

三、關閉(Closing)

為了凸顯關閉運算子(Closing)的特性,讓我們換個運算結果會比較好懂的例子,假設我們有另一張圖 C:

Closing 是先進行 Dilation 運算之後再做 Erosion,那我們看看一樣移動幅度的前提下,做完 Dilation 的圖 C:

因為 Dilation 的運算,中間的空格被填滿了,那再把這個狀態做 Erosion 來看看結果:

做完 Erosion 之後便會回到原本的外型,但內部的空格已經被填起來,這就是為甚麼叫做 Closing 的原因。

Closing 在影像處理上可以連結「分離但又相去不遠的區塊」,又或是「填滿影像中的破孔」或「消除雜訊」。

四、開啟(Opening)

在來是最後一個開啟運算子(Opening),為了要比較好懂 Opening 的運算結果,我們再換一個例子,這次我們有兩張圖,分別為圖 D 和圖 E:

Opening 和 Closing 正好相反,是先進行 Erosion 運算之後再做 Dilation,那來看看做完 Erosion 的狀態:

先做 Erosion 就會把比較小塊的像素先消除掉,那再來看看這個狀態做 Dilation 之後的結果:

我想這應該也很好猜測吧,就是會回到原本的外型,所以 Opening 能夠去除影像中的雜點,但邊界也有可能相對銳利,因為邊緣的像素實際上是原本在較中心區域的像素。

範例實作

了解運算過程與結果的特性之後,我們來看看實際影像在經過這些運算之後的視覺效果。

這邊我們可以引用 OpenCV package,這些 Morphology 運算子實際上在對影像作運算時會透過一個 kernel 沿著影像滑動並計算,這個動作稱為捲積(Convolution)。

那先來看看我們的原始影像:

這張影像中有許多細線構成的圓圈,正好可以凸顯這四個算子的差異。那我們來看看運算後的結果:

這樣比較起來就很明顯了,算子之間沒有優劣,每種運算都有適合它的運用時機,端看使用者如何應用。

今天的紀錄就到這邊,如果有興趣也可以自己試試看,程式碼如下:

--

--

Ken Huang
電腦視覺

在網路上自學的過程中,體會到開放式資源的美好,希望藉由撰寫文章記錄研究所的學習過程,同時作為回饋網路世界的一種方式。Email : kenhuang2019iii@gmail.com ,如果有任何問題都歡迎與我聯繫。