📄 medianfilter.c
字号:
/************************************************************************************************
* Function :the is a inter face of image process,user only can change mem from 54 bytes
* Desinger : wujiancong
* Date : 04.05.T07
* Verision : 5.0
* Parameter : FILE *fptr; pointer to source file pointer
*************************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
static unsigned char mem[10*720*588];
static unsigned char buffer[10*720*588];
static int srcwidth=720;
static int srcheight=588;
/**********************************************************************************
*
*
* Get image height and widht
*
*
*************************************************************************************/
unsigned char GetMedianNum(unsigned char *bArray,int FilterLen)
{
int i,j;
unsigned char bTemp;
for(j=0;j<FilterLen-1;j++)
{
for(i=0;i<FilterLen-j-1;i++)
{
if(bArray[i]>bArray[i+1])
{
bTemp=bArray[i];
bArray[i]=bArray[i+1];
bArray[i+1]=bTemp;
}
}
}
if((FilterLen&1)>0) bTemp=bArray[(FilterLen+1)/2];
else bTemp=(bArray[(FilterLen+1)/2]+bArray[FilterLen/2])/2;
return bTemp;
}
void MedianFilter(int width,int height)
{
int i,j,k,l;
unsigned char aValue0[9];
long widthbytes=width;
int FilterH=3,FilterW=3;
int FilterMX=1,FilterMY=1;
for(i=0;i<height;i++)
for(j=0;j<widthbytes;j++)
buffer[i*widthbytes+j]=mem[i*widthbytes+j];
for(i=FilterMY;i<height-FilterMY;i++)
{
for(j=FilterMX;j<width-FilterMX;j++)
{
for(k=0;k<FilterH;k++)
{
for(l=0;l<FilterW;l++)
{
aValue0[k*FilterW+l]=buffer[widthbytes*(i-FilterMY+k)+(j-FilterMX+l)];
}
}
mem[i*widthbytes+j]=GetMedianNum(aValue0,FilterH*FilterW);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -