首頁 > 軟體

Python範例解析影象形態學運算技術

2022-03-16 19:00:36

1 影象形態學運算

Python OpenCV影象處理之影象濾波特效詳解中我們將影象濾波進行了以下分類:

鄰域濾波

  • 線性濾波
  • 非線性濾波

頻域濾波

  • 低通濾波
  • 高通濾波

在非線性濾波中,之前只介紹了中值濾波,事實上,還有一類非常常用的非線性濾波方法,稱為影象形態學運算(Morphological operations)。

影象形態學運算是一類基於影象形狀運算的非線性濾波技術,其基本思想是利用一些特殊的結構元來測量或提取影象中相應的形狀和特徵,以便進一步進行影象分析和處理。這裡結構元素就相當於我們在濾波中所涉及到的模板——一個給定畫素的矩陣,這個矩陣形狀可以任意,但一般是正方形。

接下來,我們分析一下幾種經典的影象形態學運算演演算法,再程式設計測試一下~

2 腐蝕

腐蝕就是用區域性灰度最小值代替目標畫素值實現對高亮區域的腐蝕。

舉個例子,有這樣一張影象和這樣一個結構元素,其中結構元素的藍色方塊表示的是模板原點。

下面我們開始遍歷這張影象,到下圖這個位置的時候,模板內灰度最小值是灰色方格的畫素,因此替換掉模板原點中藍色方格處的畫素為灰色(原本為白色,被腐蝕了)

就這樣遍歷完這張影象得到

3 膨脹

膨脹就是用區域性灰度最大值代替目標畫素值實現對高亮區域的膨脹。

和腐蝕類似,遍歷這張影象,到下圖這個位置的時候,模板內灰度最大值是白色方格的畫素,因此替換掉模板原點中藍色方格處的畫素為白色(原本為灰色,膨脹了)

就這樣遍歷完這張影象得到膨脹的最終結果為

上個實物圖感受下腐蝕和膨脹的效果

4 開運算與閉運算

理解了影象腐蝕與膨脹,那麼開閉運算就很容易了

  • 開運算(Opening):先腐蝕再膨脹
  • 閉運算(Closing):先膨脹再腐蝕

開運算能夠除有效去除孤立點、毛刺和小橋;閉運算能夠填平小孔,彌合縫隙。

上圖假設灰色區域為高亮。

5 頂帽運算與底帽運算

頂帽運算與底帽運算是用於表徵開閉運算與原影象間差異的運算,類似邊緣檢測的梯度差

  • 影象頂帽運算:表徵原影象與開運算得到的影象之間的區別
  • 影象底帽運算:表徵原影象與閉運算得到的影象之間的區別

6 惡魔與天使

先看看原圖,一對可愛的貓咪

進行腐蝕操作,首先建立結構元

int eSize = 3;  //結構元尺寸
int s = eSize * 2 + 1;
Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1)); 

接著用結構元遍歷原圖,OpenCV有封裝好的API,直接呼叫即可

erode(src, dst, structureElement);
imshow("腐蝕操作後:", dst);

得到腐蝕後的影象如下所示,眼睛空洞洞的,有點恐怖片內味了,這還是原來那兩隻貓嗎?

膨脹操作類似於腐蝕,也有OpenCV封裝好的API

dilate(srcImg, dstImg, structureElement, Point(-1, -1), 1);
imshow("膨脹操作後:", dstImg);

膨脹出來的小貓就顯得輕鬆很多,感覺昇華了。

今後要是想有一張照片創造光與影正與邪天使與惡魔兩種反差,可以考慮採用影象腐蝕和膨脹操作。

到此這篇關於Python範例解析影象形態學運算技術的文章就介紹到這了,更多相關Python 影象形態學運算內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com