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

波变换

开发平台:

Matlab

  1. function x = idwt2(a,h,v,d,varargin)
  2. %IDWT2  Single-level inverse discrete 2-D wavelet transform.
  3. %   IDWT2 performs a single-level 2-D wavelet reconstruction
  4. %   with respect to either a particular wavelet
  5. %   ('wname', see WFILTERS for more information) or particular wavelet
  6. %   reconstruction filters (Lo_R and Hi_R) you specify.
  7. %
  8. %   X = IDWT2(CA,CH,CV,CD,'wname') uses the wavelet 'wname'
  9. %   to compute the single-level reconstructed approximation
  10. %   coefficients matrix X, based on approximation matrix CA
  11. %   and (horizontal, vertical, and diagonal) details matrices
  12. %   CH, CV and CD.
  13. %
  14. %   X = IDWT2(CA,CH,CV,CD,Lo_R,Hi_R) reconstructs as above,
  15. %   using filters you specify:
  16. %   Lo_R is the reconstruction low-pass filter.
  17. %   Hi_R is the reconstruction high-pass filter.
  18. %   Lo_R and Hi_R must be the same length.
  19. %
  20. %   Let SA = size(CA) = size(CH) = size(CV) = size(CD) and
  21. %   LF the length of the filters; then size(X) = SX where
  22. %   SX = 2*SA if the DWT extension mode is set to periodization.
  23. %   SX = 2*SA-LF+2 for the other extension modes.
  24. %
  25. %   X = IDWT2(CA,CH,CV,CD,'wname',S) and
  26. %   X = IDWT2(CA,CH,CV,CD,Lo_R,Hi_R,S) return the size-S
  27. %   central portion of the result obtained using
  28. %   IDWT2(CA,CH,CV,CD,'wname'). S must be less than SX.
  29. %
  30. %   X = IDWT2(...,'mode',MODE) computes the wavelet
  31. %   reconstruction using the specified extension mode MODE.
  32. %
  33. %   X = IDWT2(CA,[],[],[], ... ) returns the single-level
  34. %   reconstructed approximation coefficients matrix X
  35. %   based on approximation coefficients matrix CA.
  36. %   
  37. %   X = IDWT2([],CH,[],[], ... ) returns the single-level
  38. %   reconstructed detail coefficients matrix X
  39. %   based on horizontal detail coefficients matrix CH.
  40. %
  41. %   The same result holds for X = IDWT2([],[],CV,[], ... ) and
  42. %   X = IDWT2([],[],[],CD, ... ).
  43. %
  44. %   More generally, X = IDWT2(AA,HH,VV,DD, ... ) returns the single-level
  45. %   reconstructed matrix X where AA can be CA or [], and so on.
  46. %
  47. %   See also DWT2, DWTMODE, UPWLEV2.
  48. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  49. %   Last Revision: 19-May-2003.
  50. %   Copyright 1995-2004 The MathWorks, Inc.
  51. % $Revision: 1.15.4.2 $
  52. % Check arguments.
  53. nbIn = nargin;
  54. if nbIn<5 ,
  55.     error('Not enough input arguments.');
  56. elseif nbIn>11 ,
  57.     error('Too many input arguments.');
  58. end
  59. if isempty(a) && isempty(h) && isempty(v) && isempty(d), x = []; return; end
  60. if ischar(varargin{1})
  61.     [Lo_R,Hi_R] = wfilters(varargin{1},'r'); next = 2;
  62. else
  63.     Lo_R = varargin{1}; Hi_R = varargin{2};  next = 3;
  64. end
  65. % Check arguments for Size, Shift and Extension.
  66. global DWT_Attribute
  67. if isempty(DWT_Attribute)
  68.     DWT_Attribute = dwtmode('get');
  69. end
  70. dwtEXTM = DWT_Attribute.extMode; % Default: Extension.
  71. shift   = DWT_Attribute.shift2D; % Default: Shift.
  72. sx = [];
  73. k = next;
  74. while k<=length(varargin)
  75.     if ischar(varargin{k})
  76.         switch varargin{k}
  77.            case 'mode'  , dwtEXTM = varargin{k+1};
  78.            case 'shift' , shift = mod(varargin{k+1},2);
  79.         end
  80.         k = k+2;
  81.     else
  82.         sx = varargin{k};
  83.         k = k+1;
  84.     end
  85. end
  86.       
  87. x = upsconv2(a,{Lo_R,Lo_R},sx,dwtEXTM,shift)+ ... % Approximation.
  88.     upsconv2(h,{Hi_R,Lo_R},sx,dwtEXTM,shift)+ ... % Horizontal Detail.
  89.     upsconv2(v,{Lo_R,Hi_R},sx,dwtEXTM,shift)+ ... % Vertical Detail.
  90.     upsconv2(d,{Hi_R,Hi_R},sx,dwtEXTM,shift);     % Diagonal Detail.