形態學基本概念
基本思想:用一定形態的結構元素去度量和提取圖像中的對應形狀,達到分析知識的目的。可用於圖像處理的各個方面,包括圖像分割、邊界檢測、特征提取。
結構元素:形態學變換中的基本元素,使為了探測圖像的某種結構信息而設計的特定形狀和尺寸的圖像,稱為收集圖像結構信息的探針。
結構元素有多種類型:如圓形、方形、線型等,可攜帶知識(形態、大小、灰度和色度信息)來探測、研究圖像的結構特點。
形態學運算包括:二值化腐蝕和膨脹、二值化開閉運算、骨架抽取、擊中擊不中變換等。
形態學四個基本算子:膨脹,腐蝕、開啟和閉合組成,這些基本運算還可以推導和組合成各種數學形態學實用算法。
腐蝕運算
腐蝕運算思路:定義結構元素(與模板類似),結構元素在整幅圖像中移動,移動到每個像素點上,只有結構元素與圖像上對應像素點的像素值全部相等時,保留這個像素點的值。
腐蝕運算作用:消除物體邊界點,使邊界點向內部收縮,可以把小於結構元素的物體去除。選取不同大小的結構元素,去除不同大小的物體。如兩個物體間有細小的連通,通過腐蝕可以將兩個物體分開。
腐蝕運算:
腐蝕運算示意圖:
基本方法:
通常拖到結構元素在X域移動,在每一個位置上,當結構元素B在中心平移到X圖像上的某優點(x,y)。
如果結構元素內的每一個像素都與以(x,y)為中心的相同鄰域中對應像素完全相同,那么就保留(x,y)像素點。
對於不滿足條件的像素點則全部刪除,達到邊界向內收縮效果。
腐蝕運算c語言實現
- 水平腐蝕:不處理左右兩邊
- 垂直腐蝕:不處理上下兩行
- 全方位腐蝕:不處理四周
int Image[120][180]; memset(Image, 0, sizeof(Image)); //全方位腐蝕運算 for (int i = 1; i < Use_ROWS-1; i++) { for (int j = 1; j < Use_Line - 1; j++) { if (Image_Use[i][j] == 255 && Image_Use[i][j + 1] == 255 && Image_Use[i][j - 1] == 255) { Image[i][j] = 255; } } }
膨脹運算
膨脹運算思路:定義結構元素(與模板類似),結構元素在整幅圖像中移動,移動到每個像素點上,如果結構元素與圖像上對應像素點的像素值至少有一個像素相等時,保留這個像素點的值。
膨脹運算作用:與腐蝕相反,對二值化物體邊界點擴充,將與物體接觸的所以背景點合並到該物體中,使邊界向外擴張。如果兩個物體之間的距離比較近,會把兩個物體連通到一起,對填補圖像分割后物體的空洞有用。
膨脹與腐蝕比較:
- 膨脹:填充圖像中的小孔(比結構元素小的孔洞)及圖像邊緣處的小凹陷部分。
- 腐蝕:消除圖像邊緣小的成分,並將圖像縮小,從而使其補集擴大。
- 膨脹和腐蝕:並不互為逆運算,可以級聯結合使用。
膨脹運算:
膨脹運算示意圖:
膨脹運算c語言實現
- 水平膨脹:不處理左右兩邊
- 垂直膨脹:不處理上下兩行
- 全方位膨脹:不處理四周
int Image[120][180]; memset(Image, 0, sizeof(Image)); //全方位膨脹運算 for (int i = 1; i < Use_ROWS-1; i++) { for (int j = 1; j < Use_Line - 1; j++) { if (Image_Use[i][j] == 255 || Image_Use[i][j + 1] == 255 || Image_Use[i][j - 1] == 255) { Image[i][j] = 255; } } }