3 核心代码
//////////////////////////灰度值计算
min=65535;
float d0=0.5227,dmax=0.0;
for(i=0;i<height;i++)//窗口移动,i,j为窗口中心
for(j=0;j<width;j++)
{ PP[i*width+j]=AA[i*width+j];
if((i>=m0)&&(j>=n0)&&(i<height-m0)&&(j<width-n0))
{int m,n;
int k,l;
int Imax,z=0;
int I[7]={9,9,9,9,9,9,9};//因窗口只有8个,预先赋值9以在判断时方便区分
for(m=m0;m>1;m--)//窗口缩小循环
{n=m;
float u=uu(AA,i,j,m,n,width);//窗口均值
int d1=0;
for(k=i-m;k<=i+m;k++)
for(l=j-n;l<=j+n;l++)
{d1+=(AA[k*width+l]-u)*(AA[k*width+l]-u);}
d1=d1/(2*m+1)/(2*n+1);//窗口方差
if(d1<d0*u*u)
{PP[i*width+j]=int(u+0.5);
break;}//判断是否符合整个区域均值滤波条件
float u0[8]={0},d[8]={0},d11[8]={0};//累加数组置零
//计算各区域在未删减之前的均值和方差
for(k=i-m;k<i;k++)
for(l=j+k-i;l<j;l++)
{u0[0]+=AA[k*width+l];}
u0[0]=u0[0]/(2*m+1)/(2*n+1)*8;
for(k=i-m;k<i;k++)
for(l=j+k-i;l<j;l++)
{d11[0]+=(AA[k*width+l]-u0[0])*(AA[k*width+l]-u0[0]);}
d11[0]=d11[0]/(2*m+1)/(2*n+1)*8;
////////////////////////////
for(k=i-m;k<i;k++)
for(l=j-k+i;l<j;l++)
{u0[1]+=AA[k*width+l];} u0[1]=u0[1]/(2*m+1)/(2*n+1)*8;
|