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

波变换

开发平台:

Matlab

  1. function c = wthcoef2(o,c,s,niv,thr,sorh)
  2. %WTHCOEF2 Wavelet coefficient thresholding 2-D.
  3. %   For 'type' = 'h' ('v' or 'd'), 
  4. %   NC = WTHCOEF2('type',C,S,N,T,SORH) returns the horizontal
  5. %   (vert. or diag., respectively) coefficients obtained from
  6. %   the wavelet decomposition structure [C,S] (see WAVEDEC2),
  7. %   by soft (if SORH = 's') or hard (if SORH = 'h') thresholding 
  8. %   defined in vectors N and T. N contains the detail levels 
  9. %   to be compressed and T the corresponding thresholds.
  10. %   N and T must be of the same length.
  11. %   The vector N must be such that 1 <= N(i) <= size(S,1)-2.
  12. %
  13. %   For 'type' = 'h' ('v' or 'd' respectively),
  14. %   NC = WTHCOEF2('type',C,S,N) returns the horizontal (vert. 
  15. %   or diag., respectively) coefficients obtained from [C,S] by
  16. %   setting all the coefficients of detail levels defined in N
  17. %   to zero.
  18. %
  19. %   NC = WTHCOEF2('a',C,S) returns the coefficients obtained by
  20. %   setting approximation coefficients to zero.
  21. %
  22. %   NC = WTHCOEF2('t',C,S,N,T,SORH) returns the detail
  23. %   coefficients obtained from the wavelet decomposition
  24. %   structure [C,S] by soft (if SORH = 's') or hard
  25. %   (if SORH = 'h') thresholding (see WTHRESH) defined in
  26. %   vectors N and T.
  27. %   N contains the detail levels to be thresholded and T the
  28. %   corresponding thresholds which are applied in the three
  29. %   detail orientations.
  30. %   N and T must be of the same length.
  31. %
  32. %   [NC,S] is the modified wavelet decomposition structure.
  33. %
  34. %   See also WAVEDEC2, WTHRESH.
  35. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  36. %   Last Revision: 14-May-2003.
  37. %   Copyright 1995-2004 The MathWorks, Inc.
  38. % $Revision: 1.11.4.2 $
  39. % Check arguments.
  40. nbIn = nargin;
  41. if nbIn < 3   ,  error('Not enough input arguments.');
  42. elseif nbIn==5 , error('Invalid number of input arguments.');
  43. end
  44. o = lower(o(1));
  45. switch o
  46.     case 'a'
  47.         if nbIn>3 , error('Too many input arguments.'); end
  48.         ll = prod(s(1,:));
  49.         c(1:ll) = 0;      
  50.         return;
  51.         
  52.     case {'h','v','d','t'}
  53.     
  54.     otherwise 
  55.         error('Invalid argument value.')
  56. end
  57. nmax = size(s,1)-2;
  58. if find((niv < 1) | (niv > nmax) | (niv ~= fix(niv)))
  59.     error('Invalid level(s) number(s).')
  60. end
  61. if nbIn==6
  62.     if (length(niv) ~= length(thr)) | ~isempty(find(thr<0))
  63.         error('Invalid argument value.')
  64.     end
  65. end
  66. % Compression.
  67. for k = 1:length(niv)
  68.     n     = niv(k);
  69.     kn    = size(s,1)-n;
  70.     first = s(1,1)*s(1,2)+3*sum(s(2:kn-1,1).*s(2:kn-1,2))+1;
  71.     add   = s(kn,1)*s(kn,2);
  72.     if     o=='v', first = first+add;
  73.     elseif o=='d', first = first+2*add;
  74.     end             
  75.     if o=='t', last = first + 3*add-1;
  76.     else last = first+add-1; end
  77.     if nbIn==6
  78.         thres = thr(k);
  79.         cfs   = c(first:last);
  80.         cfs   = wthresh(cfs,sorh,thres);
  81.         c(first:last) = cfs;
  82.     else
  83.         c(first:last) = 0;
  84.     end
  85. end