小波分解矩阵Matlab

上传人:ji****72 文档编号:35783701 上传时间:2018-03-20 格式:DOC 页数:9 大小:99KB
返回 下载 相关 举报
小波分解矩阵Matlab_第1页
第1页 / 共9页
小波分解矩阵Matlab_第2页
第2页 / 共9页
小波分解矩阵Matlab_第3页
第3页 / 共9页
小波分解矩阵Matlab_第4页
第4页 / 共9页
小波分解矩阵Matlab_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《小波分解矩阵Matlab》由会员分享,可在线阅读,更多相关《小波分解矩阵Matlab(9页珍藏版)》请在金锄头文库上搜索。

1、%-%小波图像分解 Matlab 程序 - V2.0 版http:/ Matlab 程序 - V2.0 版http:/ 小波分解矩阵 Matlab 程序 - V3.0 版%-%function coef,scf=mywavedec2(x,N,wname)%-% 函数 MYWAVEDEC2() 对输入矩阵 x 进行 dim 层分解,得到相应的分解系数矩阵 y% 输入参数:x 输入矩阵% N 分解级数% wname 分解所用的小波函数% 输出参数:scf 存储各级分解系数矩阵的大小以及原始(图像)矩阵的大小% coef 分解系数矩阵,其结构如下:% coef = cA_N;cV_N;cH_N;cD

