www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/cbthrw1d.m
function varargout = cbthrw1d(option,in2,in3,in4,in5,in6) %CBTHRW1D Callbacks for threshold utilities 1-D. % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 23-May-97. % Last Revision 06-Aug-2013. % Copyright 1995-2015 The MathWorks, Inc. % $Revision: 1.10.4.12 $ $Date: 2013/08/23 23:44:51 $ % MB1 of stored values. %---------------------- n_membloc1 = 'ReturnTHR_Bloc'; % ind_ret_fig = 1; % ind_tog_thr = 2; ind_status = 3; % nb1_stored = 3; % Same bloc in utthrw1d. %----------------------- n_memblocTHR = 'MB_ThrStruct'; ind_thr_struct = 1; % ind_int_thr = 2; % Tag property. %-------------- tag_lineH_up = 'LH_u'; tag_lineH_down = 'LH_d'; tag_lineV = 'LV'; % First test DYNVTOOL Select Option. %---------------------------------- if ~ischar(option) varargout = {[],[]}; x = option; % y = in2; axe = in3; ok = find(axe==in4, 1); if isempty(ok) , return; end %------------------------------- lines = findobj(axe,'Type','line'); lHu = findobj(lines,'Tag',tag_lineH_up); lHd = findobj(lines,'Tag',tag_lineH_down); ll = findobj(lines,'Tag',tag_lineV); NB_LV = length(ll); tol = 0.01; xh = get(lHu,'XData'); i_inf = find(xh<=x,1,'last' ); i_sup = find(xh>x,1); if ~isequal(i_sup,i_inf+1) , return; end yh = get(lHu,'YData'); [ecx,ii] = min([x-xh(i_inf),xh(i_sup)-x]); xlim = get(axe,'XLim'); dlim = xlim(2)-xlim(1); ecx = ecx/dlim; fig = get(axe,'Parent'); if ecx>tol % Create line if NB_LV>=10 , return; end xh = [xh(1:i_inf) x NaN x xh(i_sup:end)]; yh = [yh(1:i_inf) yh(i_inf) NaN yh(i_inf) yh(i_sup:end)]; set(lHu,'XData',xh,'YData',yh) set(lHd,'XData',xh,'YData',-yh) ylim = get(axe,'YLim'); cbthrw1d('plotLV',[fig ; lHu ; lHd],[x x NaN; ylim NaN]); else if NB_LV==0 return end xval = get(ll,'XData'); if NB_LV>1 xval = cat(1,xval{:}); end xval = xval(:,1); if ii==1 i_suppress = i_inf-2:i_inf; else i_suppress = i_sup:i_sup+2; end ind_lv = find((abs(xval-x)/dlim)<tol); if ~isempty(ind_lv) lv = ll(ind_lv); delete(lv); drawnow else return end xh(i_suppress) = []; ynew = (yh(i_suppress(1))+yh(i_suppress(3)))/2; yh(i_suppress(1)-1) = ynew; yh(i_suppress(3)+1) = ynew; yh(i_suppress) = []; set(lHu,'XData',xh,'YData',yh) set(lHd,'XData',xh,'YData',-yh) end cbthrw1d('upd_thrStruct',fig,lHu); pause(0.5) return end switch option case 'downH' % in2 = [fig ; lin_max ; lin_min] % in2(4:6) = [pop_int ; sli_lev ; edi_lev] (optional) % in3 = +1 or -1 %--------------------------------------------------------- flag_HDL = (length(in2)>3); axe = get(in2(2),'Parent'); if (axe~=gca) , axes(axe); end; fig = in2(1); p = get(axe,'CurrentPoint'); xold = get(in2(2),'XData'); i_inf = find(xold<p(1,1),1,'last'); i_sup = find(xold>p(1,1),1); if ~isequal(i_sup,i_inf+1) , return; end calledFUN = wfigmngr('getWinPROP',fig,'calledFUN'); feval(calledFUN,'clear_GRAPHICS',fig); if flag_HDL num_int = fix(i_inf/3)+1; val_pop = get(in2(4),'Value'); if num_int~=val_pop yold = get(in2(2),'YData'); thr = abs(yold(i_inf)); set(in2(4),'Value',num_int) set(in2(5),'Value',thr); set(in2(6),'String',sprintf('%1.4g',thr)); end end set(in2(2:3),'Color','g'); drawnow handles = num2mstr(in2); cba_move = [mfilename '(''moveH'',' handles ... ',' int2str(in3) ',' int2str(i_inf) ');']; cba_up = [mfilename '(''upH'',' handles ');']; wtbxappdata('new',fig,'save_WindowButtonUpFcn',get(fig,'WindowButtonUpFcn')); set(fig,'WindowButtonMotionFcn',cba_move,'WindowButtonUpFcn',cba_up); setptr(fig,'uddrag'); case 'moveH' % in2 = [fig ; lin_max ; lin_min] % in2(4:6) = [pop_int ; sli_lev ; edi_lev] (optional) % in3 = +1 or -1 % in4 = index point %----------------------------------------------------------- flag_HDL = (length(in2)>3); lin_max = in2(2); axe = get(lin_max,'Parent'); p = get(axe,'CurrentPoint'); new_thresh = p(1,2)*in3; if flag_HDL min_sli = get(in2(5),'Min'); max_sli = get(in2(5),'Max'); new_thresh = max([min_sli,min([new_thresh,max_sli])]); else lineUD = get(lin_max,'UserData'); new_thresh = min([max([new_thresh,0]),lineUD.max]); end yold = get(lin_max,'YData'); if isequal(yold(in4),new_thresh) , return; end ynew = yold; ynew([in4 in4+1]) = [new_thresh new_thresh]; set(lin_max,'YData',ynew); if new_thresh<sqrt(eps) ynew([in4 in4+1]) = [NaN NaN]; end set(in2(3),'YData',-ynew); if flag_HDL set(in2(5),'Value',new_thresh); set(in2(6),'String',sprintf('%1.4g',new_thresh)); end case 'upH' % in2 = [fig ; lin_max ; lin_min] % in2(4:6) = [pop_int ; sli_lev ; edi_lev] (optional) %----------------------------------------------------------- fig = in2(1); lHu = in2(2); lHd = in2(3); save_WindowButtonUpFcn = wtbxappdata('del',fig,'save_WindowButtonUpFcn'); ax = wfindobj(fig,'Type','axes'); set(fig,'WindowButtonMotionFcn',wtmotion(ax), ... 'WindowButtonUpFcn',save_WindowButtonUpFcn); cbthrw1d('upd_thrStruct',fig,lHu); figDef = get(fig,'Default'); try linCol = figDef.defaultAxesColorOrder(1,:); catch %#ok<CTCH> linCol = figDef.axesColorOrder(1,:); end set([lHu;lHd],'Color',linCol); drawnow; utthrw1d('show_LVL_perfos',fig); setptr(fig,'arrow'); case 'plotLH' % in2 = ax_hdl or... % in2 = [pop_ind ; sli_lev ; edi_lev ; ax_hdl] (optional) % in3 = xHOR % in4 = yHOR % in5 = ind_lev % in6 = max(abs(sig)) %-------------------- LW = 1; flg_HDL = (length(in2)>1); if flg_HDL==0 , ax_hdl = in2(1); else ax_hdl = in2(4); end xHOR = in3; yHOR = in4; ind_lev = in5; fig = get(ax_hdl,'Parent'); figDef = get(fig,'Default'); try linCol = figDef.defaultAxesColorOrder(1,:); catch %#ok<CTCH> linCol = figDef.axesColorOrder(1,:); end lineUD.lev = ind_lev; lineUD.hdl = in2; lineUD.max = in6; vis = get(ax_hdl,'Visible'); commonProp = {... 'Parent',ax_hdl, ... 'Visible',vis, ... 'XData',xHOR, ... 'LineStyle','--', ... 'LineWidth',LW, ... 'Color',linCol, ... 'UserData',lineUD ... }; lHu = line(commonProp{:},'YData',yHOR,'Tag',tag_lineH_up); ind = find(abs(yHOR)<sqrt(eps)); if ~isempty(ind) , yHOR(ind) = NaN; end lHd = line(commonProp{:},'YData',-yHOR,'Tag',tag_lineH_down); handles = [fig ;lHu ;lHd]; if flg_HDL , handles = [handles ; in2(1:3)]; end hdl_str = num2mstr(handles); cba_thr_max = [mfilename '(''downH'',' hdl_str ',' int2str(+1) ');']; cba_thr_min = [mfilename '(''downH'',' hdl_str ',' int2str(-1) ');']; set(lHu,'ButtonDownFcn',cba_thr_max) set(lHd,'ButtonDownFcn',cba_thr_min) varargout = {lHu,lHd}; setappdata(lHu,'selectPointer','H') setappdata(lHd,'selectPointer','H') case 'downV' % in2 = [fig ; lin_ver ; lin_max ; lin_min] %------------------------------------------ mousefrm(0,'arrow'); lin_ver = in2(2); axe = get(lin_ver,'Parent'); if (axe~=gca), axes(axe); end; fig = in2(1); % p = get(axe,'CurrentPoint'); xv = get(lin_ver,'XData'); xv = xv(1); xh = get(in2(3),'XData'); i_inf = find(xh==xv,1); i_sup = find(xh==xv,1,'last'); if ~isequal(i_sup,i_inf+2) , return; end calledFUN = wfigmngr('getWinPROP',fig,'calledFUN'); feval(calledFUN,'clear_GRAPHICS',fig); set(lin_ver,'Color','g'); drawnow % Getting memory blocks. %----------------------- handles = num2mstr(in2); cba_move = [mfilename '(''moveV'',' handles ',' ... num2mstr([i_inf i_sup]) ');']; cba_up = [mfilename '(''upV'',' handles ');']; wtbxappdata('new',fig,'save_WindowButtonUpFcn',get(fig,'WindowButtonUpFcn')); set(fig,'WindowButtonMotionFcn',cba_move,'WindowButtonUpFcn',cba_up); setptr(fig,'lrdrag'); case 'moveV' % in2 = [fig ; lin_ver ; lin_max ; lin_min] % in3 = point indices %------------------------------------------ lin_ver = in2(2); if ~ishandle(lin_ver) , return; end axe = get(lin_ver,'Parent'); p = get(axe,'CurrentPoint'); new_thresh = p(1,1); xold = get(lin_ver,'XData'); xnew = [new_thresh new_thresh]; if isequal(xold,xnew) , return; end xh = get(in2(3),'XData'); if (new_thresh<=xh(in3(1)-1)+sqrt(eps)) || ... (new_thresh>=xh(in3(2)+1)-sqrt(eps)) return end xh(in3) = xnew; set(lin_ver,'XData',xnew); set(in2(3),'XData',xh); set(in2(4),'XData',xh); case 'upV' % in2 = [fig ; lin_ver ; lin_max ; lin_min] %------------------------------------------- fig = in2(1); lv = in2(2); lHu = in2(3); save_WindowButtonUpFcn = wtbxappdata('del',fig,'save_WindowButtonUpFcn'); ax = wfindobj(fig,'Type','axes'); set(fig,'WindowButtonMotionFcn',wtmotion(ax),... 'WindowButtonUpFcn',save_WindowButtonUpFcn); if ~ishandle(lv) , return; end cbthrw1d('upd_thrStruct',fig,lHu); set(lv,'Color','r'); drawnow; utthrw1d('show_LVL_perfos',fig); setptr(fig,'arrow'); case 'plotLV' % in2 = [fig ; lin_max ; lin_min] % in3 = [xHOR ; yHOR] % in4 = yVMin (optional) %-------------------------------- fig = in2(1); lHu = in2(2); lHd = in2(3); xHOR = in3(1,:); yHOR = in3(2,:); if nargin<4 yVMin = 0; else yVMin = in4; end ax_hdl = get(lHu,'Parent'); vis = get(ax_hdl,'Visible'); NB_int = fix(length(xHOR)/3)+ 1; for k=1:NB_int-1; x = xHOR(3*k-1); xVER = [x x]; y = max(abs([yHOR(3*k-1),yVMin])); yVER = [-y y]; lv = line(... 'Parent',ax_hdl, ... 'Visible',vis, ... 'XData',xVER, ... 'YData',yVER, ... 'LineStyle','--', ... 'MarkerSize',2, ... 'LineWidth',2, ... 'Color','r', ... 'Tag',tag_lineV ... ); hdl_str = num2mstr([fig ; lv ; lHu ; lHd]); cba_LV = [mfilename '(''downV'',' hdl_str ');']; set(lv,'ButtonDownFcn',cba_LV) setappdata(lv,'selectPointer','V') end case 'upd_thrStruct' % in2 = fig % in3 = lHu %----------- fig = in2; lHu = in3; x = get(lHu,'XData'); y = get(lHu,'YData'); lineUD = get(lHu,'UserData'); level = lineUD.lev; handles = lineUD.hdl; thrStruct = wmemtool('rmb',fig,n_memblocTHR,ind_thr_struct); thrParams = getparam(x,y); thrStruct(level).thrParams = thrParams; if length(handles)>1 pop_int = handles(1); nb_int = size(thrParams,1); nb_val = size(get(pop_int,'String'),1); if nb_int~=nb_val set(pop_int,'String',int2str((1:nb_int)'),'Value',1) thr = thrParams(1,3); set(handles(2),'Value',thr); % Slider set(handles(3),'String',sprintf('%1.4g',thr)); % Edit end end wmemtool('wmb',fig,n_memblocTHR,ind_thr_struct,thrStruct); hmb = wmemtool('hmb',fig,n_membloc1); if ~isempty(hmb) , wmemtool('wmb',fig,n_membloc1,ind_status,1); end otherwise errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg'); error(message('Wavelet:FunctionArgVal:Unknown_Opt')); end %--------------------------------------% function param = getparam(x,y) lx = length(x); x_beg = x(1:3:lx); x_end = x(2:3:lx); y = y(1:3:lx); param = [x_beg(:) , x_end(:) , y(:)]; %--------------------------------------%