700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 数字图像处理·自适应滤波器降低噪声

数字图像处理·自适应滤波器降低噪声

时间:2021-06-04 06:12:34

相关推荐

数字图像处理·自适应滤波器降低噪声

一.自适应局部降噪滤波器

1.原理

自适应局部降噪滤波器函数代码

function[f]=adpfilter(g,nhood,noiseVar)g=im2double(g);%局部均值u=(1/mn)*∑g(x,y)模板滤波,重叠区相*然后相加localMean=filter2(ones(nhood),g)/prod(nhood);%局部方差σ^2=(1/mn)*∑g^2(x,y)-u^2localVar=filter2(ones(nhood),g.^2)/prod(nhood)-localMean.^2;f=g-localMean;%g(x,y)-ug=localVar-noiseVar;%局部方差-噪声方差g=max(g,0);f=localMean+((f./max(localVar,noiseVar)).*g);%公式end

%例5.4自适应局部降低噪声滤波g=imread('Fig0508.tif');H1=imnoise(g,'gaussian',0,10^3/255^2);subplot(221),imshow(H1,[]),title('(a)被均值为0方差为1000的加性高斯噪声污染的图像');H2=fspecial('average',[7,7]);%7*7均值滤波H2=imfilter(H1,H2);subplot(222),imshow(H2,[]),title('(b)算数均值滤波的结果');H3=exp(imfilter(log(double(H1)),fspecial('average',[7,7])));%7*7算数均值滤波subplot(223),imshow(H3,[]),title('(c)几何均值滤波结果');H4=adpfilter(H1,[7,7],1000);%使用自定义函数subplot(224),imshow(H4,[]),title('(d)自适应滤波器');

二.自适应中值滤波器

1.原理

中值滤波器,只要脉冲噪声的空间密度不大,性能就会很好(根据经验,Pa和Pb小于 0.2)。自适应中值滤波可以处理具有更大概率的脉冲噪声。自适应中值滤波器的另一个优点是平滑非脉冲噪声时试图保留细节,这是传统中值滤波器所做不到的。自适应中值滤波器也工作于矩形窗口区域Sxy内。不同的是自适应中值滤波器在进行滤波处理时会根据某些条件而改变(或增大)Sxy的尺寸。

在模板窗口Sxy定义的滤波器区域内定义如下变量:

Zmin=min(Sxy),模板窗口Sxy中的最小灰度值Zmax=max(Sxy),模板窗口Sxy中的最大灰度值Zmed=med(Sxy),模板窗口Sxy中的灰度值的中值Zxy,坐标(x,y)处的灰度值Smax,Sxy允许的最大尺寸

进程A:

A1=Zmed-Zmin

A2=Zmed-Zmax

如果A1>0且A2<0,则转至进程B

否则增大窗口尺寸

如果窗口尺寸<=Smax,则重复进程A

否则输出Zmed

进程B:

B1=Zxy-Zmin

B2=Zxy-Zmax

如果B1>0且B2<0,则输出Zxy

否则输出Zmed

%自适应中值滤波函数functionII=adpmedianfilter(I,Smax)%Smax约束,噪声密度越大,Smax应当设置越高if(Smax<=1)||(Smax/2==round(Smax/2))||(Smax~=round(Smax))error('Smaxmustbeanoddinteger>1');end%初始化II=I;II(:)=0;%创建大小为I的0矩阵表示已经处理的点,1表示已经处理alreadyProcessed=false(size(I));%迭代%步长为2循环增大窗口的尺寸如果窗口尺寸《=Smaxfork=3:2:Smax%最小灰度二维顺序统计量滤波函数对称拓展边界zmin=ordfilt2(I,1,ones(k,k),'symmetric');%最大灰度zmax=ordfilt2(I,k*k,ones(k,k),'symmetric');%中值滤波中值灰度zmed=medfilt2(I,[kk],'symmetric');%进程A需要转到B步骤的像素processUsingLevelB=(zmed>zmin)&(zmax>zmed)&(~alreadyProcessed);zB=(I>zmin)&(zmax>I);%满足步骤A,B的输出原值对应的像素位置outputZxy=processUsingLevelB&zB;%满足A,不满足B的输出中值对应的像素位置outputZmed=processUsingLevelB&~zB;II(outputZxy)=I(outputZxy);II(outputZmed)=zmed(outputZmed);%处理过的像素alreadyProcessed=alreadyProcessed|processUsingLevelB;ifall(alreadyProcessed(:))break;endend%超过窗口大小没被处理的像素位置输出原值II(~alreadyProcessed)=I(~alreadyProcessed);

%例5.5自适应中值滤波的说明g=imread('Fig0508.tif');subplot(221),imshow(g,[]),title('原图');H1=imnoise(g,'salt&pepper',.25);%添加椒盐噪声(脉冲噪声)subplot(222),imshow(H1,[]),title('被密度为0.25的椒盐噪声污染的图像');H3=adpmedian(H1,7);%自适应中值过滤器subplot(224),imshow(H3,[]),title('使用S=7的自适应中值滤波得到的结果');H2=medfilt2(H1,[77],'symmetric');%中值滤波subplot(223),imshow(H2,[]),title('使用大小为7*7的中值滤波器得到的结果');

运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。