2、_N;cV_N-1;cH_N-1;cD_N-1;cV_1;cH_1;cD_1% Copyright by Zou Yuhua ( chenyusiyuan )% Version: 3.0, Date: 2008-07-08%-% 求出小波函数的滤波器组系数向量Lo_D,Hi_D = wfilters(wname,d); lf=length(Lo_D);% 画出原始图像imshow(x);title(Original Image);% 标明图像大小r,c=size(x);xlabel(Size : ,num2str(r),*,num2str(c);% 将矩阵 x 的数据格式转换为适合数值处理的

3、double 格式xd=double(x); rx,cx=size(x);o2sa,f1sa,rsx=sizcoef(rx,cx,lf,N); a=o2sa,f1sa,rsxcoef=;scf=rx,cx;for i=1:NcA,cV,cH,cD=mydwt2(xd,Lo_D,Hi_D); % 第 i 级小波分解 xd=cA; % 将第 i 级分解得到的低频系数矩阵作为第 i+1 级分解的源矩阵outmp=cV;cH;cD; % 将第 i 级分解得到的高频系数矩阵 cV,cH,cD 存入细胞矩阵 outmpscf=size(cV);scf; % 将各级分解系数矩阵的大小存入矩阵 scfcoef

4、=outmp;coef; % 将细胞矩阵 outmp 存入输出矩阵 coef,coef 将由空矩阵变为细胞矩阵 end% 迭代结束后,矩阵 coef 中保存的是各级分解中的高频系数矩阵% 故需将迭代后得到的矩阵 cA,即第 dim 级低频矩阵存入矩阵 coefcoef=cA;coef;scf=size(cA);scf;plotcoef(N,wname,coef);plotcoef2one(N,wname,coef,rsx);function plotcoef2one(N,wname,coef,rsx)% 画出小波分解系数的塔式结构图rsx=rsx(end:-1:1,:);tmpcoef=;tA

5、=wkeep(coef1,rsx(1,:),c);tmpcoef=tA; tA=uint8(tA); tA(end,:)=255; tA(:,end)=255;for j=1:NtV=wkeep(coef(j-1)*3+2,rsx(j,:),c);tH=wkeep(coef(j-1)*3+3,rsx(j,:),c);tD=wkeep(coef(j-1)*3+4,rsx(j,:),c);tV=uint8(tV); tH=uint8(tH); tD=uint8(tD); if j=rsx(j+1,:)tA=tmpcoef(1:rsx(j+1,1),1:rsx(j+1,2);elsetmpcoef=

6、tmpcoef(1:end-1,end-2:end-1,1:end-1,end-2:end-1);tA=tmpcoef(1:rsx(j+1,1),1:rsx(j+1,2);endtA=uint8(tA); tA(end,:)=255; tA(:,end)=255;endfigure;sc=tA;rx,cx=size(sc);imshow(sc);xlabel(Size : ,num2str(rx),*,num2str(cx);title(Wavelet Decomposition - Wavelet Type: ,wname, , Levels: ,num2str(N);function pl

7、otcoef(N,wname,coef)% 画出各级低频、高频系数矩阵的层次结构图% 首先建立一个名为“Wavelet Decomposition - Wavelet Type: , Levels: ”的图像窗口figure(Name,Wavelet Decomposition - Wavelet Type: ,wname, , Levels: ,num2str(N);% 图像的第 1 行显示低频系数,置中,左右两个 subplot 为空subplot(N+1,3,2);yt=uint8(coef1);yrow,ycol=size(yt);imshow(yt);title( Approxima

8、tion A,num2str(N);xlabel(Size : ,num2str(yrow),*,num2str(ycol);% 第 2-(N+1)行显示各级高频系数titllist=Vertical Detail V;Horizontal Detail H;Diagonal Detail D;pn=2; % pn 是子图的显示序号for pr=1:Nfor pc=1:3subplot(N+1,3,pn+2);yt=; yt=uint8(coefpn);yrow,ycol=size(yt);imshow(yt);title( titllistpc,num2str(N-pr+1);xlabel(

9、Size : ,num2str(yrow),*,num2str(ycol);% 每行的第一个图像的 Y 轴,显示该行高频系数对应的分解级别if mod(pn+2,3)=1ylabel(Level ,num2str(N-pr+1);endpn=pn+1;endendfunction o2sa,f1sa,rsx=sizcoef(sx,lf,N)% 函数 sizcoef 计算小波分解的卷积过程中各分解级的矩阵大小% 输入参数:sx 原始(图像)矩阵的大小% lf 滤波器的长度% N 分解级数% 输出参数:o2sa 根据公式 sigLen+filLen-1 得到的卷积后矩阵大小% f1sa 经过下抽样

10、后本级分解系数矩阵的大小% rsx 通过 f1sa 求出对应于原始矩阵的有效区域大小% Copyright by Zou Yuhua ( chenyusiyuan ), Version: 1.0, Date: 2008-07-07o2sa=sx;f1sa=0 0;osx=sx;for i=1:Not=osx+lf-1;sa=floor(ot/2);o2sa=o2sa;ot;f1sa=f1sa;sa;osx=sa;endrsx=zeros(N+1,2);rsx(1,:)=sx;addln=0;for j=2:N+1 % 在每级卷积后,序列的长度会增长 floor(lf-1/2),aln=floo

11、r(addln+lf-1)/2); % 据此可由卷积后的序列长度求出原来的输入序列长度tsx=f1sa(j,:)-aln;rsx(j,:)=tsx;addln=aln;endfunction cA,cV,cH,cD=mydwt2(x,Lo_D,Hi_D)% 函数 MYDWT2() 对输入的 r*c 维矩阵 x 进行二维小波分解,输出四个分解系数子矩阵LL,HL,LH,HH% 输入参数:x 输入矩阵,为 r*c 维矩阵。% Lo_D,Hi_D 小波分解的滤波器组系数向量% 输出参数:cA,cV,cH,cD 是小波分解系数矩阵的四个相等大小的子矩阵% cA:低频部分分解系数; cV:垂直方向分解系

12、数;% cH:水平方向分解系数; cD:对角线方向分解系数。% Copyright by Zou Yuhua ( chenyusiyuan ), Version: 3.0, Date: 2008-07-07%row,col=size(x); % 读取输入矩阵的大小for j=1:row % 首先对输入矩阵的每一行序列进行一维离散小波分解tmp1=x(j,:);ca1,cd1=mydwt(tmp1,Lo_D,Hi_D,1); % tmp1 长度为 row ,滤波器长度为 lf % 则 ca1,cd1 的总长为 2*floor( row + lf -1 )/2)x1(j,:)=ca1,cd1; %

13、 将分解系数序列存入缓存矩阵 x1 中endrow1,col1=size(x1); % row1=row + lnf -1, col1=col+lnf-1for k=1:col1 % 再对缓存矩阵 x1 的每一列序列进行一维离散小波分解tmp2=x1(:,k);ca2,cd2=mydwt(tmp2,Lo_D,Hi_D,1); x2(:,k)=ca2,cd2; % 将分解所得系数存入缓存矩阵 x2 中% 注意不要遗漏了上一行代码中的转置符号“ ”。 Matlab 6.5 及以下较低的版本不支% 持行、列向量的相互赋值,故要把行向量ca2,cd2转置为列向量,再存入 x2 的相应列endrow2,

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

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号