一、实验目的:了解图像的噪声模型,学习降低噪声、恢复图像的处理方法
二、实验内容:学习并使用imnoise、spfilt等产生噪声和滤波的函数 1、噪声模拟
图像增强操作主要是针对图像的各种噪声而言的。数字图像产生噪声的途径有很多种。MATLAB图像处理工具箱提供imnoise函数,可以用该函数给图像添加不同种类的噪声,该函数的调用格式如下:g=imnoise(f, ‘type’, parameters)。f是输入图像,type和parameters的说明见下表:
type | parameters | 说明 |
gaussian | m, v | 但愿人长久教学设计均值为m,方差为v的高斯噪声 |
localvar | v | 均值为0,方差为v的高斯白噪声 |
Poisson | 无 | 泊松噪声 |
salt&pepper | d | 噪声密度为d的椒盐噪声霍顿听见了呼呼的声音 |
speckle | v | 均值为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)jnc录音笔假设信噪比为零,从而维纳滤波器就是逆滤波器。第二种语法形式fr=deconvwnr(g, PSF, NSPR)假设
信噪比功率已知,或是个常数或是个数组,函数接受其中的任何一个,这是一个参数维纳滤波器。最后,语法形式fr=deconvwnr(g, PSF, NACORR, FACORR)假设噪声和未退化图像的自相关函数NACORR和FACORR是已知的。
我们可以使用内容2中的例子建立加了噪声的模糊图像模型,使用蔡星辰deconvwnr函数来复原模糊噪声图像。如下命令:
fr1=deconvwnr(g, PSF);fr1是直接逆滤波的结果,g是污染了的图像,PSF是上例中计算出的点扩散函数。由于噪声的影响,结果并不理想。那么如果g不含噪声,使用直接逆滤波效果又是如何呢?实验验证你的结论。
我们还可以用第二种语法形式的参数维纳滤波器进行滤波,命令如下:
%计算信噪比