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

波变换

开发平台:

Matlab

  1. function varargout = cbthrw1d(option,in2,in3,in4,in5,in6)
  2. %CBTHRW1D Callbacks for threshold utilities 1-D.
  3. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 23-May-97.
  4. %   Last Revision: 18-Dec-2003.
  5. %   Copyright 1995-2004 The MathWorks, Inc.
  6. %   $Revision: 1.10.4.2 $  $Date: 2004/03/15 22:39:45 $
  7. % MB1 of stored values.
  8. %----------------------
  9. n_membloc1   = 'ReturnTHR_Bloc';
  10. ind_ret_fig  = 1;
  11. ind_tog_thr  = 2;
  12. ind_status   = 3;
  13. nb1_stored   = 3;
  14. % Same bloc in utthrw1d.
  15. %-----------------------
  16. n_memblocTHR   = 'MB_ThrStruct';
  17. ind_thr_struct = 1;
  18. ind_int_thr    = 2;
  19. % Tag property.
  20. %--------------
  21. tag_lineH_up   = 'LH_u';
  22. tag_lineH_down = 'LH_d';
  23. tag_lineV      = 'LV';
  24. % First test DYNVTOOL Select Option.
  25. %----------------------------------
  26. if ~ischar(option)
  27.     varargout = {[],[]};
  28.     x   = option;
  29.     y   = in2;
  30.     axe = in3;
  31.     ok  = find(axe==in4);
  32.     if isempty(ok) , return; end
  33.     %-------------------------------
  34.     lines = findobj(axe,'type','line');
  35.     lHu   = findobj(lines,'tag',tag_lineH_up);
  36.     lHd   = findobj(lines,'tag',tag_lineH_down);
  37.     ll    = findobj(lines,'tag',tag_lineV);
  38.     NB_LV = length(ll);
  39.     tol   = 0.01;
  40.     xh    = get(lHu,'Xdata');
  41.     i_inf = max(find(xh<=x));
  42.     i_sup = min(find(xh>x));
  43.     if ~isequal(i_sup,i_inf+1) , return; end
  44.     yh = get(lHu,'Ydata');
  45.     [ecx,ii] = min([x-xh(i_inf),xh(i_sup)-x]);
  46.     xlim = get(axe,'Xlim');
  47.     dlim = xlim(2)-xlim(1);
  48.     ecx  = ecx/dlim;
  49.     fig = get(axe,'Parent');
  50.     if ecx>tol              % Create line
  51.         if NB_LV>=10 , return; end
  52.         xh = [xh(1:i_inf)  x          NaN  x          xh(i_sup:end)];
  53.         yh = [yh(1:i_inf)  yh(i_inf)  NaN  yh(i_inf)  yh(i_sup:end)];
  54.         set(lHu,'Xdata',xh,'Ydata',yh)
  55.         set(lHd,'Xdata',xh,'Ydata',-yh)
  56.         ylim = get(axe,'Ylim');
  57.         cbthrw1d('plotLV',[fig ; lHu ; lHd],[x x NaN; ylim NaN]);
  58.     else
  59.         if NB_LV==0
  60.             return
  61.         end
  62.         xval = get(ll,'Xdata');
  63.         if NB_LV>1
  64.             xval = cat(1,xval{:});
  65.         end
  66.         xval = xval(:,1);
  67.         if ii==1
  68.             i_suppress = [i_inf-2:i_inf];
  69.         else
  70.             i_suppress = [i_sup:i_sup+2];
  71.         end
  72.         ind_lv = find((abs(xval-x)/dlim)<tol);
  73.         if ~isempty(ind_lv)
  74.             lv = ll(ind_lv);
  75.             delete(lv);
  76.             drawnow
  77.         else
  78.             return
  79.         end
  80.         xh(i_suppress) = [];
  81.         ynew = (yh(i_suppress(1))+yh(i_suppress(3)))/2;
  82.         yh(i_suppress(1)-1) = ynew;
  83.         yh(i_suppress(3)+1) = ynew;
  84.         yh(i_suppress) = [];
  85.         set(lHu,'Xdata',xh,'Ydata',yh)
  86.         set(lHd,'Xdata',xh,'Ydata',-yh)
  87.     end
  88.     cbthrw1d('upd_thrStruct',fig,lHu);
  89.     pause(0.5)
  90.     return
  91. end
  92. switch option
  93.     case 'downH'
  94.         % in2 = [fig ; lin_max ; lin_min]
  95.         %     in2(4:6) =  [pop_int ; sli_lev ; edi_lev] (optional)
  96.         % in3 = +1 or -1
  97.         %---------------------------------------------------------
  98.         flag_HDL = (length(in2)>3);
  99.         axe = get(in2(2),'Parent');
  100.         if (axe~=gca) , axes(axe); drawnow discard; end;
  101.         fig   = in2(1);
  102.         p     = get(axe,'currentpoint');
  103.         xold  = get(in2(2),'Xdata');
  104.         i_inf = max(find(xold<p(1,1)));
  105.         i_sup = min(find(xold>p(1,1)));
  106.         if ~isequal(i_sup,i_inf+1) , return; end
  107.         calledFUN = wfigmngr('getWinPROP',fig,'calledFUN');
  108.         feval(calledFUN,'clear_GRAPHICS',fig);
  109.         if flag_HDL
  110.             num_int = fix(i_inf/3)+1;
  111.             val_pop = get(in2(4),'Value');
  112.             if num_int~=val_pop
  113.                 yold = get(in2(2),'Ydata');
  114.                 thr  = abs(yold(i_inf));
  115.                 set(in2(4),'Value',num_int)
  116.                 set(in2(5),'Value',thr);
  117.                 set(in2(6),'string',sprintf('%1.4g',thr));
  118.             end
  119.         end
  120.         set(in2(2:3),'Color','g');
  121.         drawnow
  122.         handles  = num2mstr(in2);
  123.         cba_move = [mfilename '(''moveH'',' handles ...
  124.                         ',' int2str(in3) ',' int2str(i_inf) ');'];
  125.         cba_up   = [mfilename '(''upH'',' handles ');'];
  126.         wtbxappdata('new',fig,'save_WindowButtonUpFcn',get(fig,'WindowButtonUpFcn'));
  127.         set(fig,'WindowButtonMotionFcn',cba_move,'WindowButtonUpFcn',cba_up);
  128.         setptr(fig,'uddrag');
  129.     case 'moveH'
  130.         % in2 = [fig ; lin_max ; lin_min]
  131.         %      in2(4:6) =  [pop_int ; sli_lev ; edi_lev] (optional)
  132.         % in3 = +1 or -1
  133.         % in4 = index point
  134.         %-----------------------------------------------------------
  135.         flag_HDL = (length(in2)>3);
  136.         lin_max  = in2(2);
  137.         axe = get(lin_max,'Parent'); 
  138.         p   = get(axe,'currentpoint');
  139.         new_thresh = p(1,2)*in3;
  140.         if flag_HDL
  141.             min_sli = get(in2(5),'Min');
  142.             max_sli = get(in2(5),'Max');
  143.             new_thresh = max([min_sli,min([new_thresh,max_sli])]);
  144.         else
  145.             lineUD = get(lin_max,'Userdata');
  146.             new_thresh = min([max([new_thresh,0]),lineUD.max]);
  147.         end
  148.         yold = get(lin_max,'Ydata');
  149.         if isequal(yold(in4),new_thresh) , return; end
  150.         ynew = yold;
  151.         ynew([in4 in4+1]) = [new_thresh new_thresh];
  152.         set(lin_max,'Ydata',ynew);
  153.         if new_thresh<sqrt(eps)
  154.             ynew([in4 in4+1]) = [NaN NaN];
  155.         end
  156.     
  157.         set(in2(3),'Ydata',-ynew);
  158.         if flag_HDL
  159.             set(in2(5),'Value',new_thresh);
  160.             set(in2(6),'string',sprintf('%1.4g',new_thresh));
  161.         end
  162.     case 'upH'
  163.         % in2 = [fig ; lin_max ; lin_min]
  164.         %      in2(4:6) =  [pop_int ; sli_lev ; edi_lev] (optional)
  165.         %----------------------------------------------------------- 
  166.         fig = in2(1);
  167.         lHu = in2(2);
  168.         lHd = in2(3);
  169.         save_WindowButtonUpFcn = wtbxappdata('del',fig,'save_WindowButtonUpFcn');
  170.         set(fig,'WindowButtonMotionFcn','wtmotion', ...
  171.             'WindowButtonUpFcn',save_WindowButtonUpFcn);
  172.         cbthrw1d('upd_thrStruct',fig,lHu);
  173.         figDef = get(fig,'Default');
  174.         try
  175.           linCol  = figDef.defaultAxesColorOrder(1,:);
  176.         catch
  177.           linCol  = figDef.axesColorOrder(1,:);
  178.         end
  179.         set([lHu;lHd],'Color',linCol);
  180.         drawnow;
  181.         utthrw1d('show_LVL_perfos',fig);
  182.         setptr(fig,'arrow');
  183.     case 'plotLH'
  184.         % in2 = ax_hdl or...
  185.         % in2 = [pop_ind ; sli_lev ; edi_lev ; ax_hdl] (optional)
  186.         % in3 = xHOR
  187.         % in4 = yHOR
  188.         % in5 = ind_lev
  189.         % in6 = max(abs(sig))
  190.         %--------------------
  191.         flg_HDL = (length(in2)>1);
  192.         if flg_HDL==0 , ax_hdl = in2(1); else , ax_hdl = in2(4); end
  193.         xHOR    = in3;
  194.         yHOR    = in4;
  195.         ind_lev = in5;  
  196.         fig     = get(ax_hdl,'Parent');
  197.         figDef  = get(fig,'Default');
  198.         try
  199.           linCol  = figDef.defaultAxesColorOrder(1,:);
  200.         catch
  201.           linCol  = figDef.axesColorOrder(1,:);
  202.         end
  203.         lineUD.lev = ind_lev;
  204.         lineUD.hdl = in2;
  205.         lineUD.max = in6;
  206.         vis = get(ax_hdl,'Visible');
  207.         commonProp = {...
  208.             'Parent',ax_hdl,   ...
  209.             'Visible',vis,     ...
  210.             'Xdata',xHOR,      ...
  211.             'Linestyle','--',  ...
  212.             'linewidth',2,     ...
  213.             'Color',linCol,    ...
  214.             'EraseMode','xor', ...
  215.             'Userdata',lineUD  ...
  216.             };        
  217.         lHu = line(commonProp{:},'Ydata',yHOR,'Tag',tag_lineH_up);
  218.         ind = find(abs(yHOR)<sqrt(eps));
  219.         if ~isempty(ind) , yHOR(ind) = NaN; end
  220.         lHd = line(commonProp{:},'Ydata',-yHOR,'Tag',tag_lineH_down);
  221.         handles = [fig ;lHu ;lHd];
  222.         if flg_HDL , handles = [handles ; in2(1:3)]; end
  223.         hdl_str = num2mstr(handles);
  224.         cba_thr_max = [mfilename '(''downH'',' hdl_str ',' int2str(+1) ');'];
  225.         cba_thr_min = [mfilename '(''downH'',' hdl_str ',' int2str(-1) ');'];
  226.         set(lHu,'ButtonDownFcn',cba_thr_max)
  227.         set(lHd,'ButtonDownFcn',cba_thr_min)
  228.         varargout = {lHu,lHd};
  229.         setappdata(lHu,'selectPointer','H')
  230.         setappdata(lHd,'selectPointer','H')
  231.     case 'downV'
  232.         % in2 = [fig ; lin_ver ; lin_max ; lin_min]
  233.         %------------------------------------------
  234.         mousefrm(0,'arrow');
  235.         lin_ver = in2(2); 
  236.         axe = get(lin_ver,'Parent');
  237.         if (axe~=gca), axes(axe); drawnow discard; end;
  238.         fig   = in2(1);
  239.         p     = get(axe,'currentpoint');
  240.         xv    = get(lin_ver,'Xdata');
  241.         xv    = xv(1);
  242.         xh    = get(in2(3),'Xdata');
  243.         i_inf = min(find(xh==xv));
  244.         i_sup = max(find(xh==xv));
  245.         if ~isequal(i_sup,i_inf+2) , return; end
  246.         calledFUN = wfigmngr('getWinPROP',fig,'calledFUN');
  247.         feval(calledFUN,'clear_GRAPHICS',fig);
  248.         set(lin_ver,'Color','g');
  249.         drawnow
  250.         % Getting memory blocks.
  251.         %-----------------------
  252.         handles  = num2mstr([in2]);
  253.         cba_move = [mfilename '(''moveV'',' handles ',' ...
  254.                         num2mstr([i_inf i_sup]) ');'];
  255.         cba_up   = [mfilename '(''upV'',' handles ');'];
  256.         wtbxappdata('new',fig,'save_WindowButtonUpFcn',get(fig,'WindowButtonUpFcn'));
  257.         set(fig,'WindowButtonMotionFcn',cba_move,'WindowButtonUpFcn',cba_up);
  258.         setptr(fig,'lrdrag');
  259.     case 'moveV'
  260.         % in2 = [fig ; lin_ver ; lin_max ; lin_min]
  261.         % in3 = point indices
  262.         %------------------------------------------
  263.         lin_ver = in2(2);
  264.         if ~ishandle(lin_ver) , return; end    
  265.         axe = get(lin_ver,'Parent');
  266.         p   = get(axe,'currentpoint');
  267.         new_thresh = p(1,1);
  268.         xold = get(lin_ver,'Xdata');
  269.         xnew = [new_thresh new_thresh];
  270.         if isequal(xold,xnew) , return; end
  271.         xh = get(in2(3),'Xdata');
  272.         if (new_thresh<=xh(in3(1)-1)+sqrt(eps)) | ...
  273.            (new_thresh>=xh(in3(2)+1)-sqrt(eps))
  274.            return
  275.         end    
  276.         xh(in3) = xnew;
  277.         set(lin_ver,'Xdata',xnew);
  278.         set(in2(3),'Xdata',xh);
  279.         set(in2(4),'Xdata',xh);
  280.     case 'upV'
  281.         % in2 = [fig ; lin_ver ; lin_max ; lin_min]
  282.         %------------------------------------------- 
  283.         fig = in2(1);
  284.         lv  = in2(2);
  285.         lHu = in2(3);
  286.         save_WindowButtonUpFcn = wtbxappdata('del',fig,'save_WindowButtonUpFcn');
  287.         set(fig,'WindowButtonMotionFcn','wtmotion',...
  288. 'WindowButtonUpFcn',save_WindowButtonUpFcn);
  289.         if ~ishandle(lv) , vide = 2; return; end
  290.         cbthrw1d('upd_thrStruct',fig,lHu);
  291.         set(lv,'Color','r');
  292.         drawnow;
  293.         utthrw1d('show_LVL_perfos',fig);
  294.         setptr(fig,'arrow');
  295.     case 'plotLV'
  296.         % in2 = [fig ; lin_max ; lin_min]
  297.         % in3 = [xHOR ; yHOR]
  298.         % in4 = yVMin (optional)
  299.         %--------------------------------
  300.         fig  = in2(1);
  301.         lHu  = in2(2);
  302.         lHd  = in2(3);
  303.         xHOR = in3(1,:);
  304.         yHOR = in3(2,:);
  305.         if nargin<4
  306.             yVMin   = 0;
  307.         else
  308.             yVMin   = in4;
  309.         end
  310.         ax_hdl = get(lHu,'Parent');
  311.         vis    = get(ax_hdl,'Visible');
  312.         NB_int = fix(length(xHOR)/3)+ 1;
  313.         for k=1:NB_int-1;
  314.             x    = xHOR(3*k-1);
  315.             xVER = [x x];
  316.             y    = max(abs([yHOR(3*k-1),yVMin]));
  317.             yVER = [-y y];
  318.             lv   = line(...
  319.                         'Parent',ax_hdl,   ...
  320.                         'Visible',vis,     ...
  321.                         'Xdata',xVER,      ...
  322.                         'Ydata',yVER,      ...
  323.                         'Linestyle','--',  ...
  324.                         'Markersize',2,    ...
  325.                         'linewidth',2,     ...
  326.                         'Color','r',       ...
  327.                         'EraseMode','xor', ...
  328.                         'Tag',tag_lineV    ...
  329.                         );
  330.             hdl_str = num2mstr([fig ; lv ; lHu ; lHd]);
  331.             cba_LV  = [mfilename '(''downV'',' hdl_str ');'];
  332.             set(lv,'ButtonDownFcn',cba_LV)
  333.             setappdata(lv,'selectPointer','V')
  334.         end
  335.     case 'upd_thrStruct'
  336.         % in2 = fig
  337.         % in3 = lHu
  338.         %-----------
  339.         fig     = in2;
  340.         lHu     = in3;
  341.         x       = get(lHu,'Xdata');
  342.         y       = get(lHu,'Ydata');
  343.         lineUD  = get(lHu,'Userdata');
  344.         level   = lineUD.lev;
  345.         handles = lineUD.hdl;
  346.         thrStruct = wmemtool('rmb',fig,n_memblocTHR,ind_thr_struct);
  347.         thrParams = getparam(x,y);
  348.         thrStruct(level).thrParams = thrParams;
  349.         if length(handles)>1
  350.             pop_int = handles(1);
  351.             nb_int  = size(thrParams,1);
  352.             nb_val  = size(get(pop_int,'String'),1);
  353.             if nb_int~=nb_val
  354.                 set(pop_int,'String',int2str([1:nb_int]'),'Value',1)
  355.                 thr = thrParams(1,3);
  356.                 set(handles(2),'String','Value',thr);           % Slider
  357.                 set(handles(3),'String',sprintf('%1.4g',thr));  % Edit
  358.             end
  359.         end
  360.         wmemtool('wmb',fig,n_memblocTHR,ind_thr_struct,thrStruct);
  361.         hmb = wmemtool('hmb',fig,n_membloc1);
  362.         if ~isempty(hmb) , wmemtool('wmb',fig,n_membloc1,ind_status,1); end
  363.     otherwise
  364.         errargt(mfilename,'Unknown Option','msg');
  365.         error('*');
  366. end
  367. %--------------------------------------%
  368. function param = getparam(x,y)
  369. lx    = length(x);
  370. x_beg = x(1:3:lx);
  371. x_end = x(2:3:lx);
  372. y     = y(1:3:lx);
  373. param = [x_beg(:) , x_end(:) , y(:)];
  374. %--------------------------------------%