matlab实现图像空间域滤波复原

1.均值滤波器

        均值滤波器:均值滤波器是一种最简单的滤波器,也是一种线性滤波器。该滤波器的原理是用某个像素周围的相邻像素的平均值替代该像素的值,从而实现去噪的效果。均值滤波器容易实现,但会使图像失去一些细节和边缘等信息。

close all;
clear all;
clc;
I=imread('lena.bmp');
I=rgb2gray(I);
g=imnoise(I,'salt & pepper',0.25);
g=double(g)/255;
m=3;n=3;
%算术均值滤波器
w1=fspecial('average',[5 5]);
J1=imfilter(g,w1);
%几何均值滤波器
J2=exp(imfilter(log(g),ones(m,n),'replicate') ).^(1/m/n); %几何均值滤波
%谐波均值滤波器
J3=m*n./imfilter(1./(g+eps),ones(m,n),'replicate'); %谐波均值滤波
%逆谐波均值滤波器
q=3/2;
J4=imfilter(g.^(q+1),ones(m,n),'replicate');
J4=J4./(imfilter(g.^q,ones(m,n),'replicate')+eps); % 逆谐波均值滤波

figure;
subplot(231),imshow(I);
subplot(232),imshow(g),title('加椒盐噪声');
subplot(233),imshow(J1),title('算术均值滤波');
subplot(234),imshow(J2),title('几何均值滤波');
subplot(235),imshow(J3),title('谐波均值滤波');
subplot(236),imshow(J4),title('逆谐波均值滤波');

2.顺序统计滤波器

        顺序统计滤波器:顺序统计滤波器是指对某个像素周围的相邻像素按照一定顺序进行排序,并选择其中某个位置的像素值作为该像素的值。例如,中值滤波器就是一种常见的顺序统计滤波器。与均值滤波器不同,顺序统计滤波器可以保留图像细节和边缘信息,同时有效去除图像噪声。

close all;
clear all;
clc;
I=imread('lena.bmp');
I=rgb2gray(I);
g=imnoise(I,'salt & pepper',0.2);
g1=double(g)/255;
J1=medfilt2(g1,'symmetric');%中值滤波
J2=ordfilt2(g1,median(1:3*3),ones(3,3),'symmetric');%中点滤波
J3=ordfilt2(g1,1,ones(3,3));%最小值滤波
J4=ordfilt2(g1,9,ones(3,3));%最大值滤波

figure;
subplot(231),imshow(I);
subplot(232),imshow(g),title('加椒盐噪声');
subplot(233),imshow(J1),title('中值滤波');
subplot(234),imshow(J2),title('中点滤波');
subplot(235),imshow(J3),title('最小值滤波');
subplot(236),imshow(J4),title('最大值滤波');

 

3.自适应空间滤波器

        自适应空间域滤波器:自适应空间域滤波器是指根据局部像素的统计特征,自适应地选择滤波器模板的大小和权值,并计算该像素的值。例如,自适应中值滤波器就是一种常见的自适应空间域滤波器,它能够根据局部像素的方差和中值等信息,自适应地选择滤波器模板的大小和性质,从而更好地处理图像中的噪声。

close all;
clear all;
clc;
I=imread('lena.bmp');
I=rgb2gray(I);
g=imnoise(I,'salt & pepper',0.25);
J1=medfilt2(g,[5 5],'symmetric');
J2=adpmedian(g,5);

figure;
subplot(221),imshow(I);
subplot(222),imshow(g),title('加椒盐噪声');
subplot(223),imshow(J1),title('中值滤波');
subplot(224),imshow(J2),title('自适应滤波');
%--------------------------------------------------------------------------%
function f=adpmedian(g,Smax)
if(Smax<=1)||(Smax/2 == round(Smax/2))||(Smax~=round(Smax))
   error('SMAX must be an odd integer > 1.'); 
end
f = g;
f(:) = 0;
alreadyProcessed = false(size(g));
for k= 3:2:Smax
    zmin = ordfilt2(g,1,ones(k,k),'symmetric');
    zmax = ordfilt2(g,k*k,ones(k,k),'symmetric');
    zmed = medfilt2(g,[k k],'symmetric');
    processUsingLevelB = (zmed>zmin) & (zmax > zmed) & ...
        ~alreadyProcessed;
    zB=(g>zmin) & (zmax>g);
    outputZxy = processUsingLevelB & zB;
    outputZmed = processUsingLevelB & ~zB;
    f(outputZxy) = g(outputZxy);
    f(outputZmed) = zmed(outputZmed);
    
    alreadyProcessed = alreadyProcessed | processUsingLevelB;
    if all(alreadyProcessed(:))
        break;
    end
end

f(~alreadyProcessed) = zmed(~alreadyProcessed);
end

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安心不心安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值