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

波变换

开发平台:

Matlab

  1. function varargout = wthrmngr(option,varargin)
  2. %WTHRMNGR Threshold settings manager.
  3. %   THR = WTHRMNGR(OPTION,METHOD,VARARGIN) returns a 
  4. %   global threshold or level dependent thresholds
  5. %   depending on OPTION. The inputs VARARGIN depend
  6. %   on OPTION and METHOD.
  7. %
  8. %   This function returns the thresholds used throughout
  9. %   the MATLAB Wavelet Toolbox for de-noising and 
  10. %   compression tools (command line M-files or GUI 
  11. %   tools).
  12. %
  13. %   The options for the METHOD parameter are:
  14. %
  15. %   - 'scarcehi'            (see WDCBM or WDCBM2 with high 
  16. %                                predefined value of parameter M).
  17. %   - 'scarceme'            (see WDCBM or WDCBM2 with medium  
  18. %                                predefined value of parameter M).
  19. %   - 'scarcelo'            (see WDCBM or WDCBM2 with low  
  20. %                                predefined value of parameter M).
  21. %
  22. %   - 'sqtwolog'            (see THSELECT option 'sqtwolog' 
  23. %                                and see also WDEN).
  24. %   - 'sqtwologuwn'         (see THSELECT option 'sqtwolog' 
  25. %                                and see also WDEN option 'sln').
  26. %   - 'sqtwologswn'         (see THSELECT option 'sqtwolog' 
  27. %                                and see also WDEN option 'mln').
  28. %   - 'rigrsure'            (see THSELECT option 'rigrsure' 
  29. %                                and see also WDEN).
  30. %   - 'heursure'            (see THSELECT option 'heursure' 
  31. %                                and see also WDEN).
  32. %   - 'minimaxi'            (see THSELECT option 'minimaxi' 
  33. %                                and see also WDEN).
  34. %
  35. %   - 'penalhi'             (see WBMPEN or WPBMPEN with high 
  36. %                                value of parameter ALPHA).
  37. %   - 'penalme'             (see WBMPEN or WPBMPEN with medium  
  38. %                                value of parameter ALPHA).
  39. %   - 'penallo'             (see WBMPEN or WPBMPEN with low  
  40. %                                value of parameter ALPHA).
  41. %
  42. %   - 'rem_n0'              this option returns a threshold
  43. %                           close to 0, a typical THR value is  
  44. %                           median(abs(coefficients)).
  45. %
  46. %   - 'bal_sn'              this option returns a threshold
  47. %                           such that the percentages of retained
  48. %                           energy and number of zeros are 
  49. %                           the same.
  50. %
  51. %   - 'sqrtbal_sn'          this option returns a threshold
  52. %                           equal to the square root of the value
  53. %                           such that the percentages of retained
  54. %                           energy and number of zeros are 
  55. %                           the same.
  56. %
  57. %   #############################  
  58. %   Discrete Wavelet 1-D options:
  59. %   #############################  
  60. %
  61. %    Compression using a global threshold:
  62. %    -------------------------------------
  63. %    X is the signal to be compressed and [C,L] is the wavelet 
  64. %    decomposition structure of the signal to be compressed. 
  65. %     THR = WTHRMNGR('dw1dcompGBL','rem_n0',X) 
  66. %     THR = WTHRMNGR('dw1dcompGBL','bal_sn',C,L)
  67. %
  68. %    Compression using level dependent thresholds:
  69. %    ---------------------------------------------
  70. %    X is the signal to be compressed and [C,L] is the wavelet 
  71. %    decomposition structure of the signal to be compressed.
  72. %    ALFA is a sparsity parameter (see WDCBM).
  73. %
  74. %     THR = WTHRMNGR('dw1dcompLVL','scarcehi',C,L,ALFA)
  75. %            ALFA must be such that 2.5 < ALFA < 10
  76. %     THR = WTHRMNGR('dw1dcompLVL','scarceme',C,L,ALFA)
  77. %            ALFA must be such that 1.5 < ALFA < 2.5
  78. %     THR = WTHRMNGR('dw1dcompLVL','scarcelo',C,L,ALFA)
  79. %            ALFA must be such that 1 < ALFA < 2
  80. %
  81. %    De-noising using level dependent thresholds:
  82. %    --------------------------------------------
  83. %    [C,L] is the wavelet decomposition structure of the
  84. %    signal to be de-noised, SCAL defines the 
  85. %    multiplicative threshold rescaling (see WDEN) and
  86. %    ALFA is a sparsity parameter (see WBMPEN).
  87. %
  88. %     THR = WTHRMNGR('dw1ddenoLVL','sqtwolog',C,L,SCAL)
  89. %     THR = WTHRMNGR('dw1ddenoLVL','rigrsure',C,L,SCAL)
  90. %     THR = WTHRMNGR('dw1ddenoLVL','heursure',C,L,SCAL)
  91. %     THR = WTHRMNGR('dw1ddenoLVL','minimaxi',C,L,SCAL)
  92. %
  93. %     THR = WTHRMNGR('dw1ddenoLVL','penalhi',C,L,ALFA)
  94. %            ALFA must be such that 2.5 < ALFA < 10
  95. %     THR = WTHRMNGR('dw1ddenoLVL','penalme',C,L,ALFA)
  96. %            ALFA must be such that 1.5 < ALFA < 2.5
  97. %     THR = WTHRMNGR('dw1ddenoLVL','penallo',C,L,ALFA)
  98. %            ALFA must be such that 1 < ALFA < 2
  99. %
  100. %   ########################################    
  101. %   Discrete Stationary Wavelet 1-D options:
  102. %   ########################################    
  103. %
  104. %    De-noising using level dependent thresholds:
  105. %    --------------------------------------------
  106. %    SWTDEC is the stationary wavelet decomposition structure 
  107. %    of the signal to be de-noised, SCAL defines the 
  108. %    multiplicative threshold rescaling (see WDEN) and
  109. %    ALFA is a sparsity parameter (see WBMPEN).
  110. %     THR = WTHRMNGR('sw1ddenoLVL',METHOD,SWTDEC,SCAL)
  111. %     THR = WTHRMNGR('sw1ddenoLVL',METHOD,SWTDEC,ALFA)
  112. %     The options for METHOD are the same as in the 'dw1ddenoLVL'
  113. %     case.
  114. %
  115. %   #############################  
  116. %   Discrete Wavelet 2-D options:
  117. %   #############################  
  118. %
  119. %    Compression using a global threshold:
  120. %    -------------------------------------
  121. %    X is the image to be compressed and [C,S] is the wavelet 
  122. %    decomposition structure of the image to be compressed.
  123. %     THR = WTHRMNGR('dw2dcompGBL','rem_n0',X)
  124. %     THR = WTHRMNGR('dw2dcompGBL','bal_sn',C,S)
  125. %     THR = WTHRMNGR('dw2dcompGBL','sqrtbal_sn',C,S)
  126. %
  127. %    Compression using level dependent thresholds:
  128. %    ---------------------------------------------
  129. %    X is the image to be compressed and [C,S] is the wavelet 
  130. %    decomposition structure of the image to be compressed.
  131. %    ALFA is a sparsity parameter (see WDCBM2).
  132. %
  133. %     THR = WTHRMNGR('dw2dcompLVL','scarcehi',C,S,ALFA)
  134. %            ALFA must be such that 2.5 < ALFA < 10
  135. %     THR = WTHRMNGR('dw2dcompLVL','scarceme',C,S,ALFA)
  136. %            ALFA must be such that 1.5 < ALFA < 2.5
  137. %     THR = WTHRMNGR('dw2dcompLVL','scarcelo',C,S,ALFA)
  138. %            ALFA must be such that 1 < ALFA < 2
  139. %
  140. %    De-noising using level dependent thresholds:
  141. %    --------------------------------------------
  142. %    [C,S] is the wavelet decomposition structure of the
  143. %    image to be de-noised, SCAL defines the 
  144. %    multiplicative threshold rescaling (see WDEN) and
  145. %    ALFA is a sparsity parameter (see WBMPEN).
  146. %
  147. %     THR = WTHRMNGR('dw2ddenoLVL','penalhi',C,S,ALFA)
  148. %            ALFA must be such that 2.5 < ALFA < 10
  149. %     THR = WTHRMNGR('dw2ddenoLVL','penalme',C,S,ALFA)
  150. %            ALFA must be such that 1.5 < ALFA < 2.5
  151. %     THR = WTHRMNGR('dw2ddenoLVL','penallo',C,S,ALFA)
  152. %            ALFA must be such that 1 < ALFA < 2
  153. %
  154. %     THR = WTHRMNGR('dw2ddenoLVL','sqtwolog',C,S,SCAL)
  155. %     THR = WTHRMNGR('dw2ddenoLVL','sqrtbal_sn',C,S)
  156. %
  157. %   ########################################  
  158. %   Discrete Stationary Wavelet 2-D options:
  159. %   ########################################  
  160. %
  161. %    De-noising using level dependent thresholds:
  162. %    --------------------------------------------
  163. %    SWTDEC is the stationary wavelet decomposition structure 
  164. %    of the image to be de-noised, SCAL defines the 
  165. %    multiplicative threshold rescaling (see WDEN) and
  166. %    ALFA is a sparsity parameter (see WBMPEN).
  167. %     THR = WTHRMNGR('sw2ddenoLVL',METHOD,SWTDEC,SCAL)
  168. %     THR = WTHRMNGR('sw2ddenoLVL',METHOD,SWTDEC,ALFA)
  169. %     The options for METHOD are the same as in the 'dw2ddenoLVL'
  170. %     case.
  171. %
  172. %   ####################################  
  173. %   Discrete Wavelet Packet 1-D options:
  174. %   #################################### 
  175. %    Compression using a global threshold:
  176. %    -------------------------------------
  177. %    X is the signal to be compressed and WPT is the wavelet 
  178. %    packet decomposition structure of the signal to be compressed.
  179. %     THR = WTHRMNGR('wp1dcompGBL','bal_sn',WPT)
  180. %     THR = WTHRMNGR('wp1dcompGBL','rem_n0',X)
  181. %
  182. %    De-noising using a global threshold:
  183. %    ------------------------------------
  184. %    WPT is the wavelet packet decomposition structure of the signal
  185. %    to be de-noised.
  186. %     THR = WTHRMNGR('wp1ddenoGBL','sqtwologuwn',WPT)
  187. %     THR = WTHRMNGR('wp1ddenoGBL','sqtwologswn',WPT)
  188. %     THR = WTHRMNGR('wp1ddenoGBL','bal_sn',WPT)
  189. %
  190. %     THR = WTHRMNGR('wp1ddenoGBL','penalhi',WPT)
  191. %            see WPBMPEN with ALFA = 6.25
  192. %     THR = WTHRMNGR('wp1ddenoGBL','penalme',WPT)
  193. %            see WPBMPEN with ALFA = 2
  194. %     THR = WTHRMNGR('wp1ddenoGBL','penallo',WPT)
  195. %            see WPBMPEN with ALFA = 1.5
  196. %
  197. %   ####################################  
  198. %   Discrete Wavelet Packet 2-D options:
  199. %   #################################### 
  200. %    Compression using a global threshold:
  201. %    -------------------------------------
  202. %    X is the image to be compressed and WPT is the wavelet 
  203. %    packet decomposition structure of the image to be compressed.
  204. %     THR = WTHRMNGR('wp2dcompGBL','bal_sn',WPT)
  205. %     THR = WTHRMNGR('wp2dcompGBL','rem_n0',X)
  206. %     THR = WTHRMNGR('wp2dcompGBL','sqrtbal_sn',WPT)
  207. %
  208. %    De-noising using a global threshold:
  209. %    ------------------------------------
  210. %    WPT is the wavelet packet decomposition structure of the image
  211. %    to be de-noised.
  212. %     THR = WTHRMNGR('wp2ddenoGBL','sqtwologuwn',WPT)
  213. %     THR = WTHRMNGR('wp2ddenoGBL','sqtwologswn',WPT)
  214. %     THR = WTHRMNGR('wp2ddenoGBL','sqrtbal_sn',WPT)
  215. %
  216. %     THR = WTHRMNGR('wp2ddenoGBL','penalhi',WPT)
  217. %            see WPBMPEN with ALFA = 6.25
  218. %     THR = WTHRMNGR('wp2ddenoGBL','penalme',WPT)
  219. %            see WPBMPEN with ALFA = 2
  220. %     THR = WTHRMNGR('wp2ddenoGBL','penallo',WPT)
  221. %            see WPBMPEN with ALFA = 1.5
  222. %
  223. %   See also THSELECT, WBMPEN, WDCBM, WDCBM2, WDEN, WDENCMP,  
  224. %            WNOISEST, WPBMPEN, WPDENCMP.
  225. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 21-Oct-98.
  226. %   Last Revision: 26-Oct-1999.
  227. %   Copyright 1995-2002 The MathWorks, Inc.
  228. %   $Revision: 1.7 $  $Date: 2002/04/14 19:49:35 $
  229. meth = varargin{1};
  230. switch option
  231.    case {'dw1dcompGBL','dw1dcompLVL','dw1ddenoLVL','dw1ddenoDEN'} ,
  232.    case {'dw2dcompGBL','dw2dcompLVL','dw2ddenoLVL'} ,
  233.    case {'wp1dcompGBL','wp2dcompGBL'} ,
  234.    case {'wp1ddenoGBL','wp2ddenoGBL'} ,
  235.      switch meth
  236.        case 'sqtwologswn' , meth = 'sqtwolog'; scal = 'sln';
  237.        case 'sqtwologuwn' , meth = 'sqtwolog'; scal = 'one';
  238.      end
  239.    case 'sw1ddenoLVL' ,
  240.    case 'sw2ddenoLVL' ,
  241.    otherwise ,  errargt(mfilename,'invalid option','msg'); error('*');
  242. end
  243. flgTYPE = option(1:2);
  244. flgDIM  = str2num(option(3));
  245. flgTOOL = option(5:8);
  246. flgMODE = option(9:11);
  247. if ~isequal(meth,'rem_n0')
  248.     switch option
  249.        case {'dw1dcompGBL','dw1dcompLVL','dw1ddenoLVL','dw1ddenoDEN'}
  250.          level = length(varargin{3})-2;
  251.        case {'dw2dcompGBL','dw2dcompLVL','dw2ddenoLVL'}
  252.          level = size(varargin{3},1)-2;
  253.        case {'wp1dcompGBL','wp1ddenoGBL','wp2dcompGBL','wp2ddenoGBL'}
  254.          level = treedpth(varargin{2});
  255.        case 'sw1ddenoLVL' , level = size(varargin{2},1)-1;
  256.        case 'sw2ddenoLVL' , level = (size(varargin{2},3)-1)/3;
  257.     end
  258. else
  259.    if length(varargin)>2 , level = varargin{3}; end
  260. end
  261. switch option
  262.    case 'sw1ddenoLVL'
  263.        tmp = varargin{2};
  264.        varargin{4} = varargin{3};
  265.        varargin{2} = [];
  266.        varargin{3} = size(tmp,2);
  267.        for k=1:level
  268.            cfs  = tmp(k,1:2^k:end);
  269.            varargin{2} = [cfs , varargin{2}];
  270.            varargin{3} = [length(cfs) , varargin{3}];
  271.        end
  272.        cfs = tmp(level+1,1:2^level:end);
  273.        varargin{2} = [cfs , varargin{2}];
  274.        varargin{3} = [length(cfs) , varargin{3}];
  275.    case 'sw2ddenoLVL'
  276.        tmp = varargin{2};
  277.        varargin{4} = varargin{3};
  278.        varargin{2} = [];
  279.        varargin{3} = size(tmp(:,:,1));
  280.        for k=1:level
  281.            cfs  = tmp(1:2^k:end,1:2^k:end,3*k);
  282.            varargin{2} = [cfs(:)' , varargin{2}];
  283.            cfs  = tmp(1:2^k:end,1:2^k:end,2*k);
  284.            varargin{2} = [cfs(:)' , varargin{2}];
  285.            cfs  = tmp(1:2^k:end,1:2^k:end,1*k);
  286.            varargin{2} = [cfs(:)' , varargin{2}];
  287.            varargin{3} = [size(cfs) ; varargin{3}];
  288.        end
  289.        cfs = tmp(1:2^level:end,1:2^level:end,end);
  290.        varargin{2} = [cfs(:)' , varargin{2}];
  291.        varargin{3} = [size(cfs) ; varargin{3}];
  292. end
  293. switch flgTOOL
  294.   %============================= COMPRESSION ==============================%
  295.   case 'comp'
  296.     switch flgMODE
  297.       case 'GBL'
  298.         switch meth
  299.            case 'rem_n0'
  300.              % sig = varargin{2};
  301.              %----------------------
  302.              varargout{1} = remNearZero(flgTOOL,flgTYPE,varargin{2});
  303.            case {'bal_sn','sqrtbal_sn'}
  304.              % coefs = varargin{2};
  305.              % sizes = varargin{3};
  306.              %------------------------------
  307.              % tree or wptree = varargin{2};
  308.              % data = varargin{3};
  309.              %-------------------------------
  310.              if length(varargin)<3 , varargin{3} = []; end 
  311.              [valTHR,maxTHR,thresVALUES,rl2SCR,n0SCR] = ...
  312.                    balanceSparsityNorm(meth,flgTYPE,varargin{2:3});
  313.              varargout = {valTHR,maxTHR,thresVALUES,rl2SCR,n0SCR};
  314.         end
  315.       case 'LVL'
  316.         switch meth
  317.            case {'scarcehi','scarceme','scarcelo'}
  318.              % coefs = varargin{2};
  319.              % sizes = varargin{3};
  320.              % alfa  = varargin{4};
  321.              %----------------------
  322.              varargout{1} = scarceStrategies(meth,flgDIM,varargin{2:4});
  323.            case 'rem_n0'
  324.              % sig = varargin{2};
  325.              % lev = varargin{3};
  326.              %-------------------
  327.              valTHR = remNearZero(flgTOOL,flgTYPE,varargin{2});
  328.              varargout{1} = expandTHR(valTHR,flgDIM,level);
  329.            case {'bal_sn','sqrtbal_sn'}
  330.              % coefs = varargin{2};
  331.              % sizes = varargin{3};
  332.              %----------------------
  333.              valTHR = balanceSparsityNorm(meth,flgTYPE,varargin{2:3});
  334.              varargout{1} = expandTHR(valTHR,flgDIM,level);
  335.        end
  336.     end
  337.   %========================================================================%
  338.  
  339.   %============================= DE-NOISING ===============================%
  340.   case 'deno'
  341.     switch flgMODE
  342.       case 'GBL'        % WP only.
  343.         % tree or wptree = varargin{2};
  344.         % data = varargin{3};
  345.         %-----------------------------
  346.         if length(varargin)==2 , varargin{3} = []; end
  347.         switch meth
  348.            case 'sqtwolog'
  349.              [valTHR,maxTHR,cfs] = fixedFormWP(flgDIM,varargin{2:3},scal);
  350.              varargout = {valTHR,maxTHR,cfs};
  351.            case {'bal_sn','sqrtbal_sn'}
  352.              [valTHR,maxTHR,thresVALUES] = ...
  353.                    balanceSparsityNorm(meth,flgTYPE,varargin{2:3});
  354.              varargout = {valTHR,maxTHR,thresVALUES};
  355.            case {'penalhi','penalme','penallo'}
  356.              [valTHR,maxTHR,cfs] = WPpenalStrategies(meth,flgDIM,varargin{2:3});
  357.              varargout = {valTHR,maxTHR,cfs};
  358.         end
  359.       case 'LVL'
  360.         switch meth
  361.            case 'sqtwolog', % DW & SW only.
  362.              switch flgDIM
  363.                 case 1 , varargout{1} = fixedForm1D(varargin{2:4});
  364.                 case 2 , varargout{1} = fixedForm2D(varargin{2:4},level);
  365.              end
  366.            case {'rigrsure','heursure','minimaxi'}  % DW1D & SW1D only.
  367.              % coefs = varargin{2};
  368.              % sizes = varargin{3};
  369.              % scal  = varargin{4};
  370.              %----------------------
  371.              coefs = detcoef(varargin{2:3},'all');
  372.              sigma = sigmaHAT(varargin{4},coefs);
  373.              varargout{1} = getTHR(meth,sigma,coefs);
  374.            case {'penalhi','penalme','penallo'}
  375.              % coefs = varargin{2};
  376.              % sizes = varargin{3};
  377.              % alfa  = varargin{4};
  378.              %----------------------
  379.              valTHR = penalStrategies(meth,flgDIM,varargin{2:4});
  380.              varargout{1} = expandTHR(valTHR,flgDIM,level);
  381.            case {'scarcehi','scarceme','scarcelo'}
  382.              % coefs = varargin{2};
  383.              % sizes = varargin{3};
  384.              % alfa  = varargin{4};
  385.              %----------------------
  386.              varargout{1} = scarceStrategies(meth,flgDIM,varargin{2:4});
  387.            case {'bal_sn','sqrtbal_sn'}
  388.              % coefs = varargin{2};
  389.              % sizes = varargin{3};
  390.              %----------------------
  391.              valTHR = balanceSparsityNorm(meth,flgTYPE,varargin{2:3});
  392.              varargout{1} = expandTHR(valTHR,flgDIM,level);
  393.         end
  394.       case 'DEN'  % estimation de densite
  395.         switch meth
  396.            case 'globalth', 
  397.              % coefs = varargin{2};
  398.              % sizes = varargin{3};
  399.              %----------------------
  400.              varargout{1} = GlobDens(varargin{2:3});
  401.            case {'bylevth1'}
  402.              % coefs = varargin{2};
  403.              % sizes = varargin{3};
  404.              %----------------------
  405.              varargout{1} = LvldDens(varargin{2:3},1);
  406.              
  407.            case {'bylevth2'}
  408.              % coefs = varargin{2};
  409.              % sizes = varargin{3};
  410.              %----------------------
  411.              varargout{1} = LvldDens(varargin{2:3},2);
  412.            case {'bylevsth'}
  413.              % coefs = varargin{2};
  414.              % sizes = varargin{3};
  415.              % alfa  = varargin{4};
  416.              %----------------------
  417.              varargout{1} = LvdsDens(varargin{2:4});
  418.         end
  419.     end
  420.   %========================================================================%
  421. end
  422. %=============================================================================%
  423. % INTERNAL FUNCTIONS
  424. %=============================================================================%
  425. %-----------------------------------------------------------------------------%
  426. function [valTHR,maxTHR,thresVALUES,rl2SCR,n0SCR] = ...
  427.                          balanceSparsityNorm(meth,flgTYPE,A,B)
  428. switch flgTYPE
  429.   case {'dw','sw'}
  430.     % coefs = A;
  431.     % sizes = B;
  432.     %-----------
  433.     [thresVALUES,rl2SCR,n0SCR,imin] = wcmpscr(A,B);
  434.  case 'wp'
  435.     % WP_Tree = varargin{2};
  436.     % WP_Data = varargin{3};
  437.     %-----------------------
  438.     if isa(A,'wptree')
  439.         [thresVALUES,rl2SCR,n0SCR,imin] = wpcmpscr(A,A);
  440.     else
  441.         [thresVALUES,rl2SCR,n0SCR,imin] = wpcmpscr(A,B);
  442.     end
  443. end
  444. valTHR = thresVALUES(imin);
  445. maxTHR = thresVALUES(end);
  446. if isequal(meth,'sqrtbal_sn') , valTHR = min(sqrt(valTHR),maxTHR); end
  447. %-----------------------------------------------------------------------------%
  448. function valTHR = remNearZero(flgTOOL,flgTYPE,X)
  449. switch flgTOOL
  450.   case 'comp' , argTOOL = 'cmp';
  451.   case 'deno' , argTOOL = 'den';
  452. end
  453. switch flgTYPE
  454.   case 'dw' , argTYPE = 'wv';
  455.   case 'wp' , argTYPE = 'wp';
  456. end
  457. valTHR = ddencmp(argTOOL,argTYPE,X);
  458. %-----------------------------------------------------------------------------%
  459. function valTHR = scarceStrategies(meth,flgDIM,coefs,sizes,alfa)
  460. switch flgDIM
  461.   case 1 , M = [1 , 1.5 ,   2] * sizes(1);
  462.   case 2 , M = 4 * [1 , 4/3 , 8/3] * prod(sizes(1,:));
  463. end
  464. switch meth
  465.     case 'scarcehi' , M = M(1);
  466.     case 'scarceme' , M = M(2);
  467.     case 'scarcelo' , M = M(3);
  468. end
  469. if flgDIM==1
  470.     valTHR = wdcbm(coefs,sizes,alfa,M);
  471. else
  472.     valTHR = wdcbm2(coefs,sizes,alfa,M);
  473. end
  474. %-----------------------------------------------------------------------------%
  475. function valTHR = penalStrategies(meth,flgDIM,coefs,sizes,sliBMVal)
  476. switch flgDIM
  477.   case 1
  478.     sigma = wnoisest(coefs,sizes,1);
  479.   case 2 
  480.     det   = detcoef2('compact',coefs,sizes,1);
  481.     sigma = wnoisest(det);
  482. end
  483. switch meth
  484.   case 'penalhi' , alfa = 5*(3*sliBMVal+1)/8;
  485.   case 'penalme' , alfa = (sliBMVal+5)/4;
  486.   case 'penallo' , alfa = (sliBMVal+3)/4;
  487. end
  488. valTHR = wbmpen(coefs,sizes,sigma,alfa);
  489. %-----------------------------------------------------------------------------%
  490. function [valTHR,maxTHR,cfs] = WPpenalStrategies(meth,flgDIM,wpt,wpd)
  491. sliBMVal = 3;
  492. switch meth
  493.   case 'penalhi' , alfa = 5*(3*sliBMVal+1)/8;
  494.   case 'penalme' , alfa = (sliBMVal+5)/4;
  495.   case 'penallo' , alfa = (sliBMVal+3)/4;
  496. end
  497. % Old Version
  498. %-------------
  499. if ~isa(wpt,'wptree') , wpt = convv1v2(wpt,wpd); end
  500. % Compute sigma.
  501. %---------------
  502. depth = treedpth(wpt);
  503. if depth==0 , valTHR = 0; return; end
  504. switch flgDIM
  505.   case 1
  506.     cD1 = wpcoef(wpt,[1,1]);
  507.     sigma = wnoisest(cD1);
  508.   case 2
  509.     cH1 = wpcoef(wpt,[1,1]);
  510.     cV1 = wpcoef(wpt,[1,2]);
  511.     cD1 = wpcoef(wpt,[1,3]);
  512.     sigma = wnoisest([cH1(:)',cV1(:)',cD1(:)']);
  513. end
  514. if isa(wpt,'wptree')
  515.     cfs = read(wpt,'allcfs');
  516. end
  517. valTHR = wpbmpen(wpt,sigma,alfa);
  518. maxTHR = max(abs(cfs));
  519. valTHR = min(valTHR,maxTHR);
  520. %-----------------------------------------------------------------------------%
  521. function valTHR = expandTHR(valTHR,flgDIM,nbLEV)
  522. switch flgDIM
  523.    case 1 , nbDIR = 1;
  524.    case 2 , nbDIR = 3;
  525. end
  526. valTHR = valTHR*ones(nbDIR,nbLEV);
  527. %-----------------------------------------------------------------------------%
  528. function s = sigmaHAT(scal,coefs);
  529. level = length(coefs);
  530. switch scal
  531.   case 'one' , s = ones(1,level);
  532.   case 'sln' , s = ones(1,level)*wnoisest(coefs{1});
  533.   case 'mln' , s = wnoisest(coefs);
  534. end
  535. %-----------------------------------------------------------------------------%
  536. function thr = getTHR(meth,s,coefs)
  537. switch meth
  538.     case 'minimaxi'
  539.       nbcfs = 0;
  540.       for k=1:length(s) , nbcfs = nbcfs+length(coefs{k}); end
  541.       if nbcfs <= 32
  542.           thr = 0*s;
  543.       else
  544.           thr = (0.3936 + 0.1829*(log(nbcfs)/log(2)))*s;
  545.       end
  546.     case {'rigrsure','heursure'}
  547.       thr = zeros(size(s));
  548.       for k=1:length(s)
  549.           mk = max(coefs{k});
  550.           if (mk<sqrt(eps)) | (s(k)<sqrt(eps)*mk)
  551.               thr(k) = 0;
  552.           else
  553.               thr(k) = sureTHR(meth,coefs{k}/s(k));
  554.           end
  555.       end
  556.       thr = thr.*s;
  557. end
  558. %-----------------------------------------------------------------------------%
  559. function thr = sureTHR(meth,x)
  560. x = x(:)';
  561. n = length(x);
  562. switch meth
  563.   case 'rigrsure'
  564.     sx2 = sort(abs(x)).^2;
  565.     risks = (n-(2*(1:n))+(cumsum(sx2)+(n-1:-1:0).*sx2))/n;
  566.     [risk,best] = min(risks);
  567.     thr = sqrt(sx2(best));
  568.   case 'heursure'
  569.     hthr = sqrt(2*log(n));
  570.     eta = (norm(x).^2-n)/n;
  571.     crit = (log(n)/log(2))^(1.5)/sqrt(n);
  572.     if eta < crit
  573.         thr = hthr;
  574.     else
  575.         thr = min(sureTHR('rigrsure',x),hthr);
  576.     end
  577. end
  578. %-----------------------------------------------------------------------------%
  579. function valTHR = fixedForm1D(coefs,sizes,scal)
  580. coefs  = detcoef(coefs,sizes,'all');
  581. sigma  = sigmaHAT(scal,coefs);
  582. nbcfs = 0;
  583. for k=1:length(coefs)
  584.     nbcfs = nbcfs+length(coefs{k});
  585. end
  586. valTHR = sqrt(2*log(nbcfs))*sigma;
  587. %-----------------------------------------------------------------------------%
  588. function valTHR = fixedForm2D(coefs,sizes,scal,level)
  589. strDET = ['h','d','v'];
  590. s = ones(3,level);
  591. switch scal
  592.   case 'one'
  593.   case 'sln'
  594.     det  = detcoef2('compact',coefs,sizes,1);
  595.     s = wnoisest(det) * s;  
  596.   case 'mln'
  597.     for k = 1:level
  598.       det = detcoef2('compact',coefs,sizes,k);
  599.       s(:,k) = wnoisest(det) * ones(3,1);
  600.     end
  601. end
  602. for d = 1:3
  603.   for k = 1:level
  604.     det = detcoef2(strDET(d),coefs,sizes,k);
  605.     univTHR     = sqrt(2*log(prod(size(det))));
  606.     valTHR(d,k) = univTHR*s(d,k);
  607.   end
  608. end
  609. %-----------------------------------------------------------------------------%
  610. function [valTHR,maxTHR,cfs] = fixedFormWP(flgDIM,A,B,scal)
  611. order = treeord(A);
  612. nodes = [2:order]'; % nodes for details of level 1.
  613. det = [];
  614. if isa(A,'wptree')
  615.    for k =1:length(nodes)
  616.        tmp = wpcoef(A,nodes(k));
  617.        det = [det , tmp(:)'];
  618.    end
  619.    cfs = read(A,'allcfs');
  620. else
  621.    for k =1:length(nodes)
  622.        tmp = wpcoef(A,B,nodes(k));
  623.        det = [det , tmp(:)'];
  624.    end
  625.    cfs = wdatamgr('rallcfs',B);
  626. end
  627. univTHR = sqrt(2*log(length(det)));
  628. switch scal
  629.   case 'one' , s = 1;
  630.   case 'sln' , s = wnoisest(det);
  631. end
  632. valTHR = s*univTHR;
  633. maxTHR = max(abs(cfs));
  634. valTHR = min(valTHR,maxTHR);
  635. %-----------------------------------------------------------------------------%
  636. function valTHR = GlobDens(coefs,sizes)
  637. n = sizes(end);
  638. J = size(sizes,2)-2;
  639. coefs = coefs(sizes(1)+1:end);
  640. valTHR = max(abs(coefs))*log(n)/sqrt(n);
  641. valTHR = expandTHR(valTHR,1,J);
  642. %-----------------------------------------------------------------------------%
  643. function valTHR = LvldDens(coefs,sizes,flag)
  644. n = sizes(end);
  645. J = size(sizes,2)-2;
  646. valTHR = zeros(1,J);
  647. for j=1:J
  648.     d = detcoef(coefs,sizes,j);
  649.     switch flag
  650.         case 1 , valTHR(j) = 0.4*max(abs(d));
  651.         case 2 , valTHR(j) = 0.8*max(abs(d));
  652.     end
  653. end
  654. %-----------------------------------------------------------------------------%
  655. function valTHR = LvdsDens(coefs,sizes,alfa)
  656. n = sizes(end);
  657. J = size(sizes,2)-2;
  658. valTHR = zeros(1,J);
  659. for j=1:J
  660.     d = detcoef(coefs,sizes,j);
  661.     valTHR(j) = max(abs(d));
  662. end
  663. valTHR = valTHR * (alfa/(5-sqrt(eps)));
  664. %-----------------------------------------------------------------------------%
  665. function medad = med_ad(x)
  666. medad = median(abs(x-median(x)));
  667. %-----------------------------------------------------------------------------%
  668. %=============================================================================%