www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/cf1dselc.m
function varargout = cf1dselc(x,y,axe,in4) %CF1DSELC Callbacks coefficients 1-D selection box. % VARARGOUT = CF1DSELC(X,Y,AXE,IN4) % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96. % Last Revision 12-Apr-2012. % Copyright 1995-2012 The MathWorks, Inc. % in4 = [coefs_axes , -level_anal] %---------------------------------- varargout = {[],[]}; coefs_axes = in4(1:end-1); axe_coefs_O = coefs_axes(1); axe_coefs_M = coefs_axes(2); fig = get(axe_coefs_O,'Parent'); identMeth = utnbcfs('get',fig,'identMeth'); if ~isequal(identMeth,'Manual'), return, end if ~isequal(axe,axe_coefs_O) && ~isequal(axe,axe_coefs_M), return, end level_anal = in4(end); abslevel = abs(level_anal); z = round(y); if (z<1) || (z>abslevel+1) , val = 0; elseif (z<=abslevel) , val = 1; % Detail else val = 2; % Approximation end if val<1, return; end [H_vert_O,H_stem_O,H_vert_O_Copy,H_stem_O_Copy,... H_vert_M,H_stem_M,H_vert_M_Copy,H_stem_M_Copy] = ... cf1dtool('get_Stems_HDL',fig,'allComponents'); %#ok<*ASGLU> if find(axe==axe_coefs_O) xy_stem = get(H_stem_O(z),{'XData','YData'}); tol = abs(xy_stem{1}(end)-xy_stem{1}(1))/(4*length(xy_stem{1})); [ecart,Idx] = min(abs(xy_stem{1}-x)); if isnan(ecart) || ecart>tol , return; end % Test for many points ii = find(abs(xy_stem{1}-x)==ecart); if length(ii)>1 [dummy,jj] = min(abs(xy_stem{2}(ii)-y)); Idx = ii(jj); end xy_stem_Copy = get(H_stem_O_Copy(z),{'XData','YData'}); [ecart,Ind] = min(abs(xy_stem_Copy{2}-xy_stem{2}(Idx))); xy_vert_Copy = get(H_vert_O_Copy(z),{'XData','YData'}); tol = eps; if ~isnan(ecart) && ecart<tol xy_stem_Copy{1}(Ind) = []; xy_stem_Copy{2}(Ind) = []; Ind = 3*Ind-4; xy_vert_Copy{1}((Ind:Ind+2)) = []; xy_vert_Copy{2}((Ind:Ind+2)) = []; % Update kept coefs. %------------------- nbKept = utnbcfs('get',fig,'nbKept'); if z == abslevel+1 nbKept(1) = nbKept(1) - 1; else nbKept(abslevel+2-z) = nbKept(abslevel+2-z) - 1; end nbKept(end) = sum(nbKept(1:end-1)); utnbcfs('set',fig,'nbKept',nbKept); else xy_stem_Copy{1} = [xy_stem_Copy{1} , xy_stem{1}(Idx)]; xy_stem_Copy{2} = [xy_stem_Copy{2} , xy_stem{2}(Idx)]; xy_vert_Copy{1} = [xy_vert_Copy{1} , ... xy_stem{1}(Idx) , xy_stem{1}(Idx) , xy_stem{1}(Idx)]; xy_vert_Copy{2} = [xy_vert_Copy{2} , ... z , xy_stem{2}(Idx) , NaN]; % Update kept coefs. %------------------- nbKept = utnbcfs('get',fig,'nbKept'); if z == abslevel+1 nbKept(1) = nbKept(1) + 1; else nbKept(abslevel+2-z) = nbKept(abslevel+2-z) + 1; end nbKept(end) = sum(nbKept(1:end-1)); utnbcfs('set',fig,'nbKept',nbKept); end elseif find(axe==axe_coefs_M) % xy_stem = get(H_stem_M(z),{'XData','YData'}); xy_stem = get(H_stem_M_Copy(z),{'XData','YData'}); tol = abs(xy_stem{1}(end)-xy_stem{1}(1))/(4*length(xy_stem{1})); if isequal(tol,0); dummy = get(H_stem_O(z),'XData'); tol = abs(dummy(end)-dummy(1))/(4*length(dummy)); tol = max(tol,sqrt(eps)); end [ecart,Idx] = min(abs(xy_stem{1}-x)); if isnan(ecart) || ecart>tol , return; end % Test for many points ii = find(abs(xy_stem{1}-x)==ecart); if length(ii)>1 [dummy,jj] = min(abs(xy_stem{2}(ii)-y)); Idx = ii(jj); end xy_stem_Copy = get(H_stem_M_Copy(z),{'XData','YData'}); [ecart,Ind] = min(abs(xy_stem_Copy{2}-xy_stem{2}(Idx))); xy_vert_Copy = get(H_vert_M_Copy(z),{'XData','YData'}); tol = eps; if ~isnan(ecart) && ecart<tol xy_stem_Copy{1}(Ind) = []; xy_stem_Copy{2}(Ind) = []; Ind = 3*Ind-4; xy_vert_Copy{1}((Ind:Ind+2)) = []; xy_vert_Copy{2}((Ind:Ind+2)) = []; % Update kept coefs. %------------------- nbKept = utnbcfs('get',fig,'nbKept'); if z == abslevel+1 nbKept(1) = nbKept(1) - 1; else nbKept(abslevel+2-z) = nbKept(abslevel+2-z) - 1; end nbKept(end) = sum(nbKept(1:end-1)); utnbcfs('set',fig,'nbKept',nbKept); end else return end set([H_stem_O_Copy(z),H_stem_M_Copy(z)],... 'XData',xy_stem_Copy{1},... 'YData',xy_stem_Copy{2} ... ); set([H_vert_O_Copy(z),H_vert_M_Copy(z)],... 'XData',xy_vert_Copy{1},... 'YData',xy_vert_Copy{2} ... );