多维小波变换工具箱.DOC

上传人:国*** 文档编号:501646 上传时间:2018-10-16 格式:DOC 页数:10 大小:116.50KB
下载 相关 举报
多维小波变换工具箱.DOC_第1页
第1页 / 共10页
多维小波变换工具箱.DOC_第2页
第2页 / 共10页
多维小波变换工具箱.DOC_第3页
第3页 / 共10页
多维小波变换工具箱.DOC_第4页
第4页 / 共10页
多维小波变换工具箱.DOC_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、多维小波变换工具箱 Multi-dimension Wavelet Toolbox Version 1.0 作者:陈甫 一、 函数的简要说明 convnd 对多维数据在某一维向上做线性卷积 convndcut 和 convnd差不多,但加上了可以截取卷积结果的中间一部分而把两边删去的功能 dyaddownnd 隔点采样 dyadupnd 在两点间添 0 dwtnd1 多维空间中一个维向上的一次小波变换 dwtndn 多维空间一次小波变换 (各维向都做一次 ) wavedecnd 多维空间多次小波变换分解 idwtnd1 多维空间中一个维向上的一次小波逆变换 idwtndn 多维空间一次小波逆变

2、换 waverecnd 多维空间多次小波逆变换重构 packup 利用 dwtndn和 wavedecnd的结果拼成多维系数空间的表示形式 fitscale 改变数据值的分布以利于图像显示 show3d 用图像显示三维空间的小波变换系数 二、 实例 实例一 dwtnd1和 idwtnd1 r=rand(4,4,4) %随机生成一个多维空间的数据,这里是个 4*4*4的三维空间 r(:,:,1) = 0.2028 0.1988 0.9318 0.5252 0.1987 0.0153 0.4660 0.2026 0.6038 0.7468 0.4186 0.6721 0.2722 0.4451 0

3、.8462 0.8381 r(:,:,2) = 0.0196 0.5028 0.1897 0.5417 0.6813 0.7095 0.1934 0.1509 0.3795 0.4289 0.6822 0.6979 0.8318 0.3046 0.3028 0.3784 r(:,:,3) = 0.8600 0.8998 0.6602 0.5341 0.8537 0.8216 0.3420 0.7271 0.5936 0.6449 0.2897 0.3093 0.4966 0.8180 0.3412 0.8385 r(:,:,4) = 0.5681 0.4449 0.9568 0.9797 0.

4、3704 0.6946 0.5226 0.2714 0.7027 0.6213 0.8801 0.2523 0.5466 0.7948 0.1730 0.8757 ca,cd=dwtnd1(r,1,haar) %对数据 r在第一维向即 row方向做一次 haar小波分解 ca(:,:,1) = 0.2839 0.1514 0.9884 0.5146 0.6194 0.8428 0.8944 1.0679 ca(:,:,2) = 0.4956 0.8572 0.2709 0.4897 0.8565 0.5187 0.6965 0.7610 ca(:,:,3) = 1.2117 1.2172 0.

5、7087 0.8918 0.7708 1.0344 0.4461 0.8116 ca(:,:,4) = 0.6636 0.8057 1.0461 0.8847 0.8834 1.0014 0.7447 0.7977 cd(:,:,1) = 0.0029 0.1298 0.3294 0.2280 0.2345 0.2133 -0.3023 -0.1174 cd(:,:,2) = -0.4678 -0.1461 -0.0027 0.2763 -0.3198 0.0879 0.2683 0.2259 cd(:,:,3) = 0.0045 0.0553 0.2250 -0.1365 0.0686 -0

6、.1224 -0.0364 -0.3742 cd(:,:,4) = 0.1398 -0.1766 0.3071 0.5008 0.1104 -0.1227 0.5001 -0.4408 这里得到 ca, cd分别是小波分解后的近似分量和细节分量,都是 2*4*4的三维空间。 q=idwtnd1(ca,cd,1,haar) %用分解的结果做一次逆变换来得到原来的数据 q(:,:,1) = 0.2028 0.1988 0.9318 0.5252 0.1987 0.0153 0.4660 0.2026 0.6038 0.7468 0.4186 0.6721 0.2722 0.4451 0.8462

