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

波变换

开发平台:

Matlab

  1. function varargout = plot(t,varargin);
  2. %PLOT Plot WVTREE object.
  3. %   PLOT(T) plots the WVTREE object T.
  4. %   FIG = PLOT(T) returns the handle of the figure, which
  5. %   contains the tree T.
  6. %   PLOT(T,FIG) plots the tree T in the figure FIG, which
  7. %   already contains a tree.
  8. %
  9. %   PLOT is a graphical tree-management utility. The figure
  10. %   that contains the tree is a GUI tool. It lets you change
  11. %   the Node Label to Depth_Position or Index, and Node Action
  12. %   to Split-Merge or Visualize.
  13. %   The default values are Depth_Position and Visualize.
  14. %
  15. %   You can click the nodes to execute the current Node Action.
  16. %
  17. %   After some split or merge actions you can get the new tree
  18. %   using the handle of the figure, which contains it.
  19. %   You must use the following special syntax:
  20. %       NEWT = PLOT(T,'read',FIG).
  21. %   In fact, the first argument is dummy. Then the most general
  22. %   syntax for this purpose is:
  23. %       NEWT = PLOT(DUMMY,'READ',FIG);
  24. %   where DUMMY is any object parented by an NTREE object.
  25. %
  26. %   DUMMY can be any object constructor name, which returns
  27. %   an object parented by an NTREE object. For example:
  28. %      NEWT = PLOT(ntree,'read',FIG);
  29. %      NEWT = PLOT(dtree,'read',FIG);
  30. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 07-Oct-1999.
  31. %   Last Revision: 21-May-2003.
  32. %   Copyright 1995-2004 The MathWorks, Inc.
  33. %   $Revision: 1.5.4.2 $  $Date: 2004/03/15 22:36:14 $ 
  34. nbin = length(varargin);
  35. fig_tree = NaN;
  36. switch nbin
  37.   case 0    , option = 'create';
  38.   otherwise
  39.     option = varargin{1};
  40.     if isnumeric(option)
  41.         fig_tree = option;
  42.         option = 'create';
  43.     end
  44. end
  45. switch option
  46.   case 'create'
  47.   case {'length','type'} , fig_tree = varargin{2};  % Added Node Labels
  48.   case'Reconstruct'      , fig_tree = varargin{2};  % Added Node Action
  49. end
  50. switch option
  51.   case 'create'
  52.     fig_tree = plot(get(t,'wtree'),fig_tree);
  53.     if nargout>0 , varargout{1} = fig_tree; end
  54. set(fig_tree,'NumberTitle','Off','Name',...
  55.         ['Fig ' int2str(fig_tree) ...
  56.  ' - Wavelet Tree Object - DWT extension mode: ',get(t,'dwtMode')]);
  57.     % Store the WVTREE.
  58.     %------------------
  59.     plot(dtree,'write',fig_tree,t);
  60.     % Add Node Label menus.
  61.     %----------------------
  62.     plot(ntree,'addNodeLabel',fig_tree,'length');
  63.     plot(ntree,'addNodeLabel',fig_tree,'type');
  64.     % Add Node Action menu.
  65.     %----------------------
  66.     plot(ntree,'addNodeAction',fig_tree,'Reconstruct');
  67.     % Set default Node Label to 'Index'.
  68.     %-----------------------------------
  69.     plot(ntree,'setNodeLabel',fig_tree,'Index');
  70.   case {'length','type'}
  71.     t = plot(ntree,'read',fig_tree);
  72.     if nbin<3 , nodes = allnodes(t); else , nodes = varargin{3}; end
  73.     n = length(nodes);
  74.     switch option
  75.       case 'length' , labtype = 's';
  76.       case 'type'   , labtype = 't';
  77.     end
  78.     labels = tlabels(t,labtype,nodes);
  79.     err    = ~isequal(n,size(labels,1));
  80.     varargout = {labels,err};
  81.   case 'Reconstruct'
  82.     node = plot(ntree,'getNode',fig_tree);
  83.     if isempty(node) , return; end
  84.     t = plot(ntree,'read',fig_tree);
  85.     axe_vis = plot(ntree,'getValue',fig_tree,'axe_vis');
  86.     %============================================================%
  87.     mousefrm(fig_tree,'watch')
  88.     x = rnodcoef(t,node);
  89.     if ~isempty(x)
  90.         if min(size(x))<2
  91.             plot(x,'Color','r','parent',axe_vis);
  92.             lx = length(x);
  93.             if lx> 1 , set(axe_vis,'Xlim',[1,lx]); end
  94.         else
  95.            NBC = 128;
  96.            colormap(pink(NBC))
  97.            image(wcodemat(x,NBC,'mat',0),'parent',axe_vis);
  98.         end
  99.         endTitle = '.';
  100.     else
  101.         delete(get(axe_vis,'Children'))
  102.         endTitle = ' ==> NONE.';
  103.     end
  104.     order = treeord(t);
  105.     [d,p] = ind2depo(order,node);
  106.     ldep = sprintf('(%0.f,%0.f)',d,p);
  107.     lind = sprintf('(%0.f)',node);
  108.     axeTitle = ['data for node: ' lind ' or ' ldep endTitle];
  109.     wtitle(axeTitle,'parent',axe_vis);
  110.     mousefrm(fig_tree,'arrow')
  111.     %============================================================%
  112.   otherwise
  113.     try
  114.       nbout = nargout;
  115.       varargout{1:nbout} = plot(dtree,varargin{:});       
  116.     end
  117.         
  118. end
  119. %-------------------------------------------------------------------------%
  120. % Internal Functions                                                      %
  121. %-------------------------------------------------------------------------%
  122. function labels = tlabels(t,varargin)
  123. labtype = varargin{1};
  124. if length(varargin)<2
  125.     nodes = allnodes(t);
  126. else
  127.     nodes = varargin{2};
  128. end
  129. nbnodes = length(nodes);
  130. labels  = [];
  131. order = treeord(t);
  132. switch labtype
  133.    case 's'
  134.      sizes = read(t,'sizes',nodes);
  135.      switch order
  136.        case 2         
  137.          for k=1:nbnodes
  138.            labels = strvcat(labels,sprintf('%0.f',max(sizes(k,:))));
  139.          end
  140.        case 4
  141.          for k=1:nbnodes
  142.            labels = strvcat(labels,sprintf('(%0.f,%0.f)',sizes(k,:)));
  143.          end
  144.      end
  145.    case 't'
  146.      [d,p] = ind2depo(order,nodes);
  147.      p = rem(p,order);
  148.      pstr = repLine('a',nbnodes);
  149.      if order==2
  150.          I = find(p==1); pd = repLine('d',length(I)); pstr(I,:) = pd;
  151.      else
  152.          I = find(p==1); pd = repLine('h',length(I)); pstr(I,:) = pd;
  153.          I = find(p==2); pd = repLine('v',length(I)); pstr(I,:) = pd;
  154.          I = find(p==3); pd = repLine('d',length(I)); pstr(I,:) = pd;
  155.      end
  156.      lp = repLine('(',nbnodes);
  157.      rp = repLine(')',nbnodes);
  158.      labels = [lp pstr rp];
  159. end
  160. %-------------------------------------------------------------------------%
  161. function m = repLine(c,n)
  162. %REPLINE Replicate Lines.
  163. m = c(ones(n,1),:);
  164. %-------------------------------------------------------------------------%