总结MATLAB中涉及到的小波函数

时间:2019-05-12 04:05:28下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《总结MATLAB中涉及到的小波函数》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《总结MATLAB中涉及到的小波函数》。

第一篇:总结MATLAB中涉及到的小波函数

收集和总结MATLAB中涉及到的小波函数

(1)plot函数:绘制向量或矩阵的图形 用法: plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName',PropertyValue,...)plot(axes_handle,...)(2)cwt函数:实现一维连续小波变换的函数。用法:

COEFS=cwt(S, SCALES, 'wname')COEFS=cwt(S, SCALES, 'wname', 'plot')COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE')COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE', XLIM)(3)dwt函数:单尺度一维离散小波变换 用法:

[cA,cD] = dwt(X,'wname')[cA,cD] = dwt(X,'wname','mode',MODE)[cA,cD] = dwt(X,Lo_D,Hi_D)[cA,cD] = dwt(X,Lo_D,Hi_D,'mode',MODE)(4)iswt函数:一维逆SWT(Stationary Wavelet Transform)变换 用法:

X = iswt(SWC,'wname')X = iswt(SWA,SWD,'wname')X = iswt(SWC,Lo_R,Hi_R)X = iswt(SWA,SWD,Lo_R,Hi_R)(5)upcoef函数:一维小波分解系数的直接重构用法:

Y = upcoef(O,X,'wname',N)Y = upcoef(O,X,'wname',N,L)Y = upcoef(O,X,Lo_R,Hi_R,N)Y = upcoef(O,X,Lo_R,Hi_R,N,L)Y = upcoef(O,X,'wname')Y = upcoef(O,X,Lo_R,Hi_R)

(6)upwlev函数:单尺度一维小波分解的重构 用法:

[NC,NL,cA] = upwlev(C,L,'wname')[NC,NL,cA] = upwlev(C,L,Lo_R,Hi_R)

(7)wavedec函数:单尺度一维小波分解

用法:

[C,L] = wavedec(X,N,'wname')[C,L] = wavedec(X,N,Lo_D,Hi_D)

(8)wavefun函数:小波函数和尺度函数

用法:

[PHI,PSI,XVAL] = wavefun('wname',ITER)[PHI1,PSI1,PHI2,PSI2,XVAL] = wavefun('wname',ITER)

[PSI,XVAL] = wavefun('wname',ITER)[...] = wavefun('wname',A,B)

(9)wpdec函数:一维小波包的分解

用法:

T = wpdec(X,N,'wname',E,P)T = wpdec(X,N,'wname')

(10)wpdencmp函数:用小波包进行信号的消噪或压缩

用法:

[XD,TREED,PERF0,PERFL2] =

wpdencmp(X,SORH,N,'wname',CRIT,PAR,KEEPAPP)

[XD,TREED,PERF0,PERFL2] =

wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP)

(11)wpfun函数:小波包函数 [用法:

WPWS,X] = wpfun('wname',NUM,PREC)

[WPWS,X] = wpfun('wname',NUM)

(12)wpjoin函数:重组小波包 用法:

T = wpjoin(T,N)[T,X] = wpjoin(T,N)T = wpjoin(T)

[T,X] = wpjoin(T)

(13)dbaux函数:Daubechies小波滤波器计算 用法:

W = dbaux(N,SUMW)W = dbaux(N)

(14)meyer函数:Meyer小波 用法:

[PHI,PSI,T] = meyer(LB,UB,N)[PHI,T] = meyer(LB,UB,N,'phi')[PSI,T] = meyer(LB,UB,N,'psi')(15)meyer函数:Meyer小波 用法:

[PHI,PSI,T] = meyer(LB,UB,N)[PHI,T] = meyer(LB,UB,N,'phi')[PSI,T] = meyer(LB,UB,N,'psi')

第二篇:收集和总结MATLAB中涉及到的小波函数

一、收集和总结MATLAB中涉及到的小波函数 1.cwt函数功能:实现一维连续小波变换的函数。11.upwlev函数功能:单尺度一维小波分解的重cwt函数语法格式:

COEFS=cwt(S, SCALES, 'wname')COEFS=cwt(S, SCALES, 'wname', 'plot')COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE')2.dwt函数功能:单尺度一维离散小波变换 函数语法格式:

[cA,cD] = dwt(X,'wname')[cA,cD] = dwt(X,'wname','mode',MODE)[cA,cD] = dwt(X,Lo_D,Hi_D)3.meyer函数功能:Meyer小波 函数语法格式:

[PHI,PSI,T] = meyer(LB,UB,N)[PHI,T] = meyer(LB,UB,N,'phi')[PSI,T] = meyer(LB,UB,N,'psi')4.plot函数功能:绘制向量或矩阵的图形 函数语法格式: plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)5.cgauwavf函数功能:Complex Gaussian小波 函数语法格式:

[PSI,X] = cgauwavf(LB,UB,N,P)6.iswt函数功能:一维逆SWT(Stationary Wavelet Transform)变换 函数语法格式:

X = iswt(SWC,'wname')X = iswt(SWA,SWD,'wname')X = iswt(SWC,Lo_R,Hi_R)7.mexihat函数功能:墨西哥帽小波

函数语法格式:

[PSI,X] = mexihat(LB,UB,N)

8.morlet函数功能:Morlet小波

函数语法格式:

[PSI,X] = morlet(LB,UB,N)

9.symwavf函数功能:Symlets小波滤波器 函数语法格式: F = symwavf(W)10.upcoef函数功能:一维小波分解系数的直接重构

函数语法格式:

Y = upcoef(O,X,'wname',N)Y = upcoef(O,X,'wname',N,L)Y = upcoef(O,X,Lo_R,Hi_R,N)Y = upcoef(O,X,Lo_R,Hi_R,N,L)Y = upcoef(O,X,'wname')Y = upcoef(O,X,Lo_R,Hi_R)

函数语法格式:

[NC,NL,cA] = upwlev(C,L,'wname')[NC,NL,cA] = upwlev(C,L,Lo_R,Hi_R)

12.wavedec函数功能:单尺度一维小波分解

函数语法格式:

[C,L] = wavedec(X,N,'wname')[C,L] = wavedec(X,N,Lo_D,Hi_D)

13. wavefun函数功能:小波函数和尺度函数 函数语法格式:

[PHI,PSI,XVAL] = wavefun('wname',ITER)

14.waverec函数功能:多尺度一维小波重构

函数语法格式:

X = waverec(C,L,'wname')

X = waverec(C,L,Lo_R,Hi_R)

15.wpcoef函数功能:计算小波包系数

函数语法格式: X = wpcoef(T,N)

X = wpcoef(T)

16.wpdec函数功能:一维小波包的分解

函数语法格式:

T = wpdec(X,N,'wname',E,P)T = wpdec(X,N,'wname')

17.wpfun函数功能:小波包函数 [函数语法格式:

WPWS,X] = wpfun('wname',NUM,PREC)

[WPWS,X] = wpfun('wname',NUM)

18.wprcoef函数功能:小波包分解系数的重构

函数语法格式:

X = wprcoef(T,N)

19.wprec函数功能:一维小波包分解的重构

函数语法格式:

X = wprec(T)

20.wrcoef函数功能:对一维小波系数进行单支重构

函数语法格式:

X = wrcoef('type',C,L,'wname',N)X = wrcoef('type',C,L,Lo_R,Hi_R,N)X = wrcoef('type',C,L,'wname')X = wrcoef('type',C,L,Lo_R,Hi_R)

第三篇:MATLAB小波函数小结

通用函数

函数 含义

Allnodes 计算树结点

appcoef

提取一维小波变换低频系数

appcoef2 提取二维小波分解低频系数

bestlevt

计算完整最佳小波包树

besttree

计算最佳(优)树

* biorfilt

双正交样条小波滤波器组

biorwavf

双正交样条小波滤波器

* centfrq

求小波中心频率

cgauwavf

Complex Gaussian小波

cmorwavf

coiflets小波滤波器

cwt

一维连续小波变换

dbaux

Daubechies小波滤波器计算

Dbwavf

Daubechies小波滤波器

dbwavf(W)W='dbN' N=1,2,3,...,50

ddencmp

获取默认值阈值(软或硬)熵标准

depo2ind

将深度-位置结点形式转化成索引结点形式

detcoef

提取一维小波变换高频系数

detcoef2

提取二维小波分解高频系数

disp

显示文本或矩阵

drawtree

画小波包分解树(GUI)

dtree

构造DTREE类

dwt

单尺度一维离散小波变换

dwt2

单尺度二维离散小波变换

dwtmode

离散小波变换拓展模式

* dyaddown

二元取样

* dyadup

二元插值

entrupd

更新小波包的熵值

Fbspwavf

B样条小波

Gauswavf

Gaussian小波

get

获取对象属性值

idwt

单尺度一维离散小波逆变换

idwt2

单尺度二维离散小波逆变换

ind2depo

将索引结点形式转化成深度—位置结点形式

* intwave

积分小波数

isnode

判断结点是否存在istnode

判断结点是否是终结点并返回排列值

iswt

一维逆SWT(Stationary Wavelet Transform)变换

iswt2

二维逆SWT变换

leaves

Determine terminal nodes

mexihat

墨西哥帽小波

Meyer

Meyer小波

meyeraux

Meyer小波辅助函数

morlet

Morlet小波

nodease

计算上溯结点

nodedesc

计算下溯结点(子结点)

nodejoin

重组结点

Nodepar

寻找父结点

nodesplt

分割(分解)结点

noleaves

Determine nonterminal nodes

ntnode

Number of terminal nodes

ntree

Constructor for the class NTREE

* orthfilt

正交小波滤波器组

plot

绘制向量或矩阵的图形

* qmf

镜像二次滤波器

rbiowavf

Reverse biorthogonal spline wavelet filters read

读取二进制数据

Readtree

读取小波包分解树

* scal2frq

Scale to frequency

set

shanwavf

Shannon wavelets

swt

一维SWT(Stationary Wavelet Transform)变换

swt2

二维SWT变换

symaux

Symlet wavelet filter computation.symwavf Symlets小波滤波器

thselect

信号消噪的阈值选择

thodes

References

treedpth

求树的深度

treeord

求树结构的叉数

upcoef

一维小波分解系数的直接重构

upcoef2

二维小波分解系数的直接重构

upwlev

单尺度一维小波分解的重构

upwlev2

单尺度二维小波分解的重构

Wavedec

单尺度一维小波分解

wavedec2

多尺度二维小波分解

wavedemo

小波工具箱函数demo

* wavefun

小波函数和尺度函数

* wavefun2

二维小波函数和尺度函数

wavemenu

小波工具箱函数menu图形界面调用函数

* wavemngr

小波管理函数

Waverec

多尺度一维小波重构

waverec2

多尺度二维小波重构

wbmpen

Penalized threshold for wavelet 1-D or 2-D de-noising wcodemat

对矩阵进行量化编码

wdcbm

Thresholds for wavelet 1-D using Birge-Massart strategy wdcbm2

Thresholds for wavelet 2-D using Birge-Massart strategy Wden

用小波进行一维信号的消噪或压缩

wdencmp

