当前位置:文档之家› 边缘保持最优化滤波方法

边缘保持最优化滤波方法

1引言在摄影时,由于分辨率不足、感光度设置偏高等原因,经常会遇到一些布满椒盐噪声或斑点噪声的照片,这些细小的噪声严重影响了照片效果。

在这种情况下,通常可以使用均值滤波等滤波方法对照片进行平滑处理。

平滑后,一般可以达到去除噪声的效果。

但是一些边缘也随之变得模糊,导致照片丢失很多细节。

有没有一种方法可以达到既去除噪声的目的,又不破坏边缘和细节呢?答案是肯定的。

边缘保持最优化(EPOS )滤波算法就是这样一种在去除噪声的同时可以最佳保持边缘和细节的滤波方法,下面将对这种方法的原理和实现加以详细介绍。

2EPOS 滤波原理2.1算法综述EPOS 滤波是一种可以智能调整滤波窗口大小和形状的平滑算法。

它通过首先使用噪声方差的大小对均匀区域和含有边缘或孤立点的区域加以判断区分,然后仅对每个像素邻域中的均匀部分进行均值处理,来达到在滤波的同时保证边缘不变模糊的目的。

在确定滤波窗口的大小和形状时,该算法将窗口的邻域分为8个不相重合的部分(如图1),通过逐步剔除与中心像素不相同的邻域,应用最后剩余区域中的像素灰度统计量估算中心像元最终的灰度值。

2.2算法流程与分析EPOS 执行滤波的流程如图2。

通过分析其计算过程可知,EPOS 滤波的执行流程可以分为如下几个部分:判断是否符合均值滤波条件,窗口区域分块并计算各块方差,选出方差最大的一个并进行分块剔除,重新计算剩下分块方差。

若仍不符合条件,进行窗口缩小,并重复上述过程,直至符合条件或窗口缩小为3×3的为止。

由于每个窗口都是三角形,需要分别计算,给程序编码带来一些麻烦。

综合分析,可以设置3个循环,分别为窗口移动循环、窗口缩小循环和区域删减循环,进行EPOS 滤波计算。

边缘保持最优化滤波方法吴文瑾黄敬贺摘要:在图像处理中,去除噪声的同时常常会给边缘与细节带来不可恢复的损失。

为了解决这一问题,讲解一种可以在去噪的同时,保留边缘细节的边缘保持最优化滤波方法。

首先对该算法原理与实现方式进行了阐述,之后通过实验对该滤波方法的效果加以分析,最后对该算法的优缺点进行了总结。