7、0.8381 q(:,:,2) = 0.0196 0.5028 0.1897 0.5417 0.6813 0.7095 0.1934 0.1509 0.3795 0.4289 0.6822 0.6979 0.8318 0.3046 0.3028 0.3784 q(:,:,3) = 0.8600 0.8998 0.6602 0.5341 0.8537 0.8216 0.3420 0.7271 0.5936 0.6449 0.2897 0.3093 0.4966 0.8180 0.3412 0.8385 q(:,:,4) = 0.5681 0.4449 0.9568 0.9797 0.3704 0

8、.6946 0.5226 0.2714 0.7027 0.6213 0.8801 0.2523 0.5466 0.7948 0.1730 0.8757 可以看到和原来的数据是一致的。 实例二 dwtndn和 idwtndn 还用刚才生成的数据 r y=dwtndn(r,haar) %对三个方向都做小波变换 y = Columns 1 through 4 2x2x2 double 2x2x2 double 2x2x2 double 2x2x2 double Columns 5 through 8 2x2x2 double 2x2x2 double 2x2x2 double 2x2x2 doubl

9、e 得到的是一个 cell,里面有 8个 2*2*2的数据,第一个是所谓的 aaa即三个维向上的近似系数,而最后一个是所谓的 ddd即三个维向上的细节系数。 x=idwtndn(y,haar) %利用分解结果恢复原有的数据 x(:,:,1) = 0.2028 0.1988 0.9318 0.5252 0.1987 0.0153 0.4660 0.2026 0.6038 0.7468 0.4186 0.6721 0.2722 0.4451 0.8462 0.8381 x(:,:,2) = 0.0196 0.5028 0.1897 0.5417 0.6813 0.7095 0.1934 0.150

10、9 0.3795 0.4289 0.6822 0.6979 0.8318 0.3046 0.3028 0.3784 x(:,:,3) = 0.8600 0.8998 0.6602 0.5341 0.8537 0.8216 0.3420 0.7271 0.5936 0.6449 0.2897 0.3093 0.4966 0.8180 0.3412 0.8385 x(:,:,4) = 0.5681 0.4449 0.9568 0.9797 0.3704 0.6946 0.5226 0.2714 0.7027 0.6213 0.8801 0.2523 0.5466 0.7948 0.1730 0.8

11、757 可以看到得到了恢复 实例三 wavedecnd和 waverecnd r=rand(8,8,8); %生成一个 8*8*8的三维空间 x=wavedecnd(r,2,haar) %做两层的 haar小波变换 x = Columns 1 through 4 2x2x2 double 2x2x2 double 2x2x2 double 2x2x2 double Columns 5 through 8 2x2x2 double 2x2x2 double 2x2x2 double 2x2x2 double Columns 9 through 12 4x4x4 double 4x4x4 doub

12、le 4x4x4 double 4x4x4 double Columns 13 through 15 4x4x4 double 4x4x4 double 4x4x4 double 4*4*4有七个它们是第一层的结果,其中的一个做了第二层变换而变成了 8个 2*2*2。 y=waverecnd(x,2,haar); %恢复 any(abs(r-y)1e-10) %是不是和原来的一样?者利用等于 0是不行的,因为计算由误差,当小于一个很小的数是就可以认为恢复了。 ans(:,:,1) = 0 0 0 0 0 0 0 0 ans(:,:,2) = 0 0 0 0 0 0 0 0 ans(:,:,3)

13、 = 0 0 0 0 0 0 0 0 ans(:,:,4) = 0 0 0 0 0 0 0 0 ans(:,:,5) = 0 0 0 0 0 0 0 0 ans(:,:,6) = 0 0 0 0 0 0 0 0 ans(:,:,7) = 0 0 0 0 0 0 0 0 ans(:,:,8) = 0 0 0 0 0 0 0 0 这就说明恢复是成功的。 实例四 一个图像序列的处理 load woman %这个文件在原来的 matlab小波工具箱的目录里 x=X(51:199,51:199); %大了点,切一小块吧 r=turndata(x,8,0.1); %这是一个生成图像序列的自定义程序,其实也