De-noising or compression using wavelets wentropy

计算小波包的熵

wextend

Extend a vector or a matrix

* wfilters

小波滤波器

wkeep

提取向量或矩阵中的一部分

* wmaxlev

计算小波分解的最大尺度

wnoise

产生含噪声的测试函数数据

wnoisest

估计一维小波的系数的标准偏差

wp2wtree

从小波包树中提取小波树

wpcoef

计算小波包系数

Wpcutree

剪切小波包分解树

wpdec

一维小波包的分解

wpdec2

二维小波包的分解

wpdencmp wpfun

wpjoin

wprcoef

wprec

wprec2

wpsplt

wpthcoef

wptree

wpviewcf wrcoef

wrcoef2

Wrev

Write

wtbo

wthcoef

wthcoef2

wthresh

wthrmngr wtreemgr

用小波包进行信号的消噪或压缩

小波包函数

重组小波包

小波包分解系数的重构

一维小波包分解的重构

二维小波包分解的重构

分割(分解)小波包

进行小波包分解系数的阈值处理

显示小波包树结构

Plot the colored wavelet packet coefficients.对一维小波系数进行单支重构

对二维小波系数进行单支重构

向量逆序

向缓冲区内存写进数据

Constructor for the class WTBO

一维信号的小波系数阈值处理

二维信号的小波系数阈值处理

进行软阈值或硬阈值处理

阈值设置管理

管理树结构

第四篇:Matlab中数据结构总结

参考链接:心心水滴论坛

古木小永

主要数据结构包括数组,字符串,胞,结构体的用法,下面依次介绍 数组

1.1 数组的创建

创建数组的方法有很多,首先先讲一下如何手动去输入一个数组。比如我现在有两组数据,分别对应的是5个被试的身高以及体重,我想身高数据放在第一列,数据位178,167,170,156,182,第二列数据为体重数据,其对应为65,50,63,70,67。我们想把这两组数据存在一个变量Data上,这个时候我们只要在matlab命令框中输入 >>Data = [178,65;167,50;170,63;156,70;182,67]

 Data= 178 65 167 50 170 63 156 70 182 67

这里可以发现对于一堆数据的输入,可以先用一个中括号把所有数据括起来,一行的每个数据用逗号隔开或者可以通过空格,比如下面例子,行与行之间用分号隔开。Data2 = [1 2 3;4 5 6]  Data2= 1 2 4 5

如果每个数据都需要这样输入,那么会很麻烦,这里就提供了一些简单的方法来输入比较规整的数据。1.>>A = 1:5  A = 2 3 4 5 2.>>B = 1:2:10

 B = 3 5 7 9 可以看到如果我们想输入一列数据,并且这些数据是以等差数列的方式排布,我们就可以用a:b:c这样的形式来写,意思就是从a开始,每隔b有一个数据,然后写直到不大于c这样一组数。当然其中b可以省略,省略默认b的值为1。

1.2 数组的合并(这里要用到上面的A,B变量)

>> C = [A;B]

 C = 2 3 4 5

3 5 7 9 >>D = [A,B]  D = 2 3 4 5 1 3 5 7 9

%其中A和B都是一个数组,如果其能保证对齐,那么这些数组是可以合并的,就好像上面的两条命令。可以发现如果用分号,那么合并的情况是以列的方式合并,如果用逗号,那么是以行的方式合并,这个和手动输入数组是一致的,只不过把前面的数字当成数组来操作就可以了。

1.3 数组内部数据的取得(这里要用到前面的Data变量)

输入的方法我们有了,但我们如何来取出一个数据呢?先看看命令 >>Data(4,1) ans = 156 如何取出一行数据

>>Data(3,:) ans = 170 63

%和上面所说的一样,前面那个数代表行数,后面如果我们想取所有的数据,只需要在逗号后面写1:end就可以了,也就是第三行的对应的第一列到最后一列的数据,可以简写为一个冒号。同理比如取出第一列的数据可以写成 >>Data(1:end,1)或者 Data(:,1)

但我们有的时候不希望取出一整列的数据,而是想选出某列当中的几行数据,这个时候我们就可以发现其实数据取得前面是管行,后面是管列,并且看到1:end这个就可以联想到我们前面所演示的如何输入规整的数组。说白了这个1:end其实就是一个数组,如果是这样,我们就可以以此类推,如果我想输出第二列的第一,三,五行数据,那么命令就是 >>Data([1,3,5],2)%输出的结果我就不演示了,大家可以尝试一下。

1.4 数组内部数据的修改以及增添

同样我们可以用上面的Data变量,比如我现在发现我在Data里面有个数据是错的,比如第4行的第二个数据觉得有问题,通过查看我们原始的数据发现第四个人的体重不是70而是50,那么我们就需要修改原始的数据。如果重新输入一遍那就太蛋疼了,所以修改数据是非常关键的。有了上面的一些经验,我们来看看如何修改这个数据 >> Data(4,2)= 50  Data = 178 65 167 50 170 63 156 50 182 67

%在这里我们发现Data数据变了。如果我们想改一行数据,比如第三行数据应该是180,61,命令是

>> Data(3,:)= [180,61]  Data = 178 65 167 50 180 61 156 50 182 67

%这里要注意我们要改写一行,一列数组,那么后面的数据尺寸一定要和前面那行或者列的尺寸相同。假如我们想改这个Data的第一列的第一,三行的数据,分别改为150,160,这个时候我们输入的方法就是 >>Data([1,3],1)= [150,160]

1.5 数组的运算

>> A = 1:5; >> B = A + 5

B = 6 7 8 9 10字符串

2.1 字符串的创建

字符串的创建和数组的创建还是有一定的区别,使用单引号将所需要的字符括起来就可以(这里对比数组,数组是用中括号将数字括起来)

>>A = „hello world‟ A =

hello world %这里我们就建立了一个字符串变量,变量的内容就是hello world,同时我们可以再workspace当中查看这个变量。注意:

1.这里的单引号必须是英文字符的单引号,如果在中文输入法的情况下输入这个单引号是会出现错误的,这个事初学者经常会犯的错误。不能用双引号,会报错。

2.字符串是用单引号括起来就可以,但我们想输入单引号这这个字符,那么就要在单引号的前面再加一个单引号,比如我想生成一个字符串是 Tom‟s cat,这个时候的命令就是

>>A= „Tom‟‟s cat‟ A = Tom‟s cat

2.2 字符串的合并

数组可以实现合并,如果维数匹配,那么两个数组可以合并成一个数组,那么字符串也可以合并,其合并的方法和数组的合并一样,譬如

>>A = „hello‟;

%这里在命令的后面使用了分号,这个分号的意思就是运行这行命令,但不将结果显示出来,所以这个命令的意思就是创建一个变量名为A的字符串,并且变量A的内容是hello >>B= „world‟;

%创建字符串B >>C= [A,B]

%将A,B这两个字符串以水平方式合并起来,结果见下面 C = helloworld >>D= [A;B]

%将A,B这两个字符串以垂直方式合并起来,结果见下面 D =

hello

world

最常用的还是水平合并

2.3 字符串的使用

现在我们先创建一个字符串,比如是一个数据的文件名

>>filename = „data.txt‟;

这个时候我们只是想看看这个文件是什么类型的文件,也就是我们需要将后面三个字符取出来,而不去管其它的内容,获取的方法和数组的使用方法一致,可以使用括号来实现这个功能,譬如

>>filename(end-2:end)%这个命令的意思是取出这个字符串倒数第三至最后一个字符 ans = txt

如果我们想取出前面文件名那部分,而不想关注后面的数据类型,这时候使用方法如下

>>filename(1:end-4)

%取出字符串的第一个至倒数第五的字符 ans = data 2.4 字符串的修改

这个可以参照数组的用法,这里就不详细的解释了,如果有问题可以参考数组的用法 >>A = „helloworld‟;

%创建字符串

>>A(6:10)= „China‟

%将helloworld中的world改成China A =

helloChina 注意: 这里赋值号后面所跟的字符数量要和前面A中要修改的字符数量相同,如果不匹配的话是会出现错误的。

2.5 字符串的其它用法

数组的其中一个用法就是在数组后面的括号中加入一个逻辑变量数组,这样就可以取出逻辑数组中那个对应是true的那个位置的值,这个用法在字符串中同样适用。譬如

>>A= „helloChina‟;

>>index= A~=‟h‟

%取出helloChina 当中不是h这个字符的位置返回一个逻辑数组,这个数组的意思就是当helloChina当中不等于h的那个位置为true,否则为false index= 0 1 1 1 1 1 0 1 1 1 >>B= A(index)B =

elloCina 这个用法经常会用来去除字符串当中的空格,在这里就先注意一下。胞

好比“数组”是个容器(这里我们将字符串也当成数组看待),它可以装很多相同类型的数据。但后面经常会碰到我们希望找到一个更大的容器能装各式各样的“数组”,这个时候我们就用到了胞(cell)。

在我眼中胞就是一个能装各种各样数据类型的这么一个容器,可以装前面所讲的所有的数据类型,还可以装后面要讲的结构体,甚至胞还可以自己装自己,也就是一个胞中套一个胞。

3.1

胞的创建

数组的创建是用方括号,数组的调用要用到小括号,胞的创建是用花括号,胞的调用既可以用小括号,也可以用花括号,但效果不一样。对于胞的调用会在后面详细的介绍,但前面所说的这些括号的使用是很多初学者经常弄混的,所以这个需要大家注意一下。

胞的创建要用花括号,譬如: >>A = {„helloworld‟ , true, [1,2,3,4]} A = 'helloworld' [1] [1x4 double]

这里我们创建了一个胞,这个胞里面有三个元素,第一个元素是一个字符串,字符串的内容是helloworld,第二个元素是一个逻辑型变量,其值为true,第三个元素是一个数组,数组里面有4个整型变量。创建的方法很简单,用花括号将要放在一起的东西括起来,然后用逗号或者分号隔开,分号和逗号的使用和在创建数组时是一样的。

看起来胞很难用,乱七八糟的一堆东西,但在后面用的过程中,胞里面的所存的东西一般都是同一种类型的,比如要么都是数组,要么都是字符串。这里也只是显示一下胞的里面是可以装各种各样的数据类型。当然胞里面也可以装变量,譬如 >>M = „helloworld‟;>>N = „Tom‟‟s cat‟;>>A = {M , N , [1,2,3,4]}

A = 'helloworld' 'Tom's cat' [1x4 double]

3.2 胞中元素的调用(重点与难点)

比如我们现在有一堆字符串组成了一个胞,这个时候我们如何来调用这个字符串是一个很重要的问题。在前面我有说过胞的调用既可以使用小括号,也可以使用花括号,下面我们来看看其区别在什么地方。

>> A ={'data1.txt','data2.txt','data3.txt'};%创建一个胞,里面有三个字符串 >> M = A(1)%将A(1)这个东西存到M这个变量中 M = 'data1.txt'

>> N = A{1}

%将A{1}这个东西存到N这个变量中 N = data1.txt

