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

波变换

开发平台:

Matlab

  1. function x = wrcoef2(o,c,s,varargin)
  2. %WRCOEF2 Reconstruct single branch from 2-D wavelet coefficients.
  3. %   WRCOEF2 reconstructs the coefficients of an image.
  4. %
  5. %   X = WRCOEF2('type',C,S,'wname',N) computes the matrix of
  6. %   reconstructed coefficients of level N, based on the 
  7. %   wavelet decomposition structure [C,S] (see WAVEDEC2 for 
  8. %   more information).
  9. %   'wname' is a string containing the name of the wavelet.
  10. %   If 'type' = 'a', approximation coefficients are reconstructed
  11. %   otherwise if 'type' = 'h' ('v' or 'd', respectively), 
  12. %   horizontal (vertical or diagonal, respectively) detail
  13. %   coefficients are reconstructed.
  14. %
  15. %   Level N must be an integer such that:
  16. %   0 <= N <= size(S,1)-2 if 'type' = 'a' and such that 
  17. %   1 <= N <= size(S,1)-2 if 'type' = 'h', 'v'or 'd'.
  18. %
  19. %   Instead of giving the wavelet name, you can give the filters.
  20. %   For X = WRCOEF2('type',C,S,Lo_R,Hi_R,N),  
  21. %   Lo_R is the reconstruction low-pass filter and
  22. %   Hi_R is the reconstruction high-pass filter
  23. %
  24. %   X = WRCOEF2('type',C,S,'wname') or
  25. %   X = WRCOEF2('type',C,S,Lo_R,Hi_R) reconstruct 
  26. %   coefficients of maximum level N = size(S,1)-2.
  27. %
  28. %   See also APPCOEF2, DETCOEF2, WAVEDEC2.
  29. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  30. %   Last Revision: 14-May-2003.
  31. %   Copyright 1995-2004 The MathWorks, Inc.
  32. % $Revision: 1.14.4.2 $
  33. % Check arguments.
  34. nbIn = nargin;
  35. if nbIn < 4
  36.   error('Not enough input arguments.');
  37. elseif nbIn > 6
  38.   error('Too many input arguments.');
  39. end
  40. o = lower(o(1));
  41. rmax = size(s,1); nmax = rmax-2;
  42. if o=='a', nmin = 0; else , nmin = 1; end
  43. if ischar(varargin{1})
  44.     [Lo_R,Hi_R] = wfilters(varargin{1},'r'); next = 2;
  45. else
  46.     Lo_R = varargin{1}; Hi_R = varargin{2};  next = 3;
  47. end
  48. if nargin>=(3+next) , n = varargin{next}; else, n = nmax; end
  49. if (n<nmin) | (n>nmax) | (n~=fix(n))
  50.     error('Invalid argument value.');
  51. end
  52. % Get DWT_Mode
  53. dwtATTR = dwtmode('get');
  54. switch o
  55.   case 'a'
  56.     x = appcoef2(c,s,Lo_R,Hi_R,n);
  57.     if n==0, return; end
  58.     F1 = Lo_R; F2 = Lo_R;
  59.   case 'h'
  60.     x = detcoef2(o,c,s,n);
  61.     F1 = Hi_R; F2 = Lo_R;
  62.   case 'v'
  63.     x = detcoef2(o,c,s,n);
  64.     F1 = Lo_R; F2 = Hi_R;
  65.   case 'd'
  66.     x = detcoef2(o,c,s,n);
  67.     F1 = Hi_R; F2 = Hi_R;
  68.   otherwise
  69.     error('Invalid argument value.');
  70. end
  71. imin = rmax-n;
  72. x  = upsconv2(x,{F1,F2},s(imin+1,:),dwtATTR);
  73. for p=2:n
  74.     x = upsconv2(x,{Lo_R,Lo_R},s(imin+p,:),dwtATTR);
  75. end