小波分析用于图像去噪
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
小波分析用于图像去噪
噪声可以理解为妨碍人的视觉器官或系统传感器对所接收图像源进行理解或分析的各种因素。
一般噪声是不可预测的随机信号,它只能用概率统计的方法去认识。
噪声对图像处理十分重要,它影响图像处理的输入、采集、处理的各个环节以及输出结果的全过程。
特别是图像的输入、采集的噪声是个十分关键的问题,若输入伴有较大噪声,必然影响处理全过程及输出结果。
因此一个良好的图像处理系统,不论是模拟处理还是计算机处理无不把减少最前一级的噪声作为主攻目标。
去噪已成为图像处理中极其重要的步骤。
对二维图像信号的去噪方法同样适用于一维信号,尤其是对于几何图像更适合。
二维模型可以表述为
s(i,j)=f( i,j)+δ·e(i,j) i,j=0,1,…,m-1 (4.
1)
其中,e是标准偏差不变的高斯白噪声。
二维信号用二维小波分析的去噪步骤有3步:
(1)二维信号的小波分解。
选择一个小波和小波分解的层次N,然后计算信号s到第N层的分解。
(2)对高频系数进行阈值量化。
对于从1到N的每一层,选择一个阈值,并对这一层的高频系数进行软阈值量化处理。
(3)二维小波的重构。
根据小波分解的第N层的低频系数和经过修改的从第一层到第N层的各层高频系数计算二维信号的小波重构。
在这3个步骤中,重点是如何选取阈值和阈值的量化。
下面给出一个二维信号(文件名为detfingr.mat),并利用小波分析对信号进行去噪处理。
Matlab的去噪函数有ddencmp,wdencmp 等,其去噪过程可以按照附录(1)中的程序进行。
输出结果从图1.1中3个图像的比较可以看出,Matlab中的ddencmp和wdencmp函数可以有效地进行去噪处理。
图1.1去噪例一
再给定一个wmandril.mat图像。
可以通过全部滤掉图像中的高频部分实现图像的去噪。
具体去噪过程可按照附录(2)中的程序进行。
输出结果如图1.2:
图1.2 去噪例二
从上面的输出结果可以看出,第一次去噪已经滤去了大部分的高频噪声,但从去噪图像与原始图像相比可以看出,第一次去噪后的图像中还是含有不少的高频噪声;第二次去噪是在第一次去噪的基础上,再次滤去其中的高频噪声。
从去噪的结果可以看出,它具有较好的去噪效果。
下面再给出另一个含有较少噪声的facets.mat图像。
由于原始图像中只含有较少的高频噪声,如果按照上一个例子把高频噪声全部滤掉的方法将损坏图像中固有的高频有用信号。
因此这幅图像适合采用小波分解系数阈值量化方法进行去噪处理]3[。
程序清单见附录(3)。
输出结果如图1.3。
图1.3 去噪例三
二维信号在应用中一般表现为图像信号,二维信号在小波域中的降噪方法的基本思想与一维情况一样,在阈值选择上,可以使用统一的全局阈值,有可以分作三个方向,分别是水平方向、竖直方向和对角方向,这样就可以把在所有方向的噪声分离出来,通过作用阈值抑制其成分。
附录(1)
%装入图像
load tire
%下面进行噪声的产生
init=3718025452;
rand('seed',init);
Xnoise=X+18*(rand(size(X)));
%显示原始图像及它的含噪声的图像
colormap(map);
subplot(2,2,1);image(wcodemat(X,192));
title('原始图像X')
axis square
subplot(2,2,2);image(wcodemat(X,192));
title('含噪声的图像Xnoise');
axis square
%用sym5小波对图像信号进行二层的小波分解
[c,s]=wavedec2(X,2,'sym5');
%下面进行图像的去噪处理
%使用ddencmp函数来计算去噪的默认阈值和熵标准
%使用wdencmp函数来实现图像的压缩
[thr,sorh,keepapp]=ddencmp('den','wv',Xnoise);
[Xdenoise,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,s,'sym5 ',2,thr,sorh,keepapp);
%显示去噪后的图像
subplot(223);image(Xdenoise);
title('去噪后的图像');
axis square
附录(2)
%下面装入原始图像,X中含有被装载的图像
load wmandril;
%画出原始图像
subplot(221);image(X);colormap(map);
title('原始图像');
axis square
%产生含噪图像
init=2055615866;randn('seed',init)
x=X+38*randn(size(X));
%画出含噪图像
subplot(222);image(x);colormap(map);
title('含噪声图像');
axis square;
%下面进行图像的去噪处理
%用小波函数sym4对x进行2层小波分解
[c,s]=wavedec2(x,2,'sym4');
%提取小波分解中第一层的低频图像,即实现了低通滤波去噪a1=wrcoef2('a',c,s,'sym4');
%画出去噪后的图像
subplot(223);image(a1);
title('第一次去噪图像');
axis square;
%提取小波分解中第二层的低频图像,即实现了低通滤波去噪%相当于把第一层的低频图像经过再一次的低频滤波处理
a2=wrcoef2('a',c,s,'sym4',2);
%画出去噪后的图像
subplot(224);image(a2);title('第二次去噪图像');
axis square;
附录(3)
%下面装入原始图像,X中含有被装载的图像
load facets;
%画出原始图像
subplot(221);image(X);colormap(map);
title('原始图像');
axis square
%产生含噪声图像
init=2055615866;randn('seed',init)
x=X+10*randn(size(X));
%画出含噪声图像
subplot(222);image(X);colormap(map);
title('含噪声图像');
axis square
%下面进行图像的去噪处理
%用小波画数coif3对x进行2层小波分解
[c,s]=wavedec2(x,2,'coif3');
%提取小波分解中第一层的低频图像,即实现了低通滤波去噪%设置尺度向量n
n=[1,2]
设置阈值向量p
p=[10.12,23.28];
%对三个方向高频系数进行阈值处理
nc=wthcoef2('h',c,s,n,p,'s');
nc=wthcoef2('v',c,s,n,p,'s');
nc=wthcoef2('d',c,s,n,p,'s');
%对新的小波分解结构[nc,s]进行重构
xx=waverec2(nc,s,'coif3');
%画出重构后图像的波形
subplot(223);image(X);colormap(map);
title('去噪后的图像');
axis square。