附上中值滤波算法代码:
static void PictureMedianFilter(void *pInbuf,void *pOutbuf,int width,int heigh)
{
unsigned short * pIn = (unsigned short*)pInbuf;
unsigned short * pOut= (unsigned short*)pOutbuf;
unsigned short * pt;
short ii,jj,m,n;
unsigned short y_temp,temp,crb;
#define PRA_WIDTH 2
#define PRA_ALG_LEN 5 //修改成2、3、4后没有任何效果
for(ii=0;ii!=heigh;ii++)
for(jj=0;jj!=width;jj++)
{
if((ii<PRA_WIDTH) || (ii>=heigh-PRA_WIDTH) || (jj<PRA_WIDTH) || (jj>=width-PRA_WIDTH))
{ *(pOut + ii * width + jj) = *(pIn + ii * width + jj);}
else
{
pt = (pIn + ii * width + jj);
crb= *pt & 0xff;
y_temp = 0;
for(m=0;m!=PRA_ALG_LEN;m++)
for(n=0;n!=PRA_ALG_LEN;n++)
{
temp = *(pt + width*(m-PRA_WIDTH) + (n-PRA_WIDTH));
y_temp += ((temp >> 8) & 0xff);
}
y_temp /= 25;
*(pOut + ii * width + jj) = (y_temp << 8) | crb;
}
}
}
|