实验7图像的噪声及恢复(9页).doc
-GDOU-B-11-112广东海洋大学学生实验报告书(学生用表)实验名称图像的基本操作课程名称数字图像处理课程号学院(系)信息学院专业电子信息工程班级 电子1103班学生姓名杜嘉星学号201011611308实验地点实验日期实验7 图像的噪声及恢复一、实验目的:了解图像的噪声模型,学习降低噪声、恢复图像的处理方法二、实验内容:学习并使用imnoise、spfilt等产生噪声和滤波的函数1、噪声模拟图像增强操作主要是针对图像的各种噪声而言的。数字图像产生噪声的途径有很多种。MATLAB图像处理工具箱提供imnoise函数,可以用该函数给图像添加不同种类的噪声,该函数的调用格式如下:g=imnoise(f, type, parameters)。f是输入图像,type和parameters的说明见下表:typeparameters说明gaussianm, v均值为m,方差为v的高斯噪声localvarv均值为0,方差为v的高斯白噪声Poisson无泊松噪声salt&pepperd噪声密度为d的椒盐噪声specklev均值为0,方差为v的均匀分布随机噪声函数imnoise在给图像添加噪声前,将它转换为范围0 1内的double类图像。指定噪声参数时必须考虑到这一点。例如要将均值为64、方差为400的高斯噪声添加到一幅uint8类图像上,我们可将均值标度为64/255,将方差标度为400/(255)2,以便作为函数imnoise的输入。读入一幅图像,使用上述函数对它添加各类噪声。1、 退化函数建模在图像复原问题中,一个重要的退化模型是在图像获取时传感器和场景之间的均匀线性运动而产生的图像模糊。我们可以使用函数fspecial对图像模糊建模:PSF=fspecial(motion,len,theta)。调用fspecial将返回PSF,它近似于由有着len个像素的摄像机的线性移动的效果。参数theta以度为单位,以顺时针方向对正水平轴度量。len的默认值是9,theta的默认值是0,它对应于在水平方向上的9个像素的移动。我们使用函数imfilter来创建一个已知PSF或用刚刚描述的方法计算得到的PSF的退化图像:g=imfilter(f, PSF, circular)。其中,circular用来减少边界效应。然后通过添加适当的噪声来构造退化的图像模型:g=g+noise。噪声的产生方法见内容1。例如,我们先产生一个测试板图像:f=checkerboard(8)。退化图像使用如下命令产生:PSF=fspecial(motion,7,45); gb=imfilter(f, PSF, circular)。噪声模式使用下面命令产生:noise=imnoise(zeros(size(f), gaussian, 0, 0.001)。通常,我们会直接使用imnoise(gb, gaussian, 0, 0.001)将噪声加到gb上,然而由于稍后需要噪声图像,所以在此我们单独计算噪声。加了噪声的模糊图像如下产生:g=gb+noise。运行上述命令,观察实验结果,注释每条命令。仿照上述命令自己产生一个模糊噪声图像。2、 直接逆滤波和维纳滤波:维纳滤波使用函数deconvwnr来实现。函数deconvwnr有三种可能的语法形式。在这些形式中,g代表退化图像,fr是复原图像。第一种语法形式fr=deconvwnr(g, PSF)假设信噪比为零,从而维纳滤波器就是逆滤波器。第二种语法形式fr=deconvwnr(g, PSF, NSPR)假设信噪比功率已知,或是个常数或是个数组,函数接受其中的任何一个,这是一个参数维纳滤波器。最后,语法形式fr=deconvwnr(g, PSF, NACORR, FACORR)假设噪声和未退化图像的自相关函数NACORR和FACORR是已知的。我们可以使用内容2中的例子建立加了噪声的模糊图像模型,使用deconvwnr函数来复原模糊噪声图像。如下命令: fr1=deconvwnr(g, PSF);fr1是直接逆滤波的结果,g是污染了的图像,PSF是上例中计算出的点扩散函数。由于噪声的影响,结果并不理想。那么如果g不含噪声,使用直接逆滤波效果又是如何呢?实验验证你的结论。我们还可以用第二种语法形式的参数维纳滤波器进行滤波,命令如下:%计算信噪比Sn=abs(fft2(noise).2;nA=sum(Sn(:)/prod(size(noise);Sf=abs(fft2(f).2;fA=sum(Sf(:)/prod(size(f);R=nA/fA;%维纳滤波fr2=deconvwnr(g, PSF, R);fr2和fr1相比较效果要优越得多。运行上述命令,观察实验结果,注释每条命令,并回答相关问题。仿照上述命令对自己产生的模糊噪声图像进行恢复。三、实验要求:写出处理过程,提交原图像、噪声图像、模糊图像和恢复后的图像,注释每条命令,并回答相关问题。四丶实验程序代码及图片:对图片添加各类噪声:clear all;close all;clc;f=imread('D:imageavril.jpg'); subplot(231);imshow(f);xlabel('(a) 原图');g=imnoise(f,'gaussian',0,0.02); %添加高斯噪声subplot(232),imshow(g);xlabel('(b) 高斯噪声');g=imnoise(f,'Poisson'); %添加泊松噪声subplot(233);imshow(g);xlabel('(c) 泊松噪声');g=imnoise(f,'salt & pepper',0.02); %添加椒盐噪声subplot(234);imshow(g);xlabel('(d) 椒盐噪声'); g=imnoise(f,'speckle',0.01); %添加随机噪声subplot(235);imshow(g);xlabel('(e) 随机噪声');对图像进行退化函数建模:f = imread('avril.jpg'); %读取图片 subplot(1,2,1); imshow(I); title('avril'); PSF = fspecial('motion',20,45); %对图像模糊建模 g = imfilter(f,PSF,'circular'); %得到PSF的退化图片 imnoise(gb, 'gaussian', 0, 0.001); %添加噪声 subplot(1,2,2); g=gb+noise; %产生加了噪声的模糊图像 imshow(g); title('模糊噪声图像');添加噪声后的图片直接滤波:f = imread('avril.jpg'); %读取图片 subplot(1,3,1); imshow(I); title('avril'); PSF = fspecial('motion',20,45); %对图像模糊建模 g = imfilter(f,PSF,'circular'); %得到PSF的退化图片 imnoise(gb, 'gaussian', 0, 0.001); %添加噪声 subplot(1,3,2); g=gb+noise; %产生加了噪声的模糊图像 imshow(g); title('模糊噪声图像'); fr1=deconvwnr(g,PSF); subplot(1,3,3);imshow(fr1); title('添加噪声直接滤波后图像');不对图片加噪声,直接滤波:f = imread('avril.jpg'); %读取图片 subplot(1,3,1); imshow(I); title('avril'); PSF = fspecial('motion',20,45); %对图像模糊建模 g = imfilter(f,PSF,'circular'); %得到PSF的退化图片 fr1=deconvwnr(g,PSF); subplot(1,3,3);imshow(fr1); title('不含噪声,直接逆滤波');维纳滤波:f = imread('avril.jpg'); %读取图片 subplot(1,3,1); imshow(I); title('avril'); noise=imnoise(zeros(size(f),'gaussian', 0, 0.001) ; %给模版添加噪声 %计算信噪比 Sn=abs(fft2(noise).2; nA=sum(Sn(:)/prod(size(noise); Sf=abs(fft2(f).2; fA=sum(Sf(:)/prod(size(f); R=nA/fA; %维纳滤波 fr2=deconvwnr(g, PSF, R); subplot(122);imshow(fr2); title('维纳滤波');五丶实验结果分析: 这次实验主要是学习并使用imnoise、spfilt等产生噪声和滤波的函数对图片进行处理。这次的实验还是比较难的,只是根据实验指导并不能很好地完成实验,和同学讨论了很久之后才能逐渐把问题解决。经过这次实验我学会了要善于运用matlab上的help,help上有很多我们可以查到的讯息,比上网查找更加实用。成绩指导教师日期 第页,共页-第 8 页-