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

本文介绍了三种滤波器在图像噪声去除中的应用:均值滤波器通过计算邻域像素平均值来平滑图像;顺序统计滤波如中值滤波能保留边缘信息;自适应空间滤波器根据局部特性动态调整滤波策略,提高去噪效果。示例代码使用MATLAB演示了这些滤波器的实现。
摘要由CSDN通过智能技术生成

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安心不心安

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

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

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

打赏作者

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

抵扣说明:

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

余额充值