一.最基本兩個形態學運算----膨脹與腐蝕
啥叫形態學操作
形態學操作其實就是改變物體的形狀,比如腐蝕就是”變瘦”,膨脹就是”變胖”,看下圖就明白了:
(http://ex2tron.wang/opencv-python-erode-and-dilate/)

經驗之談:形態學操作一般作用於二值化圖,來連接相鄰的元素或分離成獨立的元素。腐蝕和膨脹是針對圖片中的白色(即前景)部分!
開/閉運算
先腐蝕后膨脹叫開運算(因為先腐蝕會分開物體,這樣容易記住),其作用是:分離物體,消除小區域。

經驗之談:很多人對開閉運算的作用不是很清楚,但看上圖↑,不用怕:如果我們的目標物體外面有很多無關的小區域,就用開運算去除掉;如果物體內部有很多小黑洞,就用閉運算填充掉。
為什么有了膨脹腐蝕還要開運算閉運算呢?其實開閉運算最重要的一點就是,可以保持物體原有大小。然后一個是消除物體內部孔洞的另一個是增強物體之間連接點的。
其他形態學操作
- 形態學梯度:膨脹圖減去腐蝕圖,
dilation - erosion,這樣會得到物體的輪廓:

膨脹與腐蝕能夠實現以下作用:
1.消除噪聲
2.分割出獨立的圖像元素,在圖像中連接相鄰的元素
3.尋找圖像中的明顯的極大值區域或者極小值區域
4.求出圖像的梯度
需要注意之處: 腐蝕和膨脹都是對圖像的白色部分(高亮部分)而言。膨脹是圖像中的高亮部分進行膨脹,類似於領域擴張,效果圖擁有比原圖更大的高亮區域;腐蝕是原圖的高亮部分被腐蝕,類似於領域被蠶食,效果圖擁有比原圖更小的高亮區域。
從數學的角度來說,膨脹和腐蝕操作就是將圖像與核進行卷積,核可以是任意形狀和大小的。

膨脹到底是怎么實現的呢?求局部最大值。
原圖與核進行卷積,將最大值賦予指定像素,從而使亮者更亮,效果就是亮的區域膨脹了。
再講腐蝕(Erosion):
操作與膨脹相反,求局部最小值。
可以理解為,移動結構B(核),如果結構B與結構A的交集完全屬於結構A的區域內,則保存該位置點,所有滿足條件的點構成結構A被結構B腐蝕的結果。

A被腐蝕后的結果貌似不對,好像應該是這樣的:

se_diamond =strel('diamond',4)創建一個菱形的結構元素,4是從結構化元素原點到其點的距離,必須為非負整數。