14、就是故意做出一些变化 colormap(map); function d=turndata(x,pages,step) d=zeros(size(x,1),size(x,2),pages); d(:,:,1)=x; for i=2:pages d(:,:,i)=d(:,:,i-1)+x*step; a,b=find(d(:,:,i)255); for j=1:length(a) d(a(j),b(j),i)=255; end end; 从侧面看可以发现下边的层次比上面的亮一些,而这种亮度的提高程度是和原来的亮度成正比的,也就是亮者愈亮。 下边我们对它做两层 haar变换 h=wavedecnd

15、(r,2,haar) h = Columns 1 through 3 38x38x2 double 38x38x2 double 38x38x2 double Columns 4 through 6 38x38x2 double 38x38x2 double 38x38x2 double Columns 7 through 9 38x38x2 double 38x38x2 double 75x75x4 double Columns 10 through 12 75x75x4 double 75x75x4 double 75x75x4 double Columns 13 through 15 7

16、5x75x4 double 75x75x4 double 75x75x4 double f=packup(h); %拼成一整个三维空间 g=fitscale(f); %适合 256灰度的显示 show3d(g,2) %加上两级的辅助线 很不错的效果吧,其中最亮的一块是两次变换后的近似系数的表示。小波变换没有减少空间的规模(还是 150*150*8)但其中的近似部分区集中到一小块地方,这就是数据压缩的基本出发点。 还可以看看第一层的情况 imagesc(f(:,:,1) 三、一些值得注意的问题 1、 做变换的数据的维的长度不要小于 2,也就是说不能是( 3*2*4*1*) ,这样的分解没有什么意

17、义,而且可能会出现不可预料 的结果。 2、 关于奇偶数的问题 先看一个用 matlab5.2上的函数算一个题 x=rand(5,5) x = 0.2075 0.3490 0.5401 0.0198 0.6700 0.8506 0.1625 0.6984 0.0984 0.4562 0.7131 0.5398 0.0021 0.3742 0.8380 0.0804 0.9233 0.8366 0.9675 0.8231 0.8187 0.4371 0.8894 0.6196 0.5421 c,s=wavedec2(x,2,haar); %做两层的 haar分解 h=waverec2(c,s,2,

18、haar) %试图恢复 ? Error using = + Matrix dimensions must agree. Error in = F:MATLABtoolboxwaveletwaveletidwt2.m On line 48 = t0 = conv2(dyadup(a,r),LoF_R)+conv2(dyadup(h,r),HiF_R); Error in = F:MATLABtoolboxwaveletwaveletappcoef2.m On line 54 = a = idwt2(a,h,v,d,LoF_R,HiF_R,s(rm-p,:); Error in = F:MATLA

19、Btoolboxwaveletwaveletwaverec2.m On line 28 = x = appcoef2(c,s,arg3,arg4,0); 很奇怪吧,能够分解,却在恢复的时候出错。 让我们看看到底发生了什么。 u=wavedecnd(x,2,haar) u = Columns 1 through 4 2x2 double 2x2 double 2x2 double 2x2 double Columns 5 through 7 3x3 double 3x3 double 3x3 double 在第一层分解后生成 3*3的矩阵,第二层分解为 2*2的矩阵。但 在逆小波变换恢复是就会有

20、问题。拿前四个矩阵反变换之后生成的是 4*4的矩阵,这样和后面的三个就不匹配了。这是一个奇偶数的问题,如果是 rand(4,4)就不会有这样的毛病。 我对这个问题进行了一些处理,详见源代码。 h=waverecnd(u,2,haar) h = 0.2075 0.3490 0.5401 0.0198 0.6700 0.0000 0.8506 0.1625 0.6984 0.0984 0.4562 0.0000 0.7131 0.5398 0.0021 0.3742 0.8380 0.0000 0.0804 0.9233 0.8366 0.9675 0.8231 0.0000 0.8187 0.4371 0.8894 0.6196 0.5421 0.0000 0.0000 0.0000 0.0000 0.0000 0 0.0000 很不幸,还是多了一行一列 0,但 5*5位置上的数却是正确的。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。