实验8 自适应中值滤波器的用法、退化函数建模及两种常用图像复原

1. 读入任意一幅自己手机拍摄的图片,使用imnoise函数分别添加椒盐噪声污染图像,然后分别使用传统中值滤波器和自适应中值滤波器进行滤波操作,要求在同一个图形窗口中显示原图、噪声图及两种滤波结果图。

f=imread('zp1.jpg');
f=rgb2gray(f);
subplot(221);
imshow(f);
title('原图像');

subplot(222);
f1=imnoise(f,'salt & pepper',0.05);
imshow(f1);
title('噪声图像');

subplot(223);
f2=medfilt2(f1);
imshow(f2);
title('传统中值滤波器');

subplot(224);
f3=adpmedian(f1,7);
imshow(f3);
title('自适应中值滤波器');


2. 使用checkerboard函数生成每个方格边长像素数为20的8格棋盘图,根据退化函数建模的过程,生成一个退化的模糊加噪声的图像。要求在同一个窗口中显示原图、运行模糊图、噪声图及模糊噪声图。

f=checkerboard(20);
subplot(221);
imshow(f);
title('原图像');

subplot(222);
P=fspecial('motion',7,45);
gb=imfilter(f,P,'circular');
imshow(gb);
title('运动模糊图像');

subplot(223);
noise=imnoise2('gaussian',size(f,1),size(f,2));
imshow(noise,[]);
title('噪声图像');

subplot(224);
f1=gb+noise;
imshow(f1,[]);
title('运动模糊噪声图');


3. 读入任意一幅自己手机拍摄的图片,根据退化函数建模的过程,生成一个退化的模糊加噪声的图像。要求在同一个窗口中显示原图、运行模糊图、噪声图及模糊噪声图。

f=imread('t1.tif');
f=rgb2gray(f);
f=double(f);
subplot(221);
imshow(f,[]);
title('原图像');

subplot(222);
P=fspecial('motion',7,45);
gb=imfilter(f,P,'circular');
imshow(gb,[]);
title('运动模糊图像');

subplot(223);
noise=imnoise2('gaussian',size(f,1),size(f,2));
imshow(noise,[]);
title('噪声图像');

subplot(224);
f1=gb+noise;
imshow(f1,[]);
title('运动模糊噪声图');


4. 对第2题产生的退化图像g分别进行直接逆滤波和三种维纳滤波操作,要求在同一个图形窗口中显示所有结果。

f=checkerboard(20);
subplot(231);
PSF=fspecial('motion',7,45);
gb=imfilter(f,PSF,'circular');
noise=imnoise2('gaussian',size(f,1),size(f,2));
f1=gb+noise;
imshow(f1);
title('运动模糊噪声图');

subplot(232);
F=fft2(f1);
F=ifftshift(F);
g=ifft2(F);
imshow(g,[]);
title('直接逆滤波');

subplot(233);
g1=deconvwnr(f1,PSF);
imshow(g1);
title('维纳滤波1');

subplot(234);
Sn=abs(fft2(noise)).^2;
nA=sum(Sn(:))/numel(noise);
Sf=abs(fft2(f)).^2;
fA=sum(Sf(:))/numel(f);
R=nA/fA;
g2=deconvwnr(f1,PSF,R);
imshow(g2,[]);
title('维纳滤波2');

subplot(235);
N=fftshift(real(ifft2(Sn)));
I=fftshift(real(ifft2(Sf)));
g3=deconvwnr(g,PSF,N,I);
imshow(g3,[]);
title('维纳滤波3');


5. 对第3题产生的退化图像g分别进行直接逆滤波和三种维纳滤波操作,要求在同一个图形窗口中显示所有结果。

f=imread('t1.tif');
f=double(f);

subplot(231);
PSF=fspecial('motion',7,45);
gb=imfilter(f,PSF,'circular');
noise=imnoise2('gaussian',size(f,1),size(f,2));
f1=gb+noise;
imshow(f1,[]);
title('运动模糊噪声图');

subplot(232);
F=fft2(f1);
F=ifftshift(F);
g=ifft2(F);
imshow(g,[]);
title('直接逆滤波');

subplot(233);
g1=deconvwnr(f1,PSF);
imshow(g1);
title('维纳滤波1');

subplot(234);
Sn=abs(fft2(noise)).^2;
nA=sum(Sn(:))/numel(noise);
Sf=abs(fft2(f)).^2;
fA=sum(Sf(:))/numel(f);
R=nA/fA;
g2=deconvwnr(f1,PSF,R);
imshow(g2,[]);
title('维纳滤波2');

subplot(235);
N=fftshift(real(ifft2(Sn)));
I=fftshift(real(ifft2(Sf)));
g3=deconvwnr(g,PSF,N,I);
imshow(g3,[]);
title('维纳滤波3');


6. 阅读论文“基于MATLAB 维纳滤波算法在图像复原实验的应用”,实现论文提到的代码,使用几幅自己的不同图像运行代码,对比结果的不同。

f=imread('t1.tif');
len=30;
theta=45;
PSF=fspecial('motion',len,theta);
MF=imfilter(f,PSF,'circular','conv');
wnr=deconvwnr(MF,PSF);
subplot(131);
imshow(f);
title('原始图像');
subplot(132);
imshow(MF);
title('模糊图像');
subplot(133);
imshow(wnr);
title('恢复后的图像');

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值