一般圖像處理是針對圖像做形狀的改變,而形態處理則是對圖像進行結構性的改變,而常見的形態學處理就是針對二值圖像(圖像中的任何像素灰度不是0就是255)的膨脹(Dilation)、腐蝕(Erosion)、開運算(先腐蝕在膨脹)、閉運算(先膨脹再腐蝕)
注意:如果對灰度圖進行膨脹、腐蝕等,會起到增強圖像對比度的效果
1.理論:
膨脹(dilation、dilation_rectangle1、dilation_circle)-增加像素:
把結構元素B的中心元素(origin)掃描圖像的每一個像素,用結構元素與其覆蓋的二值圖像做"或"操作 如果都為0
(重合部分像素值都不同),結果圖像的該像素為0(像素灰度值0)。否則為1(像素灰度值255)。
如圖所示:左邊是被處理的圖像X(二值圖像,我們針對的是黑點),中間是結構元素B。膨脹的方法是,拿B的中心點
和X上的點及X周圍的點一個一個對,如果B上有一個點落在X(圖像中所有黑點)的范圍內,則該點(B的中心點所在的位置)
就為黑;右邊是膨脹后的結果。可以看出,它包含X的所有范圍,就像X膨脹一圈
腐蝕(erosion、erosion_rectangle1、erosion_circle)-減少像素:
把結構元素B的中心元素(origin)掃描圖像的每一個像素,用結構元素與其覆蓋的二值圖像做"與"操作 如果都為1(重合部分像素值都相同),
結果圖像的該像素(中心元素所在位置)為1(像素灰度值255)。否則為0(像素灰度值0)。
如圖所示:左邊是被處理的圖像X(二值圖像,我們針對的是黑點),中間是結構元素B,那個標有origin的點是中心點,即當前處理元素的位置。
腐蝕的方法是,拿B的中心點和X上的點一個一個對比,如果B上的所有點都在X的黑點范圍內,則B的中心點保留,否則將該點去掉
膨脹和腐蝕主要用途:
- 刪除噪聲
- 圖中個別元素的隔離與不同元素的連接
- 尋找途中濃密點與空洞
注意:對標准矩形或圓形進行等比例擴大或縮小要用上面的算子,擴展比例為3:1,例:dilation_rectangle1(RegionTrans,RegionDilation,3,3)
為對標准矩形區域RegionTrans的長和寬方向各增加一個像素
開運算(opening_rectangle1等)-減少像素:先進行腐蝕,然后再膨脹
如圖所示:示左邊是被處理的圖象X(二值圖象,我們針對的是黑點),右邊是結構元素B,下面的兩幅圖中左邊是腐蝕后的結果;右邊是在此基礎上膨脹的結果。可以看到,原圖經過開運算后,一些孤立的小點被去掉了。一般來說,開運算能夠去除孤立的小點、毛刺和小橋(即連通兩塊區域的小點),而總的位置和形狀不變。這就是開運算的作用。要注意的是,如果B是非對稱的,進行開運算時要用B的對稱集Bv膨脹,否則,開運算的結果和原圖相比要發生平移。
閉運算(closing_rectangle1等)-增加像素:先進行膨脹,然后進行腐蝕
左邊是被處理的圖象X(二值圖象,我們針對的是黑點),右邊是結構元素B,下面的兩幅圖中左邊是膨脹后的結果,右邊是在此基礎上腐蝕的結果可以看到,原圖經過閉運算后,斷裂的地方被彌合了。一般來說,閉運算能夠填平小湖(即小孔),彌合小裂縫,而總的位置和形狀不變,比如在OCR字符識別、車牌識別等地方,需要對激光點打印的字體或有一些缺陷的字體進行閉運算,實現連接。同樣要注意的是,如果B是非對稱的,進行閉運算時要用B的對稱集Bv膨脹,否則,閉運算的結果和原圖相比要發生平移。
注意:
1)要與原圖像的像素點作比較,新增或去掉的像素點不算。
2)上面我們介紹的是對二值化圖像的處理。如果是對灰度圖像進行形態學處理,則膨脹和閉運算會使灰度圖像變亮,腐蝕和開運算會使灰度圖像變暗,這點大家注意下。
總結: 1)結構元素的形狀(圓形,矩形)一般隨着要處理的區域形狀(圓形、矩形等)的不同而有所不同。比如圓形的結構元素對圓形區域的腐蝕、膨脹效果會更好。
2)結構元素的半徑或邊長越大,則膨脹、腐蝕效果越強。
3)如果想增加像素,用膨脹或閉運算;如果想減少像素,用腐蝕或開運算。區別在於膨脹和腐蝕的度要大於閉運算和開運算。
4)形態學對二值化區域是改變形狀,而對灰度圖像是改變圖像明暗。
5)開運算一般適合去除邊緣毛刺、孔洞等,如果需要對標准圓形或矩形區域四周進行等比例擴大或縮小,可以使用算子dilation_rectangle1、erosion_rectangle1、dilation_circle、erosion_circle算子。