这个时候我们可以在workspace中看到,M这个变量的属性是 1*1cell,而N这个变量的属性是字符串。也就是说用小括号调用的时候,没有改变cell的属性,出来的东西还是cell,然而当用花括号调用的时候,出来的东西是原本我们存进去的东西,比如我们存一个字符串的时候,调用出来的就是一个字符串,如果存的是一个数组,那么调用出来的就是一个数组。

假如我们现在只需要A这个胞中的前两个字符串,而第三个字符串我们不需要,这个时候我们可以这样使用

>>B = A(1,1:2)%这个用法和数组的用法一样,并且如果这个cell是一行或者一列,可简写为

>>B = A(1:2)

也就是说大规模的调用胞中的元素的时候会用小括号,而胞中单一的元素调用用的是花括号。同样我们还可以更进一步的调用胞中的元素。比如 >> A ={'data1.txt','data2.txt','data3.txt'};%创建一个胞,里面有三个字符串 >> B = A{1}(end-2:end)%取出胞的第一个元素(data1.txt)的后三个字符(txt)的使用方法 B = txt

同样如果胞里面存的是一个数组,我们希望取出数组中的某个元素或者某行数据,也可以使用类似的方法。比如

>>A = {[1,2;3,4],[5,6;7,8]} %创建一个胞,胞里面的两个元素都一个2*2数组 A = [2x2double] [2x2 double]

>>B = A{2}(:,2)

%取出第二个矩阵的第二列数 B =

也就是说这里我们只要将A{2}当成一个数组就可以了,里面的调用,修改都可以参照数组的用法

3.3 胞中元素的添加

比如现在有个胞,里面只有2个矩阵,我现在想增加第三个矩阵,用法如下 >>A = {[1,2;3,4],[5,6;7,8]} %创建一个胞,胞里面的两个元素都一个2*2数组 >>A{3} = [9,10;11,12]

A = [2x2double] [2x2 double] [2x2 double] 或者

>> A(3)= {[9,10;11,12]}

A = [2x2double] [2x2 double] [2x2 double]

这里我们发现用圆括号和花括号都可以实现胞中元素的添加,使用花括号的时候,只要直接写内容就好,而使用圆括号的时候,需要先生成一个胞,然后将这个胞添加到原来那个胞的后面。

注意:如果使用A{3} = {[9,10;11,12]},在matlab当中是不会出错的,但可以发现结果是 [2x2 double] [2x2double] {1x1 cell} 如果仅仅用A{3}(:,2)是会出错的,所以尽量避免不要弄混了。3.4 胞的一个常用用法

比如现在我有3个txt文档,里面存储着3个被试的行为数据,我们想通过循环的方式来依次读这三个文档,这个时候就会碰到一个问题,如何去调用这三个txt文档的文件名? 由于现在还没有将如何使用循环,在这里就先简单说一下,我们现在写的命令,运行的时候是按照命令从上到下的顺序依次运行一遍。但假如我们有在一堆代码中有其中一段需要重复运行几次,那么最简单的方法就是将这段代码复制粘贴几次,但如果这样做,那么程序就会变得很冗杂,于是就会用到循环这个东西,也就是我会告诉电脑,你运行到这里的时候给我重复运行其中的这几条命令。

但只是重复而没任何改变的话,那么这个循环就太死板了。更多情况下重复的过程中会有些许的变化,但变化不会太大。这个时候就需要一个能变得东西,比如我有一个变量i,我希望第一次循环的时候i等于1,第二次循环的时候i等于2,这样我就可以通过这个i来改变每次循环的内容。对于怎么写这个循环以及循环的用法,后面会有专门的一节来介绍。这里就记得在每次循环的过程中i就会增大1.对于前面的这个问题,我们可以先生成一个胞,这个胞里面存着这些txt文档的文件名。譬如

>>filename = {„data1.txt‟ , ‟data2.txt‟ , ‟data3.txt‟}

当我们调用第一个文件的时候,我们需要告诉一个读txt文档函数需要读的文件名是什么,这个时候我们就可以告诉那个函数要读的文件名是filename{i},也就是说当第一次循环的时候,读的txt文档的文件名就是filename{1},也就是字符串data1.txt,后面也就可以处理这个文件的数据,当循环第二次的时候,调用的文件名就变成filename{2},就可以处理第二个文件,以此类推。

当然我们发现在创建这个filename的时候,每次都要在最后输入.txt很麻烦,我们能不能有一些简单的方法?这个时候我们就可以先建一个cell,譬如 >>filename = {„data1‟ , ‟data2‟ , ‟data3‟}

当我用第一个文件名的时候,应该是data1.txt,我如何将这个固定的.txt加到后面呢?其实最简单的方法是用strcat函数,但对于函数是什么,还没有介绍。但不用函数同样能达成目的,这个时候就要想想前面讲字符串的一些知识,由于字符串可以接起来,所以每次循环用文件名的时候,就可以使用[filename{i} , ‟.txt‟]来实现,这个方括号所得到的东西就是一个字符串,也就是data1.txt。

如果有心细的同学说,那么前面那个data是不是也可以不用写?答案是肯定的,这个时候我们可以输入

>>filename = {„1‟ , ‟2‟ , ‟3‟}

在循环的过程中,可以将‟data‟ , filename{i} 和‟.txt‟连接起来,连接的方法为[„data‟ , filename{i} , „.txt‟],如果有对连接方法不太清楚的同学,可以参见字符串的用法 那节。

当然还有同学提出,那个i不就是1,2,3么?干嘛还要再生成那个胞?这里需要提醒的一点是,i所代表的是一个整型变量,而在字符串中那个1,2,3是一个字符类型的变量,如果直接使用[„data‟, i ,‟.txt‟],matlab会自动将i所对应的那个ascii码转换成相应字符,而1,2,3所代表的ascii码都是空,所以直接使用[„data‟, i ,‟.txt‟]出来的字符串都是data.txt。当然解决办法就是将整型i变成字符1,2,3,这里就要使用到另外一个函数num2str,这个函数就是能将数字变成字符。上面正确的写法应该是[„data‟ , num2str(i), ‟.txt‟]。结构体

首先介绍一下什么是结构体,按照我的理解,结构体就是将很多变量集中在一起的一个数据类型。举个形象的例子来看,结构体就是一个很大的盒子,在盒子中可以装各种小盒子,而这些小盒子就结构体内装的变量,比如一个数,一个数组,一个胞,甚至是另外一个结构体,并且这个大盒子还有个好处就是可以给里面的每个小盒子起一个名字,类似装鞋子的盒子,装领带的盒子或者装首饰的盒子。

其实胞同样也可以这样理解,在上面的例子中,胞也可以看成是一个大盒子,里面能装各种小盒子,但和结构体不同的是在胞中这些小盒子是按照顺序放置的,我们只能通过其顺序获取小盒子内的东西,比如第一个盒子,第二个盒子,而不同通过形象的名字来获取。所以在我理解当中凡是能用结构体完成的,胞同样也能完成,但可能在有些情况下使用胞会方便一些,有些情况使用结构体会更加方便一些。具体使用什么方式来存储变量,可能要根据实际情况来分析。

4.1 结构体创建

假如我们现在想存储一个被试的信息,包括这个被试的编号(整数),性别(字符串),年龄(整数)以及爱好(胞),我们可以使用四个变量来存储,但如何我们会经常用到这些信息,并且想将这些信息传递给其它函数,那么这个时候如果使用4个变量来存储就嫌的比较麻烦;如果是用cell去存储,那么如果我们取内容的时候就要严格按照其顺序获取单个内容(比如在存储的时候爱好排在第4个,那么在后面使用的时候就要从cell的第4个元素中取),这样同样不方便。这个时候结构体就是一个比较好的选择。

subject = struct('ID',1,'gender','male','age',23,'hobby',{{'football','singing'}});或者

subject.ID = 1;subject.gender = 'male';subject.age = 23;subject.hobby = {'football','singing'};

以上的两种创建的方式都是允许的,一般下面的这种方式可能会更加直观并且更加常用一些。注意:在第一种创建的方法中,cell是用两个大括号括起来的,也就是这里需要大家注意一下,如果我只用一个大括号会出现什么问题呢?这个可以留给大家自己试试。一般为了避免出现不必要的错误,我比较推荐第二种创建方式。这里如果只用一个大括号的话,会变成1×2struct 在这个里面我们就可以理解subject就是那个所谓的大盒子,在这个大盒子中我们装了4个小盒子,分别取名叫ID, gender, age, hobby。然后在这4个盒子中装了对应的内容。

当然如果我们有很多个被试如何去存储呢?这个时候就会出来一个东东叫做结构体数组,你可以将这个东西想象成顺序排放的一堆大盒子。创建的方式也很简单,比如:

subjects = [struct('ID',1,'gender','male','age',23,'hobby',{{'football','singing'}}),struct('ID',2,'gender','female','age',21,'hobby',{{'singing','dancing'}})];或者

subjects(1).ID = 1;subjects(1).gender = 'male';subjects(1).age = 23;subjects(1).hobby = {'football','singing'};subjects(2).ID = 2;subjects(2).gender = 'female';subjects(2).age = 21;subjects(2).hobby = {'singing','dancing'};

注意:既然是结构体数组,那么也就是要保证结构体数组内每个成员的形式是一样的,比如上面的例子来说,结构体数组中每个元素都要有相同的“小盒子”,但“小盒子”里面装的内容可以不同。如果在某个成员中不设置这个小盒子,那么这个成员同样会被默认创建一个空的“盒子” 如果我们想获取所有成员的年龄怎么办? [subjects.age] 或者 {subjects.age}

第五篇:小波变换 matlab 总结范文

小波变换matlab总结 目录

一、预置工具...........................................................................................................................4

1.预置信号......................................................................................................................4 2.预置小波......................................................................................................................4 3.滤波器函数..................................................................................................................6

wfilters函数.......................................................................................................6 4.量化编码......................................................................................................................6

wcodemat函数.......................................................................................................6 5.阈值获取......................................................................................................................6

ddencmp函数.........................................................................................................6 thselect函数.......................................................................................................7 wbmpen函数...........................................................................................................7 wdcbm函数..............................................................................................................7 6.阈值去噪......................................................................................................................8

wden函数................................................................................................................8 wdencmp函数.........................................................................................................8 wthresh函数.........................................................................................................9 wthcoef函数.........................................................................................................9 wpdencmp函数.......................................................................................................9

二、小波变换函数.................................................................................................................12

单尺度一维小波变换.....................................................................................................12

cwt一维连续小波变换.........................................................................................12 dwt一维离散小波变换.........................................................................................12 idwt一维离散小波逆变换..................................................................................13 upcoef 一维小波系数重构................................................................................13 多尺度一维小波变换.....................................................................................................14

wavedec多尺度一维分解...................................................................................14 waverec多尺度一维重构...................................................................................15 appcoef低频系数提取.......................................................................................16 detcoef高频系数提取.......................................................................................16 wrcoef多尺度小波系数重构.............................................................................17 一维静态(平稳)小波变换.........................................................................................18

swt一维平稳小波变换.........................................................................................18 iswt一维平稳小波逆变换..................................................................................18 实例.........................................................................................................................19 单尺度二维小波变换.....................................................................................................19

