idwtper2.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:2k
源码类别:

波变换

开发平台:

Matlab

  1. function x = idwtper2(a,h,v,d,varargin)
  2. %IDWTPER2 Single-level inverse discrete 2-D wavelet transform (periodized).
  3. %   X = IDWTPER2(CA,CH,CV,CD,'wname') returns the single-level
  4. %   reconstructed approximation coefficients matrix X based on
  5. %   approximation and details matrices CA, CH, CV and CD at a 
  6. %   given level, using the periodized inverse wavelet transform.
  7. %   'wname' is a string containing the wavelet name (see WFILTERS).
  8. %
  9. %   Instead of giving the wavelet name, you can give the filters.
  10. %   For X = IDWTPER2(CA,CH,CV,CD,Lo_R,Hi_R), 
  11. %   Lo_R is the reconstruction low-pass filter and
  12. %   Hi_R is the reconstruction high-pass filter
  13. %
  14. %   If sa = size(CA) = size(CH) = size(CV) = size(CD) then
  15. %   size(X) = 2*sa.
  16. %
  17. %   For X = IDWTPER2(CA,CH,CV,CD,'wname',S) or
  18. %   X = IDWTPER2(CA,CH,CV,CD,Lo_R,Hi_R,S), S is the size of
  19. %   the result.
  20. %
  21. %   See also DWTPER2.
  22. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  23. %   Last Revision: 02-Aug-2000.
  24. %   Copyright 1995-2004 The MathWorks, Inc.
  25. % $Revision: 1.13.4.2 $
  26. % Check arguments.
  27. if errargn(mfilename,nargin,[5:7],nargout,[0 1]), error('*'), end
  28. sa = size(a);
  29. if ischar(varargin{1})
  30.     [Lo_R,Hi_R] = wfilters(varargin{1},'r');
  31.     if nargin==6, sx = varargin{2}; else, sx = 2*sa; end
  32. else
  33.     Lo_R = varargin{1}; Hi_R = varargin{2};
  34.     if nargin==7, sx = varargin{3}; else, sx = 2*sa; end
  35. end
  36. % Reconstruction.
  37. lf = length(Lo_R);
  38. lm = floor((lf-1)/2)/2;
  39. la = sa(1);
  40. I  = [la-floor(lm)+1:la , 1:la , 1:ceil(lm)];
  41. if lf>2*la
  42.     I  = mod(I,la);
  43.     I(I==0) = la;
  44. end
  45. a = a(I,:); h = h(I,:); v = v(I,:); d = d(I,:);
  46. la = sa(2);
  47. I  = [la-floor(lm)+1:la , 1:la , 1:ceil(lm)];
  48. if lf>2*la
  49.     I  = mod(I,la);
  50.     I(I==0) = la;
  51. end
  52. a = a(:,I); h = h(:,I); v = v(:,I); d = d(:,I);
  53. t0 = conv2(dyadup(a,'r'),Lo_R') + conv2(dyadup(h,'r'),Hi_R');
  54. clear a h
  55. d0 = conv2(dyadup(v,'r'),Lo_R') + conv2(dyadup(d,'r'),Hi_R');
  56. clear v d
  57. x  = conv2(dyadup(t0,'c'),Lo_R) + conv2(dyadup(d0,'c'),Hi_R);
  58. x  = wkeep2(x,sx);