【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的两层小波分解,并从三个方向上对小波系数进行软阈值量化,为了方便起见,阈值的选择我采用手动设定的方法,最后对图像进行小波重构,后面部分会给出重构的效果图和相应的峰值信噪比。代码如下:
- clear;
- clc;
- X=imread('lena256.bmp');
- %X=rgb2gray(X);
- figure(1);
- subplot(121);
- imshow(X);
- title('原始图像');
- X=double(X);
- XX=X+10*randn(size(X));
- subplot(122);
- imshow(uint8(XX));
- title('含噪图像');
- [c,l]=wavedec2(XX,2,'coif2');
- n=[1,2];
- p=[10.28,10.08];
- nc_h=wthcoef2('h',c,l,n,p,'s');
- X1=waverec2(nc_h,l,'coif2');
- figure(2);
- subplot(131);
- imshow(uint8(X1));
- title('第一次消噪后的图像');
- nc_v=wthcoef2('v',nc_h,l,n,p,'s');
- X2=waverec2(nc_v,l,'coif2');
- subplot(132);
- imshow(uint8(X2));
- title('第二次消噪后的图像');
- nc_d=wthcoef2('d',nc_v,l,n,p,'s');
- X3=waverec2(nc_d,l,'coif2');
- subplot(133);
- imshow(uint8(X3));
- title('第三次消噪后的图像');
- psnr0=psnr(X,XX);
- psnr1=psnr(X,X1);
- psnr2=psnr(X,X2);
- 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变换的低通滤波器的去噪的方法,如下所示:
- clear;
- clc;
- X=imread('lena256.bmp');
- %X=rgb2gray(X);
- figure(1);
- subplot(141);
- imshow(X);
- title('原始图像');
- % 生成含噪图像并图示
- X=double(X);
- % 添加随机噪声
- XX=X+10*randn(size(X));
- Y1=dct2(XX);
- [m,n]=size(Y1)
- for i=1:m
- for j=1:n
- if abs(Y1(i,j))<20 %这个阈值要根据实际情况设定
- Y1(i,j)=0;
- end
- end
- end
- YY1=idct2(Y1);
- subplot(142)
- imshow(uint8(XX));
- subplot(143)
- imshow(uint8(YY1));
- psnr0=psnr(X,XX)
- psnr4=psnr(X,YY1)
运行的效果图为:
运行的结果为:
- psnr0 =
- 28.1068
- psnr4 =
- 28.6162
由此,我们可以看出,小波变换去噪能力还是比较突出的。
五、小结
离散小波变换(DWT)在图像处理中的运用还是十分广泛的,去噪只是其中一个。有时间会跟大家一起总结下其他的应用。
我的新浪微博:http://weibo.com/3109428257/profile?rightmod=1&wvr=5&mod=personinfo
【DWT笔记】基于小波变换的降噪技术的更多相关文章
- 【DWT笔记】傅里叶变换与小波变换
[DWT笔记]傅里叶变换与小波变换 一.前言 我们经常接触到的信号,正弦信号,余弦信号,甚至是复杂的心电图.脑电图.地震波信号都是时域上的信号,我们也成为原始信号,但是通常情况下,我们在原始信号中得到 ...
- 基于小波变换的数字图像处理(MATLAB源代码)
基于小波变换的数字图像处理(MATLAB源代码) clear all; close all; clc;M=256;%原图像长度N=64; %水印长度[filename1,pathname]=uiget ...
- Linux学习笔记——基于鸟哥的Linux私房菜
Linux学习笔记--基于鸟哥的Linux私房菜 ***** ARM与嵌入式linux的入门建议 (1) 学习基本的裸机编程:ARM7或ARM9,理解硬件架构和控制原理 (这一步是绝对的根基) (2) ...
- [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2
之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准. 基于NVidia官方的nvidia/cuda image,构建适用于Deep Learning的基础im ...
- Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)
一.引言 本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于Intelli ...
- Linux常用命令学习笔记——基于CentOS 7
前言:最近在linux培训时复习了一下linux系统中一些常用的命令和用法,整理成了笔记,虽然些许零散,但希望对大家有所帮助. 目录 0.帮助指令 1.关机.重启.注销命令 2.文件和目录操作命令 3 ...
- ArrayList源码阅读笔记(基于JDk1.8)
关键常量: private static final int DEFAULT_CAPACITY = 10; 当没有其他参数影响数组大小时的默认数组大小 private static final Obj ...
- hibernate笔记--基于主键的单(双)向的一对一映射关系
上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这 ...
- hibernate笔记--基于外键的单(双)向的一对一映射关系
假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射 ...
随机推荐
- sourceforge.net 打不开怎么办?(转)
sourceforge.net 打不开怎么办?找个镜像地址下吧! 笔者试了下这个地址,可以打开 http://www.mirrorservice.org/sites/download.source ...
- 标准类型内建函数 type()介绍
我们现在来正式介绍一下 type().在Python2.2 以前, type() 是内建函数.不过从那时起,它变成了一个“工厂函数”.在本章的后面部分我们会讨论工厂函数, 现在你仍然可以将type() ...
- DHT11温湿度传感器
一.硬件介绍 RH是相对湿度,是用零点温度来定义的,一般,RH在45%~65%之间最为合适. 注:NTC为热敏电阻,输出为:单总线数字信号,单线双向串行通讯. 注:上拉电阻情况下,配置为开漏输出,可以 ...
- mvp(2)一个简单示例,加深理解
参考: http://www.cnblogs.com/liuling/p/mvp-pattern-android.html 架构图: 1.View层 public interface NewsView ...
- [HDOJ2604]Queuing(递推,矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 递推式是百度的,主要是练习一下如何使用矩阵快速幂优化. 递推式:f(n)=f(n-1)+f(n- ...
- Python自带包建立简单web服务器
在DOS里cd到准备做服务器根目录的路径下,输入命令: python -m Web服务器模块 [端口号,默认8000] 例如: python -m SimpleHTTPServer 8080 然后就可 ...
- win7 64位系统 Oracle32bit + PL/SQL访问Orale服务,Oracle 11g的安装,中文乱码问题的解决
前几天装了个Oracle32bit客户端 + PL/SQL连接不上oracle,我安装完打开PL/SQL登录界面跟正常的界面不一样,没有那个连接为Normal.SYSDBA的选项,下面有解释,至于我为 ...
- Navicat数据存放位置和备份数据库路径设置
navicat的数据库存放位置在什么地方?带着这样的疑问,我们去解决问题,navicat是默认安装,mysql也是默认安装,数据库存在默认用户所在的目录下面. 安装MySQL时,请选择“Custom” ...
- sql server 2008r2 清除数据库日志
USE [master] GO ALTER DATABASE data SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE data SET REC ...
- core--线程同步
[同步(tóng bù)synchronous;sync;synchronism;synchronization 指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系.]这是百度百科对&quo ...