您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Python圖像處理中二值圖像腐蝕該怎么處理,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
形態學運算是針對二值圖像依據數學形態學集合論方法發展起來的圖像處理的方法.其主要內容是設計一整套的變換概念和算法,用以描述圖像的基本特征.
在圖像處理中,形態學的應用主要有以下兩點:利用形態學的基本運算,對圖像進行觀察和處理,從而達到改善圖像質量的目的;描述和定義圖像的各種幾何參數和特征等.
數學形態學的運算以腐蝕和膨脹這兩種基本運算為基礎,腐蝕操作在數學形態學上的作用是消除物體的邊界點,使邊界向內部收縮的過程,主要用于將小于物體結構元素的物體去除.例如兩個物體之間有細小的連通,可以通過腐蝕操作將兩個物體分開.腐蝕的數學表達式為:
上述公式中:
S表示腐蝕后的二值圖像
B表示用來進行腐蝕操作的結構元素,結構元素內每一個元素取值為0或1,它可以組成任何一種形狀的圖形;
X表示原圖經過二值化后的像素集合.
此公式的含義是用B來腐蝕X得到的集合S,S是由B完全包括在X中時B的當前位置的集合.
只看上面公式,是不是有種云里霧里的感覺,那我們不妨來舉個栗子說明一下,請看下圖:
左側a為被處理的二值圖像,白色部分表示背景,灰色部分表示目標X;
中間為結構元素B,黑色點為結構元素的中心點,灰色的方格表示鄰域;
右側c中黑色的部分表示腐蝕后的結果,灰色的部分表示目標圖像被腐蝕掉的部分.
我們可以這樣理解上述腐蝕過程,即用B的中心點和X上的點一個一個地對比,如果B上所有對應的點都在X的范圍內,則該點保留;否則將該點去除;
通俗的講就是將結構元素在圖像中移動,如果結構元素完全包含在目標圖像X中,則保留目標圖像中對應于中心點的像素點,否則刪除該像素點.
圖像腐蝕操作按照所采用的結構元素的類型,可以分為以下三類:水平腐蝕垂直腐蝕以及全方向腐蝕.其中水平腐蝕所采用的結構元素為[0,0,0], 其具體實現步驟如下:
根據原始圖像的寬和高,初始化結果圖為全白圖(背景為白色)
由于我們采用的是橫向腐蝕操作,結構元素為1X3,因此我們不處理最左邊和最右邊的兩列像素,從第2行第2列開始,逐個遍歷每行元素,判斷該元素的前一個像素和后一個像素是否含有背景點,有則說明在結果圖上該點需要被腐蝕掉,將該點像素點的灰度值賦值為255,否則保持不變
循環上述步驟,直至處理完原圖所有像素點。
使用python實現按上述過程,核心代碼如下:
def horizon_erode(bin_img): out_img = np.zeros(shape=bin_img.shape, dtype=np.uint8) + 255 h = bin_img.shape[0] w = bin_img.shape[1] for i in range(h): for j in range(1,w-1): out_img[i][j]=0 for k in range(3): if bin_img[i][j+k-1] > 127: out_img[i][j]=255 return out_img
運行結果如下:
上圖中,從左往右依次為彩色原圖,二值化后的結果圖,以及采用水平腐蝕后的效果圖,可以看到腐蝕后的圖相比二值圖外圍在縱向上被腐蝕掉一圈。
垂直腐蝕和水平腐蝕原理類似,只是所采用的結構元素不同,垂直腐蝕所使用的結構元素為 [ 0 , 0 , 0 ] T [0,0,0]^T [0,0,0]T,其詳細的實現步驟如下:
根據原始圖像的寬和高,初始化結果圖為全白圖(背景為白色)
由于我們采用的是垂直腐蝕操作,結構元素為3X1,因此我們不處理最上邊和最下邊的兩行像素,從第2行第2列開始,逐個遍歷每行元素,判斷該元素的上一個像素和下一個像素是否含有背景點,有則說明在結果圖上該點需要被腐蝕掉,將該點像素點的灰度值賦值為255,否則保持不變
循環上述步驟,直至處理完原圖所有像素點。
使用python實現按上述過程,核心代碼如下:
def vertical_erode(bin_img): out_img = np.zeros(shape=bin_img.shape, dtype=np.uint8) + 255 h = bin_img.shape[0] w = bin_img.shape[1] for i in range(1,h-1): for j in range(w): out_img[i][j]=0 for k in range(3): if bin_img[i+k-1][j] > 127: out_img[i][j]=255 return out_img
運行結果如下:
上圖中,從左往右依次為彩色原圖,二值化后的結果圖,以及采用垂直腐蝕后的效果圖,可以看到腐蝕后的圖相比二值圖在橫向上被腐蝕掉一圈。
全方向腐蝕綜合了垂直腐蝕和水平腐蝕,所采用的結構元素為十字形,全向腐蝕的一般實現步驟如下:
根據原始圖像的寬和高,初始化結果圖為全白圖(背景為白色)
全向腐蝕包含垂直腐蝕和水平腐蝕,這里我們采用3X3的結構元素,如下所示:
為防止越界,我們不處理最上邊、最右邊、最下邊和最左邊共四邊的元素,從第2行第2列開始,逐個遍歷每個元素,判斷該元素的上一個像素 下一個像素 前一個像素 以及后一個像素這四個位置(即數組中除中心點外,四個為0的位置)中是否含有背景點,有則說明在結果圖上該點需要被腐蝕掉,將該點像素點的灰度值賦值為255,否則保持不變。當然也可以定義不同形狀的結構元素B來進行不同的腐蝕效果,但處理方法都是檢查B中所對應的像素點是否全部為物體,是則保留該點,否則置為255.
循環上述步驟,直至處理完原圖所有像素點。
使用python實現按上述過程,核心代碼如下:
def all_erode(bin_img): out_img = np.zeros(shape=bin_img.shape, dtype=np.uint8) + 255 h = bin_img.shape[0] w = bin_img.shape[1] B=[1,0,1,0,0,0,1,0,1] for i in range(1,h-1): for j in range(1,w-1): out_img[i][j]=0 for m in range(3): for n in range(3): if B[m*3+n] == 1: continue if bin_img[i+m-1][j+n-1] > 127: out_img[i][j]=255 return out_img
運行結果如下:
上圖中,從左往右依次為彩色原圖,二值化后的結果圖,以及采用垂直腐蝕后的效果圖,可以看到腐蝕后的圖相比二值圖在橫向和縱向上都被腐蝕掉一圈。
上述就是小編為大家分享的Python圖像處理中二值圖像腐蝕該怎么處理了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。