多维小波变换工具箱.docx

上传人:b****8 文档编号:28820607 上传时间:2023-07-20 格式:DOCX 页数:12 大小:85.62KB
下载 相关 举报
多维小波变换工具箱.docx_第1页
第1页 / 共12页
多维小波变换工具箱.docx_第2页
第2页 / 共12页
多维小波变换工具箱.docx_第3页
第3页 / 共12页
多维小波变换工具箱.docx_第4页
第4页 / 共12页
多维小波变换工具箱.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

多维小波变换工具箱.docx

《多维小波变换工具箱.docx》由会员分享,可在线阅读,更多相关《多维小波变换工具箱.docx(12页珍藏版)》请在冰豆网上搜索。

多维小波变换工具箱.docx

多维小波变换工具箱

多维小波变换工具箱

Multi-dimensionWaveletToolbox

Version1.0

作者:

***

一、函数的简要说明

convnd

对多维数据在某一维向上做线性卷积

convndcut

和convnd差不多,但加上了可以截取卷积结果的中间一部分而把两边删去的功能

dyaddownnd

隔点采样

dyadupnd

在两点间添0

dwtnd1

多维空间中一个维向上的一次小波变换

dwtndn

多维空间一次小波变换(各维向都做一次)

wavedecnd

多维空间多次小波变换分解

idwtnd1

多维空间中一个维向上的一次小波逆变换

idwtndn

多维空间一次小波逆变换

waverecnd

多维空间多次小波逆变换重构

packup

利用dwtndn和wavedecnd的结果拼成多维系数空间的表示形式

fitscale

改变数据值的分布以利于图像显示

show3d

用图像显示三维空间的小波变换系数

二、实例

实例一dwtnd1和idwtnd1

r=rand(4,4,4)%随机生成一个多维空间的数据,这里是个4*4*4的三维空间

r(:

:

1)=

0.20280.19880.93180.5252

0.19870.01530.46600.2026

0.60380.74680.41860.6721

0.27220.44510.84620.8381

 

r(:

:

2)=

0.01960.50280.18970.5417

0.68130.70950.19340.1509

0.37950.42890.68220.6979

0.83180.30460.30280.3784

 

r(:

:

3)=

0.86000.89980.66020.5341

0.85370.82160.34200.7271

0.59360.64490.28970.3093

0.49660.81800.34120.8385

 

r(:

:

4)=

0.56810.44490.95680.9797

0.37040.69460.52260.2714

0.70270.62130.88010.2523

0.54660.79480.17300.8757

[ca,cd]=dwtnd1(r,1,'haar')%对数据r在第一维向即row方向做一次haar小波分解

ca(:

:

1)=

0.28390.15140.98840.5146

0.61940.84280.89441.0679

 

ca(:

:

2)=

0.49560.85720.27090.4897

0.85650.51870.69650.7610

 

ca(:

:

3)=

1.21171.21720.70870.8918

0.77081.03440.44610.8116

 

ca(:

:

4)=

0.66360.80571.04610.8847

0.88341.00140.74470.7977

 

cd(:

:

1)=

0.00290.12980.32940.2280

0.23450.2133-0.3023-0.1174

 

cd(:

:

2)=

-0.4678-0.1461-0.00270.2763

-0.31980.08790.26830.2259

 

cd(:

:

3)=

0.00450.05530.2250-0.1365

0.0686-0.1224-0.0364-0.3742

 

cd(:

:

4)=

0.1398-0.17660.30710.5008

0.1104-0.12270.5001-0.4408

这里得到ca,cd分别是小波分解后的近似分量和细节分量,都是2*4*4的三维空间。

q=idwtnd1(ca,cd,1,'haar')%用分解的结果做一次逆变换来得到原来的数据

q(:

:

1)=

0.20280.19880.93180.5252

0.19870.01530.46600.2026

0.60380.74680.41860.6721

0.27220.44510.84620.8381

 

q(:

:

2)=

0.01960.50280.18970.5417

0.68130.70950.19340.1509

0.37950.42890.68220.6979

0.83180.30460.30280.3784

 

q(:

:

3)=

0.86000.89980.66020.5341

0.85370.82160.34200.7271

0.59360.64490.28970.3093

0.49660.81800.34120.8385

 

q(:

:

4)=

0.56810.44490.95680.9797

0.37040.69460.52260.2714

0.70270.62130.88010.2523

0.54660.79480.17300.8757

可以看到和原来的数据是一致的。

实例二dwtndn和idwtndn

还用刚才生成的数据r

y=dwtndn(r,'haar')%对三个方向都做小波变换

y=

Columns1through4

[2x2x2double][2x2x2double][2x2x2double][2x2x2double]

Columns5through8

[2x2x2double][2x2x2double][2x2x2double][2x2x2double]

得到的是一个cell,里面有8个2*2*2的数据,第一个是所谓的aaa即三个维向上的近似系数,而最后一个是所谓的ddd即三个维向上的细节系数。

x=idwtndn(y,'haar')%利用分解结果恢复原有的数据

x(:

:

1)=

0.20280.19880.93180.5252

0.19870.01530.46600.2026

0.60380.74680.41860.6721

0.27220.44510.84620.8381

 

x(:

:

2)=

0.01960.50280.18970.5417

0.68130.70950.19340.1509

0.37950.42890.68220.6979

0.83180.30460.30280.3784

 

x(:

:

3)=

0.86000.89980.66020.5341

0.85370.82160.34200.7271

0.59360.64490.28970.3093

0.49660.81800.34120.8385

 