dwt2二维离散小波变换......................................................................................19 idwt2二维离散小波逆变换................................................................................20 upcoef2二维系数重构.......................................................................................20 多尺度二维小波变换.....................................................................................................21

wavedec2多尺度二维分解.................................................................................21 waverec2多尺度二维重构.................................................................................22 appcoef2低频系数提取.....................................................................................23 detcoef2高频系数提取.....................................................................................23 wrcoef2多尺度小波系数重构...........................................................................24 二维静态(平稳)小波变换.........................................................................................26

swt2二维静态小波变换......................................................................................26 iswt2二维静态小波逆变换................................................................................26 实例.........................................................................................................................26 直接调用的小波函数.....................................................................................................28

meyer函数............................................................................................................28 cgauwavf函数.....................................................................................................28 mexihat函数.......................................................................................................28 morlet函数.........................................................................................................29 symwavf函数.......................................................................................................29

三、图像接口调用.................................................................................................................30

使用图形接口做一维连续小波分析.....................................................................30 使用图形接口做一维离散小波分析.....................................................................33 使用图形接口分析复信号.....................................................................................36 使用图形接口做一维除噪分析.............................................................................36

四、小波变换在图像处理中的应用.....................................................................................40

4.1 小波分析用于图像压缩........................................................................................40

4.1.1 基于小波变换的图像局部压缩...............................................................40 4.1.2 小波变换用于图像压缩的一般方法.......................................................41 4.1.3 基于小波包变换的图像压缩...................................................................45 4.2 小波分析用于图像去噪........................................................................................47

小噪声阈值去噪.....................................................................................................48 大噪声滤波去噪.....................................................................................................49 少量噪声的小波分解系数阈值量化去噪.............................................................50 4.3 小波分析用于图像增强........................................................................................52

4.3.1 图像增强问题描述...................................................................................52 4.3.2 图像钝化...................................................................................................53 4.3.3 图像锐化...................................................................................................54 4.4 小波分析用于图像融合........................................................................................56 4.5 小波分析用于图像分解........................................................................................57

一、预置工具 1.预置信号

Matlab 内置了大量的信号实例,进行信号试验的时候可以调用。调用格式:load signal matlab安装目录的toolbox/wavelet/wavedemo noissin 包含噪声的正弦波

leleccum一维电压信号,有365560个采样点 wbarb 专指图片:

2.预置小波

Matlab预置了共计15种小波。查看语句:wavemngr('read',1)查看单个小波:waveinfo('wname')

1.Haar小波 小波名haar

2.Daubechies小波系 小波名db 调用名db1db2db3db4 db5 db6 db7 db8 db9 db10

3.对称小波系Symlets 小波名sym 调用名sym2sym3 sym4 sym5 sym6 sym7 sym8

4.Coiflets 小波系 小波名coif 调用名 coif1coif2coif3coif4coif5 5.Biorthogonal小波系 小波名bior 调用名bior1.1 bior1.3 bior1.5 bior2.2 bior2.4 bior2.6 bior2.8 bior3.1 bior3.3 bior3.5 bior3.7 bior3.9 bior4.4 bior5.5 bior6.8

6.ReverseBior小波系 小波名rbio 调用名rbio1.1 rbio1.3 rbio1.5 rbio2.2 rbio2.4 rbio2.6 rbio2.8 rbio3.1 rbio3.3 rbio3.5 rbio3.7 rbio3.9 rbio4.4 rbio5.5 rbio6.8

7.Meyer小波 小波名meyr

8.Dmeyer小波 小波名dmey

9.Gaussian小波系 小波名gaus 调用名gaus1gaus2gaus3gaus4gaus5gaus6gaus7gaus8

10.Mexican hat小波 小波名mexh

11.Morlet小波 小波名morl

12.Complex Gaussian小波系 小波名cgau 调用名cgau1cgau2cgau3cgau4cgau5 cgau

13.Shannon小波系 小波名shan 调用名shan1-1.5shan1-1shan1-0.5shan1-0.1shan2-3

14.Frequency B小波系 小波名fbsp 调用名fbsp1-1-1.5fbsp1-1-1fbsp1-1-0.5fbsp2-1-1fbsp2-1-0.5fbsp2-1-0.1

15.Complex Morlet小波系 小波名cmor 调用名cmor1-1.5cmor1-1cmor1-0.5cmor1-1cmor1-0.5cmor1-0.1 3.滤波器函数 wfilters函数

