实验6.docx

上传人:b****8 文档编号:9164334 上传时间:2023-02-03 格式:DOCX 页数:22 大小:2.03MB
下载 相关 举报
实验6.docx_第1页
第1页 / 共22页
实验6.docx_第2页
第2页 / 共22页
实验6.docx_第3页
第3页 / 共22页
实验6.docx_第4页
第4页 / 共22页
实验6.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

实验6.docx

《实验6.docx》由会员分享,可在线阅读,更多相关《实验6.docx(22页珍藏版)》请在冰豆网上搜索。

实验6.docx

实验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||x

H(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文档写报告,交电子文档;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1