【DWT笔记】基于小波变换的降噪技术

【DWT笔记】基于小波变换的降噪技术


一、前言

在现实生活和工作中,噪声无处不在,在许多领域中,如天文、医学图像和计算机视觉方面收集到的数据常常是含有噪声的。噪声可能来自获取数据的过程,也可能来自环境影响。由于种种原因,总会存在噪声,噪声的存在往往会掩盖信号本身所要表现的信息,所以在实际的信号处理中,常常需要对信号进行预处理,而预处理最主要的一个步骤就是降噪。

小波分析是近年来发展起来的一种新的信号处理工具,这种方法源于傅立叶分析,小波(wavelet),即小区域的波,仅仅在非常有限的一段区间有非零值,而不是像正弦波和余弦波那样无始无终。小波可以沿时间轴前后平移,也可按比例伸展和压缩以获取低频和高频小波,构造好的小波函数可以用于滤波或压缩信号,从而可以提取出已含噪声信号中的有用信号。


二、小波去噪的原理

从信号学的角度看 ,小波去噪是一个信号滤波的问题。尽管在很大程度上小波去噪可以看成是低通滤波 ,但由于在去噪后 ,还能成功地保留信号特征 ,所以在这一点上又优于传统的低通滤波器。由此可见 ,小波去噪实际上是特征提取和低通滤波的综合 ,其流程图如下所示:

一个含噪的模型可以表示如下:

其中 ,f( k)为有用信号,s(k)为含噪声信号,e(k)为噪声,ε为噪声系数的标准偏差。

假设,e(k)为高斯白噪声,通常情况下有用信号表现为低频部分或是一些比较平稳的信号,而噪声信号则表现为高频的信号,我们对 s(k)信号进行小波分解的时候,则噪声部分通常包含在HL、LH、HH中,如下图所示,只要对HL、LH、HH作相应的小波系数处理,然后对信号进行重构即可以达到消噪的目的。

我们可以看到,小波去噪的原理是比较简单类,类似以往我们常见的低通滤波器的方法,但是由于小波去找保留了特征提取的部分,所以性能上是优于传统的去噪方法的。


三、小波去噪的基本方法

一般来说, 一维信号的降噪过程可以分为 3个步骤

      信号的小波分解。选择一个小波并确定一个小波分解的层次N,然后对信号进行N层小波分解计算。

      小波分解高频系数的阈值量化。对第1层到第N层的每一层高频系数(三个方向), 选择一个阈值进行阈值量化处理.

这一步是最关键的一步,主要体现在阈值的选择与量化处理的过程,在每层阈值的选择上matlab提供了很多自适应的方法, 这里不一一介绍,量化处理方法主要有硬阈值量化与软阈值量化。下图是二者的区别:

上面左图是硬阈值量化,右图是软阈值量化。采用两种不同的方法,达到的效果是,硬阈值方法可以很好地保留信号边缘等局部特征,软阈值处理相对要平滑,但会造成边缘模糊等失真现象。

      信号的小波重构。根据小波分解的第 N层的低频系数和经过量化处理后的第1层到第N 层的高频系数,进行信号的小波重构。


四、仿真实验

在这里,我采用lena的256*256的标准图进行分析,采用 coif2的两层小波分解,并从三个方向上对小波系数进行软阈值量化,为了方便起见,阈值的选择我采用手动设定的方法,最后对图像进行小波重构,后面部分会给出重构的效果图和相应的峰值信噪比。代码如下:

 1 clear;
 2 clc;
 3 X=imread(‘lena256.bmp‘);
 4 %X=rgb2gray(X);
 5 figure(1);
 6 subplot(121);
 7 imshow(X);
 8 title(‘原始图像‘);
 9 X=double(X);
10
11 XX=X+10*randn(size(X));
12 subplot(122);
13 imshow(uint8(XX));
14 title(‘含噪图像‘);
15
16  [c,l]=wavedec2(XX,2,‘coif2‘);
17
18 n=[1,2];
19 p=[10.28,10.08];
20
21 nc_h=wthcoef2(‘h‘,c,l,n,p,‘s‘);
22
23 X1=waverec2(nc_h,l,‘coif2‘);
24 figure(2);
25 subplot(131);
26 imshow(uint8(X1));
27 title(‘第一次消噪后的图像‘);
28
29
30 nc_v=wthcoef2(‘v‘,nc_h,l,n,p,‘s‘);
31
32 X2=waverec2(nc_v,l,‘coif2‘);
33 subplot(132);
34 imshow(uint8(X2));
35 title(‘第二次消噪后的图像‘);
36
37
38 nc_d=wthcoef2(‘d‘,nc_v,l,n,p,‘s‘);
39
40 X3=waverec2(nc_d,l,‘coif2‘);
41 subplot(133);
42 imshow(uint8(X3));
43 title(‘第三次消噪后的图像‘);
44
45 psnr0=psnr(X,XX);
46 psnr1=psnr(X,X1);
47 psnr2=psnr(X,X2);
48 psnr3=psnr(X,X3);

下面给出运行的效果图,为了显示方便,我重新排版了下,下图是原图和加噪后的图像:

下面给出去噪的效果图:

信噪比数据为:

 1 psnr0 =
 2    28.1782
 3
 4 psnr1 =
 5    29.1551
 6
 7 psnr2 =
 8    30.0441
 9
10 psnr3 =
11    31.6952

