形態學運算元 腐蝕,膨脹,開閉

2021-09-24 14:43:56 字數 2275 閱讀 7108

本文總結了腐蝕,膨脹和開閉操作在二值影象上的應用,基於opencv給出了例項。

參考:《數字影象處理》(第三版)  岡薩雷斯

腐蝕的定義為:在二維整數空間

其中上面的定義含義是,b對a的腐蝕是乙個用z平移的b包含在a中的所有的點z的集合。腐蝕縮小或細化了二值影象中的物體。可以將腐蝕視為形態學濾波,這種操作將小於結構元的影象細節從影象中濾除。

膨脹的定義為:a和b是

其中從膨脹的定義可以得知,b對a的膨脹是在保證

結構元b對集合a的開操作表示為:

上式的含義是b對a的開操作就是b對a的腐蝕,緊接著用b對結果進行膨脹。

結構元b對集合a的閉操作表示為:

上式的含義是b對集合a的閉操作就是簡單地用b對a膨脹,緊接著用b對結果進行腐蝕。

開操作一般會平滑物體的輪廓、斷開較窄的狹頸並消除較細的突出物。

閉操作同樣也會平滑輪廓的一部分,但與開操作相反,它通常會彌合較窄的間斷和細長的溝壑,消除較小的孔洞,填補輪廓線中的斷裂。

**如下

dilate_img = cv2.dilate(binary_img,kernel5) # 膨脹

erode_img = cv2.erode(binary_img,kernel5) # 腐蝕

h, w = binary_img.shape

gap = np.ones(shape=(h,w//10),dtype=np.uint8)*255

im = np.hstack([binary_img,gap,dilate_img,gap,erode_img])

cv2.imshow("",im)

cv2.waitkey(0)

open_img5 = cv2.dilate(erode_img,kernel5)

close_img5 = cv2.erode(dilate_img,kernel5)

im = np.hstack([binary_img,gap,open_img5,gap,close_img5])

cv2.imshow("",im)

cv2.waitkey(0)

open_img10 = cv2.dilate(erode_img,kernel10)

close_img10 = cv2.erode(dilate_img,kernel10)

im = np.hstack([binary_img,gap,open_img10,gap,close_img10])

cv2.imshow("",im)

cv2.waitkey(0)

膨脹和腐蝕的結果如下圖所示,最左側是原圖經過二值化之後的圖,中間是用5乘5的矩形結構元膨脹的圖,右側是腐蝕的圖。可以看到原圖筆畫中存在一些狹窄的斷裂,膨脹之後筆畫變粗了一些,並且斷裂消失了。腐蝕之後筆畫變得更細,並且筆畫之間的斷裂變得更大。膨脹圖中的噪點同樣變大了,腐蝕圖中雖然噪點消失了,但是筆畫不連續。

使用5乘5開操作和閉操作的結果如下圖所示,左側是原圖的二值圖,中間是開操作的圖,也就是先腐蝕再膨脹,可以看到腐蝕的時候已經去除了圖中的噪點,膨脹操作讓筆畫顯得更粗一些。右側是閉操作圖,即先膨脹再腐蝕,因為膨脹的時候噪點也放大了,因此經過腐蝕之後,還是存在噪點。

先使用5乘5腐蝕和膨脹,然後使用10乘10的結構元進行開閉操作,結果如下圖所示。可以看到開操作和閉操作的圖中,都沒有噪點,並且筆畫也更加連貫。

二值形態學 膨脹,腐蝕

最近在做乙個motion detection的課題,在課題中提取的運動物體往往由離散的點組成,如果要用連通分量的計算方法提取每個運動物體的輪廓不太容易,為此要將由離散點組成的影象進行膨脹,腐蝕運算。膨脹 dilation 考慮兩幅二值影象a,b。它們的前景用黑色,背景用白色。另fa和fb表示各自前景...

二值形態學 膨脹,腐蝕

最近在做乙個motion detection的課題,在課題中提取的運動物體往往由離散的點組成,如果要用連通分量的計算方法提取每個運動物體的輪廓不太容易,為此要將由離散點組成的影象進行膨脹,腐蝕運算。膨脹 dilation 考慮兩幅二值影象a,b。它們的前景用黑色,背景用白色。另fa和fb表示各自前景...

形態學濾波 腐蝕與膨脹

形態學操作就是基於形狀的一系列影象處理操作。最基本的形態學操作有兩種 膨脹和腐蝕。這裡需要注意的是 膨脹和腐蝕是對白色部分而言的,不是黑色部分。因為我用毛筆字的,剛開始看起來,非常困惑為什麼膨脹之後,毛筆字反而變小了,其實當時就是沒有注意到,膨脹是對白色區域進行處理的,而白色區域增加了之後,字型就自...