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('恢复后的图像');