实验6.docx
《实验6.docx》由会员分享,可在线阅读,更多相关《实验6.docx(22页珍藏版)》请在冰豆网上搜索。
实验6
实验六图像复原
一、实验目的
1.理解图像复原的含义;
2.熟悉常见的噪声模型以及识别噪声的方法;
3.掌握MATLAB中用各种滤波器去除噪声的方法。
二、实验内容及步骤
图像复原所使用的方法与图像增强相同,可以在空间域滤波和频域滤波中进行。
针对不同的噪声,通过选择合适的滤波器进行滤波,能较好地复原图像。
1、噪声模型
掌握如何通过直方图和频谱分析来识别噪声。
直方图可以识别加性噪声,而傅里叶变换可以识别周期噪声。
(1)加性噪声
常见的加性噪声有:
高斯噪声、指数噪声、均匀噪声、椒盐噪声等,图6_1是加有高斯噪声的样本图像及其直方图。
图6_1高斯噪声污染的样本图像及其直方图。
思考题1:
对课本180页中的图像Fig5.03加入不同噪声后得到的Fig5.04(a)(b)(c)(g)(h)(i),用实验三介绍的方法分别显示Fig5.04各图的直方图,仔细观察并进行比较。
x=imread('Fig5.04(x).jpg');(x=a,b,c,,g,h,i)
figure
subplot(2,1,1)
imshow(x)
subplot(2,1,2)
imhist(x)
Fig5.04(a)的直方图:
Fig5.04(b)的直方图:
Fig5.04(c)的直方图:
Fig5.04(g)的直方图:
Fig5.04(h)的直方图:
Fig5.04(i)的直方图:
(2)周期噪声
用实验五介绍的傅里叶变换方法对实验六文件夹中'pout_g_64.bmp'图像进行频谱分析,观察结果。
f=imread('pout_g_64.bmp');
%傅里叶变换,移位
F=fft2(double(f));
F=fftshift(F);
figure
(1);imshow(f);%周期噪声污染的图像
figure
(2);imshow(uint8(abs(F)./255),[]);
2、空间滤波复原
当仅有加性噪声时,可以用空间滤波方法对图像进行复原。
(1)均值滤波器
下例是用实验四介绍的空间滤波方法对课本184页中的图像Fig5.07(b)进行均值滤波。
其中,算术均值滤波是使用filter2函数,几何均值滤波使用直接对数据操作的方法。
同时给出了原图像的直方图和被污染了高斯噪声图像的直方图,仔细观察结果。
例:
closeall
clear
f=imread('Fig5.07(a).jpg');%原图
f_gn=imread('Fig5.07(b).jpg');%污染图
h=ones(5)/25;
g1=filter2(h,f_gn);%5*5算术均值滤波器滤波
%-------构造几何均值滤波器,并进行滤波-------------
b=double(f_gn);
g2=b;
[xHxW]=size(f_gn);
x=xH;y=xW;
fori=3:
x-2,%边界不处理
forj=3:
y-2,
%在5x5邻域内几何均值
g2(i,j)=1.0;
form=-2:
2,
forn=-2:
2,
g2(i,j)=g2(i,j)*b(i+m,j+n);%子窗口像素点连乘
end
end
g2(i,j)=g2(i,j)^(1.0/25);%连乘后再自乘1/mn次幂
end
end
%显示图像
figure
(1)
subplot(121),imhist(f),title('原图')
subplot(122),imhist(f_gn),title('高斯噪声污染')
figure
(2);imshow(f_gn,[]);title('高斯噪声污染的图像')
figure(3);imshow(uint8(g1));title('算术均值滤波')
figure(4);imshow(uint8(g2));title('几何均值滤波')
(2)统计排序滤波器
使用Matlab提供的统计排序滤波器ordfilt2对课本188页中的图像Fig5.08(a)(b)进行滤波,观察结果。
closeall
clear
f1=imread('Fig5.08(a).jpg');
f2=imread('Fig5.08(b).jpg');
%最大值滤波器
g1=ordfilt2(f1,9,ones(3,3));
%最小值滤波器
g2=ordfilt2(f2,1,ones(3,3));
figure
(1),imshow(f1);title('“胡椒”噪声污染的图像')
figure
(2),imshow(f2);title('“盐”噪声污染的图像')
figure(3),imshow(g1);title('最大值滤波器滤波')
figure(4),imshow(g2);title('最小值滤波器滤波')
(3)自适用滤波器
使用Matlab提供的自适用滤波器函数wiener2对图像Fig5.07(b)进行滤波,观察结果。
closeall
clear
f=imread('Fig5.07(b).jpg');
g3=wiener2(f,[33]);
%显示图像
subplot(1,2,1),imshow(f,[]);
subplot(1,2,2),imshow(g3,[]);
3、频域滤波复原
对于周期噪声时,可以用频域滤波来削减或消除,实现对图像进行复原。
(1)带阻滤波器
带阻滤波器消除或衰减傅里叶变换某频段的频率。
下面的例子构造了理想带阻滤波器并显示了其三维图。
例:
closeall
clear
H(1:
256,1:
256)=1;%滤波器的大小
x0=256/2;y0=256/2;
forx=1:
256
fory=1:
256
D=sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0));
if(D<55&&D>50)
H(x,y)=0;
end
end
end
u=-128:
1:
127;v=-128:
1:
127;
[U,V]=meshgrid(u,v);
figure
Mesh(U,V,H);%显示三维图
思考题2:
参考实验五频域滤波的方法,使用理想带阻滤波器对实验六文件夹中'pout_g_64.bmp'图像进行频域滤波,观察结果。
结果类似于图6_3。
图6_3'pout_g_64.bmp'图像频域滤波
f=imread('pout_g_64.bmp');
H(1:
256,1:
256)=1;%滤波器的大小
x0=256/2;y0=256/2;
forx=1:
256
fory=1:
256
D=sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0));
if(D<55&&D>50)
H(x,y)=0;
end
end
end
F=fft2(f);
F=fftshift(F);%中心平移
FF=F.*H;%频域滤波。
FFS=ifftshift(FF);
g=ifft2(FF);%傅立叶反变换
g=abs(real(g));
subplot(1,3,1),imshow(log(abs(F)+1),[]);title('频率谱')%对数变换,便于显示结果
subplot(1,3,2),imshow(log(abs(FF)+1),[]);title('频域滤波')
subplot(1,3,3),imshow(g,[]);title('滤波结果')
(2)陷波带阻滤波器
同样,用陷波带阻滤波器对课本198页中的图像Fig5.19(a)进行滤波,观察结果。
f=imread('Fig5.19(a).jpg');
%傅里叶变换,移位
F=fft2(double(f));
F=fftshift(F);
%陷波带阻滤波器,滤波
[heightwidth]=size(F);
H(1:
height,1:
width)=1;
x0=height/2;y0=width/2;
forx=1:
height
fory=1:
width
if(yy0-3&&(x>x0+15||xH(x,y)=0;
end
FF(x,y)=F(x,y)*H(x,y);
end
end
%傅里叶反变换
FFS=ifftshift(FF);
g=real(ifft2(FFS));
%显示并比较结果
figure
(1),imshow(f);
figure
(2),imshow(log(abs(F)+1),[]);
figure(3),imshow(log(abs(FF)+1),[]);
figure(4),imshow(uint8(g));
4、运动模糊退化图像复原
对于运动模糊的图像,使用最小均方误差滤波(维纳滤波)进行图像复原。
Matlab中deconvwnr()函数实现维纳滤波。
例:
closeall
I=imread('cameraman.tif');
imshow(I)
title('原图')
len=31;
theta=10;
PSF=fspecial('motion',len,theta);%len模糊长度,theta运动角度
Iblurred=imfilter(I,PSF,'circular','conv');%对图像进行运动模糊
figure
imshow(Iblurred)
title('退化图像')
Irestored=deconvwnr(Iblurred,PSF);%使用维纳滤波器复原图像
figure
imshow(Irestored)
title('复原图像')
思考题3:
参考上例,对’cameraman.tif’图像分别使用退化模型PSF1、PSF2进行运动模糊处理。
PSF1=fspecial('motion',2*len,theta),PSF2=fspecial('motion',len,2*theta)
在图像复原时,如果不使用原来的退化模型来进行维纳滤波deconvwnr(),结果如何?
体会真实PSF在图像复原中的重要性。
PSF1时:
I=imread('cameraman.tif');
subplot(1,3,1),imshow(I)
len=31;
theta=10;
PSF1=fspecial('motion',2*len,theta)
Iblurred=imfilter(I,PSF1,'circular','conv');%对图像进行运动模糊
subplot(1,3,2),imshow(Iblurred)
Irestored=deconvwnr(Iblurred,PSF1);%使用维纳滤波器复原图像
subplot(1,3,3),
imshow(Irestored)
PSF2时:
I=imread('cameraman.tif');
subplot(1,3,1),imshow(I)
len=31;
theta=10;
PSF2=fspecial('motion',len,2*theta)
Iblurred=imfilter(I,PSF2,'circular','conv');%对图像进行运动模糊
subplot(1,3,2),imshow(Iblurred)
Irestored=deconvwnr(Iblurred,PSF2);%使用维纳滤波器复原图像
subplot(1,3,3),
imshow(Irestored)
不使用原来的退化模型来进行维纳滤波deconvwnr()的结果:
I=imread('cameraman.tif');
subplot(1,3,1),imshow(I)
len=31;
theta=10;
PSF1=fspecial('motion',2*len,theta)
PSF2=fspecial('motion',len,2*theta)
Iblurred=imfilter(I,PSF1,'circular','conv');%对图像进行运动模糊
subplot(1,3,2),imshow(Iblurred)
Irestored=deconvwnr(Iblurred,PSF2);%使用维纳滤波器复原图像
subplot(1,3,3),
imshow(Irestored)
三、实验报告要求
1、按照上述实验步骤把实验结果截图,并附上文字说明。
2、回答思考题,写出实现的命令及实验结果截图。
3、使用word文档写报告,交电子文档;