[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('wname')计算对应小波的滤波器。

The four output filters are Lo_D, 用于分解的低通滤波器 Hi_D, 用于分解的高通滤波器 Lo_R, 用于重构的低通滤波器 Hi_R, 用于重构的高通滤波器

4.量化编码 wcodemat函数

y=wcodemat(x,nb,opt,absol)y=wcodemat(x,nb,opt)y=wcodemat(x,nb)y=wcodemat(x)该函数是用来对矩阵X进行量化编码,它返回矩阵X的一个编码矩阵,在编码中,把矩阵X中元素绝对值最大的作为NB(NB是一个整数),绝对值最小的作为1,其他元素依其绝对值的大小在1与NB中排列.当OPT为'row'时,做行编码;当OPT为'col'时,做列编码, 当OPT为'mat'时,做全局编码,即把整个矩阵中的元素绝对值最大的元素作为NB,最小的作为1,其他元素依其绝对值的大小在整个矩阵中排列.当ABSOL为0时,该函数返回输入矩阵X的一个编码版本;为非0时,返回X的绝对值

5.阈值获取

MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。ddencmp函数

调用格式:

[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。输入参数X为一维或二维信号;

IN1取值为'den'或'cmp','den'表示进行去噪,'cmp'表示进行压缩; IN2取值为'wv'或'wp',wv表示选择小波,wp表示选择小波包。输出参数THR为函数选择的阈值,SORH为函数选择阈值使用方式。Sorh=s,为软阈值;Sorh=h,为硬阈值;输出参数KEEPAPP决定了是否对近似分量进行阈值处理。可选为0或1。CRIT为使用小波包进行分解时所选取的熵函数类型。例:自动生成信号小波处理的阈值选取方案。r=2055415866;randn('seed',r);x=randn(1,1000);%产生白噪声;%求取对信号进行小波消噪处理的默认阈值、软阈值,并且保留低频系数;[thr,sorh,keepapp]=ddencmp('den','wv',x);输出:

thr = 3.8593 sorh = s keepapp = 1 thselect函数

调用格式如下:

THR=thselect(X,TPTR);根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。自适应阈值的选择规则包括以下四种:

*TPTR='rigrsure',自适应阈值选择使用Stein的无偏风险估计原理。*TPTR='heursure',使用启发式阈值选择。

*TPTR='sqtwolog',阈值等于sqrt(2*log(length(X))).*TPTR='minimaxi',用极大极小原理选择阈值。

阈值选择规则基于模型 y = f(t)+ e,e是高斯白噪声N(0,1)。wbmpen函数

调用格式:

THR=wbmpen(C,L,SIGMA,ALPHA);返回去噪的全局阈值THR。THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。

[C,L]是进行去噪的信号或图像的小波分解结构; SIGMA是零均值的高斯白噪声的标准偏差;

ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般去ALPHA=2。wdcbm函数 调用格式:

(1)[THR,NKEEP]=wdcbm(C,L,ALPHA);(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M);函数wdcbm是使用Birge-Massart算法获取一维小波变换的阈值。返回值THR是与尺度无关的阈值,NKEEP是系数的个数。

[C,L]是要进行压缩或消噪的信号在j=length(L)-2层的分解结构; LAPHA和M必须是大于1的实数;

THR是关于j的向量,THR(i)是第i层的阈值;

NKEEP也是关于j的向量,NKEEP(i)是第i层的系数个数。一般压缩时ALPHA取1.5,去噪时ALPHA取3.6.阈值去噪

MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。wden函数 调用格式:

(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,'wname')(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,'wname')函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。

THR为阈值选择规则:

*TPTR='rigrsure',自适应阈值选择使用Stein的无偏风险估计原理。*TPTR='heursure',使用启发式阈值选择。

*TPTR='sqtwolog',阈值等于sqrt(2*log(length(X))).*TPTR='minimaxi',用极大极小原理选择阈值。SORH是软阈值或硬阈值的选择(分别对应's'和'h')。SCAL指所使用的阈值是否需要重新调整,包含下面三种: *SCAL='one' 不调整;

*SCAL='sln' 根据第一层的系数进行噪声层的估计来调整阈值。*SCAL='mln' 根据不同的噪声估计来调整阈值。

XD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。

wdencmp函数

调用格式有以下三种:

(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('gbl',X,'wname',N,THTR,SORH,KEEPAPP);(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',X,'wname',N,THTR,SORH);(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',C,L,'wname',N,THTR,SORH);函数wdencmp用于一维或二维信号的消噪或压缩。wname是所用的小波函数。

gbl(global的缩写)表示每一层都采用同一个阈值进行处理。lvd表示每层采用不同的阈值进行处理。N表示小波分解的层数。THR为阈值向量,对于格式(2)和(3)每层都要求有一个阈值,因此阈值向量THR的长度为N。

SORH表示选择软阈值或硬阈值(分别取值为's'和'h'),参数KEEPAPP取值为1时,则低频系数不进行阈值量化,反之,低频系数要进行阈值量化。XC是要进行消噪或压缩的信号,[CXC,LXC]是XC的小波分解结构,PERF0和PERFL2是恢复或压缩L^2的范数百分比。如果[C,L]是X的小波分解结构,则PERFL2=100*(CXC向量的范数/C向量的范数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100||XC||^2/||X||^2。

wthresh函数

调用格式:

Y=wthresh(X,SORH,T)返回输入向量或矩阵X经过软阈值(如果SORH='s')或硬阈值(如果SORH='h')处理后的信号。T是阈值。

Y=wthresh(X,'s',T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。

Y=wthresh(X,'h',T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。wthcoef函数 调用格式:

(1)NC=wthcoef('d',C,L,N,P)(2)NC=wthcoef('d',C,L,N)(3)NC=wthcoef('a',C,L)(4)NC=wthcoef('t',C,L,N,T,SORH)用于一维信号小波系数的阈值处理。

格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。

格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=‟s„,则为软阈值;如果SORH='h'则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。

wpdencmp函数

调用格式:

[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,'wname',CRIT,PAR,KEEPAPP)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP)函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参数TREED是XD的最佳小波包分解树;

PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||^2/||X||^2。

SORH的取值为's'或'h',表示的是软阈值或硬阈值。

输入参数N是小波包的分解层数,wname是包含小波名的字符串。

函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。

格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。

实例:

load noisdopp;x=noisdopp;%给出全局阈值

[thr,sorh,keepapp]=ddencmp('den','wv',x);%根据全局阈值对信号降噪

xc=wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp);[c,l]=wavedec(x,2,'sym4');[thr1,nkeep]=wdcbm(c,l,3);xc1=wdencmp('lvd',c,l,'sym4',2,thr1,'s');subplot(311);plot(x);title('原始信号')subplot(312);plot(xc);title('使用全局阈值降噪后的信号');subplot(313);plot(xc1);title('使用分层阈值降噪后的信号');

load woman %下面进行噪声的产生 init=3;rand('seed',init);Xn=X+18*(rand(size(X)));%下面进行图像的去噪处理

[thr,sorh,keepapp]=ddencmp('den','wv',Xn);Xd=wdencmp('gbl',Xn,'sym5',2,thr,sorh,keepapp);%用sym5小波对图像信号进行二层的小波分解 [c,s]=wavedec2(X,2,'sym5');[thr1,nkeep1]=wdcbm2(c,s,1.5);Xd1=wdencmp('lvd',c,s,'sym5',2,thr1,'s');%显示图像

subplot(221);image(X);colormap(map);title('原始图像X');axis square subplot(222);image(Xn);colormap(map);title('含噪声的图像');axis square subplot(223);image(Xd);colormap(map);title('去噪后的图像');axis square subplot(224);image(Xd1);colormap(map);title('分层去噪后的图像');axis square

二、小波变换函数 单尺度一维小波变换 cwt一维连续小波变换 调用格式:

coefs = cwt(s,scale,’wname’)【仅给出系数值】

coefs = cwt(s,scale,’wname’,’plot’)【给出系数值同时生成图像】 实例:

load noissin;figure subplot(121)plot(noissin);subplot(122)c=cwt(noissin,1:48,'db4','plot');

dwt一维离散小波变换 调用格式:

[cA1,cD1]=dwt(X,‟wname‟)【使用指定的小波基函数 'wname' 对信号 X 进行分解】 [cA1,cD1]=dwt(X,Lo_D,Hi_D)【使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解】 实例:

load leleccum;s=leleccum(1:3920);ls=length(s);[cA,cD]=dwt(s,'db1');figure subplot(121)plot(cA);subplot(122)plot(cD)[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('db1')[cA1,cD1]=dwt(s, Lo_D, Hi_D);figure subplot(121)plot(cA1);subplot(122)plot(cD1)

idwt一维离散小波逆变换 调用格式:

X=idwt(cA,cD,'wname')【由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X】 X=idwt(cA,cD,Lo_R, Hi_R)【用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 】 X=idwt(cA,cD,'wname',L)【指定返回信号 X 中心附近的 L 个点】 X=idwt(cA,cD, Lo_R, Hi_R, L)【与上边一致】

upcoef一维小波系数重构 调用格式:

Y = upcoef(O,X,'wname',N)Y = upcoef(O,X,'wname',N,L)Y = upcoef(O,X,Lo_R,Hi_R,N)Y = upcoef(O,X,Lo_R,Hi_R,N,L)这一函数是一维小波分解系数的直接重构

它重建的是原信号在指定层次的,高频或者低频分量。

也就是说,这个信号不是原本的信号,而且某个层次上的逼近。N=1条件下相当与缺省模式的idwt A1 = upcoef('a',cA1,'db1',1,l_s)相当于A1 = idwt(cA1,[],'db1',l_s);D1 = upcoef('d',cD1,'db1',1,l_s)相当于 D1 = idwt([],cD1,'db1',l_s);而O是一个标识符,O=„a‟ 低频,O=„d‟ 高频 N代表了小波系数的级别,是几级小波系数。L则指定返回信号 X 中心附近的 L 个点 例子:

load leleccum;s=leleccum(1:3920);ls=length(s);[cA,cD]=dwt(s,'db1');A1=upcoef('a',cA,'db1',1,ls);D1=upcoef('d',cD,'db1',1,ls);% A1 = idwt(cA,[],'db1',ls);D1 = idwt([],cD,'db1',ls);subplot(1,2,1);plot(A1);title('Approximation A1')subplot(1,2,2);plot(D1);title('Detail D1')

多尺度一维小波变换 wavedec多尺度一维分解

调用格式:

[C, L]=wavedec(X,N,’wname’)[C, L]=wavedec(X,N,Lo_D,Hi_D)函数返回N层分解的各组分系数C(连接在一个向量里),向量L里返回的是各组分的长度。分解的结构如下

例子:

load leleccum;s=leleccum(1:3920);[C,L]=wavedec(s,3,'db1');subplot(1,2,1);plot(C);title('C')subplot(1,2,2);plot(L);title('L')

waverec多尺度一维重构 调用格式:

X=waverec(C,L,’wname’)X=waverec(C,L,Lo_R,Hi_R)实例:

load leleccum;s=leleccum(1:3920);[C,L]=wavedec(s,3,'db1');A0=waverec(C,L,'db1');Err=abs(s-A0);figure(1)subplot(3,1,1);plot(s);title('original s');subplot(3,1,2);plot(A0);title('wavereconstruction s');subplot(3,1,3);plot(Err);title('wavereconstruction err');

appcoef低频系数提取 调用格式:

A=appcoef(C,L,‟wname‟,N)从C中抽取N层近似系数 A=appcoef(C,L,‟wname‟)A=appcoef(C,L,Lo_R,Hi_R,N)A=appcoef(C,L, Lo_R,Hi_R)detcoef高频系数提取 调用格式:

A=detcoef(C,L,N)A=detcoef(C,L)实例:

load leleccum;s=leleccum(1:3920);[C,L]=wavedec(s,3,'db1');cA3=appcoef(C,L,'db1',3);cD3=detcoef(C,L,3);cD2=detcoef(C,L,2);cD1=detcoef(C,L,1);subplot(2,2,1);plot(cA3);title('cA3')subplot(2,2,2);plot(cD3);title('cD3')subplot(2,2,3);plot(cD2);title('cD2')subplot(2,2,4);plot(cD1);title('cD1')

wrcoef多尺度小波系数重构

调用格式:

X=wrcoef(„type‟,C,L,‟wname‟,N)X=wrcoef(„type‟,C,L,Lo_R,Hi_R,N)X=wrcoef(„type‟,C,L,‟wname‟)X=wrcoef(„type‟,C,L, Lo_R,Hi_R)其中type=„a‟ 低频,type=„d‟ 高频 作用类似于upcoef,只不过是多尺度函数。实例:

load leleccum;s=leleccum(1:3920);[C,L]=wavedec(s,3,'db1');cA3=wrcoef('a',C,L,'db1',3);cD1=wrcoef('d',C,L,'db1',1);cD2=wrcoef('d',C,L,'db1',2);cD3=wrcoef('d',C,L,'db1',3);subplot(2,2,1);plot(cA3);title('cA3')subplot(2,2,2);plot(cD3);title('cD3')subplot(2,2,3);plot(cD2);title('cD2')subplot(2,2,4);plot(cD1);title('cD1')

一维静态(平稳)小波变换

离散平稳小波分析所用到的函数有swt小波分解和iswt小波重构 swt一维平稳小波变换 调用格式

SWC = swt(X,N,'wname')SWC = swt(X,N,Lo_D,Hi_D)[swa,swd] = swt(X,N,'wname')[swa,swd] = swt(X,N,Lo_D,Hi_D)对于SWT变换,如果需要在第k层分解信号,那么原始信号需要能够平分成2^k份。所以如果原始信号的长度不满足要求,需要使用Signal Extension GUI工具或使用wextend函数来扩展它。

函数执行将产生N层近似和细节的系数,两者和信号的长度是相等的,这也是平稳小波和普通小波不同的地方,从而使它在某些领域有好的效果。iswt一维平稳小波逆变换 调用格式

X = iswt(SWC,'wname')X = iswt(SWA,SWD,'wname')X = iswt(SWC,Lo_R,Hi_R)X = iswt(SWA,SWD,Lo_R,Hi_R)实例

load noisdopp s = noisdopp;[swa,swd] = swt(s,1,'db1');%一层平稳小波分解

subplot(1,2,1), plot(swa);title('Approximation cfs')subplot(1,2,2), plot(swd);title('Detail cfs')res = iswt(swa,swd,'db1');%一层平稳小波重构 %从系数中构建近似和细节

nulcfs = zeros(size(swa));A1 = iswt(swa,nulcfs,'db1');D1 = iswt(nulcfs,swd,'db1');subplot(4,1,1), plot(s);title('original s');subplot(4,1,2), plot(res);title('recovered s');subplot(4,1,3), plot(A1);title('Approximation A1');subplot(4,1,4), plot(D1);title('Detail D1');

单尺度二维小波变换 dwt2二维离散小波变换

[cA1,cH1,cV1,cD1]=dwt2(X,‟wname‟)[cA1,cH1,cV1,cD1]=dwt2(X,Lo_D,Hi_D)其中cA1, cH1水平;cV1垂直;cD1对角 二维小波变换有四个值 实例:

load wbarb;figure(1);image(X);colormap(map);colorbar;[cA1,cH1,cV1,cD1]=dwt2(X,'bior3.7');figure(2);colormap(map);subplot(2,2,1);image(wcodemat(cA1,192));title('cA1')subplot(2,2,2);image(wcodemat(cH1,192));title('cH1')subplot(2,2,3);image(wcodemat(cV1,192));title('cV1')subplot(2,2,4);image(wcodemat(cD1,192));title('cD1')

idwt2二维离散小波逆变换

X = idwt2(cA1,cH1,cV1,cD1,'bior3.7');

upcoef2二维系数重构

调用格式:

Y=upcoef2(O,X,‟wname‟,N,S)Y=upcoef2(O,X,Lo_R,Hi_R,N,S)Y=upcoef2(O,X,‟wname‟,N)Y=upcoef2(O,X,Lo_R,Hi_R,N)Y=upcoef2(O,X,‟wname‟)Y=upcoef2(O,X,Lo_R,Hi_R)O:„a‟低频;„h‟水平;„v‟垂直;„d‟对角 实例: load wbarb;[cA1,cH1,cV1,cD1]=dwt2(X,'bior3.7');A1 = upcoef2('a',cA1,'bior3.7',1);H1 = upcoef2('h',cH1,'bior3.7',1);V1 = upcoef2('v',cV1,'bior3.7',1);D1 = upcoef2('d',cD1,'bior3.7',1);figure(2);colormap(map);subplot(2,2,1);image(wcodemat(A1,192));title('Approximation A1')subplot(2,2,2);image(wcodemat(H1,192));title('Horizontal Detail H1')subplot(2,2,3);image(wcodemat(V1,192));title('Vertical Detail V1')subplot(2,2,4);image(wcodemat(D1,192));title('Diagonal Detail D1')

多尺度二维小波变换 wavedec2多尺度二维分解

[C, S]=wavedec2(X,N,’wname’)[C, S]=wavedec2(X,N,Lo_D,Hi_D)

c为各层分解系数,s为各层分解系数长度,也就是大小.c的结构: c=[A(N)|H(N)|V(N)|D(N)|H(N-1)|V(N-1)|D(N-1)|H(N-2)|V(N-2)|D(N-2)|...|H(1)|V(1)|D(1)] 可见,c是一个行向量,即:1*(size(X)),(e.g,X=256*256,then c

大小为:1*(256*256)=1*65536)A(N)代表第N层低频系数,H(N)|V(N)|D(N)代表第N层高频系数,分别是水平,垂直,对角高频,以此类推,到H(1)|V(1)|D(1).s的结构: 储存各层分解系数长度的,即第一行A(N)的长度,第二行是H(N)|V(N)|D(N)|的长度,第三行是

H(N-1)|V(N-1)|D(N-1)的长度,倒数第二行是H(1)|V(1)|D(1)长度,最后一行是X的长度(大小)实例:

load wbarb;[C,S] = wavedec2(X,2,'bior3.7');figure(2);colormap(map);subplot(1,2,1);plot(C);subplot(1,2,2);plot(S);

waverec2多尺度二维重构 调用格式:

X=waverec2(C,S,’wname’)X=waverec2(C,S,Lo_R,Hi_R)实例:

load wbarb;[C,S] = wavedec2(X,2,'bior3.7');X0=waverec2(C,S,'bior3.7');Err=abs(X0-X);figure(1);colormap(map);subplot(3,1,1);image(wcodemat(X,192));title('original X')subplot(3,1,2);image(wcodemat(X0,192));title('wavereconstruction X')subplot(3,1,3);imshow(Err,[])

appcoef2低频系数提取 调用格式:

A=appcoef2(C,S,‟wname‟,N)A=appcoef2(C,S,Lo_R,Hi_R,N)detcoef2高频系数提取

调用格式:

A= detcoef2(‘type’,C,S,’wname’,N)Type: ’h’ 水平;‘v’垂直;‘d’对角 实例:

load wbarb;[C,S] = wavedec2(X,2,'bior3.7');cA2 = appcoef2(C,S,'bior3.7',2);cH2 = detcoef2('h',C,S,2);cV2 = detcoef2('v',C,S,2);cD2 = detcoef2('d',C,S,2);cA1 = appcoef2(C,S,'bior3.7',1);cH1 = detcoef2('h',C,S,1);cV1 = detcoef2('v',C,S,1);cD1 = detcoef2('d',C,S,1);figure(1);colormap(map);subplot(2,2,1);image(wcodemat(cA1,192));title('Approximation A1')subplot(2,2,2);image(wcodemat(cH1,192));title('Horizontal Detail H1')subplot(2,2,3);image(wcodemat(cV1,192));title('Vertical Detail V1')subplot(2,2,4);image(wcodemat(cD1,192));title('Diagonal Detail D1')figure(2);colormap(map);subplot(2,2,1);image(wcodemat(cA2,192));title('Approximation A2')subplot(2,2,2);image(wcodemat(cH2,192));title('Horizontal Detail H2')subplot(2,2,3);image(wcodemat(cV2,192));title('Vertical Detail V2')subplot(2,2,4);image(wcodemat(cD2,192));title('Diagonal Detail D2')

wrcoef2多尺度小波系数重构

调用格式:

X= wrcoef2(„type‟,C,S,‟wname‟,N)X= wrcoef2(„type‟,C,S,Lo_R,Hi_R,N)X= wrcoef2(„type‟,C,S,‟wname‟)X= wrcoef2(„type‟,C,S, Lo_R,Hi_R,N)Type: „a‟低频;‟h‟ 水平;„v‟垂直;„d‟对角 实例:

load wbarb;[C,S] = wavedec2(X,2,'bior3.7');A1 = wrcoef2('a',C,S,'bior3.7',1);H1 = wrcoef2('h',C,S,'bior3.7',1);V1 = wrcoef2('v',C,S,'bior3.7',1);D1 = wrcoef2('d',C,S,'bior3.7',1);A2 = wrcoef2('a',C,S,'bior3.7',2);H2 = wrcoef2('h',C,S,'bior3.7',2);V2 = wrcoef2('v',C,S,'bior3.7',2);D2 = wrcoef2('d',C,S,'bior3.7',2);figure(1);colormap(map);subplot(2,2,1);image(wcodemat(A1,192));title('reApproximation A1')subplot(2,2,2);image(wcodemat(H1,192));title('reHorizontal Detail H1')subplot(2,2,3);image(wcodemat(V1,192));title('reVertical Detail V1')subplot(2,2,4);image(wcodemat(D1,192));title('reDiagonal Detail D1')figure(2);colormap(map);subplot(2,2,1);image(wcodemat(A2,192));title('reApproximation A2')subplot(2,2,2);image(wcodemat(H2,192));title('reHorizontal Detail H2')subplot(2,2,3);image(wcodemat(V2,192));title('reVertical Detail V2')subplot(2,2,4);image(wcodemat(D2,192));title('reDiagonal Detail D2')

二维静态(平稳)小波变换

回顾从一维离散小波变换到二维的扩展,二维静态小波变换采用相似的方式。对行和列分别采用高通和低通滤波器。这样分解的结果仍然是四组图像:近似图像、水平细节图像、竖直细节图像和对角图像,与离散小波变换不同的只是静态小波分解得到的四幅图像与原图像尺寸一致,道理与一维情况相同。

二维离散小波变换同样只提供了一个函数swt2,因为它不对分解系数进行下采样,所以单层分解和多层分解的结果是一样的。不需要另外提供多层分解的功能。swt2二维静态小波变换

调用格式:

[A,H,V,D] = swt2(X,N,'wname')[A,H,V,D] = swt2(X,N,Lo_D,Hi_D)iswt2二维静态小波逆变换 调用格式

X = iswt2(SWC,'wname')X = iswt2(A,H,V,D,wname)X = iswt2(SWC,Lo_R,Hi_R)X = iswt2(A,H,V,D,Lo_R,Hi_R)实例

clc;clear;close all;load woman;[cA,cH,cV,cD]=swt2(X,2,'haar');%用haar小波基进行2尺度平稳小波分解 cA1=cA(:,:,1);cH1=cH(:,:,1);cV1=cV(:,:,1);cD1=cD(:,:,1);%尺度1低、高频系数

cA2=cA(:,:,2);cH2=cH(:,:,2);cV2=cV(:,:,2);cD2=cD(:,:,2);%尺度2低、高频系数

reX = iswt2(cA,cH,cV,cD,'haar');X1 = iswt2(cA1,cH1,cV1,cD1,'haar');X2 = iswt2(cA2,cH2,cV2,cD2,'haar');figure;colormap(map);subplot(1,4,1),image(X);title('原始图像');subplot(1,4,2),image(reX);title('重构图像');subplot(1,4,3),image(X1);title('尺度1的重构图像');subplot(1,4,4),image(X2);title('尺度1的重构图像');figure;colormap(map);subplot(1,2,1),image(uint8(cA1));title('尺度1的低频系数图像');subplot(1,2,2),image(uint8(cA2));title('尺度2的低频系数图像');figure;colormap(map);subplot(2,3,1),image(uint8(cH1));title('尺度1水平方向高频系数');subplot(2,3,2),image(uint8(cV1));title('尺度1垂直方向高频系数');subplot(2,3,3),image(uint8(cD1));title('尺度1斜线方向高频系数');subplot(2,3,4),image(uint8(cH2));title('尺度2水平方向高频系数');subplot(2,3,5),image(uint8(cV2));title('尺度2垂直方向高频系数');subplot(2,3,6),image(uint8(cD2));title('尺度2斜线方向高频系数');

直接调用的小波函数 meyer函数 功能:Meyer小波

函数语法格式:

[PHI,PSI,T] = meyer(LB,UB,N)[PHI,T] = meyer(LB,UB,N,'phi')[PSI,T] = meyer(LB,UB,N,'psi')

cgauwavf函数

功能:Complex Gaussian小波

函数语法格式:

[PSI,X] = cgauwavf(LB,UB,N,P)

mexihat函数 功能:墨西哥帽小波

函数语法格式:

[PSI,X] = mexihat(LB,UB,N)

morlet函数 功能:Morlet小波

函数语法格式:

[PSI,X] = morlet(LB,UB,N)

symwavf函数

功能:Symlets小波滤波器 函数语法格式:F = symwavf(W)

三、图像接口调用

使用图形接口做一维连续小波分析

1.开启一维连续小波工具,只需输入如下命令 wavemenu

出现如下小波工具箱主菜单

选择Continuous Wavelet 1-D菜单项,出现如下一维信号分析连续小波分析工具

2.加载信号

选择菜单File->Load Signal,在Load Signal对话框里选择noissin.mat文件,它在matlab安装目录的toolbox/wavelet/wavedemo文件夹下,点击OK加载信号。一维连续小波工具开始加载信号,加载后默认采样频率为1s。3.执行连续小波变换

下面来测试使用db4小波对尺度1到48做小波分析,设置如下

4.点击Analyze按钮

在短暂的计算后,工具将绘制小波系数,并在Coefficients line坐标系中绘制尺度为24的小波系数,在local maxima坐标系中绘制各尺度的小波系数最大值。

5.查看小波Coefficients Line 在小波系数图中右键点击可以选择展示其他尺度的小波系数,选择后点击New Coefficients Line按钮,Coefficients Line会相应更新。

6.查看Maxima Line 点击Refresh Maxima Line按钮,可以显示从尺度1到所选尺度的小波系数的最大值。

注意当在系数图中按下鼠标右键并移动时,会在最下面的Info框中显示当前鼠标位于的X位置和尺度。

7.在尺度和伪频率之间切换

在右边选择Frequencies,当再在系数图中选择时,在Info中显示的将是Hz。

而关于尺度和频率的转换关系,可以看How to Connect Scale to Frequency? 8.选择要显示的坐标系

9.放大细节

在系数框中按鼠标左键可以选择放大的范围。

10.选择好放大范围后点击最下面的按钮可以实现指定的放大

11.显示普通系数或系数绝对值

两种显示方式的区别在于,普通模式下,颜色映射是在系数的最大最小之间;而绝对模式,颜色映射是在0和最大的系数绝对值之间。图形接口的导入导出信息 导入信号到一维连续小波工具

首先将要处理的信号保存到mat文件中,要求信号是一维的向量。然后使用工具的File->Load Signal菜单功能,选择此信号文件即可导入信号。

文件中第一个一维变量被认为是信号,变量在文件中顺序是按字母排序的。保存小波系数

小波分析完成后,点击File->Save->Coefficients,可以将分析结果保存到mat文件。保存后,可以使用load函数加载数据,会看到保存的变量有小波系数coeff、尺度scales、小波的名字wname。

使用图形接口做一维离散小波分析 1.开启一维小波分析工具 Wavemenu->Wavelet 1-D 2.加载信号

3.执行一层小波分解 使用db1小波执行一层分解

4.放大有关细节 5.执行多层小波分解 使用db1小波执行3层分解。

选择不同的显示方式:在Display mode下拉菜单下可以选择不同的显示方式,默认的显示方式为Full Decomposition Mode,其他的显示方式及其意义如下 Separate Mode:在不同的列中显示细节和近似;

Superimpose Mode:在一张图上以不同的颜色显示细节、近似;

Tree Mode:显示分解树、原始信号和选择的成分,在分解树上选择你想显示的成分; Show and Scroll Mode:显示3个窗口,第一个显示原始信号和选择的近似信号,第二个显示选择的细节,第三个显示小波系数; Show and Scroll Mode(Stem Cfs):和Show and Scroll Mode很接近,除了第三个窗口中以杆状图替代颜色条显示小波系数。

对于每个分析任务,可以改变默认的显示方式,只要在View->Default Display Mode子菜单下选择理想的方式即可;不同的显示方式会有额外的显示选项,在More Display Options中做选择,这些选项可以控制不同成分的显示、选择是否显示原始信号与细节、近似对比。6.从信号中移除噪声

图形接口提供了以预定义的阈值策略除噪的选项,这使得从信号中除噪非常容易,只需点击De-noise按钮就可以弹出除噪工具。

点击Close可以关闭除噪窗口,由于不能同时打开除噪和压缩窗口,所以需要关闭除噪窗口再进行信号压缩。关闭时会提示Update Synthesized Signal提示对话框,点击No,如果点击Yes,合成的信号会加载到主窗口。7.改善分析

图像工具可以在任何时候轻易的改善分析,只需要改变分析的方法就可以了,如使用db3做5层小波分析。8.压缩信号

图形接口提供了自动化或人工阈值的做压缩的功能。

默认使用的是全阈值方法,当然也可以使用人工阈值的方法,选择By Level thresholding选项即可,下面的滑动条提供了各级阈值独立调整的功能,相应的调整可以在左边的窗口中看到,在图形窗口中也可以直接拖动来改变阈值。

完成选择后,点击压缩按钮可以完成压缩。从压缩的结果可以看到,压缩过程去除了大多数噪声,但保存了信号99.74%的能量。自动化阈值是非常有效的,它使除3.2%的小波系数都归零化了。9.显示残差

点击Residuals按钮可以查看压缩的残差。显示的统计数据包括测量的趋势(平均值、众数、中值)和散布情况(极差、标准差)。另外,工具还提供了概率分布直方图和累计直方图以及时间序列图,如自相关函数、频谱。这些都是和去噪工具是一样的。10.显示统计分布

可以显示一系列有关信号及其组分的统计数据。

点击Statistics按钮可以查看统计数据信息,点击Histograms可以查看直方图。从图形接口中导入导出信息 保存信息

l 保存合成的信号

如加载如下信号File > Example Analysis > Basic Signals > with db3 at level 5 → Sum of sines,做除噪或压缩处理后,保存合成信号File > Save > Synthesized Signal,保存后加载文件,会得到如下变量: 如果使用除全阈值外的方法时,得到的变量结构如下

Synthsig是合成的信号,除噪或压缩的小波方法保存在wname中,相互依赖的各级阈值保存在thrParams中,小波分解的等级数和cell的长度相等,thrParams{i},i从1到5分别保存了阈值间距上下限的值和阈值(间距阈值是允许的,在自适应阈值方法中会用到,参见One-Dimensional Variance Adaptive Thresholding of Wavelet Coefficients)如果使用的全阈值方法,保存的数据结构如下

alTHR保存的是全阈值的值。l 保存离散小波变换的系数 一个例子的文件内容如下

Coefs包含了离散小波变换的系数,longs包含了各组分的长度,thrParams为空,因为合成信号不存在,wname是小波的名字。l 保存分解结果(即保存小波分析的全体数据)小波工具将保存为.wal文件,加载方式为 load wdecex1d.wa1 –mat 文件内容为

加载信息

加载的文件只要和保存的相应文件中的变量一样即可。

使用图形接口分析复信号

与实信号不同的是,选择Complex Continuous Wavelet 1-D,得到的结果如下

具体操作过程与实信号的相似,如下

使用图形接口做一维除噪分析 1.开启一维平稳小波除噪工具

输入wavemenu,选择SWT Denoising 1-D,出现如下GUI

2.加载信号 Load Signal 3.执行平稳小波分解

使用db1小波执行5层小波分解,得到的是非抽取系数(nondecimated coefficients),它们是使用相同的离散小波变换来得到的,只是省略了抽取的步骤。得到的结果如下

4.使用平稳小波变换除噪

可以使用GUI默认的参数做除噪处理。右边的滑动条可以控制各级系数的阈值大小,也可以直接在系数图中直接拖动来调整阈值的大小,注意近似系数中没有阈值。点击denoise进行除噪处理

得到的效果是非常好的,但似乎在信号不连续的地方出现了过平滑,这个可以从残差图中看出来,在800的位置出现了突降点。

选择hard阈值模式代替soft模式,再进行除噪,结果如下

可以看到这次效果非常好,而且残差图也看起来像白噪声序列。为了验证这一点,可以点击Residuals按钮查看残差图及相关统计数据来详细说明。

四、小波变换在图像处理中的应用 4.1 小波分析用于图像压缩

4.1.1 基于小波变换的图像局部压缩

基于离散余弦变换的图像压缩算法,其基本思想是在频域对信号进行分解,驱除信号点之间的相关性,并找出重要系数,滤掉次要系数,以达到压缩的效果,但该方法在处理过程中并不能提供时域的信息,在我们比较关心时域特性的时候显得无能为力。

但是这种应用的需求是很广泛的,比如遥感测控图像,要求在整幅图像有很高压缩比的同时,对热点部分的图像要有较高的分辨率,例如医疗图像,需要对某个局部的细节部分有很高的分辨率,单纯的频域分析的方法显然不能达到这个要求,虽然可以通过对图像进行分快分解,然后对每块作用不同的阈值或掩码来达到这个要求,但分块大小相对固定,有失灵活。

在这个方面,小波分析的就优越的多,由于小波分析固有的时频特性,我们可以在时频两个方向对系数进行处理,这样就可以对我们感兴趣的部分提供不同的压缩精度。

下面我们利用小波变化的时频局部化特性,举一个局部压缩的例子,大家可以通过这个例子看出小波变换在应用这类问题上的优越性。

我们把图像中部的细节系数都置零,从压缩图像中可以很明显地看出只有中间部分变得模糊(比如在原图中很清晰的围巾的条纹不能分辨),而其他部分的细节信息仍然可以分辨的很清楚。

实例:

load wbarb %使用sym4小波对信号进行一层小波分解 [ca1,ch1,cv1,cd1]=dwt2(X,'sym4');codca1=wcodemat(ca1,192);codch1=wcodemat(ch1,192);codcv1=wcodemat(cv1,192);codcd1=wcodemat(cd1,192);%将四个系数图像组合为一个图像

codx=[codca1,codch1,codcv1,codcd1];%复制原图像的小波系数 rca1=ca1;rch1=ch1;rcv1=cv1;rcd1=cd1;%将三个细节系数的中部置零

rch1(33:97,33:97)=zeros(65,65);rcv1(33:97,33:97)=zeros(65,65);rcd1(33:97,33:97)=zeros(65,65);codrca1=wcodemat(rca1,192);codrch1=wcodemat(rch1,192);codrcv1=wcodemat(rcv1,192);codrcd1=wcodemat(rcd1,192);%将处理后的系数图像组合为一个图像

codrx=[codrca1,codrch1,codrcv1,codrcd1];%重建处理后的系数

rx=idwt2(rca1,rch1,rcv1,rcd1,'sym4');subplot(221);image(wcodemat(X,192)),colormap(map);title('原始图像');subplot(222);image(codx),colormap(map);title('一层分解后各层系数图像');subplot(223);image(wcodemat(rx,192)),colormap(map);title('压缩图像');subplot(224);image(codrx),colormap(map);title('处理后各层系数图像');%求压缩信号的能量成分 per=norm(rx)/norm(X)%求压缩信号与原信号的标准差 err=norm(rx-X)运行结果

per = 1.0000 err = 586.4979 4.1.2 小波变换用于图像压缩的一般方法

二维小波分析用于图像压缩是小波分析应用的一个重要方面。

它的特点是压缩比高,压缩速度快,压缩后能保持图像的特征基本不变,且在传递过程中可以抗干扰。4.1.2.1 利用二维小波分析进行图像压缩

基于小波分析的图像压缩方法很多,比较成功的有小波包、小波变换零树压缩、小波变换矢量量化压缩等。

利用二维小波变换进行图像压缩时,小波变换将图像从空间域变换到时间域,它的作用与以前在图像压缩中所用到的离散余弦(DCT)、傅立叶变换(FFT)等的作用类似。但是要很好的进行图像的压缩,需要综合的利用多种其他技术,特别是数据的编码与解码算法等,所以利用小波分析进行图像压缩通常需要利用小波分析和许多其他相关技术共同完成。小波高频滤波压缩 %%%%%%%%装入图像、变换 load wbarb;%对图像用bior3.7小波进行2层小波分解 [c,s]=wavedec2(X,2,'bior3.7');%提取小波分解结构中第一层低频系数和高频系数 ca1=appcoef2(c,s,'bior3.7',1);ch1=detcoef2('h',c,s,1);cv1=detcoef2('v',c,s,1);cd1=detcoef2('d',c,s,1);%分别对各频率成分进行重构

a1=wrcoef2('a',c,s,'bior3.7',1);h1=wrcoef2('h',c,s,'bior3.7',1);v1=wrcoef2('v',c,s,'bior3.7',1);d1=wrcoef2('d',c,s,'bior3.7',1);c1=[a1,h1;v1,d1];%%%%%%%%%下面进行图像压缩处理

%保留小波分解第一层低频信息,进行图像的压缩 %第一层的低频信息即为ca1,显示第一层的低频信息 %首先对第一层信息进行量化编码

ca1=appcoef2(c,s,'bior3.7',1);ca1=wcodemat(ca1,440,'mat',0);%改变图像的高度 ca1=0.5*ca1;%保留小波分解第二层低频信息,进行图像的压缩,此时压缩比更大 %第二层的低频信息即为ca2,显示第二层的低频信息 ca2=appcoef2(c,s,'bior3.7',2);%首先对第二层信息进行量化编码

ca2=wcodemat(ca2,440,'mat',0);%改变图像的高度 ca2=0.25*ca2;%%%%%%%显示图像、分解后各频率成分的信息

subplot(221);image(X);colormap(map);title('原始图像');axis square subplot(222);image(c1);axis square;title('分解后低频和高频信息');subplot(223);image(ca1);colormap(map);axis square;title('第一次压缩');subplot(224);image(ca2);colormap(map);axis square;title('第二次压缩');disp('压缩前图像X的大小:');whos('X')disp('第一次压缩图像的大小为:');whos('ca1')disp('第二次压缩图像的大小为:');whos('ca2')输出结果如下所示:

压缩前图像X的大小: Name SizeBytesClass X256x256524288double array Grand total is 65536 elements using 524288 bytes 第一次压缩图像的大小为: Name SizeBytesClass ca1135x135145800double array Grand total is 18225 elements using 145800 bytes 第二次压缩图像的大小为: Name SizeBytesClass ca2 75x7545000double array Grand total is 5625 elements using 45000 bytes

可以看出,第一次压缩提取的是原始图像中小波分解第一层的低频信息,此时压缩效果较好,压缩比较小(约为1/3):第二次压缩是提取第一层分解低频部分的低频部分(即小波分解第二层的低频部分),其压缩比较大(约为1/12),压缩效果在视觉上也基本过的去。这是一种最简单的压缩方法,只保留原始图像中低频信息,不经过其他处理即可获得较好的压缩效果。

小波高频阈值压缩 %装入一个二维信号 load tire;

%下面进行图像压缩

[c,s]=wavedec2(X,2,'db3');%对图像用db3小波进行2层小波分解, [thr,sorh,keepapp]=ddencmp('cmp','wv',X);%使用ddencmp函数来求取阈值

[Xcomp,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,s,'db3',2,thr,sorh,keepapp);%输入参数中选择了全局阈值选项„gbl‟,用来对所有高频系数进行相同的阈值量化处理 %将压缩后的图像与原始图像相比较,并显示出来

subplot(121);image(X);colormap(map);title('原始图像');axis square subplot(122);image(Xcomp);colormap(map);title('压缩图像');axis square disp('小波分解系数中置0的系数个数百分比:');perf0 disp('压缩后图像剩余能量百分比:');perfl2

输出结果如下所示:

小波分解系数中置0的系数个数百分比: perf0 =49.1935 压缩后图像剩余能量百分比: perfl2 =99.9928 4.1.2.2 二维信号压缩中的阈值的确定与作用命令

由于阈值处理只关心系数的绝对值,并不关心系数的位置,所以二维小波变换系数的阈值化方法同一维情况大同小异,为了方便用户使用小波工具箱对某些阈值化方法提供了专门的二维处理命令

阈值化压缩方法 %装入一个二维信号 load tire;%下面进行图像压缩

[c,s]=wavedec2(X,2,'db3');%对图像用db3小波进行2层小波分解, [thr,sorh,keepapp]=ddencmp('cmp','wv',X);%使用ddencmp函数来求取阈值 [Xcomp,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,s,'db3',2,thr,sorh,keepapp);%将压缩后的图像与原始图像相比较,并显示出来 subplot(121);image(X);colormap(map);title('原始图像');axis square subplot(122);image(Xcomp);colormap(map);title('压缩图像');axis square disp('小波分解系数中置0的系数个数百分比:');perf0 disp('压缩后图像剩余能量百分比:');perfl2

显示结果如图所示

可见分层阈值化压缩方法同全局阈值化方法相比,在能量损失不是很大的情况下可以获得最高的压缩化,这主要是因为层数和方向相关的阈值化方法能利用更精细的细节信息进行阈值化处理。

4.1.3 基于小波包变换的图像压缩

小波分析之所以在信号处理中有着强大的功能,是基于其分离信息的思想,分离到各个小波域的信息除了与其他小波域的关联,使得处理的时候更为灵活。全局阈值化方法作用的信息粒度太大,不够精细,所以很难同时获得高的压缩比和能量保留成分,在作用的分层阈值以后,性能明显提高,因为分层阈值更能体现信号固有的时频局部特性。

但是小波分解仍然不够灵活,分解出来的小波树只有一种模式,不能完全地体现时频局部化信息。而压缩的核心思想既是尽可能去处各小波域系数之间的信息关联,最大限度体现时频局部化的信息,因此,实际的压缩算法多采用小波包算法,而小波树的确定则是根据不同的信息论准则,以达到分解系数表达的信息密度最高。

下面我通过一个例子来说明小波包分析在图像压缩中的应用,并给出性能参数以便于同基于小波分析的压缩进行比较。

小波包优化 %读入信号 load julia %求颜色索引表长度 nbc=size(map,1);%得到信号的阈值,保留层数,小波树优化标准

[thr,sorh,keepapp,crit]=ddencmp('cmp','wp',X);%通过以上得到的参数对信号进行压缩

[xd,treed,perf0,perfl2]=wpdencmp(X,sorh,4,'sym4',crit,thr*2,keepapp);%更改索引表为pink索引表 colormap(pink(nbc));subplot(121);image(wcodemat(X,nbc));title('原始图像');subplot(122);image(wcodemat(xd,nbc));title('全局阈值化压缩图像');xlabel(['能量成分',num2str(perfl2),'%','零系数成分',num2str(perf0),'%']);plot(treed);

得到的压缩结果如图所示

图6 基于小波包分析的图像压缩

压缩过程中使用的最优小波数如图所示

图7 最优小波树

ddencmp、wpdencmp这两个命令是Matlab小波工具箱提供的自动获取阈值和自动使用小波包压缩的命令,后者将分解阈值化和重建综合起来。在将小波包用于信号压缩的过程中,ddencmp命令返回的最优小波树标准都是阈值化标准。根据这个标准确定的最优小波树可以使得压缩过程的零系数成分最高,并且自动降低计算量。

图像压缩是应用非常广泛的一类问题,所以其机器实现效率是至关重要的,在实际的应用中,如JPEG2000,一般不采用通常的mallat算法做小波分解,而是应用特定的双正交小波,利用其滤波器分布规则的特性,用移位操作来实现滤波操作。4.2 小波分析用于图像去噪

噪声可以理解为妨碍人的视觉器官或系统传感器对所接收图像源进行理解或分析的各种因素。一般噪声是不可预测的随机信号,它只能用概率统计的方法去认识。噪声对图像处理十分重要,它影响图像处理的输入、采集、处理的各个环节以及输出结果的全过程。特别是图像的输入、采集的噪声是个十分关键的问题,若输入伴有较大噪声,必然影响处理全过程及输出结果。因此一个良好的图像处理系统,不论是模拟处理还是计算机处理无不把减少最前一级的噪声作为主攻目标。去噪已成为图像处理中极其重要的步骤。

对二维图像信号的去噪方法同样适用于一维信号,尤其是对于几何图像更适合。二维模型可以表述为

s(i,j)=f(i,j)+δ·e(i,j)i,j=0,1,…,m-1 其中,e是标准偏差不变的高斯白噪声。二维信号用二维小波分析的去噪步骤有3步:(1)二维信号的小波分解。选择一个小波和小波分解的层次N,然后计算信号s到第N层的分解。

(2)对高频系数进行阈值量化。对于从1到N的每一层,选择一个阈值,并对这一层的高频系数进行软阈值量化处理。

(3)二维小波的重构。根据小波分解的第N层的低频系数和经过修改的从第一层到第N层的各层高频系数计算二维信号的小波重构。

在这3个步骤中,重点是如何选取阈值和阈值的量化 小噪声阈值去噪

下面给出一个二维信号(文件名为detfinger.mat),并利用小波分析对信号进行去噪处理。

%装入图像 load tire %下面进行噪声的产生 init=3718025452;rand('seed',init);Xnoise=X+18*(rand(size(X)));%用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);%显示去噪后的图像 colormap(map);subplot(131);image(wcodemat(X,192));title('原始图像X');axis square subplot(132);image(wcodemat(X,192));title('含噪声的图像Xnoise');axis square subplot(133);image(Xdenoise);title('去噪后的图像');axis square

输出结果

从图中3个图像的比较可以看出,Matlab中的ddencmp和wdencmp函数可以有效地进行去噪处理。大噪声滤波去噪

再给定一个有较大白噪声的delmontl.mat图像。由于图像所含的噪声主要是白噪声,而且主要集中在图像的高频部分,所以我们可以通过全部滤掉图像中的高频部分实现图像的去噪。

load wmandril;%产生含噪图像

init=2055615866;randn('seed',init)x=X+38*randn(size(X));

%下面进行图像的去噪处理

%用小波函数sym4对x进行2层小波分解 [c,s]=wavedec2(x,2,'sym4');%提取小波分解中第一层的低频图像,即实现了低通滤波去噪 a1=wrcoef2('a',c,s,'sym4',1);%提取小波分解中第二层的低频图像,即实现了低通滤波去噪 a2=wrcoef2('a',c,s,'sym4',2);

%画出图像

subplot(221);image(X);colormap(map);title('原始图像');axis square subplot(222);image(x);colormap(map);title('含噪声图像');axis square;subplot(223);image(a1);title('第一次去噪图像');axis square;subplot(224);image(a2);title('第二次去噪图像');axis square;输出结果如图:

从上面的输出结果可以看出,第一次去噪已经滤去了大部分的高频噪声,但从去噪图像与原始图像相比可以看出,第一次去噪后的图像中还是含有不少的高频噪声;第二次去噪是在第一次去噪的基础上,再次滤去其中的高频噪声。从去噪的结果可以看出,它具有较好的去噪效果。

少量噪声的小波分解系数阈值量化去噪

下面再给出定一个喊有较少噪声的facets.mat图像。由于原始图像中只喊有较少的高频噪声,如果按照上一个例子把高频噪声全部滤掉的方法将损坏图像中固有的高频有用信号。因此这幅图像适合采用小波分解系数阈值量化方法进行去噪处理。

%下面装入原始图像,X中含有被装载的图像 load facets;%产生含噪声图像

init=2055615866;randn('seed',init)x=X+10*randn(size(X));%下面进行图像的去噪处理

[c,s]=wavedec2(x,2,'coif3');%用小波画数coif3对x进行2层小波分解 n=[1,2];%设置尺度向量n p=[10.12,23.28];%设置阈值向量p %对三个方向高频系数进行阈值处理 nc=wthcoef2('h',c,s,n,p,'s');nc=wthcoef2('v',nc,s,n,p,'s');nc=wthcoef2('d',nc,s,n,p,'s');%对新的小波分解结构[nc,s]进行重构 xx=waverec2(nc,s,'coif3');%画出图像

subplot(131);image(X);colormap(map);title('原始图像');axis square subplot(132);image(x);colormap(map);title('含噪声图像');axis square subplot(133);image(xx);colormap(map);title('去噪后的图像');axis square

输出结果如图

更加标准的做法是下面这样:

下载总结MATLAB中涉及到的小波函数word格式文档
下载总结MATLAB中涉及到的小波函数.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    matlab总结

    班级: 学号: 姓名: Matlab学习综述 MATLAB是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和强大的数据可视化功能集成在一起,并提供了大量的内置函数,从......

    MATLAB总结

    目录 一、Matlab相关说明 ..................................................................... 2 二、Matlab操作注意事项 ...............................................

    Matlab学习总结

    学Matlab有感 姓名:王鸿栋 学号:20090286 班级: 03310901 我对于计算机编程接触的比较晚,也没有特别大的兴趣。不过对于Matlab这门课我还是很喜欢的。一是这个语言可以变出程序......

    Matlab常用指令总结

    概论 format long显示更多位数 format short显示少位数 format hex将数字显示为十六进制浮点数,(3fb999999999999a,a-f代表十六进制数,前三字符为) double()将数字转化为双精度浮......

    MATLAB知识总结

    1、命令x=0:0.2:2中的赋值格式是matlab常用的变量赋值格式,其中0表示初始值,0.2表示增量,而2表示终止值。若数组x无规律可循,那么x赋值得逐一输入单个元素了,这时要使用赋值格式......

    matlab基础总结

    Matlab程序设计的一般步骤: 1、陈述问题 2、定义输入和输出量 3、定义算法 4、把算法转化为matlab语句 5、检测产生的matlab程序 数组与变量: 1、数组中数据的访问a(行标 列标......

    MATLAB课程总结

    MATLAB课程总结 班级:14级电子信息与科学技术 姓名:孙凯 学号 201442398 在过去的两个月里,我们学习了MATLAB教程这一门课程,对此我有一些自己的思考与感悟。 通过学习,我们了......

    学习matlab总结(定稿)

    绘图函数 bar 竖直条图 barh 水平条图 hist 直方图 histc 直方图计数 hold 保持当前图形 loglog x,y对数坐标图 pie 饼状图 plot 绘二维图 polar 极坐标图 semilogy y轴对数......