小波变换
- 格式:docx
- 大小:1.10 MB
- 文档页数:20
小波变换(WT)一、小波变换的原理小波(Wavelet)这一术语,顾名思义,“小波”就是小的波形。
所谓“小”是指它具有衰减性;而称之为“波”则是指它的波动性,其振幅正负相间的震荡形式。
小波变换继承和发展了Garbor 变换的局部化思想它除了窗口大小随频率增高而缩小 以外还存在着离散的正交基等优良的性质小波的原始概念最早是法国的地质学家J.Mrolet 和AGrossman 在70年代分析处理地质数据时引进的(1)。
与Fourier 变换相比,小波变换是时间(空间)频率的局部化分析,它通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节,解决了Fourier 变换的困难问题,成为继Fourier 变换以来在科学方法上的重大突破。
有人把小波变换称为“数学显微镜”。
小波变换在时域和频域都具有很好的局部化性质,较好地解决了时域和频域分辨率的矛盾,对于信号的低频成分采用宽时窗,对高频成分采用窄时窗。
二、小波变换的定义及方法(2)(3)(1) 基本思想小波变换的基本思想是:非均匀地划分时间轴和频率轴,通常对高频成分分析时采用相对短的时间窗,对低频成分分析时采用相对长的时间窗。
这样就可以在服从式(1)的Heisenberg 不等式前提下,在不同的时频区都能获得比较实用的时间和频率分辨率。
…………….(1) △ t 时间分辨率△f 频率分辨(2)定义小波变换是对一个信号与某个核函数的修正形式乘积的一种积分运算,这个核函数称为小波(小波基)。
用作小波基的函数,它必须是可允许的,即满足 (2)其中()h ω∧是()h t 的傅里叶变换,则()h t 叫做允许小波(AdmissibleWavelet),而式(2) 称为允许条件(AdmissibleCondition)。
信号x(t)的连续小波变换定义为 (3)这里的a 称为尺度因子,其定义如下 (4)其中,f是带通滤波器h(t)的中心频率,而f认为是信号x(t)中要分析的频率,与h(t)无关。
小波变换的多尺度分析方法及实现步骤引言:小波变换是一种信号处理技术,它能够将信号分解成不同尺度的频率成分,从而实现对信号的多尺度分析。
本文将介绍小波变换的基本原理、多尺度分析方法以及实现步骤。
一、小波变换的基本原理小波变换是一种时间和频率的联合变换方法,它将信号分解成一系列的小波函数。
与傅里叶变换相比,小波变换具有更好的时频局部性,能够更准确地描述信号的瞬时特征。
小波变换的基本原理是通过将信号与小波函数进行内积运算,得到信号在不同尺度和位置上的频率成分。
小波函数是一种具有局部化特征的函数,它在时域和频域上都有一定的局部性。
二、多尺度分析方法小波变换的多尺度分析方法主要包括连续小波变换和离散小波变换两种。
1. 连续小波变换(CWT)连续小波变换是将信号与连续小波函数进行内积运算,得到信号在不同尺度和位置上的频率成分。
连续小波变换具有较好的时频分辨率,但计算量较大。
2. 离散小波变换(DWT)离散小波变换是将信号进行离散化处理后,与离散小波函数进行内积运算,得到信号在不同尺度和位置上的频率成分。
离散小波变换具有较好的计算效率,适用于实际应用中的信号处理。
三、实现步骤小波变换的实现步骤主要包括信号预处理、小波函数选择、小波变换计算和结果分析等。
1. 信号预处理在进行小波变换之前,需要对信号进行预处理,包括去除噪声、归一化处理等。
预处理的目的是提高小波变换的精度和稳定性。
2. 小波函数选择选择合适的小波函数对信号进行分析是小波变换的关键。
常用的小波函数有高斯小波、Morlet小波、Daubechies小波等。
选择小波函数时需要考虑信号的特性和分析的目的。
3. 小波变换计算根据选择的小波函数,对信号进行小波变换计算。
连续小波变换可以通过积分运算实现,离散小波变换可以通过快速小波变换算法实现。
4. 结果分析对小波变换的结果进行分析和解释。
可以通过频谱图、小波系数图等方式对信号的频率成分和时域特征进行分析。
结论:小波变换是一种有效的多尺度分析方法,能够在时频域上对信号进行精确的分析。
和傅立叶级数有一点不同的是,小波级数通常是orthonormalbasis,也就是说,它们不仅两两正交,还归一化了。
小波级数通常有很多种,但是都符合下面这些特性:1.小波变换对不管是一维还是高维的大部分信号都能cover很好。
这个和傅立叶级数有很大区别。
后者最擅长的是把一维的,类三角波连续变量函数信号映射到一维系数序列上,但对于突变信号或任何高维的非三角波信号则几乎无能为力。
2.围绕小波级数的展开能够在时域和频域上同时定位信号,也就是说,信号的大部分能量都能由非常少的展开系数,比如a_{j,k},决定。
这个特性是得益于小波变换是二维变换。
我们从两者展开的表达式就可以看出来,傅立叶级数是,而小波级数是。
3.从信号算出展开系数a需要很方便。
普遍情况下,小波变换的复杂度是O(Nlog(N)),和FFT相当。
有不少很快的变换甚至可以达到O(N),也就是说,计算复杂度和信号长度是线性的关系。
小波变换的等式定义,可以没有积分,没有微分,仅仅是乘法和加法即可以做到,和现代计算机的计算指令完全match。
每个小波变换都会有一个mother wavelet,我们称之为母小波,同时还有一个father wavelet,就是scaling function。
而该小波的basis函数其实就是对这个母小波和父小波缩放和平移形成的。
缩放倍数都是2的级数,平移的大小和当前其缩放的程度有关。
话说在数学定义中,有一种空间叫Lebesgue空间,对于信号处理非常重要,可以用L^p(R)表示,指的是由p次可积函数所组成的函数空间。
我们在小波变换中要研究的信号都是属于L^2(R)空间的,这个空间是R上的所有处处平方可积的可测函数的集合,这样就等于对信号提出了一个限制,就是信号能量必须是有限的,否则它就不可积了。
小波变换的定义都是基于但不限于L^2(R)中的信号的。
这玩意的特性要具体解释起来太数学了,牵涉到太多泛函知识,我就不在这里详述了。
数字信号处理中的小波变换数字信号处理是一种数字化处理技术,主要用于对连续信号进行采样和转换,以便在数值计算设备上进行处理。
在数字信号处理中,小波变换是一种重要的技术,可以用来分析和处理信号。
一、小波变换的定义和基本原理小波变换(Wavelet Transform)是一种数学变换方法,它将原始信号分解为不同尺度和频率的小波成分。
与傅里叶变换相比,小波变换具有更好的时域和频域分辨率,并且能够捕捉信号的瞬态特性。
小波变换的数学定义如下:∫f(t)ψ*(t-k)dt其中,f(t)表示原始信号,ψ(t)是小波函数,*表示复共轭,k表示平移参数。
小波变换通过在时域内对小波函数进行平移和缩放来分析信号的不同频率成分。
二、小波变换的应用领域小波变换在数字信号处理中有广泛的应用,下面是一些常见领域:1. 信号处理:小波变换可以用于信号去噪、信号压缩和谱分析等方面。
通过对信号进行小波分解和重构,可以提取信号的主要特征信息,去除噪声干扰,实现信号的有效处理和分析。
2. 图像处理:小波变换可以应用于图像压缩、图像去噪和图像分析等方面。
通过对图像进行小波分解和重构,可以实现图像的压缩存储、去除图像中的噪声,并提取图像的局部特征。
3. 视频处理:小波变换可以用于视频压缩、视频去噪和视频分析等方面。
通过对视频信号进行小波分解和重构,可以实现视频的高效压缩和去除视频中的噪声,提取视频的运动特征。
4. 生物医学工程:小波变换可以应用于生物信号处理和医学图像分析等方面。
通过对生物信号和医学图像进行小波分解和重构,可以实现生物信号的识别和分类,以及医学图像的分割和特征提取。
三、小波变换与傅里叶变换的比较小波变换和傅里叶变换都是信号分析的重要工具,它们之间存在一些区别和联系。
1. 分辨率:小波变换具有局部分辨率,可以捕捉信号的瞬态特性,而傅里叶变换具有全局分辨率,适用于分析信号的频率成分。
2. 多尺度性:小波变换可以分解信号为不同尺度的小波成分,可以提取信号的多尺度信息,而傅里叶变换只能提取信号在不同频率上的分量。
小波变换算法实现小波变换是现代信号处理领域中一种重要的分析方法,用于将一个时间域上的信号转换成频率-时间域上的信号。
小波变换具有时频局部化的特性,可以更好地描述信号的瞬时特征。
下面将介绍小波变换的基本原理和算法实现。
一、小波变换的基本原理小波变换本质上是将一个信号分解成不同频率和时间的成分。
它利用小波函数作为基函数,通过对信号的卷积和迭代分解,将信号分解为近似系数和细节系数。
近似系数表示信号在不同尺度上的低频成分,而细节系数表示信号在不同尺度上的高频成分。
通过迭代分解和重构,可以得到一系列尺度不同的近似系数和细节系数。
这些系数可以用于信号的压缩、去噪、边缘检测等各种信号处理任务,具有很强的应用价值。
二、小波变换的实现步骤小波变换的实现分为分解和重构两个步骤。
下面将详细介绍每个步骤的算法实现。
1.分解(1)选择小波基函数:需要选择一种合适的小波基函数作为分解的基础。
常见的小波基函数有Haar、Daubechies、Symlets等。
(2)信号补零:为了使信号长度满足小波变换的要求,需要对信号进行补零操作,通常在信号末尾添加0。
(3)小波滤波器:通过卷积操作将信号分解为低频和高频的部分。
低频部分即近似系数,高频部分即细节系数。
(4)采样:将滤波后的信号进行降采样,得到下一层的近似系数和细节系数。
(5)重复分解:将降采样后的近似系数和细节系数作为输入,重复进行上述分解操作,得到更高阶的近似系数和细节系数。
2.重构(1)插值:将近似系数和细节系数进行上采样,补齐0,得到重构所需的长度。
(2)小波滤波器:将插值后的系数与小波滤波器进行卷积操作,得到重构后的信号。
(3)重复重构:将重构信号作为输入,重复进行上述重构操作,得到原始信号的近似恢复。
三、小波变换的优缺点小波变换有以下几个优点:(1)时频局部化:小波函数具有时频局部化的特性,能更好地描述信号的瞬时特征。
(2)多分辨率分析:小波变换能够将信号在不同尺度上进行分解,分析信号的低频和高频成分。
小波变换公式推导
1、定义小波函数:小波函数ψ(t)是一个具有零平均值的振荡函数,它在时间域和频率域都是局部化的。
2、小波变换的积分形式:对于信号f(t),其连续小波变换(CWT)定义为
其中,a是尺度参数,控制小波的宽度;b是平移参数,控制小波的位置。
3、小波函数的性质:小波函数需要满足一定的条件,如可容许性条件,以确保小波变换的存在性和唯一性。
4、逆变换:连续小波变换的逆变换为
其中,Cψ是一个与ψ有关的常数。
5、离散小波变换:在实际应用中,常常使用离散小波变换(DWT),它是对连续小波变换的尺度和平移参数进行离散化得到的。
6、多分辨率分析:小波变换的一个重要特性是多分辨率分析,它允许我们在不同的尺度上观察信号,从而揭示信号的局部特征。
7、小波基的选择:在实际应用中,需要选择适合信号特点的小波基函数,如Haar小波、Daubechies小波等。
8、快速小波变换:为了提高计算效率,可以使用快速小波变换(FWT)算法,它利用了小波变换的某些性质来减
少计算量。
小波变换基本方法小波变换是一种时频分析方法,它将信号分解为不同频率的组成部分。
它有很多基本方法,以下是其中几种常用的方法。
1.离散小波变换(DWT):离散小波变换是小波变换最常用的方法之一、它将信号分解为不同的频带。
首先,信号经过低通滤波器和高通滤波器,并下采样。
然后,重复这个过程,直到得到所需的频带数。
这样就得到了信号在不同频带上的分解系数。
这种方法的好处是可以高效地处理长时间序列信号。
2.连续小波变换(CWT):连续小波变换是在时间和尺度两个域上进行分析的方法。
它使用小波函数和尺度来描述信号的局部变化。
CWT得到的结果是连续的,可以提供非常详细的时频信息。
然而,CWT的计算复杂度较高,不适用于处理长时间序列信号。
3.基于小波包的变换:小波包变换是一种对信号进行更细粒度分解的方法。
它通过在每个频带上进行进一步的分解,得到更详细的时频信息。
小波包变换比DWT提供更多的频带选择,因此可以更准确地描述信号的时频特征。
4.奇异谱分析(SSA):奇异谱分析是一种基于小波变换的信号分析方法,它主要用于非平稳信号的时频分析。
它通过将信号分解成一组奇异函数,然后通过对奇异函数进行小波变换得到奇异谱。
奇异谱可以用于描述信号在频域上的变化。
5.小波包压缩:小波包压缩是一种利用小波变换进行信号压缩的方法。
它通过选择一个适当的小波基函数和分解层次来减少信号的冗余信息。
小波包压缩可以用于信号压缩、特征提取和数据降维等应用。
以上是小波变换的几种基本方法,每种方法都有其适用的领域和特点。
在实际应用中,可以根据需求选择合适的方法来进行信号分析和处理。
小波变换原理
小波变换是一种有用的数字图像处理方法,可以将图像的信号分解为几个不同的小部分,使得处理变得更容易、更简单。
小波变换原理是指将图像信号分解为若干可分解的子信号,并通过分析这些子信号来获取有关图像特征的信息。
小波变换原理的基本概念是将图像分解为“系数”和“尺度”,
即将图像分解为不同的尺度空间,每个空间中的像素信号表示为系数和尺度之间的关系。
小波变换是一种矩阵分解技术,利用图像的小波变换系数将图像的像素信号分为多个彼此具有相似特征的图像尺度,这样就可以建立一个有效的图像像素空间,用于分解和重构图像信号。
小波变换是一种非线性技术,可以实现数字图像处理中常用的空间域,空间频率域,时域,时频域等图像域的转换,从而实现图像处理功能。
通常情况下,小波变换采用一组正交函数构成变换系数,比如Haar,Symmlet,Coiflet和Biorthogonal等,将图像信号分解为一系列子信号。
此外,小波变换还包括从子信号重构图像信号的过程,使用正交函数来实现。
小波变换的优点是可以有效的提取图像信号中的属性,例如低频信号,以及高频信号,从而进行更精细的图像分析、提取、滤波、压缩等。
同时,小波变换也可以有效的减少图像信号的噪声,实现图像去噪,这对于图像分析和提取有重要意义。
总之,小波变换原理是将图像信号分解为若干可分解的子信号,利用正交函数构成的变换系数将图像的像素信号分为多个彼此具有
相似特征的图像尺度,从而提取图像信号中的特征,进行更精细的图像分析、提取、滤波、压缩等。
小波变换是一种有效的数字图像处理方法,可以有效进行图像处理,有助于人们更加深入的理解图像,提高图像分析的效率。
第4章 小波变换的实现技术4.1 Mallat 算法双正交小波变换的Mallat 算法:设{}n h h =、{}n g g =、{}n h h =、{}n g g =为实系数双正交小波滤波器。
h ,g 是小波分析滤波器,h ,g 是小波综合滤波器。
h 表示h 的逆序,即n n h h -=。
若输入信号为n a ,它的低频部分和高频部分以此为1n a -和1n d -,小波分解与重构的卷积算法:11()()n n n na D a h d D a g --⎧⎪=*⎨=*⎪⎩ n11()()n n a Uah Ud g --=*+*先进行输入信号和分析滤波器的巻积,再隔点采样,以形成低频和高频信号。
对于有限的数据量,经过多次小波变化后数据量大减,因此需对输入数据进行处理。
4.1.1 边界延拓方法下面给出几种经验方法。
1. 补零延拓是假定边界以外的信号全部为零,这种延拓方式的缺点是,如果输入信号在边界点的值与零相差很大,则零延拓意味着在边界处加入了高频成分,造成很大误差。
实际应用中很少采用。
0121,0,,,,...,,0,0,......n s s s s -2.简单周期延拓将信号看作一个周期信号,即k n k s s +=。
简单周期延拓后的信号变为这种延拓方式的不足之处在于,当信号两端边界值相差很大时,延拓后的信号将存在周期性的突变,也就是说简单周期延拓可在边界引入大量高频成分,从而产生较大误差。
3. 周期对称延拓这种方法是将原信号在边界上作对称折叠,一般分二1)当与之做卷积的滤波器为奇数时,周期延拓信号为2)当与之做卷积的滤波器为偶数时,周期延拓信号为4. 光滑常数延拓在原信号两端添加与端点数据相同的常数。
0121,,,...,,n s s s s -0121,,,...,,n s s s s -0121,,,...,,n s s s s -0,...s 1,...,n s -01221,,,...,,,n n s s s s s --0121,,,...,,n s s s s -21012,...,,,,,...n s s s s s -321212,,,...,,,,...n n n s s s s s s ---10012,,...,,,,...n n s s s s s --10112,,,...,,,n n n s s s s s ---5. 平滑延拓在原信号两端用线性外插法补充采样值,即沿着信号两端包络线的一阶导数方向增加采样值。
调制信号的小波变换
小波变换(Wavelet Transform)是一种时频分析方法,可以将信号从时域变换到时频域。
它能够有效地捕捉信号的瞬时变化和频率特征。
对于调制信号,小波变换可以用来分析信号的调制特性。
下面是利用小波变换分析调制信号的一般步骤:
1.选择合适的小波基函数:小波基函数通常由特定的形状和
带宽特征,对于调制信号,可以选择与信号调制特性相匹配的小波基函数。
2.对待分析的调制信号进行小波变换:通过将信号与选定的
小波基函数进行卷积,可以得到小波系数序列,表示信号在不同时间和频率上的贡献。
3.压缩和处理小波系数:小波变换通常会产生大量的小波系
数,其中包含了信号的详细和粗略的时频信息。
可以根据具体的需求进行压缩和处理,例如降低噪声、提取主要频率成分等。
4.可视化和分析结果:通过画出小波系数的时频图谱或频率
特征,可以对调制信号的调制特性进行可视化和分析,以便进一步理解和研究信号的特点。
小波变换在调制信号分析中具有广泛的应用,例如在通信、图像处理、语音识别等领域。
它可以帮助识别和提取调制信号中的关键信息,对信号进行特征提取、去噪和解调等处理。
小波变换定义公式1. 什么是小波变换?小波变换是一种数学方法,可以将任意复杂的信号分解成一系列基本的波形组成的信号组。
这些基本的波形组成的信号组称为小波基,而小波变换则是将信号转换到小波基上的过程。
小波变换通过将不同频率的信号分解成频率范围更窄的信号,从而提供了一种能够描述信号局部特征的方法。
2. 小波变换的定义公式设 x(t) 是一个连续时间信号,小波变换将信号转换到小波基上,得到小波系数 C(a,b):C(a,b)=∫x(t)ψ*ab(t) dt其中,ψ*ab(t) 是小波基函数,表示尺度为a,时移为b的小波基的共轭,a 和 b 分别表示尺度和位置参数,T 表示时间域上的范围。
3. 小波变换的特点和优势与傅里叶变换和短时傅里叶变换相比,小波变换具有以下特点和优势:(1)小波变换能够对非平稳信号进行分析,具有较好的时频局部性,能够提取信号短时的局部特征。
(2)小波变换能够对信号的高频部分和低频部分进行分离,具有较好的分辨率性。
(3)小波基函数无需是正交的,因此可选择适合不同信号处理需求的小波基函数。
(4)小波变换具有数据压缩和降噪的功能,可以有效地去除信号中的噪声和冗余信息。
4. 小波变换在实际应用中的应用小波变换在信号处理、图像处理和语音处理等方面具有广泛的应用。
例如,在信号处理中,小波变换可用于地震信号处理、生物信号处理和语音信号处理等方面;在图像处理中,小波变换可用于图像压缩、图像增强和边缘检测等方面;在语音处理中,小波变换可用于语音压缩、语音识别和语音增强等方面。
总之,小波变换作为一种有效的信号分析方法,在实际应用中发挥着重要的作用,对于提高信号处理的效率和精度都具有重要的意义。
《医学图像处理》实验报告实验十:小波变换日期: 2014年05月06日摘要本次实验的实验目的及主要内容是:一维小波变换和反变换二维小波变换和反变换二维小波细节置零、去噪一、技术讨论1.1实验原理小波变换的原理:是指一组衰减震动的波形,其振幅正负相间变化为零,是具有一定的带宽和中心频率波组。
小波变换是用伸缩和平移小波形成的小波基来分解(变换)或重构(反变换)时变信号的过程。
不同的小波具有不同带宽和中心频率,同一小波集中的带宽与中心频率的比是不变的,小波变换是一系列的带通滤波响应。
它的数学过程与傅立叶分析是相似的,只是在傅立叶分析中的基函数是单频的调和函数,而小波分析中的基函数是小波,是一可变带宽内调和函数的组合。
小波去噪的原理:利用小波变换把含噪信号分解到多尺度中,小波变换多采用二进型,然后在每一尺度下把属于噪声的小波系数去除,保留并增强属于信号的小波系数,最后重构出小波消噪后的信号。
其中关键是用什么准则来去除属于噪声的小波系数,增强属于信号的部分。
1.2实验方法1)dwt函数(实现1-D离散小波变换)[cA,cD]=dwt(X,’wname’)使用指定的小波基函数‘wname’对信号X进行分解,cA和cD分别是近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D)用指定的滤波器组Lo_D,Hi_D对信号进行分解2)idwt函数(实现1-D离散小波反变换)X=idwt(cA,cD,’wname’)X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,’wname’,L)X=idwt(cA,cD,Lo_R,Hi_R,L)由近似分量cA和细节分量cD经过小波反变换,选择某小波函数或滤波器组,L为信号X中心附近的几个点3)dwt2函数(实现2-D离散小波变换)[cA,cH,cV,cD]=dwt2(X,’wname’)[cA,cH,cV,cD]=dwt2(X,’wname’)cA近似分量,cH水平细节分量,cV垂直细节分量,cD对角细节分量4)idwt2函数(实现2-D离散反小波变换)X=idwt2(cA,cH,cV,cD,’wname’)X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)X=idwt2(cA,cH,cV,cD,’wname’,S)X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)二、结果与讨论2.1实验结果一维小波变换的结果图一(a)(b)(a)此时size值取4,f为{1,4,-3,0,}(b)此时size值取6,f为{1,4,-3,0,8,3} 二维小波变换的结果:图二、正变换结果(a ) (b )反变换结果(利用正变换结果进行反变换)(c ) (d )置零处理结果:(三个细节分别置零处理)图三 右下角置0(a )original pic (b )zero(c ) wave result (d )change图四 左下角置0(a )original pic (b )zero(c )wave result (d )change图五右上角置0(a)original pic (b)zero(c)wave result (d)change 去噪结果:图六去噪结果(a)original pic (b)zero(c )wave result (d )change2.2实验讨论1)一维小波变换原理是将信号分解为高频和低频两列信号,对于实验中的一维信号,实验结果图一验证了这一结果,即将信号分解为高频和低频。
2)对于二维小波变换,信号将图像信息分解为高频和低频信息。
正变换是将图像分解为高频、低频信息,图二(b )是对(a )进行分解的结果,(b )的右上角、左上角以及左下角均为高频信息,左上角为低频信息。
而(d )是根据(c )的高频、低频信息进行重构的结果。
3)对于置零处理,分别对图像右下角、左下角以及左上角进行置零的时候,原图应该出现横向细节、垂直细节以及对角线细节被清理的后果,从图三到图五来看,可知由于图片选择问题,从当今结果不能清晰表达出来。
4)去噪是将小波变换结果的高频细节全部置零,得到的图像将比之前清晰,从图六可以简单得出此结论。
附录(实验代码).pro程序如下:#-------------------------------------------------## Project created by QtCreator 2014-05-08T21:26:01##-------------------------------------------------QT += coreQT -= guiTARGET= shiyanshiCONFIG += consoleCONFIG -= app_bundleTEMPLATE = appSOURCES+= main.cppINCLUDEPATH+=d:\Qt\opencv2.2\include\opencv\d:\Qt\opencv2.2\include\opencv2\d:\Qt\opencv2.2\includeLIBS+=d:\Qt\opencv2.2\lib\libopencv_calib3d220.dll.a\d:\Qt\opencv2.2\lib\libopencv_contrib220.dll.a\d:\Qt\opencv2.2\lib\libopencv_core220.dll.a\d:\Qt\opencv2.2\lib\libopencv_features2d220.dll.a\d:\Qt\opencv2.2\lib\libopencv_flann220.dll.a\d:\Qt\opencv2.2\lib\libopencv_gpu220.dll.a\d:\Qt\opencv2.2\lib\libopencv_highgui220.dll.a\d:\Qt\opencv2.2\lib\libopencv_imgproc220.dll.a\d:\Qt\opencv2.2\lib\libopencv_legacy220.dll.a\d:\Qt\opencv2.2\lib\libopencv_ml220.dll.a\d:\Qt\opencv2.2\lib\libopencv_objdetect220.dll.a\d:\Qt\opencv2.2\lib\libopencv_video220.dll.aHEADERS += \I:/【快盘下载】实验十小波变换/头文件/targetver.h \I:/【快盘下载】实验十小波变换/头文件/stdafx.h \I:/【快盘下载】实验十小波变换/头文件/sdkddkver.h \.cpp程序一、一维小波变换#include "stdafx.h"#include "cv.h"#include "highgui.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <math.h>#include <float.h>#include <limits.h>#include <time.h>#include <ctype.h>#include <math.h>#define SIZE 4#define layer 2void DWT_1_harr( double *in, double *out, int scale, int size ); void iDWT_1_harr2( double *in, double *out,int scale, int size ); int main(){double f[SIZE] = {1,4,-3,0};double q[SIZE]={0};DWT_1_harr( f, q, 2, SIZE );for (int i=0; i<SIZE; i++){printf("%lf\n",f[i]);}printf("\n");iDWT_1_harr2( f, q, 2, SIZE );for (int i=0; i<SIZE; i++){printf("%lf\n",f[i]);}char key_cmd = 1;while(1){key_cmd = cvWaitKey();if(key_cmd==27)break;}return 0;}//一维harr小波变换void DWT_1_harr( double *in, double*out,int scale, int size ){ //检查尺度是否吻合if( scale>(log(size)/log(2.0)) ){printf("Scale is too large\n");return;}int t = size;int i;while( scale>0 ){t = t/2;for (i=0; i<t; i++){out[i]=(in[2*i]+in[2*i+1])/1.4142;out[t+i]=(in[2*i]-in[2*i+1])/1.4142;}for (i=0; i<size; i++){in[i]=out[i];}scale--;}}//一维haar小波反变换(自动计算尺度)void iDWT_1_harr2( double *in, double *out, int scale, int size ){ //检查尺度是否吻合if( scale>(log(size)/log(2.0)) ){printf("Scale is too large\n");return;}int t = size/pow(2,scale);int i;while( scale>0 ){for( i=0; i<t; i++ ){out[2*i] = (in[i]+in[t+i])*0.7071;out[2*i+1] = (in[i]-in[t+i])*0.7071;}for(i=0;i<size; i++){in[i]=out[i];}t *=2;scale--;}}二、二维小波变换程序#include "stdafx.h"#include "cv.h"#include "highgui.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <math.h>#include <float.h>#include <limits.h>#include <time.h>#include <ctype.h>#include <math.h>#define SIZE 452#define layer 1void DWT_1_harr( double *in, double *out, int scale, int size );void iDWT_1_harr( double *in, double *out, int size );void DWT_2_harr( IplImage *img_in, int scale );void iDWT_2_harr( IplImage *img_in, int scale );int main(){IplImage* img_in = cvLoadImage("d:/zero_screenshot_05.05.2014.png");CvSize size = cvSize( img_in->width, img_in->height );IplImage* img_gray = cvCreateImage(size,IPL_DEPTH_8U,1);cvCvtColor(img_in, img_gray, CV_BGR2GRAY );// IplImage* img_gray2 = cvCreateImage(size,IPL_DEPTH_64F,1);IplImage* img_gray3 = cvCreateImage(size,IPL_DEPTH_64F,1);double f[SIZE];double q[SIZE];for( int j = 0; j<size.height; j++ ) {uchar* ptr1 = (uchar*) ( img_gray->imageData + j * img_gray->widthStep );double* ptr2 = (double*) ( img_gray3->imageData + j * img_gray3->widthStep );for( int i = 0; i<size.width; i++ ) {ptr2[i] = (double)ptr1[i];}}// DWT_2_harr( img_gray3, layer );//小波变换iDWT_2_harr( img_gray3, layer );//反变换cvNormalize(img_gray3,img_gray3,1,0,CV_MINMAX);cvNamedWindow( "original pic", 1 );//创建窗口cvShowImage("originalpic", img_gray);//显示图像cvNamedWindow("wavelet pic",1);//创建窗口cvShowImage("wavelet pic", img_gray3);//显示图像char key_cmd = 1;while(1){key_cmd = cvWaitKey();if(key_cmd==27)break;}return 0;}//一维harr小波变换voidDWT_1_harr(double *in, double*out, int scale, int size){//检查尺度是否吻合if(scale>(log(size)/log(2.0))){printf("Scale is toolarge\n");return;}int t =size;int i;while(scale>0){t = t/2;for(i=0; i<t;i++){out[i]=(in[2*i]+in[2*i+1])/1.4142;out[t+i]=(in[2*i]-in[2*i+1])/1.4142;}for(i=0; i<size; i++){in[i]=out[i];}scale--;}}//一维haar小波反变换void iDWT_1_harr(double *in,double*out, int size ){//固定尺度为1int t= size/2;inti;for( i=0; i<t;i++){out[2*i]=(in[i]+in[t+i])*0.7071;out[2*i+1] = (in[i]-in[t+i])*0.7071;}for(i=0;i<size; i++){in[i]=out[i];}}//二维haar小波变换voidDWT_2_harr(IplImage*img_in, intscale){//检查尺度是否吻合CvSize size= cvSize(img_in->width,img_in->height);if(scale>(log(size.width)/log(2.0))){printf("Scaleistoolarge\n");return;}if( size.width> SIZE ){printf("Figureistoolarge,please change theSIZE parement\n");return;}//开辟变量及中间变量intstep_x =size.width;//这两个变量用于指向当前近似分量(LL)intstep_y=size.height;IplImage*img_temp =cvCreateImage(size,IPL_DEPTH_64F,1);doublef[SIZE];double q[SIZE];for( intk=1; k<=scale; k++,step_x/=2,step_y/=2){//水平分解for(intj = 0; j<step_y;j++){double* ptr1=(double*) ( img_in->imageData+j*img_in->widthStep );double*ptr2=(double*) ( img_temp->imageData+j * img_temp->widthStep );for(inti = 0; i<step_x;i++) {f[i] = ptr1[i];q[i] = 0;}DWT_1_harr( f, q, 1, step_x );for( int i = 0; i<step_x; i++ ) {ptr2[i] = f[i];}}//垂直分解cvTranspose(img_temp,img_temp);cvTranspose(img_in,img_in);for( int j = 0; j<step_x; j++ ) {double* ptr1 = (double*) ( img_temp->imageData + j * img_temp->widthStep );double* ptr3 = (double*) ( img_in->imageData + j * img_in->widthStep );for( int i = 0; i<step_y; i++ ) {f[i] = ptr1[i];q[i] = 0;}DWT_1_harr( f, q, 1, step_y );for( int i = 0; i<step_y; i++ ) {ptr3[i] = f[i];}}cvTranspose(img_temp,img_temp);cvTranspose(img_in,img_in);}//cvNormalize(img_temp,img_temp,1,0,CV_MINMAX);//cvNamedWindow( "c", 1 ); //创建窗口//cvShowImage( "c", img_temp ); //显示图像cvReleaseImage(&img_temp);return;}//二维haar小波反变换void iDWT_2_harr( IplImage *img_in, int scale ){//开辟变量及中间变量CvSize size = cvSize( img_in->width, img_in->height );int step_x = size.width/(pow(2,layer));int step_y = size.height/(pow(2,layer));IplImage* img_temp = cvCreateImage(size,IPL_DEPTH_64F,1);cvZero(img_temp);double f[SIZE];double q[SIZE];//cvNormalize(img_in,img_temp2,1,0,CV_MINMAX);//cvNamedWindow( "f", 1 ); //创建窗口//cvShowImage( "f", img_temp2 ); //显示图像for( int k=scale; k>=1; k--, step_x*=2, step_y*=2 ){//垂直反变换cvTranspose(img_temp,img_temp);cvTranspose(img_in,img_in);for( int j = 0; j<step_x*2; j++ ) {double* ptr1 = (double*) ( img_in->imageData + j * img_in->widthStep );double* ptr2 = (double*) ( img_temp->imageData + j * img_temp->widthStep );for( int i = 0; i<step_y*2; i++ ) {f[i] = ptr1[i];q[i] = 0;}iDWT_1_harr( f, q, step_y*2 );for( int i = 0; i<step_y*2; i++ ) {ptr2[i] = f[i];}}cvTranspose(img_temp,img_temp);cvTranspose(img_in,img_in);//水平反变换for( int j = 0; j<step_y*2; j++ ) {double* ptr1 = (double*) ( img_temp->imageData + j * img_temp->widthStep );double* ptr3 = (double*) ( img_in->imageData + j * img_in->widthStep );for( int i = 0; i<step_x*2; i++ ) {f[i] = ptr1[i];q[i] = 0;}iDWT_1_harr( f, q, step_x*2 );for( int i = 0; i<step_x*2; i++ ) {ptr3[i] = f[i];}}}//cvNormalize(img_temp,img_temp,1,0,CV_MINMAX);//cvNamedWindow( "d", 1 ); //创建窗口//cvShowImage( "d", img_temp ); //显示图像cvReleaseImage(&img_temp);return;}三、置零和去噪程序#include "stdafx.h"#include "cv.h"#include "highgui.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <math.h>#include <float.h>#include <limits.h>#include <time.h>#include <ctype.h>#include <math.h>#define SIZE 300#define layer 1void DWT_1_harr( double *in, double *out, int scale, int size );void iDWT_1_harr( double *in,double*out, int size );void DWT_2_harr( IplImage *img_in, int scale );void iDWT_2_harr( IplImage *img_in, int scale );int main(){IplImage* img_in = cvLoadImage("d:/lena.tif");CvSize size = cvSize( img_in->width, img_in->height );IplImage* img_gray = cvCreateImage(size,IPL_DEPTH_8U,1);cvCvtColor(img_in, img_gray, CV_BGR2GRAY );IplImage* img_gray2 = cvCreateImage(size,IPL_DEPTH_64F,1);IplImage* img_gray3 = cvCreateImage(size,IPL_DEPTH_64F,1);double f[SIZE];double q[SIZE];for( int j = 0; j<size.height; j++ ) {uchar* ptr1 = (uchar*) ( img_gray->imageData + j * img_gray->widthStep );double* ptr2 = (double*) ( img_gray3->imageData + j * img_gray3->widthStep );for( int i = 0; i<size.width; i++ ) {ptr2[i] = (double)ptr1[i];}}//小波变换DWT_2_harr( img_gray3, layer );cvNormalize(img_gray3,img_gray2,1,0,CV_MINMAX);cvNamedWindow( "wavelet_result", 1 ); //创建窗口cvShowImage( "wavelet_result", img_gray2 ); //显示图像//置0for( int j = 128; j<size.width; j++ ) {//128<j<256 行数double* ptr2 = (double*) ( img_gray3->imageData + j * img_gray3->widthStep );for( int i = 128; i<size.width; i++ ) {//128<=i<256 列数ptr2[i] = 0;//把右下角细节置0}}for( int j = 128; j<size.width; j++ ) {//128<j<256double* ptr2 = (double*) ( img_gray3->imageData + j * img_gray3->widthStep );for( int i = 0; i<128; i++ ) {//0<=i<128ptr2[i] = 0;//把左下角细节置0}}for( int j = 0; j<128; j++ ) {//0<j<128double* ptr2 = (double*) ( img_gray3->imageData + j * img_gray3->widthStep );for( int i = 128; i<size.width; i++ ) {//128<=i<256ptr2[i] = 0;//把右上角细节置0}}cvNormalize(img_gray3,img_gray2,1,0,CV_MINMAX);cvNamedWindow( "change_coefficients", 1 ); //创建窗口cvShowImage( "change_coefficients", img_gray2 ); //显示图像iDWT_2_harr( img_gray3, layer );//反变换cvNormalize(img_gray3,img_gray3,1,0,CV_MINMAX);cvNamedWindow( "original pic", 1 ); //创建窗口cvShowImage( "original pic", img_gray ); //显示图像cvNamedWindow( "zero", 1 ); //创建窗口cvShowImage( "zero", img_gray3 ); //显示图像char key_cmd = 1;while(1){key_cmd = cvWaitKey();if(key_cmd==27)break;}return 0;}//一维harr小波变换void DWT_1_harr( double *in, double *out, int scale, int size ){ //检查尺度是否吻合if( scale>(log(size)/log(2.0)) ){printf("Scale is too large\n");return;}int t =size;int i;while( scale>0 ){t = t/2;for (i=0; i<t; i++){out[i]=(in[2*i]+in[2*i+1])/1.4142;out[t+i]=(in[2*i]-in[2*i+1])/1.4142;}for (i=0; i<size; i++){in[i]=out[i];}scale--;}}//一维haar小波反变换voidiDWT_1_harr( double *in, double*out,intsize){//固定尺度为1intt=size/2;int i;for(i=0;i<t; i++ ){out[2*i] =(in[i]+in[t+i])*0.7071;out[2*i+1] =(in[i]-in[t+i])*0.7071;}for(i=0; i<size; i++){in[i]=out[i];}}//二维haar小波变换voidDWT_2_harr(IplImage *img_in, int scale ){//检查尺度是否吻合CvSize size= cvSize( img_in->width,img_in->height );if( scale>(log(size.width)/log(2.0)) ){printf("Scaleis too large\n");return;}if( size.width > SIZE ){printf("Figureis too large, pleasechangetheSIZEparement\n");return;}//开辟变量及中间变量int step_x=size.width;//这两个变量用于指向当前近似分量(LL)int step_y= size.height;IplImage*img_temp=cvCreateImage(size,IPL_DEPTH_64F,1);doublef[SIZE];doubleq[SIZE];for(int k=1;k<=scale; k++, step_x/=2,step_y/=2){//水平分解for( int j =0;j<step_y;j++ ){double*ptr1 = (double*)( img_in->imageData+j*img_in->widthStep);double*ptr2= (double*) (img_temp->imageData+ j* img_temp->widthStep);for(inti= 0;i<step_x; i++){f[i]=ptr1[i];q[i]=0;}DWT_1_harr( f,q, 1,step_x );for(inti=0; i<step_x;i++){ptr2[i]=f[i];}}//垂直分解cvTranspose(img_temp,img_temp);cvTranspose(img_in,img_in);for(intj=0; j<step_x;j++ ) {double*ptr1=(double*)( img_temp->imageData+j*img_temp->widthStep);double*ptr3=(double*)(img_in->imageData+j*img_in->widthStep );for(int i=0;i<step_y;i++){f[i]=ptr1[i];q[i] =0;}DWT_1_harr(f, q, 1,step_y );for( int i=0; i<step_y;i++){ptr3[i] = f[i];}}cvTranspose(img_temp,img_temp);cvTranspose(img_in,img_in);}//cvNormalize(img_temp,img_temp,1,0,CV_MINMAX);//cvNamedWindow( "c", 1 ); //创建窗口//cvShowImage( "c", img_temp ); //显示图像cvReleaseImage(&img_temp);return;}//二维haar小波反变换void iDWT_2_harr( IplImage *img_in, int scale ){//开辟变量及中间变量CvSize size = cvSize( img_in->width, img_in->height );int step_x = size.width/(pow(2,layer));int step_y = size.height/(pow(2,layer));IplImage* img_temp = cvCreateImage(size,IPL_DEPTH_64F,1);cvZero(img_temp);double f[SIZE];double q[SIZE];//cvNormalize(img_in,img_temp2,1,0,CV_MINMAX);//cvNamedWindow( "f", 1 ); //创建窗口//cvShowImage( "f", img_temp2 ); //显示图像for( int k=scale; k>=1; k--, step_x*=2, step_y*=2 ){//垂直反变换cvTranspose(img_temp,img_temp);cvTranspose(img_in,img_in);for( int j = 0; j<step_x*2; j++ ) {double* ptr1 = (double*) ( img_in->imageData + j * img_in->widthStep );double* ptr2 = (double*) ( img_temp->imageData + j * img_temp->widthStep );for( int i = 0; i<step_y*2; i++ ) {f[i] = ptr1[i];q[i] = 0;}iDWT_1_harr( f, q, step_y*2 );for( int i = 0; i<step_y*2; i++ ) {ptr2[i] = f[i];}}cvTranspose(img_temp,img_temp);cvTranspose(img_in,img_in);//水平反变换for( int j = 0; j<step_y*2; j++ ) {double* ptr1 = (double*) ( img_temp->imageData + j * img_temp->widthStep );double* ptr3 = (double*) ( img_in->imageData + j * img_in->widthStep );for( int i = 0; i<step_x*2; i++ ) {f[i] = ptr1[i];q[i] = 0;}iDWT_1_harr( f, q, step_x*2 );for( int i = 0; i<step_x*2; i++ ) {ptr3[i] = f[i];}}}//cvNormalize(img_temp,img_temp,1,0,CV_MINMAX);//cvNamedWindow( "d", 1 ); //创建窗口//cvShowImage( "d", img_temp ); //显示图像cvReleaseImage(&img_temp);return;}。