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

波变换

开发平台:

Matlab

  1. function [thresh,rl2scr,n0scr,imin,suggthr] = wcmpscr(c,l,in3)
  2. %WCMPSCR Wavelet 1-D or 2-D Compression Scores.
  3. %   [THR,RL2,NZ,IMIN] = WCMPSCR(C,L) returns for
  4. %   the input wavelet decomposition structure [C,L],
  5. %   compression scores for detail coefficients
  6. %   thresholding and suggested threshold.
  7. %   Outputs are :
  8. %   THR the vector of ordered thresholds.
  9. %   and vectors of scores induced by a THR(i)-thresholding :
  10. %   RL2 vector of 2-norm recovery score in percent.
  11. %   NZ  vector of relative number of zeros in percent.
  12. %   IMIN is the index of THR for which the two scores are
  13. %   approximately the same.
  14. %   STHR is a suggested threshold.
  15. %
  16. %   When used with three arguments WCMPSCR(C,L,IN3) returns
  17. %   the same outputs but for approximation and details
  18. %   coefficients thresholding.
  19. %
  20. %   See also KEY2INFO, WPCMPSCR.
  21.                     
  22. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  23. %   Last Revision: 31-Oct-1998.
  24. %   Copyright 1995-2004 The MathWorks, Inc.
  25. %   $Revision: 1.13.4.2 $
  26. % Check arguments and set problem dimension.
  27. dim = 1;    if min(size(l))~=1, dim = 2; end
  28. keepapp = (nargin == 2);
  29. % Set possible thresholds.
  30. if keepapp      % only detail coeffs can be thresholded.
  31.     if dim == 1
  32.         last = l(1);
  33.     else
  34.         last = prod(l(1,:));
  35.     end
  36.     app    = c(1:last);
  37.     c      = c(last+1:end);
  38.     dimapp = length(app);
  39.     nl2app = sum(app.^2);
  40.     n0app  = length(find(app==0));
  41. else            % all coeffs can be thresholded.
  42.     dimapp = 0; nl2app = 0; n0app = 0;
  43. end
  44. % Compute compression scores.
  45. thresh  = sort(abs(c));
  46. lenthr  = length(thresh);
  47. if (nl2app<eps & thresh(lenthr)<eps)
  48.     rl2scr  = 100*ones(1,lenthr);
  49.     n0scr   = 100*ones(1,lenthr);
  50.     suggthr = 0;
  51.     indmin  = 1;
  52.     return
  53. end
  54. rl2scr  = cumsum(thresh.^2) / (sum(thresh.^2)+nl2app);
  55. n0det   = length(find(c==0));
  56. n0scr   = ((n0app + n0det + ...
  57.                 [zeros(1,n0det+1) , 1:(lenthr-n0det)]) / (lenthr+dimapp));
  58. rl2scr  = 100 * (1 - rl2scr);
  59. n0scr   = 100 * n0scr;
  60. thresh  = [0 thresh];
  61. rl2scr  = [100 rl2scr];
  62. % Find threshold for which the two scores are the same.
  63. [dummy,imin] = min(abs(rl2scr-n0scr));
  64. if nargout<5 , return; end
  65. % Set suggested threshold.
  66. suggthr = thresh(imin);
  67. if dim==2, suggthr = sqrt(suggthr); end