熱(re)線電話:0755-23712116
郵箱:contact@legoupos.cn
地址:深圳市寶(bao)安區沙井(jing)街道后亭茅洲山工(gong)業(ye)園工(gong)業(ye)大廈全至科技創(chuang)新園科創(chuang)大廈2層(ceng)2A
基本思想:用(yong)一定形態的(de)結(jie)構元素(su)去度量和提(ti)取(qu)圖(tu)像(xiang)(xiang)中(zhong)的(de)對應形狀,達到分析(xi)知識(shi)的(de)目(mu)的(de)。可用(yong)于圖(tu)像(xiang)(xiang)處理的(de)各個方面,包括圖(tu)像(xiang)(xiang)分割、邊界檢測、特征提(ti)取(qu)。
結構元素:形態學變換中的基本元素,使為了探測圖像的某種結構信息而設計的特定形狀和尺寸的圖像,稱為收集圖像結構信息的探針。
結構元素有(you)多種類型:如圓形、方(fang)形、線型等,可(ke)攜(xie)帶知識(形態(tai)、大小、灰(hui)度(du)和色度(du)信息(xi))來探測、研究圖像的(de)結構特點(dian)。
形態學運算包括:二值化腐蝕和膨脹、二值化開閉運算、骨架抽取、擊中擊不中變換等。
形態學四個基本算(suan)子:膨脹(zhang),腐蝕、開啟和(he)閉合(he)組成(cheng),這些基本運算(suan)還可(ke)以推導和(he)組合(he)成(cheng)各(ge)種數學形態學實用算(suan)法(fa)。
腐蝕運算思路:定義結構元素(與模板類似),結構元素在整幅圖像中移動,移動到每個像素點上,只有結構元素與圖像上對應像素點的像素值全部相等時,保留這個像素點的值。
腐蝕運算作用:消(xiao)除物(wu)體邊(bian)界(jie)點(dian),使邊(bian)界(jie)點(dian)向內部收(shou)縮,可以(yi)把小(xiao)(xiao)于結構(gou)元素的(de)物(wu)體去除。選取不同大(da)小(xiao)(xiao)的(de)結構(gou)元素,去除不同大(da)小(xiao)(xiao)的(de)物(wu)體。如(ru)兩(liang)個物(wu)體間有(you)細(xi)小(xiao)(xiao)的(de)連通,通過腐(fu)蝕(shi)可以(yi)將兩(liang)個物(wu)體分開。
腐蝕運算:
腐蝕運算示意圖:
基本方法:
通常拖(tuo)到結(jie)構元(yuan)素在(zai)X域(yu)移動,在(zai)每一個(ge)位置上(shang),當(dang)結(jie)構元(yuan)素B在(zai)中心平(ping)移到X圖像上(shang)的某優點(x,y)。
如果(guo)結構元素(su)內的每一個像素(su)都與(yu)以(x,y)為中心(xin)的相同鄰域中對(dui)應像素(su)完(wan)全相同,那么(me)就保(bao)留(liu)(x,y)像素(su)點。
對于不滿足條件的(de)像素(su)點則(ze)全部刪除(chu),達到(dao)邊界向內收縮效果。
int Image[120][180]; memset(Image, 0, sizeof(Image)); //全方位腐蝕運(yun)算 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; } } }
膨脹運算思路:定義結構元素(與模板類似),結構元素在整幅圖像中移動,移動到每個像素點上,如果結構元素與圖像上對應像素點的像素值至少有一個像素相等時,保留這個像素點的值。
膨脹運算作用:與腐蝕(shi)相反,對(dui)二值化物(wu)體邊界點(dian)擴充,將與物(wu)體接觸的(de)(de)所以背景點(dian)合并到(dao)該物(wu)體中,使邊界向外擴張。如(ru)果兩個物(wu)體之間的(de)(de)距離比較近,會把兩個物(wu)體連(lian)通(tong)到(dao)一起,對(dui)填補圖像分割(ge)后物(wu)體的(de)(de)空洞有用。
膨脹與腐蝕比較:
膨脹運算:
膨脹運算示意圖:
int Image[120][180]; memset(Image, 0, sizeof(Image)); //全方位膨(peng)脹運(yun)算 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; } } }