Python實例解析圖像形態(tài)學運算技術(shù)

1 圖像形態(tài)學運算
在Python OpenCV圖像處理之圖像濾波特效詳解中我們將圖像濾波進行了以下分類:
鄰域濾波
- 線性濾波
- 非線性濾波
頻域濾波
- 低通濾波
- 高通濾波
在非線性濾波中,之前只介紹了中值濾波,事實上,還有一類非常常用的非線性濾波方法,稱為圖像形態(tài)學運算(Morphological operations)。
圖像形態(tài)學運算是一類基于圖像形狀運算的非線性濾波技術(shù),其基本思想是利用一些特殊的結(jié)構(gòu)元來測量或提取圖像中相應的形狀和特征,以便進一步進行圖像分析和處理。這里結(jié)構(gòu)元素就相當于我們在濾波中所涉及到的模板——一個給定像素的矩陣,這個矩陣形狀可以任意,但一般是正方形。
接下來,我們分析一下幾種經(jīng)典的圖像形態(tài)學運算算法,再編程測試一下~
2 腐蝕
腐蝕就是用局部灰度最小值代替目標像素值實現(xiàn)對高亮區(qū)域的腐蝕。
舉個例子,有這樣一張圖像和這樣一個結(jié)構(gòu)元素,其中結(jié)構(gòu)元素的藍色方塊表示的是模板原點。

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

就這樣遍歷完這張圖像得到

3 膨脹
膨脹就是用局部灰度最大值代替目標像素值實現(xiàn)對高亮區(qū)域的膨脹。
和腐蝕類似,遍歷這張圖像,到下圖這個位置的時候,模板內(nèi)灰度最大值是白色方格的像素,因此替換掉模板原點中藍色方格處的像素為白色(原本為灰色,膨脹了)

就這樣遍歷完這張圖像得到膨脹的最終結(jié)果為

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

4 開運算與閉運算
理解了圖像腐蝕與膨脹,那么開閉運算就很容易了
- 開運算(Opening):先腐蝕再膨脹
- 閉運算(Closing):先膨脹再腐蝕
開運算能夠除有效去除孤立點、毛刺和小橋;閉運算能夠填平小孔,彌合縫隙。

上圖假設(shè)灰色區(qū)域為高亮。
5 頂帽運算與底帽運算
頂帽運算與底帽運算是用于表征開閉運算與原圖像間差異的運算,類似邊緣檢測的梯度差
- 圖像頂帽運算:表征原圖像與開運算得到的圖像之間的區(qū)別
- 圖像底帽運算:表征原圖像與閉運算得到的圖像之間的區(qū)別
6 惡魔與天使
先看看原圖,一對可愛的貓咪

進行腐蝕操作,首先創(chuàng)建結(jié)構(gòu)元
int eSize = 3; //結(jié)構(gòu)元尺寸 int s = eSize * 2 + 1; Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
接著用結(jié)構(gòu)元遍歷原圖,OpenCV有封裝好的API,直接調(diào)用即可
erode(src, dst, structureElement);
imshow("腐蝕操作后:", dst);
得到腐蝕后的圖像如下所示,眼睛空洞洞的,有點恐怖片內(nèi)味了,這還是原來那兩只貓嗎?

膨脹操作類似于腐蝕,也有OpenCV封裝好的API
dilate(srcImg, dstImg, structureElement, Point(-1, -1), 1);
imshow("膨脹操作后:", dstImg);
膨脹出來的小貓就顯得輕松很多,感覺升華了。

今后要是想有一張照片創(chuàng)造光與影、正與邪、天使與惡魔兩種反差,可以考慮采用圖像腐蝕和膨脹操作。
到此這篇關(guān)于Python實例解析圖像形態(tài)學運算技術(shù)的文章就介紹到這了,更多相關(guān)Python 圖像形態(tài)學運算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python高級排序sort()函數(shù)使用技巧實例探索
本文詳細介紹sort()函數(shù)的使用,包括基本排序、自定義排序、逆序排序等多種情況,并提供大量示例代碼,以幫助你充分理解和掌握這一函數(shù)的用法,探索更多sort()排序函數(shù)的作用2024-01-01

