1. 程式人生 > >二值影象腐蝕與膨脹操作樣例

二值影象腐蝕與膨脹操作樣例

申明: 僅個人小記

前言: 我之前對腐蝕與膨脹的概念理解存在錯誤。我原來的概念解決不了結構的原點設定在結構外部的情況。故在這裡記一下。

小注: 剛開始操作的時候是同時有三張圖,分別為原影象,結構元素影象,輸出結果空白影象
注意: 原影象只是提供位置資訊,不參與輸出影象的構成。

一、操作方法簡要說明

  • 腐蝕操作內容

    1. 先不管原點設定的位置,在原圖中找出第一個和結構元素完全匹配的部分
    2. 想象著拿著結構元素往上面找到的位置上貼,這時得到結構元素中的原點(就是打上“+”的那個方塊)對應著原圖中一個方塊
    3. 我們根據這個方塊位置,在空白的輸出影象上(第一次輸出影象為空白的)相應的位置塗黑。
    4. 重複1~3,直至原圖中所有能和結構元素完全匹配的情況用完
    5. 這是得到的輸出影象便是結構元素對原影象進行腐蝕的結果
  • 膨脹操作內容

    1. 原影象結構元素原點的執行軌跡。
    2. 直接關注原點,想象著拿著結構元素,把結構元素的原點放在原影象上的第一個有效元素(指的是黑方塊)。
    3. 這時,我們得到結構元素所有的黑色方塊在原影象上位置。我們根據得到的位置,在的輸出影象(第一次輸出影象為空白的)上完全相同的位置塗黑。
    4. 重複1~3,得到輸出結果影象,輸出結果影象就是結構元素對原影象膨脹操作的結果。

二、 二值影象的腐蝕操作

1. 結構的原點設定在結構的內部情況舉例


  • 圖中左側(a)為原影象,右側(b)為結構元素。

    • 第一步 拿結構元素第一次完全匹配原圖(右側為輸出影象)
    •         

    • 第二步 然後我們根據原點在原影象中的位置,在輸出影象上完全對應的位置上塗黑,即輸出影象更變為

    • 第三步 在原圖中尋找下一個完全和結構元素匹配部分,即

    • 第四步 根據此刻結構元素的原點在原影象上的位置,在輸出影象相同的位置上塗黑,即

    • 第五步 尋找完畢,操作完畢。

2. 結構的原點設定在結構的外部情況舉例


  • 左側為原圖,右側為結構元素,注意,這裡的結構元素的原點不在結構元素內部。

  • 第一步 拿結構元素第一次完全匹配原圖(右側為輸出影象)

  • 第二步 根據結構元素的原點在原圖中的位置,我們再輸出影象相應的位置塗黑,即

  • 第三步 在原圖中尋找下一個完全和結構元素匹配部分,即

  • 第四步 根據此刻結構元素的原點在原影象上的位置,在輸出影象相同的位置上塗黑,即

  • 第五步 尋找完畢,操作完畢。

三、 二值影象的膨脹操作

1. 結構的原點設定在結構的內部情況舉例


  • 圖中左側(a)為原影象,右側(b)為結構元素

    操作規則,拿結構元素的原點在原影象上的黑色方塊上一次一次移動。

    • 第一步 將結構元素的原點,放置在原圖向上的第一個黑色方塊上,即

      (左側為原影象,右側為輸出影象)
  • 第二步 根據此時結構元素在原圖上霸佔的所有位置,我們在輸出圖的相應所有位置塗黑,即

  • 第三步 將結構元素的原點移動到下一個原圖上的黑色方塊,即

  • 第四步 根據此時結構元素在原圖上霸佔的所有位置,我們在輸出圖的相應所有位置塗黑,即

  • 第五步 重複第三步和第四步,直到遍歷完畢原影象中所有的黑色方塊,我們得到最終輸出結果


2. 結構的原點設定在結構的外部情況舉例


  • 左側為原圖,右側為結構元素,注意,這裡的結構元素的原點不在結構元素內部。
  • 第一步 將結構元素的原點,放置在原圖向上的第一個黑色方塊上,即

    由於位置不夠,我在上邊界上拓展了一行。

  • 第二步 根據此時結構元素在原圖上霸佔的所有位置,我們在輸出圖的相應所有位置塗黑,即

  • 第三步 將結構元素的原點移動到下一個原圖上的黑色方塊,即

  • 第四步 根據此時結構元素在原圖上霸佔的所有位置,我們在輸出圖的相應所有位置塗黑,即

  • 第五步 重複第三步和第四步,直到遍歷完畢原影象中所有的黑色方塊,我們得到最終輸出結果

By Jack Lu 2017-6-26 23:57:35

四、其他的一些概念

  1. 平移不變性(shift-nonvariant): 指的就是不論平行移動到哪裡執行的操作都是一樣。和執行的動作和操作是無關係的。
  2. 腐蝕和膨脹操作還可以對灰度圖進行操作,具體方式:

    • 灰度圖腐蝕
      用原圖減去結構,選用結果中的最小值(如果有負值,則以0為最小值)作為本次輸出值放置在空白影象相應的輸出位置(即結構的原點位置在原圖上相應的位置)。

    • 灰度圖膨脹
      用原圖加上結構,選用結果中的最大值 (如果有負值,則以0為最小值)作為本次輸出值放置在空白影象相應的輸出位置(即結構的原點位置在原圖上相應的位置)。

3 開閉運算

  • 開運算為: 先腐蝕再膨脹
  • 閉運算為: 先膨脹再腐蝕

  • 開閉運算具有冪等性。即做n次開運算和做一次開運算的結果相同,閉運算同樣如此。

  • 個人方便記憶開閉運算的操作順序,這樣理解,開運算是開啟的意思,即可以理解為將影象中靠近但不相連的地方索性開啟。做一次開運算,使得原來的縫隙變大。
    閉運算可以理解為閉合的意思,能合併在一起的地方儘量合併。即可以理解為把影象中縫隙填滿。

By Jack 2017年6月28日 14:50:42