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

波变换

开发平台:

Matlab

  1. function varargout = detcoef2(o,c,s,n)
  2. %DETCOEF2 Extract 2-D detail coefficients.
  3. %   D = DETCOEF2(O,C,S,N) extracts from the wavelet
  4. %   decomposition structure [C,S], the horizontal, vertical 
  5. %   or diagonal detail coefficients for O = 'h' 
  6. %   (or 'v' or 'd',respectively), at level N. N must
  7. %   be an integer such that 1 <= N <= size(S,1)-2.
  8. %   See WAVEDEC2 for more information on C and S.
  9. %
  10. %   [H,V,D] = DETCOEF2('all',C,S,N) returns the horizontal H,
  11. %   vertical V, and diagonal D detail coefficients at level N.
  12. %
  13. %   D = DETCOEF2('compact',C,S,N) returns the detail 
  14. %   coefficients at level N, stored row-wise.
  15. %
  16. %   DETCOEF2('a',C,S,N) is equivalent to DETCOEF2('all',C,S,N).
  17. %   DETCOEF2('c',C,S,N) is equivalent to DETCOEF2('compact',C,S,N).
  18. %
  19. %   See also APPCOEF2, WAVEDEC2.
  20. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  21. %   Last Revision: 22-May-2003.
  22. %   Copyright 1995-2004 The MathWorks, Inc.
  23. % $Revision: 1.11.4.2 $
  24. % Check arguments.
  25. nmax = size(s,1)-2;
  26. if (n<1) || (n>nmax) || (n~=fix(n))
  27.     error('Invalid argument value');
  28. end
  29. k     = size(s,1)-n;
  30. first = s(1,1)*s(1,2)+3*sum(s(2:k-1,1).*s(2:k-1,2))+1;
  31. add   = s(k,1)*s(k,2);
  32. o     = lower(o);
  33. switch o
  34.   case 'h' ,
  35.   case 'v' ,  first = first+add;
  36.   case 'd' ,  first = first+2*add;
  37.   case {'a','all','c','compact'} ,
  38.   otherwise , error('Invalid argument value');
  39. end
  40. switch o
  41.   case {'h','v','d'}
  42.     last = first+add-1;
  43.     varargout{1} = reshape(c(first:last),s(k,:));
  44.   case {'c','compact'}
  45.     last = first+3*add-1;
  46.     varargout{1} = c(first:last);
  47.   case {'a','all'}
  48.     last = first+add-1;
  49.     varargout{1} = reshape(c(first:last),s(k,:));
  50.     first = first+add; last = first+add-1;
  51.     varargout{2} = reshape(c(first:last),s(k,:));
  52.     first = first+add; last = first+add-1;
  53.     varargout{3} = reshape(c(first:last),s(k,:));
  54. end