你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
边缘保持最优化滤波方法(三)
 

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;
  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089