Python實(shí)例解析圖像形態(tài)學(xué)運(yùn)算技術(shù)
1 圖像形態(tài)學(xué)運(yùn)算
在Python OpenCV圖像處理之圖像濾波特效詳解中我們將圖像濾波進(jìn)行了以下分類:
鄰域?yàn)V波
- 線性濾波
- 非線性濾波
頻域?yàn)V波
- 低通濾波
- 高通濾波
在非線性濾波中,之前只介紹了中值濾波,事實(shí)上,還有一類非常常用的非線性濾波方法,稱為圖像形態(tài)學(xué)運(yùn)算(Morphological operations)。
圖像形態(tài)學(xué)運(yùn)算是一類基于圖像形狀運(yùn)算的非線性濾波技術(shù),其基本思想是利用一些特殊的結(jié)構(gòu)元來(lái)測(cè)量或提取圖像中相應(yīng)的形狀和特征,以便進(jìn)一步進(jìn)行圖像分析和處理。這里結(jié)構(gòu)元素就相當(dāng)于我們?cè)跒V波中所涉及到的模板——一個(gè)給定像素的矩陣,這個(gè)矩陣形狀可以任意,但一般是正方形。
接下來(lái),我們分析一下幾種經(jīng)典的圖像形態(tài)學(xué)運(yùn)算算法,再編程測(cè)試一下~
2 腐蝕
腐蝕就是用局部灰度最小值代替目標(biāo)像素值實(shí)現(xiàn)對(duì)高亮區(qū)域的腐蝕。
舉個(gè)例子,有這樣一張圖像和這樣一個(gè)結(jié)構(gòu)元素,其中結(jié)構(gòu)元素的藍(lán)色方塊表示的是模板原點(diǎn)。
下面我們開(kāi)始遍歷這張圖像,到下圖這個(gè)位置的時(shí)候,模板內(nèi)灰度最小值是灰色方格的像素,因此替換掉模板原點(diǎn)中藍(lán)色方格處的像素為灰色(原本為白色,被腐蝕了)
就這樣遍歷完這張圖像得到
3 膨脹
膨脹就是用局部灰度最大值代替目標(biāo)像素值實(shí)現(xiàn)對(duì)高亮區(qū)域的膨脹。
和腐蝕類似,遍歷這張圖像,到下圖這個(gè)位置的時(shí)候,模板內(nèi)灰度最大值是白色方格的像素,因此替換掉模板原點(diǎn)中藍(lán)色方格處的像素為白色(原本為灰色,膨脹了)
就這樣遍歷完這張圖像得到膨脹的最終結(jié)果為
上個(gè)實(shí)物圖感受下腐蝕和膨脹的效果
4 開(kāi)運(yùn)算與閉運(yùn)算
理解了圖像腐蝕與膨脹,那么開(kāi)閉運(yùn)算就很容易了
- 開(kāi)運(yùn)算(Opening):先腐蝕再膨脹
- 閉運(yùn)算(Closing):先膨脹再腐蝕
開(kāi)運(yùn)算能夠除有效去除孤立點(diǎn)、毛刺和小橋;閉運(yùn)算能夠填平小孔,彌合縫隙。
上圖假設(shè)灰色區(qū)域?yàn)楦吡痢?/p>
5 頂帽運(yùn)算與底帽運(yùn)算
頂帽運(yùn)算與底帽運(yùn)算是用于表征開(kāi)閉運(yùn)算與原圖像間差異的運(yùn)算,類似邊緣檢測(cè)的梯度差
- 圖像頂帽運(yùn)算:表征原圖像與開(kāi)運(yùn)算得到的圖像之間的區(qū)別
- 圖像底帽運(yùn)算:表征原圖像與閉運(yùn)算得到的圖像之間的區(qū)別
6 惡魔與天使
先看看原圖,一對(duì)可愛(ài)的貓咪
進(jìn)行腐蝕操作,首先創(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);
得到腐蝕后的圖像如下所示,眼睛空洞洞的,有點(diǎn)恐怖片內(nèi)味了,這還是原來(lái)那兩只貓嗎?
膨脹操作類似于腐蝕,也有OpenCV
封裝好的API
dilate(srcImg, dstImg, structureElement, Point(-1, -1), 1); imshow("膨脹操作后:", dstImg);
膨脹出來(lái)的小貓就顯得輕松很多,感覺(jué)升華了。
今后要是想有一張照片創(chuàng)造光與影
、正與邪
、天使與惡魔
兩種反差,可以考慮采用圖像腐蝕和膨脹操作。
到此這篇關(guān)于Python實(shí)例解析圖像形態(tài)學(xué)運(yùn)算技術(shù)的文章就介紹到這了,更多相關(guān)Python 圖像形態(tài)學(xué)運(yùn)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python hbase讀取數(shù)據(jù)發(fā)送kafka的方法
今天小編就為大家分享一篇python hbase讀取數(shù)據(jù)發(fā)送kafka的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12用Python制作檢測(cè)Linux運(yùn)行信息的工具的教程
這篇文章主要介紹了用Python制作檢測(cè)Linux運(yùn)行信息的工具的教程,主要是用CPython讀取運(yùn)行系統(tǒng)的硬件參數(shù)、網(wǎng)絡(luò)傳輸流量統(tǒng)計(jì)等,需要的朋友可以參考下2015-04-04numpy使用技巧之?dāng)?shù)組過(guò)濾實(shí)例代碼
這篇文章主要介紹了numpy使用技巧之?dāng)?shù)組過(guò)濾實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02python百行代碼實(shí)現(xiàn)漢服圈圖片爬取
這篇文章主要為大家介紹了使用python百行代碼來(lái)實(shí)現(xiàn)漢服圈的圖片爬取,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11詳解pandas.DataFrame.plot() 畫(huà)圖函數(shù)
這篇文章主要介紹了詳解pandas.DataFrame.plot()畫(huà)圖函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Python開(kāi)發(fā)之身份證驗(yàn)證庫(kù)id_validator驗(yàn)證身份證號(hào)合法性及根據(jù)身份證號(hào)返回住址年齡等信息
這篇文章主要介紹了Python開(kāi)發(fā)之身份證驗(yàn)證庫(kù)id_validator驗(yàn)證身份證號(hào)合法性及Python解析身份證號(hào),根據(jù)身份證號(hào)返回住址年齡等信息,需要的朋友可以參考下2020-03-03淺談keras中的目標(biāo)函數(shù)和優(yōu)化函數(shù)MSE用法
這篇文章主要介紹了淺談keras中的目標(biāo)函數(shù)和優(yōu)化函數(shù)MSE用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06python?使用turtle實(shí)現(xiàn)實(shí)時(shí)鐘表并生成exe
這篇文章主要為大家詳細(xì)介紹了python使用Turtle庫(kù)繪制動(dòng)態(tài)鐘表,并有需要可以生成exe可執(zhí)行文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03