关键词:滤波;平滑;边缘保持;EPOS图1EPOS 算法将滤波窗口划分成的8个不相重合的部分图2EPOS执行滤波的流程图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;for(k=i-m;k<i;k++)for(l=j-k+i;l<j;l++){d11[1]+=(AA[k*width+l]-u0[1])*(AA [k*width+l]-u0[1]);}d11[1]=d11[1]/(2*m+1)/(2*n+1)*8;//////////////////////////////for(k=i-m;k<i;k++)for(l=j-k+i;l<j+m;l++){u0[2]+=AA[k*width+l];}u0[2]=u0[2]/(2*m+1)/(2*n+1)*8;for(k=i-m;k<i;k++)for(l=j-k+i;l<j+m;l++){d11[2]+=(AA[k*width+l]-u0[2])*(AA [k*width+l]-u0[2]);}d11[2]=d11[2]/(2*m+1)/(2*n+1)*8;//////////////////////////////for(k=i;k<i+m;k++)for(l=j+k-i;l<j+m;l++){u0[3]+=AA[k*width+l];}u0[3]=u0[3]/(2*m+1)/(2*n+1)*8;for(k=i;k<i+m;k++)for(l=j+k-i;l<j+m;l++){d11[3]+=(AA[k*width+l]-u0[3])*(AA [k*width+l]-u0[3]);}d11[3]=d11[3]/(2*m+1)/(2*n+1)*8;//////////////////////////////for(k=i;k<i+m;k++)for(l=j;l<j+k-i;l++){u0[4]+=AA[k*width+l];}u0[4]=u0[4]/(2*m+1)/(2*n+1)*8;for(k=i;k<i+m;k++)for(l=j;l<j+k-i;l++){d11[4]+=(AA[k*width+l]-u0[4])*(AA [k*width+l]-u0[4]);}d11[4]=d11[4]/(2*m+1)/(2*n+1)*8;//////////////////////////////for(k=i;k<i+m;k++)for(l=j-k+i;l<j+m;l++){u0[5]+=AA[k*width+l];}u0[5]=u0[5]/(2*m+1)/(2*n+1)*8;for(k=i;k<i+m;k++)for(l=j-k+i;l<j+m;l++){d11[5]+=(AA[k*width+l]-u0[5])*(AA [k*width+l]-u0[5]);}d11[5]=d11[5]/(2*m+1)/(2*n+1)*8;//////////////////////////////for(k=i;k<i+m;k++)for(l=j-m;l<j-k+i;l++){u0[6]+=AA[k*width+l];}u0[6]=u0[6]/(2*m+1)/(2*n+1)*8;for(k=i;k<i+m;k++)for(l=j-m;l<j-k+i;l++){d11[6]+=(AA[k*width+l]-u0[6])*(AA [k*width+l]-u0[6]);}d11[6]=d11[6]/(2*m+1)/(2*n+1)*8;//////////////////////////////for(k=i-m;k<i;k++)for(l=j-m;l<j+k+i;l++){u0[7]+=AA[k*width+l];}u0[7]=u0[7]/(2*m+1)/(2*n+1)*8;for(k=i-m;k<i;k++)for(l=j-m;l<j+k+i;l++){d11[7]+=(AA[k*width+l]-u0[7])*(AA [k*width+l]-u0[7]);}d11[7]=d11[7]/(2*m+1)/(2*n+1)*8;while(z<7)//执行区域删减循环{//计算方差最大最小的区域for(i1=0;i1<8;i1++)for(j1=0;j1<z;j1++){if((d11[i1]>dmax)&&(i1!=I[j1]))dmax=d11[i1],Imax=i1;if(d11[i1]<min)min=d11[i1];}if(min<=d0*u*u)break;//符合缩小窗口条件,退出区域删减循环,进入缩小窗口循环//计算删减后总的保留区域的均值I[z++]=Imax;u=0;int count=0;for(i1=0;i1<z;i1++)for(j1=0;j1<8;j1++){if(j1!=I[i1])u+=u0[i1];count++;}u=u/count;//计算区域删减后总的保留区域的方差d[0]=0;for(k=i-m;k<i;k++)for(l=j+k-i;l<j;l++){d[0]+=(AA[k*width+l]-u)*(AA[k*width+l]-u);}d[0]=d[0]/(2*m+1)/(2*n+1)*8;////////////////////////////d[1]=0;for(k=i-m;k<i;k++)for(l=j-k+i;l<j;l++){d[1]+=(AA[k*width+l]-u)*(AA[k*width+l]-u);}d[1]=d[1]/(2*m+1)/(2*n+1)*8;//////////////////////////////d[2]=0;for(k=i-m;k<i;k++)for(l=j-k+i;l<j+m;l++){d[2]+=(AA[k*width+l]-u)*(AA[k*width+l]-u);}d[2]=d[2]/(2*m+1)/(2*n+1)*8;//////////////////////////////d[3]=0;for(k=i;k<i+m;k++)for(l=j+k-i;l<j+m;l++){d[3]+=(AA[k*width+l]-u)*(AA[k*width+l]-u);}d[3]=d[3]/(2*m+1)/(2*n+1)*8;//////////////////////////////d[4]=0;for(k=i;k<i+m;k++)for(l=j;l<j+k-i;l++){d[4]+=(AA[k*width+l]-u)*(AA[k*width+l]-u);}d[4]=d[4]/(2*m+1)/(2*n+1)*8;//////////////////////////////d[5]=0;for(k=i;k<i+m;k++)for(l=j-k+i;l<j;l++){d[5]+=(AA[k*width+l]-u)*(AA[k*width+l]-u);}d[5]=d[5]/(2*m+1)/(2*n+1)*8;//////////////////////////////d[6]=0;for(k=i;k<i+m;k++)for(l=j-m;l<j-k+i;l++){d[6]+=(AA[k*width+l]-u)*(AA[k*width+l]-u);}d[6]=d[6]/(2*m+1)/(2*n+1)*8;//////////////////////////////d[7]=0;for(k=i-m;k<i;k++)for(l=j-m;l<j+k-i;l++){d[7]+=(AA[k*width+l]-u)*(AA[k*width+l]-u);}d[7]=d[7]/(2*m+1)/(2*n+1)*8;//////////////////////////////d1=0;for(i1=0;i1<z;i1++)for(j1=0;j1<8;j1++){if(j1!=I[i1])d1+=d[i1];}d1=d1/count;//将达到要求的保留区域均值作为该像素的灰度值if(d1<d0){PP[i*width+j]=int(u+0.5);break;}}//while区域删减循环if(d1<d0)break;//同时退出缩小窗口循环}//缩小窗口循环}//if}//窗口移动4滤波实验与效果分析对一幅实验图像(如图3)使用9×9窗口进行了EPOS滤波处理,结果图如图4所示,并采用同样大小的窗口做均值平滑滤波(如图5)进行效果比对。

相关主题