博客已转移至个人网站(http://www.p-chao.com)
原型说明:
包含的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;
}