selfidwt.m
上传用户:sxdygs
上传日期:2013-03-18
资源大小:154k
文件大小:2k
源码类别:

2D图形编程

开发平台:

Matlab

  1. function out1=selfidwt(in,J)
  2. %完成J尺度Haar小波反变换
  3. %in 为输入,J为变换尺度
  4. g0=[1/sqrt(2),1/sqrt(2)];
  5. g1=[1/sqrt(2),-1/sqrt(2)];
  6. m=length(in);
  7. Wh=zeros(1,round(m/(2^J)));
  8. Wl=zeros(1,round(m/(2^J)));
  9. for i=1:J
  10. %======================先对细节信息进行处理============================
  11.     for j=1:round(m/(2^J))
  12.         Wh(j)=in(round(m/(2^J)+j));
  13.     end
  14.     Wh1=zeros(1,round(m/2^(J-1)));
  15.     for j=1:round(m/2^(J-1))   %内插处理
  16.         if mod(j,2)==0
  17.             Wh1(j)=0;
  18.         else
  19.             Wh1(j)=Wh((j+1)/2);
  20.         end
  21.     end
  22.     Wh=conv(g1,Wh1); 
  23.  %====================================================================
  24.  %=====================接着对尺度信息进行处理==========================
  25.     for j=1:round(m/(2^J))
  26.         Wl(j)=in(j);
  27.     end
  28.     Wl1=zeros(1,round(m/2^(J-1)));
  29.     for j=1:round(m/2^(J-1))   %内插
  30.         if mod(j,2)==0
  31.             Wl1(j)=0;
  32.         else
  33.             Wl1(j)=Wl((j+1)/2);
  34.         end
  35.     end
  36.     Wl=conv(g0,Wl1);
  37.   %=====================================================================
  38.     Wl1=Wl+Wh;  %把经过上面两步后所得的结果相加
  39.   %============由于卷积处理后会多产生一个0,下面把这个0去掉=============  
  40.     Wl=zeros(1,round(m/(2^(J-1))));
  41.     for j=1:round(m/(2^(J-1)))
  42.         Wl(j)=Wl1(j);
  43.     end
  44.    %=====================================================================
  45.    %================用所得到的结果代替输入信号中相应的处理部分===========
  46.     for j=1:round(m/(2^(J-1)))
  47.         in(j)=Wl(j);
  48.     end
  49.    %=====================================================================
  50.     out1=in;
  51.    % m=m*2;
  52.     Wh=zeros(1,round(m/(2^(J-1))));
  53.     Wl=zeros(1,round(m/(2^(J-1))));
  54.     J=J-1;
  55. end
  56.     
  57.    
  58.