对同时含有椒盐噪声和高斯噪声的 消噪处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
燕山大学
课程设计说明书
题目:同时含有椒盐噪声和高斯噪声的图像消噪处理
学院(系):里仁学院
年级专业:09工业自动化仪表
学号: 0912********
学生姓名:姚宁
指导教师:赵彦涛程淑红
教师职称:讲师副教授
燕山大学课程设计(论文)任务书
院(系):电气工程学院基层教学单位:自动化仪表系
说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。
2012年6月29日
燕山大学课程设计评审意见表
目录
第一章摘要 (1)
第二章引言 (2)
第三章噪声的特性 (3)
第四章对图像的消噪处理 (4)
4.1 中值滤波 (4)
4.2 维纳滤波 (8)
4.3 中值滤波与维纳滤波的结合 (10)
第五章学习心得 (14)
第六章参考文献 (15)
同时含有椒盐噪声和高斯噪声的消噪处理
一、摘要
本文研究的是对同时含有椒盐噪声和高斯噪声的消噪处理。
首先,本文对高斯噪声和椒盐噪声作出解释,从根本是理解高斯噪声和椒盐噪声,并用图像生动形象的解释这两种噪声产生的影响,如正文中图1 所示。
对图像的消噪处理时,有均值滤波,中值滤波,维纳滤波,超限像素平滑法等方法,在这里我们选取中值滤波和维纳滤波进行分析。
一、中值滤波:
选取一个窗口,并对窗口中的像素灰度值进行排序,用中间值代替窗口中心的像素值。
其消噪效果如文中图2和图3所示。
由图中我们可以看到中值滤波对图像中的椒盐噪声有很好的滤除效果,并能较好的保留图像的边缘,但对图像中的高斯噪声的滤波效果不是很理想。
二、维纳滤波:
运用维纳滤波的方法进行滤波时,我们可以根据他的原理进行编程滤波,也可以直接运用维纳滤波的函数wiener2(a)进行滤波。
其运行结果如文中图4所示。
由图中我们可以发现维纳滤波能够很好地滤去高斯噪声,但对椒盐噪声的滤波效果不是很理想。
所以我们采用将这两种方法结合起来,来对同时还有椒盐噪声和高斯噪声的图像进行滤波。
三、中值维纳滤波:
首先我们将图像中的像素点按一定的条件分为椒盐噪声点和信号点,然后对椒盐噪声点进行中值滤波,信号点保留,最后再对整个图像进行维纳滤波,其结果如图5所示。
从图中我们可以看出中值维纳滤波对图像的处理想过还是挺理想的。
关键字:椒盐噪声高斯噪声中值滤波维纳滤波中值维纳滤波
二、引言
数字图像的噪声主要来源于图像的获取(数字化过程)和传输过程。
图像传感器的工作情况受各种因素的影响,如图像获取中的环境条件和传感元器件自身的质量。
例如,使用CCD摄像机获取图像,光照强度和传感器温度是生成图像中产生大量噪声的主要因素。
图像在传输过程中主要由于所用的传输信道的干扰受到噪声污染。
比如,通过无线网络传输的图像可能会因为光或其他大气因素的的干扰被污染。
噪声不仅仅严重影响人们观赏图像时的视觉效果,还有可能影响边缘检测、图像分割、特征提取、模式识别等后续更高层的处理结果,因此采用适当的方法尽量减少噪声时一个非常重要的预处理步骤。
在实际生活中,最常见的为高斯噪声和脉冲噪声(椒盐噪声)两类,所以去除这两类噪声是非常需要的。
本文通过对这两种噪声的去噪方法进行了根本的分析和研究,并用Matlab进行了编程和调试,最终确定出最优的去噪方案,简单易懂,深入浅出。
为今后的研究提供了相关的参考资料和编程,具有深刻的研究意义!
三、噪声的特性
实际生活中最常见的是高斯噪声和脉冲噪声(椒盐噪声),下面便分别对这两种解释做出解释和比较。
1、高斯噪声
高斯噪声是指噪声的概率密度函数服从高斯分布(即正态分布)的一类噪声,这种噪声经常被用于实践中。
高斯随机变量z的PDF(概率密度函数)由下式给出:
22
()/2
()x
p zμσ
--
=(1)式中,z表示灰度值,μ表示z的平均值或期望值,σ表示z的标准差,2
σ称为z
的方差。
2、脉冲噪声
(双极)脉冲噪声的PDF可由下式给出:
()
a
b
P z a
p z P z b
=
⎧
⎪
==
⎨
⎪
⎩其他
(2)如果b a
>,灰度值b在图像中将显示为一个亮点,相反,a的值将显示为一
个暗点。
如果
a
P和
b
P为零,则脉冲噪声称为单极脉冲。
如果
a
P和
b
P均不可能为零,尤其是它们近似相等时,脉冲噪声值将类似于随机分布在图像上的胡椒和盐粉微粒,因此双机脉冲噪声也称为椒盐噪声。
在这,我们研究的是椒盐脉冲。
椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。
椒盐噪声往往由图像切割引起的。
在实际生活中,这两种噪声一般都是同时存在的。
为了更形象,清楚的了解椒盐噪声和高斯噪声对图像的影响,我们运用Matlab,对一个图像进行加噪处理,分别认识一下椒盐噪声和高斯噪声以及椒盐、高斯同时存在时,反映在图像上的效果。
其程序如下所示:
clear;
clc;
I=imread('Miss512G.bmp');
[a,b]=size(I);
figure
subplot(2,2,1);imshow(I);title('灰白原图');
J=imnoise(I,'salt & pepper',0.02);
subplot(2,2,2);imshow(J);title('加椒盐噪声后的图像');
G=imnoise(I,'gaussian',0.02);
subplot(2,2,3);
imshow(G);title('加高斯噪声后的图像'); K=imnoise(J,'gaussian',0.02);
subplot(2,2,4);imshow(K);title('加椒盐噪声和高斯噪声后的图像');
其运行结果如图1所示:
灰白原
图
加椒盐噪声后的图
像
加高斯噪声后的图
像加椒盐噪声和高斯噪声后的图像
四、对图像的消噪处理
对含有椒盐噪声和高斯噪声的图像进行消噪预处理时,有许多方法,例如均值滤波,中值滤波,超限像素平滑法及维纳滤波等,在这里,我们先选用中值滤波的方法。
4.1、中值滤波
它是对一个滑动窗口内的诸像素灰度值进行排序,用中间值代替窗口中心像素的灰度值的滤波方法。
它是一种非线性的平滑法,在抑制噪声的同时能有效保护边缘少受模糊。
实现中值滤波的步骤如下所示:
① 选择一个规格的窗口,如3*3的矩形窗口,放入图像(灰度值矩阵)的左上角。
② 将窗口中的灰度值进行升序(降序)排列,用排在中间的灰度值来代替窗口中心
的灰度值。
③ 将窗口向右移一列,在进行步骤②。
到图像的有边缘后,向下移一行从左往右依
次进行步骤②和步骤③。
运用Matlab 进行编程,程序如下所示:
clear; clc;
图1
I=imread('Miss512G.bmp');
[a,b]=size(I);
figure
subplot(2,2,1);imshow(I);title('灰白原图');
J=imnoise(I,'salt & pepper',0.02);
K=imnoise(J,'gaussian',0.02);
[a,b]=size(K);
subplot(2,2,2);imshow(K);title('加椒盐噪声和高斯噪声后的图像'); %3*3中值滤波
for i=1:a
for j=1:b
if(i==1|i==a|j==1|j==b)
G(i,j)=K(i,j);
else
temp(1)=K(i-1,j-1);%取3*3的窗口
temp(2)=K(i-1,j);
temp(3)=K(i-1,j+1);
temp(4)=K(i,j-1);
temp(5)=K(i,j);
temp(6)=K(i,j+1);
temp(7)=K(i+1,j-1);
temp(8)=K(i+1,j);
temp(9)=K(i+1,j+1);
temp=sort(temp);%按升序排序
G(i,j)=temp(5);%取中间值
end
end
end
subplot(2,2,3);imshow(G);title('3*3中值滤波后的图像');
%5*5中值滤波
for i=1:a
for j=1:b
if(i==1|i==2|i==a-1|i==a|j==1|j==2|j==b-1|j==b)
G5(i,j)=K(i,j);
else
temp(1)=K(i-2,j-2);
temp(2)=K(i-2,j-1);
temp(3)=K(i-2,j);
temp(4)=K(i-2,j+1);
temp(5)=K(i-2,j+2);
temp(6)=K(i-1,j-2);
temp(7)=K(i-1,j-1);
temp(8)=K(i-1,j);
temp(9)=K(i-1,j+1);
temp(10)=K(i-1,j+2);
temp(11)=K(i,j-2);
temp(12)=K(i,j-1);
temp(13)=K(i,j);
temp(14)=K(i,j+1);
temp(15)=K(i,j+2);
temp(16)=K(i+1,j-2);
temp(17)=K(i+1,j-1);
temp(18)=K(i+1,j);
temp(19)=K(i+1,j+1);
temp(20)=K(i+1,j+2);
temp(21)=K(i+2,j-2);
temp(22)=K(i+2,j-1);
temp(23)=K(i+2,j);
temp(24)=K(i+2,j+1);
temp(25)=K(i+2,j+2);
temp=sort(temp);
G5(i,j)=temp(13);
end
end
end
subplot(2,2,4);imshow(G5);title('5*5中值滤波后的图像');
其运行后的结果如图2所示。
我们还可以直接运用中值滤波的函数进行Matlab滤波,由于当选取7*7和11*11大的窗口时,按上述方法编程的程序很长,从而增加了工作量,所以我们可直接用中值滤波的函数medfilt2(a),进行中值滤波。
程序如下所示:
g=medfilt2(K,[7,7]);
subplot(1,2,1);imshow(g);title('7*7中值滤波后的图像')
g=medfilt2(K,[11,11]);
subplot(1,2,2);imshow(g);title('11*11中值滤波后的图像')
其运行结果如图3所示:
灰白原
图加椒盐噪声和高斯噪声后的图
像
3*3中值滤波后的图
像5*5中值滤波后的图像
7*7中值滤波后的图
像11*11中值滤波后的图像
由上图中的3*3、5*5、7*7和11*11窗口的滤波效果,我们可以从中看到中值滤波能有效地消除椒盐噪声,并且随着窗口大小的增加,滤波效果越好。
但是随着中值滤波,图像也变得模糊起来。
所以当窗口增大到一定值之后,虽然也起到了去噪的效果,但是图像会变得过于模糊,不利于图片观赏。
所以对于窗口大小的确定,我们可以由小到大的逐次选取滤波,选出效果最好时的窗口,此时我们选择7*7的窗口。
由上图,我们还可以得出:中值滤波对高斯噪声也有一定的消除,但是效果不是很理想,所以我们可以选取另一种方法来进行滤波,看能否达到消去高斯噪声的效果。
在图2 图3
这,我们选取维纳滤波法。
4.2、维纳滤波
维纳滤波是在逆滤波的基础上进行图像复原,是最小均方误差滤波。
运用维纳滤波时,我们需要选择一个合适的退化模型,在这里我们设图像的退化模型为:
225/6((/2)(/2))(,)k u a v b H u v e --+-= (3) 式中的a 和b 分别是退化后图像矩阵的行数和列数。
在这里我们取0025.0=k 。
这样,我们便可以得到恢复后图像的傅里叶变换为: ),(])
,(/),(),(),(),(1[),(ˆ22
v u G v u S v u S v u H v u H v u H v u F f η+= (4) 式中2),(),(v u N v u S =η是噪声的功率谱,2),(),(v u F v u S f =是未退化模型的功率谱。
),(v u G 是退化图像的变换。
当处理高斯噪声时,谱2
),(v u N 是一个常数,并且未退化图像的功率谱很少是已知的。
当这些值未知或不能估计时,经常使用下面表达式近似表示: ),(),(),(),(1),(ˆ22
v u G K
v u H v u H v u H v u F += (5) 式中K 是一个特殊常量,我们可以带入任意值,选出效果最好时的K 的值。
求出),(ˆv u F
后,再对它进行傅里叶逆变换便可得到恢复后的图像。
运用Matlab 进行编程,程序如下所示:
clear;
clc;
I=imread('Miss512G.bmp');
[a,b]=size(I);
figure
subplot(2,2,1);imshow(I);title('灰白原图');
J=imnoise(I,'salt & pepper',0.02);
K=imnoise(J,'gaussian',0.02);
[a,b]=size(K);
subplot(2,2,2);imshow(K);title('加椒盐噪声和高斯噪声后的图像');
k=0.0025;
for u=1:a
for v=1:b
q=(u-a/2)^2+(v-b/2)^2;
H(u,v)=exp(-k*q^(5/6));
H0(u,v)=(abs(H(u,v)))^2;
H1(u,v)=H0(u,v)/(H(u,v)*(H0(u,v)+c));
end
end
F0=fftshift(fft2(K));
F2=H1.*F0;
I3=ifft2(fftshift(F2));
subplot(2,2,3);imshow(uint8(I3));title('维纳滤波复原图');
考虑到其消噪的效果及伴随的模糊状况,最终确定18.0 K .
或直接运用Matlab 中的维纳滤波函数wiener2来进行对加噪后(与中值滤波加相同的椒盐噪声和高斯噪声)的图像进行消噪处理,程序如下所示:
G=wiener2(K,[3,3]);
figure
subplot(2,2,1);imshow(G);title('8*8维纳滤波¨');
F=wiener2(K,[7,7]);
subplot(2,2,2);imshow(F);title('9*9维纳滤波¨');
F=wiener2(K,[10,10]);
subplot(2,2,3);imshow(F);title('10*10维纳滤波¨');
F=wiener2(K,[14,14]);
subplot(2,2,4);imshow(F);title('11*11维纳滤波¨');
其运行结果如图4所示
:
8*8维纳滤
波9*9维纳滤
波
10*10维纳滤
波11*11维纳滤波
由图中,我们可以发现维纳滤波方法能够有效的滤去高斯噪声,并且随着窗口的增大,其滤波效果越好。
但随着窗口的增大,也伴随着图像的模糊,所以选择9*9的窗口其图4
滤波效果最好。
虽然维纳滤波也能消去椒盐噪声,但其效果并不是很理想。
4.3、中值滤波和维纳滤波的结合
由图2和图3,我们发现中值中值滤波能够滤除图像中的椒盐噪声,并能很好的保留图像的边缘。
从图4中,可以得出维纳滤波则能较好的去除高斯噪声。
所以,对于同时含有椒盐噪声和高斯噪声的图像进行消噪处理时,我们可以想办法使这两个程序结合起来,从而达到对这两种噪声均能较好的去噪的效果。
对图像进行去噪时,如果我们能够区分出椒盐噪声和高斯噪声污染的点,那就可以分别对椒盐噪声运用中值滤波,然后对高斯噪声进行维纳滤波达到预期的效果。
而区分噪声点时,由于椒盐噪声的特性,我们可以知道椒盐噪声点的灰度值与其他像素点有明显的区别,一般是其邻域中的灰度极值点(正的或负的)。
所以在一幅图像中,如果一个像素点的灰度值远大于或远小于其邻域点的灰度值,也就是说该像素点与其邻域的点的相关性很小时,我们便分为这个点被污染了。
否则,则认为这个点是有效信号点。
所以我们可通过下式来区分椒盐噪声点和信号点:
min([])max([])min([])max([])ij ij ij ij ij ij ij N x W x or W x x S W x x W x =⎧⎪∈⎨<<⎪⎩
(6) 式中N 为椒盐噪声点,S 为信号点,][min ij x W 为所选窗口内的最小灰度值,][max ij x W 为窗口内的最大灰度值。
按以上标准对所有像素进行分类,设][ij y 表示输出图像,那么便可设:
W[]ij ij ij ij ij x x N y x x S
∈⎧⎪=⎨∈⎪⎩中值滤波() (7)
得出中值滤波的图像后在对它进行维纳滤波,运用Matlab ,其编程如下所示: clear;
clc;
I=imread('Miss512G.bmp');
[a,b]=size(I);
figure
subplot(2,2,1);imshow(I);title('灰白原图');
J=imnoise(I,'salt & pepper',0.02);
K=imnoise(J,'gaussian',0.02);
[a,b]=size(K);
subplot(2,2,2);imshow(K);title('加椒盐噪声和高斯噪声后的图像');
for i=1:a
for j=1:b
if(i==1|i==2|i==3|i==a-2|i==a-1|i==a|j==1|j==2|j==3|j==b-2|j==b-1|j==b) G(i,j)=K(i,j);
else
temp(1)=K(i-3,j-3);
temp(2)=K(i-3,j-2);
temp(3)=K(i-3,j-1);
temp(4)=K(i-3,j);
temp(5)=K(i-3,j+1);
temp(6)=K(i-3,j+2);
temp(7)=K(i-3,j+3);
temp(8)=K(i-2,j-3);
temp(9)=K(i-2,j-2);
temp(10)=K(i-2,j-1);
temp(11)=K(i-2,j);
temp(12)=K(i-2,j+1);
temp(13)=K(i-2,j+2);
temp(14)=K(i-2,j+3);
temp(15)=K(i-1,j-3);
temp(16)=K(i-1,j-2);
temp(17)=K(i-1,j-1);
temp(18)=K(i-1,j);
temp(19)=K(i-1,j+1);
temp(20)=K(i-1,j+2);
temp(21)=K(i-1,j+3);
temp(22)=K(i,j-3);
temp(23)=K(i,j-2);
temp(24)=K(i,j-1);
temp(25)=K(i,j);
temp(26)=K(i,j+1);
temp(27)=K(i,j+2);
temp(28)=K(i,j+3);
temp(29)=K(i+1,j-3);
temp(30)=K(i+1,j-2);
temp(31)=K(i+1,j-1);
temp(32)=K(i+1,j);
temp(33)=K(i+1,j+1);
temp(34)=K(i+1,j+2);
temp(35)=K(i+1,j+3);
temp(36)=K(i+2,j-3);
temp(37)=K(i+2,j-2);
temp(38)=K(i+2,j-1);
temp(39)=K(i+2,j);
temp(40)=K(i+2,j+1);
temp(41)=K(i+2,j+2);
temp(42)=K(i+2,j+3);
temp(43)=K(i+3,j-3);
temp(44)=K(i+3,j-2);
temp(45)=K(i+3,j-1);
temp(46)=K(i+3,j);
temp(47)=K(i+3,j+1);
temp(48)=K(i+3,j+2);
temp(49)=K(i+3,j+3);
temp=sort(temp);
N=temp(1);
M=temp(49);
if(K(i,j)==M|K(i,j)==N)
G(i,j)=temp(25);
else
G(i,j)=K(i,j);
end
end
end
end
F=wiener2(G,[9,9]);
subplot(2,2,3);imshow(F);title('中值维纳滤波后的图像'); 其运行后的结果如图5所示:
灰白原
图加椒盐噪声和高斯噪声后的图
像
中值维纳滤波后的图像
由图5可以看出中值滤波和维纳滤波结合后对同时含有椒盐噪声和高斯噪声的图像的滤波效果还是相当可以的。
由于在实际生活中,图像里往往是椒盐噪声和高斯噪声同时出现的,所以对于能同时消去椒盐噪声和高斯噪声的方法的研究是非常必要的。
并且本文中的中值维纳滤波方法对这两种噪声的消噪处理效果还是比较理想的。
图5
五、学习心得
通过这次为期一周的课程设计,感觉自己受益匪浅。
无论是对知识的理解和应用,还是实验过程中自我遇到问题时解决问题的信心、恒心以及同学间的相互鼓励、支持和帮助。
这次课程设计的题目比较具有针对性,不仅使我对理论知识掌握的更加准确,更使我将理论知识运用到了实践生活中去,成功的完成了对图像的消噪处理。
在课程设计的过程中,为了实现某一功能,我们便需要进行编程,然后在Matlab中进行运行和调试。
在这过程中遇到岑出不穷的问题,我们便查询资料,了解该软件的用法以及相关函数的用法及功能。
经过此次课程设计,我认识到,知识只有会用才是真正意义上的学会,只有在不断的遇到问题与解决问题间自己才能不断地进步。
这进一步说明我们并不能只是单纯的学习理论知识,还应该加强实践,只有这样,自己的专业能力才会有质的提高。
总之,这次的课程设计给予了我不同的学习方法和体验,让我深切的认识到实践的重要性,使我受益匪浅。
在以后的学习过程中,我会更加注重自己的操作能力和应变能力,提高自己对MATLAN的运用能力,全面学习,全面发展!
六、参考文献
[1] 贾永红•数字图像处理•(第二版)•武汉:武汉大学出版社,2010,2
[2] 冈萨雷斯•数字图像处理(Matlab)•电子工业出版社,2006
[3] 楼顺天.MATLAB 5.x程序设计语言.西安:西安电子科技大学出版社,2000,4
[4] 杨辉,唐建锋•衡阳师范学院学报•2011,第32卷,第6期。