腐蝕¶
概要¶
本文講解了數學形態學中的腐蝕, 展示了不同迭代次數下的腐蝕效果.
keywords 數學形態學 腐蝕
腐蝕Erode¶
腐蝕是一個軟弱無能的亡國君.
何為腐蝕, 腐蝕在于消除一些孤立點, 消除一些邊界點. 使邊界向內收縮. 我們可以借用腐蝕來消除無意義的小點.
那么腐蝕是如何實現的呢?
首先我們需要確定一個核 kernel , 明確核的尺寸與核取值.
還記得我們之前提到過的卷積核么, 其實是一個東西, 只不過數學形態學的操作不是線形的.
例如我們確定好這個核的尺寸為3*3
. 在opencv中核又被稱之為結構元素。
用結構元素與其覆蓋的二值圖像做與 and操作
如果都為1,結果圖像的該像素為1。否則為0。
簡單來講, 如果一個點周邊所有點與其本身, 只要這里面有一個0, 它就會被視作為0.
如何選取合適的核?
這個根據圖像的圖像質量, 分辨率, 應用場景不同, 因圖而異。 你需要去嘗試取不同的值
那么我們執行腐蝕操作, 最直觀的感覺就是二值化圖像向內縮減了一圈.
如果你取的核越大, 腐蝕效果越強.
在opencv中我們腐蝕要使用erode
函數. 我們需要新建一個核.
kernel = np.ones((5,5), np.uint8)
然后將核傳入erode
函數:
erorsion_img = cv2.erode(img, kernel, iterations=1)
其中iterations
指的是迭代的次數.
源代碼 CH4.5_erosion.py
''' 數學形態學 腐蝕 erorsion ''' import cv2 import numpy as np # 讀入灰度圖 img = cv2.imread("dao-bin.png", flags=cv2.IMREAD_GRAYSCALE) # 創建 核 kernel = np.ones((5,5), np.uint8) # 腐蝕 erorsion_img = cv2.erode(img, kernel, iterations=1) cv2.imwrite('dao_erorsion_k5.png', np.hstack((img, erorsion_img)))
迭代次數1
這個是實際的運行效果. 道
的筆觸變得細膩了. 粗糙的邊緣減少了. 向內縮減了一圈. 同時我們可以看到, 白色區域原來一個小黑點, 經過腐蝕就會變成一個大黑點.
迭代次數2
迭代次數3
迭代次數5
隨著迭代次數的增加, 我們可以看到, 原來連通的圖像, 被逐漸腐蝕, 變成一個個獨立的連通域孤島 最后逐漸消亡.
這就像一個沒落的帝國, 逐漸消亡的過程, 自己的地盤被一點點吞噬.