原型说明:
包含的h头文件
#define WHITE 255 #define BLACK 0 #include<stdio.h> #include<malloc.h> int medfilt5(unsigned char *imagein,unsigned char *imageout, int size[2]); int iminflate(unsigned char *imagein,int str[25],unsigned char *imageout,int size[2]); int imbrim(unsigned char *imagein,unsigned char *imageout,int threshold,int size[2]);
源码
#include"imft.h" int medfilt5(unsigned char *imagein,unsigned char *imageout, int size[2]) { int i,j,m,n; char temp; char nerbour[25]; for(i = 2; i < size[1] - 2; i ++ ) { for(j = 2; j < size[0] - 2; j++ ) { nerbour[0] = *(imagein + (i-2) * size[0] + j-2 ); nerbour[1] = *(imagein + (i-2) * size[0] + j-1 ); nerbour[2] = *(imagein + (i-2) * size[0] + j ); nerbour[3] = *(imagein + (i-2) * size[0] + j+1 ); nerbour[4] = *(imagein + (i-2) * size[0] + j+2 ); nerbour[5] = *(imagein + (i-1) * size[0] + j-2 ); nerbour[6] = *(imagein + (i-1) * size[0] + j-1 ); nerbour[7] = *(imagein + (i-1) * size[0] + j ); nerbour[8] = *(imagein + (i-1) * size[0] + j+1 ); nerbour[9] = *(imagein + (i-1) * size[0] + j+2 ); nerbour[10] = *(imagein + (i) * size[0] + j-2 ); nerbour[11] = *(imagein + (i) * size[0] + j-1 ); nerbour[12] = *(imagein + (i) * size[0] + j ); nerbour[13] = *(imagein + (i) * size[0] + j+1 ); nerbour[14] = *(imagein + (i) * size[0] + j+2 ); nerbour[15] = *(imagein + (i+1) * size[0] + j-2 ); nerbour[16] = *(imagein + (i+1) * size[0] + j-1 ); nerbour[17] = *(imagein + (i+1) * size[0] + j ); nerbour[18] = *(imagein + (i+1) * size[0] + j+1 ); nerbour[19] = *(imagein + (i+1) * size[0] + j+2 ); nerbour[20] = *(imagein + (i+2) * size[0] + j-2 ); nerbour[21] = *(imagein + (i+2) * size[0] + j-1 ); nerbour[22] = *(imagein + (i+2) * size[0] + j ); nerbour[23] = *(imagein + (i+2) * size[0] + j+1 ); nerbour[24] = *(imagein + (i+2) * size[0] + j+2 ); for( m = 0; m < 24; m++ ) { for( n = 0; n < 24; n++ ) { if(nerbour[n] < nerbour[n+1]) { temp = nerbour[n+1]; nerbour[n+1] = nerbour[n]; nerbour[n] = temp; } } } *(imageout + i*size[0] + j) = nerbour[12]; } } for(i = 0; i < size[1]; i++) { *(imageout+ i*size[0]) = *(imagein + i * size[0] ); *(imageout+ i*size[0] + 1) = *(imagein + i * size[0] + 1); *(imageout+ i*size[0] + size[0] - 2) = *(imagein + i * size[0] + size[0] - 2); *(imageout+ i*size[0] + size[0] - 1) = *(imagein + i * size[0] + size[0] - 1); } for(i = 0; i < size[0]; i++) { *(imageout+ j) = *(imagein + i); *(imageout+ size[0] + i) = *(imagein + size[0] + i); *(imageout+ size[0] * (size[1] - 2) + i) = *(imagein + (size[1] - 2) * size[0] + i); *(imageout+ size[0] * (size[1] - 1) + i) = *(imagein + (size[1] - 1) * size[0] + i); } return 0; } int iminflate(unsigned char *imagein,int str[25],unsigned char *imageout,int size[2]) { int i,j; for(i = 2; i < size[1] - 2; i++) { for(j = 2; j < size[0] - 2; j++) { if( *(imagein + i * size[0] + j) == WHITE) { *(imageout + (i-2) * size[0] + j-2 ) = str[0] * WHITE; *(imageout + (i-2) * size[0] + j-1 ) = str[1] * WHITE; *(imageout + (i-2) * size[0] + j ) = str[2] * WHITE; *(imageout + (i-2) * size[0] + j+1 ) = str[3] * WHITE; *(imageout + (i-2) * size[0] + j+2 ) = str[4] * WHITE; *(imageout + (i-1) * size[0] + j-2 ) = str[5] * WHITE; *(imageout + (i-1) * size[0] + j-1 ) = str[6] * WHITE; *(imageout + (i-1) * size[0] + j ) = str[7] * WHITE; *(imageout + (i-1) * size[0] + j+1 ) = str[8] * WHITE; *(imageout + (i-1) * size[0] + j+2 ) = str[9] * WHITE; *(imageout + (i) * size[0] + j-2 ) = str[10] * WHITE; *(imageout + (i) * size[0] + j-1 ) = str[11] * WHITE; *(imageout + (i) * size[0] + j ) = str[12] * WHITE; *(imageout + (i) * size[0] + j+1 ) = str[13] * WHITE; *(imageout + (i) * size[0] + j+2 ) = str[14] * WHITE; *(imageout + (i+1) * size[0] + j-2 ) = str[15] * WHITE; *(imageout + (i+1) * size[0] + j-1 ) = str[16] * WHITE; *(imageout + (i+1) * size[0] + j ) = str[17] * WHITE; *(imageout + (i+1) * size[0] + j+1 ) = str[18] * WHITE; *(imageout + (i+1) * size[0] + j+2 ) = str[19] * WHITE; *(imageout + (i+2) * size[0] + j-2 ) = str[20] * WHITE; *(imageout + (i+2) * size[0] + j-1 ) = str[21] * WHITE; *(imageout + (i+2) * size[0] + j ) = str[22] * WHITE; *(imageout + (i+2) * size[0] + j+1 ) = str[23] * WHITE; *(imageout + (i+2) * size[0] + j+2 ) = str[24] * WHITE; } } } return 0; } int imbrim(unsigned char *imagein,unsigned char *imageout,int threshold,int size[2]) { int i,j,bt; for(i = 1; i < size[1] - 1; i++) { for(j = 1; j < size[0] - 1; j++) { bt = *(imagein + (i-1) * size[0] + j-1) + *(imagein + (i-1) * size[0] + j) + *(imagein + (i-1) * size[0] + j+1) +*(imagein + i * size[0] + j-1) - 8 * (*(imagein + i * size[0] + j) ) + *(imagein + i * size[0] + j+1) +*(imagein + (i+1) * size[0] + j-1) + *(imagein + (i+1) * size[0] + j) + *(imagein + (i+1) * size[0] + j+1); if( bt >= threshold ) *(imageout + i * size[0] + j) = WHITE; else *(imageout + i * size[0] + j) = BLACK; } } for(i = 0; i < size[1]; i++) { *(imageout + i * size[0]) = BLACK; *(imageout + i * size[0] + 1) = BLACK; *(imageout + i * size[0] + 2) = BLACK; *(imageout + i * size[0] + size[0] - 1) = BLACK; *(imageout + i * size[0] + size[0] - 2) = BLACK; *(imageout + i * size[0] + size[0] - 3) = BLACK; } for(i = 0; i < size[0]; i++) { *(imageout + 0 * size[0] + i) = BLACK; *(imageout + 1 * size[0] + i) = BLACK; *(imageout + 2 * size[0] + i) = BLACK; *(imageout + (size[1] - 1) * size[0] + i) = BLACK; *(imageout + (size[1] - 2) * size[0] + i) = BLACK; *(imageout + (size[1] - 3) * size[0] + i) = BLACK; } return 0; }