【第13節(jié)】OpenCV形態(tài)學轉換
目標
原理
????????形態(tài)學操作是根據(jù)圖像形狀進行的簡單操作。一般情況下對二值化圖像進行的操作。需要輸入兩個參數(shù),一個是原始圖像,第二個被稱為結構化元素或核,它是用來決定操作的性質的。兩個基本的形態(tài)學操作是腐蝕和膨脹。他們的變體構成了開運算,閉運算,梯度等。我們會以下圖為例逐一介紹它們。

1、腐蝕
????????就像土壤侵蝕一樣,這個操作會把前景物體的邊界腐蝕掉(但是前景仍然是白色)。這是怎么做到的呢?卷積核沿著圖像滑動,如果與卷積核對應的原圖像的所有像素值都是1,那么中心元素就保持原來的像素值,否則就變?yōu)榱?。這回產(chǎn)生什么影響呢?根據(jù)卷積核的大小靠近前景的所有像素都會被腐蝕掉(變?yōu)?),所以前景物體會變小,整幅圖像的白色區(qū)域會減少。這對于去除白噪聲很有用,也可以用來斷開兩個連在一塊的物體等。
????這里我們有一個例子,使用一個5x5的卷積核,其中所有的值都是1。讓我們看看他是如何工作的:
結果:

2、膨脹
????????與腐蝕相反,與卷積核對應的原圖像的像素值中只要有一個是1,中心元素的像素值就是1。所以這個操作會增加圖像中的白色區(qū)域(前景)。一般在去噪聲時先用腐蝕再用膨脹。因為腐蝕在去掉白噪聲的同時,也會使前景對象變小。所以我們再對他進行膨脹。這時噪聲已經(jīng)被去除了,不會再回來了,但是前景還在并會增加。膨脹也可以用來連接兩個分開的物體。
結果:

3、開運算
????先進性腐蝕再進行膨脹就叫做開運算。就像我們上面介紹的那樣,它被用來去除噪聲。這里我們用到的函數(shù)是CV2.morphologyEx()。
結果:

4、閉運算
????????先膨脹再腐蝕。它經(jīng)常被用來填充前景物體中的小洞,或者前景物體.上的小黑點。
結果:

5、形態(tài)學梯度
????????其實就是一幅圖像膨脹與腐蝕的差別。結果看上去就像前景物體的輪廓。
結果:

6、禮帽
????????原始圖像與進行開運算之后得到的圖像的差。下面的例子是用9*9的核進行禮帽操作的結果:
結果:

7、黑帽
????????進行閉運算之后得到的圖像與原始圖像的差
結果:

結構化元素
????????在前面的例子中我們使用Numpy構建了結構化元素,它是正方形的。但有時我們需要構建-個橢圓形/圓形的核。為了實現(xiàn)這種要求,提供了OpenCV函CV2.getStructuringElement(。你只需要告訴他你需要的核的形狀和大小。