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

波变换

开发平台:

Matlab

  1. function y = upcoef2(o,x,varargin)
  2. %UPCOEF2 Direct reconstruction from 2-D wavelet coefficients.
  3. %   Y = UPCOEF2(O,X,'wname',N,S) computes the N-step 
  4. %   reconstructed coefficients of matrix X and takes the
  5. %   size-S central portion of the result.
  6. %   'wname' is a string containing the name of the wavelet.
  7. %   If O = 'a', approximation coefficients are reconstructed,
  8. %   otherwise if O = 'h' (or 'v' or 'd'), horizontal
  9. %   (vertical or diagonal, respectively),
  10. %   detail coefficients are reconstructed.
  11. %   N must be a strictly positive integer.
  12. %
  13. %   Instead of giving the wavelet name, you can give the
  14. %   filters.
  15. %   For Y = UPCOEF2(O,X,Lo_R,Hi_R,N,S) 
  16. %   Lo_R is the reconstruction low-pass filter and
  17. %   Hi_R is the reconstruction high-pass filter.
  18. %   Y = UPCOEF2(O,X,'wname') is equivalent to
  19. %   Y = UPCOEF2(O,X,'wname',1).
  20. %
  21. %   Y = UPCOEF2(O,X,Lo_R,Hi_R) is equivalent to
  22. %   Y = UPCOEF2(O,X,Lo_R,Hi_R,1).
  23. %
  24. %   See also IDWT2.
  25. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  26. %   Last Revision: 14-May-2003.
  27. %   Copyright 1995-2004 The MathWorks, Inc.
  28. % $Revision: 1.14.4.2 $
  29. % Check arguments.
  30. nbIn = nargin;
  31. if nbIn < 3
  32.   error('Not enough input arguments.');
  33. elseif nbIn > 6
  34.   error('Too many input arguments.');
  35. end
  36. if isempty(x) , y = x; return; end
  37. o = lower(o(1));
  38. y = x; n = 1; s = [0 0];
  39. if ischar(varargin{1})
  40.     [Lo_R,Hi_R] = wfilters(varargin{1},'r'); next = 2;
  41. else
  42.     Lo_R = varargin{1}; Hi_R = varargin{2};  next = 3;
  43. end
  44. if nargin>=(2+next)
  45.     n = varargin{next}; 
  46.     if nargin>=(3+next), s = varargin{next+1}; end
  47. end
  48. if (n<0) | (n~=fix(n)) | ~isempty(find(s<0)) | ~isempty(find(s~=fix(s)))
  49.     error('Invalid argument value.');
  50. end
  51. if n==0 , return; end
  52. switch o
  53.     case 'a' , F1 = Lo_R; F2 = Lo_R;
  54.     case 'h' , F1 = Hi_R; F2 = Lo_R;
  55.     case 'v' , F1 = Lo_R; F2 = Hi_R;
  56.     case 'd' , F1 = Hi_R; F2 = Hi_R;
  57.     otherwise
  58.         error('Invalid argument value.');
  59. end
  60. lf = length(Lo_R);
  61. % Compute Maximum Sizes.
  62. sizUP = zeros(n,2);
  63. sizUP(1,:) = 2*size(y)+lf-2;
  64. for k=2:n
  65.     sizUP(k,:) = 2*sizUP(k-1,:)+lf-2;
  66. end
  67. if prod(s), 
  68.     for k = 1:2
  69.         idx = sizUP(:,k)>2*s(k);
  70.         sizUP(idx,k) = 2*s(k);
  71.     end
  72. end
  73. y = upsconv2(y,{F1,F2},sizUP(1,:));
  74. for p=2:n
  75.     y = upsconv2(y,{Lo_R,Lo_R},sizUP(p,:));
  76. end
  77. if prod(s), y = wkeep2(y,s); end;