为了增加实验室可信度,可以写一个简单的基于DCT变换的低通滤波器的去噪的方法,如下所示:

 1 clear;
 2 clc;
 3
 4 X=imread(‘lena256.bmp‘);
 5 %X=rgb2gray(X);
 6 figure(1);
 7 subplot(141);
 8 imshow(X);
 9 title(‘原始图像‘);
10 % 生成含噪图像并图示
11 X=double(X);
12
13 % 添加随机噪声
14 XX=X+10*randn(size(X));
15
16 Y1=dct2(XX);
17
18 [m,n]=size(Y1)
19 for i=1:m
20     for j=1:n
21         if abs(Y1(i,j))<20 %这个阈值要根据实际情况设定
22            Y1(i,j)=0;
23         end
24     end
25 end
26
27 YY1=idct2(Y1);
28 subplot(142)
29 imshow(uint8(XX));
30
31 subplot(143)
32 imshow(uint8(YY1));
33
34 psnr0=psnr(X,XX)
35 psnr4=psnr(X,YY1)

运行的效果图为:

运行的结果为:

1 psnr0 =
2
3    28.1068
4
5
6 psnr4 =
7
8    28.6162

由此,我们可以看出,小波变换去噪能力还是比较突出的。


五、小结

离散小波变换(DWT)在图像处理中的运用还是十分广泛的,去噪只是其中一个。有时间会跟大家一起总结下其他的应用。

我的新浪微博:http://weibo.com/3109428257/profile?rightmod=1&wvr=5&mod=personinfo

时间: 2024-11-13 08:10:52

【DWT笔记】基于小波变换的降噪技术的相关文章

【DWT笔记】傅里叶变换与小波变换

[DWT笔记]傅里叶变换与小波变换 一.前言 我们经常接触到的信号,正弦信号,余弦信号,甚至是复杂的心电图.脑电图.地震波信号都是时域上的信号,我们也成为原始信号,但是通常情况下,我们在原始信号中得到的信息是有限的,所以为了获得更多的信息,我们就需要对原始信号进行数学变换,得到变换域的信号,通常接触到的变换主要有傅里叶变换.拉普拉斯变换.Z变换.小波变换等等,今天主要讨论下傅里叶变换与小波变换. 二.平稳信号与非平稳信号 在介绍主体之前,先要说下平稳信号与非平稳信号的区别. 平稳信号是指分布参数

Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建

一.引言    本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试.    笔者没有怎么使用过Eclipse做Android学习,但是基于Android Studio类似于VS的项目架构,还是偏爱Android Studio这个IDE,没

读书笔记-基于IP的物联网架构技术与应用

最近在看<基于IP的物联网架构,技术与应用>这边书,将自己的读书笔记,记录于此. 一.什么是智能物件? 定义:智能物件是装备了传感器,微处理器,通信装置和电源的设备. 重要属性:与现实世界的交互 和 通信能力 面临挑战: 节点级挑战:能耗.体积大小.成本.资源限制,电源效率,计算能力 网络级挑战:规模大数据量多,网络大小影响(smart object networks)的路由协议设计.路由可以集中生成,即由一个中央服务器为整个网络计算路由图,也可以是分布式的,即每个节点独立决定每条消息发送到哪

Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)

一.引言    本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试.    笔者没有怎么使用过Eclipse做Android学习,但是基于Android Studio类似于VS的项目架构,还是偏爱Android Studio这个IDE,没

Spring MVC 配置笔记--基于JavaConfig

主要使用基于 JavaConfig 方式配置 配置 DispatcherServlet 通过继承抽象类AbstractAnnotationConfigDispatcherServletInitializer来自动配置 DispatcherServlet 和 Spring 应用上下文(不需在 xml 中配置) public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializ

hibernate笔记--基于主键的单(双)向的一对一映射关系

上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这个外键列,而与idCard表共用一个主键,或者说是其外键为主键的表结构,这种基于主键的双向一对一映射关系应该这样配置: 新建一个IdCard实体类: public class IdCard { private int id; private String code; private Person p

Android学习笔记--基于XMPP的即时通讯

一.常见即时通讯实现 socket openfire+asmack 环信 信鸽 融云 二.XMPP优势 1. 开放性 XMPP协议是自由.开放.公开的,并且易于了解.而且在客户端.服务器.组件.源码库等方面,都已经各自有多种实现. 2.跨平台 客户端只要基于XMPP协议,不管是什么平台(包括不同的移动终端)都可以互联互通. 三.XMPP协议简介 The Extensible Messaging and Presence Protocol (可扩展通讯和表示协议) XMPP 以 Jabber 协议

各种排序笔记---基于比较排序部分

1. 归并排序 归并排序是基于一种被称为“分治”(divide and conquer)的策略. Sort List Sort a linked list in O(n log n) time using constant space complexity. method 1: merge sort, 用divide and conquer的方式,先把list分为左右部分,然后排序后合并 sort list (divide and conquer) 2. 快速排序 伪代码: function q

WCF学习笔记(基于REST规则方式)

一.WCF的定义 WCF是.NET 3.0后开始引入的新技术,意为基于windows平台的通讯服务. 首先在学习WCF之前,我们也知道他其实是加强版的一个面向服务(SOA)的框架技术. 如果熟悉WebService就会知道WebService是基于XML+XSD,SOAP和WSDL三大技术,当然他也是采用HTTP协议的通信,严格来说WebService是一种面向服务开发的标准.而ASP.NET WebService则是微软平台下的服务. WCF其实一定程度上就是ASP.NET Web Servi