形態學圖像處理-腐蝕和膨脹

態學圖像處理-腐蝕和膨脹 分類: 圖像處理 2009-10-24 16:32 3231人閱讀 評論(9) 收藏 舉報

我想做一個關於形態學圖像處理的專題,寫一寫我的想法,並且公開實現這些演算法的代碼。因為形態學圖像處理的最基礎方法就是腐蝕和膨脹,因此就從這兩個方法開始。

腐蝕:

把結構元素S 平移x 後得到Sx ,若Sx 包含於X ,我們記下這個x 點,所有滿足上述條件的x 點組成的集合稱做XS 腐蝕(Erosion)的結果。用公式表示為:

腐蝕的方法是,拿S 的原點和X上的點一個一個地對比,如果S 上的所有點都在X 的範圍內,則S 的原點對應的點保留,否則將該點去掉。以下是詳細的代碼,並且附上測試圖片:

#include #include #include #include #include

unsigned char **get_matrix_space(int m,int n) { int i; unsigned char **a; a=(unsigned char **)calloc(m,sizeof(unsigned char *)); for(i=0;ireturn a; }

main(){ FILE *fs,*fd; unsigned char c1,c2,**ps,**pd,**get_matrix_space(int,int); int width,height,L,i,j,l,m,match; if((fs= fopen("sourcea.pgm","rb")) ==NULL){ printf("can"t open %s/n","source.pgm"); exit(1); } if((fd = fopen("destination.pgm","wb")) ==NULL){ printf("can"t open %s/n","destination.pgm"); exit(1); }

fscanf(fs,"%c%c/n%d%d/n%d/n",&c1,&c2,&width,&height,&L); ps=get_matrix_space(height,width); pd=get_matrix_space(height,width);

for(i=0;i for(j=0;j fread(&ps[i][j],sizeof(unsigned char),1,fs); pd[i][j] = 0; } }

/////////////////////// match = 1; for(i=0;i for(j=0;j for(m=i;m for(l=j;l if(ps[m][l]!=255){ match = 0; } } } if(match != 0){ pd[i][j]=255; } match = 1; } } ////////////////////// fprintf(fd,"%c%c/n%d %d/n%d/n","P","5",width,height,L); for(i=0;i for(j=0;j fwrite(&pd[i][j],sizeof(unsigned char),1,fd); } } }

膨脹:

把結構元素S 平移x 後得到Sx ,若Sx X 相交不為空,我們記下這個x 點,所有滿足上述條件的x 點組成的集合稱做XS 膨脹((dilation))的結果。用公式表示為:

膨脹的方法是,拿S 的原點和X 上的點一個一個地對比,如果S 上有一個點落在X 的範圍內,則S 的原點對應的點就為圖像。以下是詳細的代碼,並且附上測試圖片:

#include #include #include #include #include

unsigned char **get_matrix_space(int m,int n) { int i; unsigned char **a;

a=(unsigned char **)calloc(m,sizeof(unsigned char *)); for(i=0;ireturn a; }

main(){ FILE *fs,*fd; unsigned char c1,c2,**ps,**pd,**v,**get_matrix_space(int,int); int width,height,L,i,j,l,m,windowSize,match; if((fs= fopen("source.pgm","rb")) ==NULL){ printf("can"t open %s/n","source.pgm"); exit(1); } if((fd = fopen("destination.pgm","wb")) ==NULL){ printf("can"t open %s/n","destination.pgm"); exit(1); }

fscanf(fs,"%c%c/n%d%d/n%d/n",&c1,&c2,&width,&height,&L); ps=get_matrix_space(height,width); pd=get_matrix_space(height,width);

for(i=0;i for(j=0;j fread(&ps[i][j],sizeof(unsigned char),1,fs); } } match = 0; ////////////////////// //用2x2方塊作為膨脹的結構元素。 for(i=0;i for(j=0;j for(l=i;l for(m=j;m if(ps[l][m]==255){ match = 1; } } } if(match == 1){ pd[i][j] = 255; match = 0; } } } ////////////////////// fprintf(fd,"%c%c/n%d %d/n%d/n","P","5",width,height,L); for(i=0;i for(j=0;j fwrite(&pd[i][j],sizeof(unsigned char),1,fd); } } }

參考文獻:http://yzhkch.ecit.edu.cn/jsjtxx/html/image_6_1.htm


推薦閱讀:

處理員工辭職的幾種辦法
《小兒積食辨證與處理》用戶反饋
RAW格式圖像銳化處理實戰
發生出軌事件之後如何處理
尷尬劉海這樣處理

TAG:圖像處理 | 圖像 | 腐蝕 | 處理 |