[Python影象處理] 十.形態學之影象頂帽運算和黑帽運算

Eastmount發表於2018-11-04

該系列文章是講解Python OpenCV影象處理知識,前期主要講解影象入門、OpenCV基礎用法,中期講解影象處理的各種演算法,包括影象銳化運算元、影象增強技術、影象分割等,後期結合深度學習研究影象識別、影象分類應用。希望文章對您有所幫助,如果有不足之處,還請海涵~

同時推薦作者的C++影象系列知識:
[數字影象處理] 一.MFC詳解顯示BMP格式圖片
[數字影象處理] 二.MFC單文件分割視窗顯示圖片
[數字影象處理] 三.MFC實現影象灰度、取樣和量化功能詳解
[數字影象處理] 四.MFC對話方塊繪製灰度直方圖
[數字影象處理] 五.MFC影象點運算之灰度線性變化、灰度非線性變化、閾值化和均衡化處理詳解
[數字影象處理] 六.MFC空間幾何變換之影象平移、映象、旋轉、縮放詳解
[數字影象處理] 七.MFC影象增強之影象普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

前文參考:
[Python影象處理] 一.影象處理基礎知識及OpenCV入門函式
[Python影象處理] 二.OpenCV+Numpy庫讀取與修改畫素
[Python影象處理] 三.獲取影象屬性、興趣ROI區域及通道處理
[Python影象處理] 四.影象平滑之均值濾波、方框濾波、高斯濾波及中值濾波
[Python影象處理] 五.影象融合、加法運算及影象型別轉換
[Python影象處理] 六.影象縮放、影象旋轉、影象翻轉與影象平移
[Python影象處理] 七.影象閾值化處理及演算法對比
[Python影象處理] 八.影象腐蝕與影象膨脹
[Python影象處理] 九.形態學之影象開運算、閉運算、梯度運算

數學形態學(Mathematical morphology)是一門建立在格論和拓撲學基礎之上的影象分析學科,是數學形態學影象處理的基本理論。其基本的運算包括:腐蝕和膨脹、開運算和閉運算、骨架抽取、極限腐蝕、擊中擊不中變換、形態學梯度、Top-hat變換、顆粒分析、流域變換等。

本篇文章主要講解Python呼叫OpenCV實現影象形態學轉化,包括影象頂帽運算和影象黑帽運算,基礎性知識希望對您有所幫助。
1.影象頂帽運算
2.影象黑帽運算

PS:文章參考自己以前系列影象處理文章及OpenCV庫函式,同時部分參考網易雲lilizong老師的視訊,推薦大家去學習。同時,本篇文章涉及到《計算機圖形學》基礎知識,請大家下來補充。

PSS:2019年1~2月作者參加了CSDN2018年部落格評選,希望您能投出寶貴的一票。我是59號,Eastmount,楊秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

[Python影象處理] 十.形態學之影象頂帽運算和黑帽運算
五年來寫了314篇部落格,12個專欄,是真的熱愛分享,熱愛CSDN這個平臺,也想幫助更多的人,專欄包括Python、資料探勘、網路爬蟲、影象處理、C#、Android等。現在也當了兩年老師,更是覺得有義務教好每一個學生,讓貴州學子好好寫點程式碼,學點技術,"師者,傳到授業解惑也",提前祝大家新年快樂。2019我們攜手共進,為愛而生。

一. 影象頂帽運算

1.基本原理
影象頂帽(或影象禮帽)運算是原始影象減去影象開運算的結果,得到影象的噪聲。如下圖所示:

頂帽運算(img) = 原始影象(img) - 開運算(img) [Python影象處理] 十.形態學之影象頂帽運算和黑帽運算

2.函式原型
影象開運算主要使用的函式morphologyEx,它是形態學擴充套件的一組函式,其引數cv2.MORPH_TOPHAT對應開運算。其原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

引數dst表示處理的結果,src表示原影象,cv2.MORPH_TOPHAT表示頂帽運算,kernel表示卷積核。下圖表示5*5的卷積核,可以採用函式 np.ones((5,5), np.uint8) 構建。

[Python影象處理] 十.形態學之影象頂帽運算和黑帽運算
卷積如下圖所示:
[Python影象處理] 十.形態學之影象頂帽運算和黑帽運算

3.程式碼實現
完整程式碼如下所示:

#encoding:utf-8
import cv2  
import numpy as np  

#讀取圖片
src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED)

#設定卷積核
kernel = np.ones((5,5), np.uint8)

#影象頂帽運算
result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

#顯示影象
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結果如下圖所示,可以看到外部噪聲被提取出來。

[Python影象處理] 十.形態學之影象頂帽運算和黑帽運算
如果想獲取更多的細節,可以將卷積設定為10*10,如下圖所示:

kernel = np.ones((10,10), np.uint8)
result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

[Python影象處理] 十.形態學之影象頂帽運算和黑帽運算


二. 影象黑帽運算

1.基本原理
影象黑帽運算是影象閉運算操作減去原始影象的結果,得到影象內部的小孔,或者前景色中的小黑點。如下圖所示:

黑帽運算(img) = 閉運算影象(img) - 原始影象(img) [Python影象處理] 十.形態學之影象頂帽運算和黑帽運算

2.函式原型
影象開運算主要使用的函式morphologyEx,它是形態學擴充套件的一組函式,其引數cv2.MORPH_BLACKHAT對應開運算。其原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

引數dst表示處理的結果,src表示原影象,cv2.MORPH_BLACKHAT表示黑帽運算,kernel表示卷積核。下圖表示5*5的卷積核,可以採用函式 np.ones((5,5), np.uint8) 構建。

[Python影象處理] 十.形態學之影象頂帽運算和黑帽運算

3.程式碼實現
完整程式碼如下所示:

#encoding:utf-8
import cv2  
import numpy as np  

#讀取圖片
src = cv2.imread('test02.png', cv2.IMREAD_UNCHANGED)

#設定卷積核
kernel = np.ones((5,5), np.uint8)

#影象黑帽運算
result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

#顯示影象
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結果如下圖所示,可以看到影象內部黑點被提取出來。

[Python影象處理] 十.形態學之影象頂帽運算和黑帽運算

但內部比較大的四個黑點沒有被提取,如果想獲取更多的細節,可以將卷積設定為10*10,如下圖所示:
kernel = np.ones((10,10), np.uint8)
result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

[Python影象處理] 十.形態學之影象頂帽運算和黑帽運算

希望文章對大家有所幫助,如果有錯誤或不足之處,還請海涵。最近經歷的事情太多,有喜有悲,關閉了朋友圈,希望通過不斷學習和寫文章來忘記煩勞,將憂鬱轉換為動力,每週學習都記錄下來,加油!!!
(By:Eastmount 2018-11-04 深夜12點 https://blog.csdn.net/Eastmount/)

相關文章