x(:

:

4)=

0.56810.44490.95680.9797

0.37040.69460.52260.2714

0.70270.62130.88010.2523

0.54660.79480.17300.8757

可以看到得到了恢复

实例三wavedecnd和waverecnd

r=rand(8,8,8);%生成一个8*8*8的三维空间

x=wavedecnd(r,2,'haar')%做两层的haar小波变换

x=

Columns1through4

[2x2x2double][2x2x2double][2x2x2double][2x2x2double]

Columns5through8

[2x2x2double][2x2x2double][2x2x2double][2x2x2double]

Columns9through12

[4x4x4double][4x4x4double][4x4x4double][4x4x4double]

Columns13through15

[4x4x4double][4x4x4double][4x4x4double]

4*4*4有七个它们是第一层的结果,其中的一个做了第二层变换而变成了8个2*2*2。

y=waverecnd(x,2,'haar');%恢复

any(abs(r-y)>1e-10)%是不是和原来的一样?

者利用等于0是不行的,因为计算由误差,当小于一个很小的数是就可以认为恢复了。

ans(:

:

1)=

00000000

 

ans(:

:

2)=

00000000

 

ans(:

:

3)=

00000000

 

ans(:

:

4)=

00000000

 

ans(:

:

5)=

00000000

 

ans(:

:

6)=

00000000

 

ans(:

:

7)=

00000000

 

ans(:

:

8)=

00000000

这就说明恢复是成功的。

实例四一个图像序列的处理

loadwoman%这个文件在原来的matlab小波工具箱的目录里

x=X(51:

199,51:

199);%大了点,切一小块吧

r=turndata(x,8,0.1);%这是一个生成图像序列的自定义程序,其实也就是故意做出一些变化

colormap(map);

function[d]=turndata(x,pages,step)

d=zeros(size(x,1),size(x,2),pages);

d(:

:

1)=x;

fori=2:

pages

d(:

:

i)=d(:

:

i-1)+x*step;

[a,b]=find(d(:

:

i)>255);

forj=1:

length(a)

d(a(j),b(j),i)=255;

end

end;

从侧面看可以发现下边的层次比上面的亮一些,而这种亮度的提高程度是和原来的亮度成正比的,也就是亮者愈亮。

下边我们对它做两层haar变换

h=wavedecnd(r,2,'haar')

h=

Columns1through3

[38x38x2double][38x38x2double][38x38x2double]

Columns4through6

[38x38x2double][38x38x2double][38x38x2double]

Columns7through9

[38x38x2double][38x38x2double][75x75x4double]

Columns10through12

[75x75x4double][75x75x4double][75x75x4double]

Columns13through15

[75x75x4double][75x75x4double][75x75x4double]

f=packup(h);%拼成一整个三维空间

g=fitscale(f);%适合256灰度的显示

show3d(g,2)%加上两级的辅助线

很不错的效果吧,其中最亮的一块是两次变换后的近似系数的表示。

小波变换没有减少空间的规模(还是150*150*8)但其中的近似部分区集中到一小块地方,这就是数据压缩的基本出发点。

还可以看看第一层的情况

imagesc(f(:

:

1))

三、一些值得注意的问题

1、做变换的数据的维的长度不要小于2,也就是说不能是(…3*2*…*4*1*…),这样的分解没有什么意义,而且可能会出现不可预料的结果。

2、关于奇偶数的问题

先看一个用matlab5.2上的函数算一个题

x=rand(5,5)

x=

0.20750.34900.54010.01980.6700

0.85060.16250.69840.09840.4562

0.71310.53980.00210.37420.8380

0.08040.92330.83660.96750.8231

0.81870.43710.88940.61960.5421

[c,s]=wavedec2(x,2,'haar');%做两层的haar分解

h=waverec2(c,s,2,'haar')%试图恢复

Errorusing==>+

Matrixdimensionsmustagree.

Errorin==>F:

\MATLAB\toolbox\wavelet\wavelet\idwt2.m

Online48==>t0=conv2(dyadup(a,'r'),LoF_R')+conv2(dyadup(h,'r'),HiF_R');

Errorin==>F:

\MATLAB\toolbox\wavelet\wavelet\appcoef2.m

Online54==>a=idwt2(a,h,v,d,LoF_R,HiF_R,s(rm-p,:

));

Errorin==>F:

\MATLAB\toolbox\wavelet\wavelet\waverec2.m

Online28==>x=appcoef2(c,s,arg3,arg4,0);

很奇怪吧,能够分解,却在恢复的时候出错。

让我们看看到底发生了什么。

u=wavedecnd(x,2,'haar')

u=

Columns1through4

[2x2double][2x2double][2x2double][2x2double]

Columns5through7

[3x3double][3x3double][3x3double]

在第一层分解后生成3*3的矩阵,第二层分解为2*2的矩阵。

但在逆小波变换恢复是就会有问题。

拿前四个矩阵反变换之后生成的是4*4的矩阵,这样和后面的三个就不匹配了。

这是一个奇偶数的问题,如果是rand(4,4)就不会有这样的毛病。

我对这个问题进行了一些处理,详见源代码。

h=waverecnd(u,2,'haar')

h=

0.20750.34900.54010.01980.67000.0000

0.85060.16250.69840.09840.45620.0000

0.71310.53980.00210.37420.83800.0000

0.08040.92330.83660.96750.82310.0000

0.81870.43710.88940.61960.54210.0000

0.00000.00000.00000.000000.0000

很不幸,还是多了一行一列0,但5*5位置上的数却是正确的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1