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

波变换

开发平台:

Matlab

  1. function varargout = plot(t,varargin);
  2. %PLOT Plot EPSDWT object.
  3. %   PLOT(T) plots the EDWTTREE 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 09-Sep-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:03 $ 
  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.   % Added Node Labels menus.
  48.   case {'length','type','epsVal'} , fig_tree = varargin{2};  
  49.   % Added Node Action menus.
  50.   case 'Reconstruct'  , fig_tree = varargin{2};
  51.   % Added Tree Action menus.
  52.   case {'Restore Initial Tree','Store Tree',...
  53.         'Restore Last Stored Tree',...
  54.         'De-noise','De-noising Method'}
  55.       fig_tree = varargin{2};
  56. end
  57. switch option
  58.   case 'create'
  59.     fig_tree = plot(getwtbo(t,'dtree'),fig_tree);
  60.     if nargout>0 , varargout{1} = fig_tree; end
  61.     set(fig_tree,'NumberTitle','Off','Name',...
  62.         ['Fig ' int2str(fig_tree) ...
  63.  ' - EDWT Tree Object - Extension Mode: ',getwtbo(t,'dwtMode'), ...
  64.          '  -  De-noising Method: ','sqtwolog']);
  65.     % Store the EDWTTREE.
  66.     %--------------------
  67.     plot(dtree,'write',fig_tree,t);
  68.     % Add Node Label menus.
  69.     %----------------------
  70.     plot(ntree,'addNodeLabel',fig_tree,'length');
  71.     plot(ntree,'addNodeLabel',fig_tree,'type');
  72.     plot(ntree,'addNodeLabel',fig_tree,'epsVal');
  73.     % Add Node Action menu.
  74.     %----------------------
  75.     plot(t,'addNodeAction',fig_tree,'Reconstruct');
  76.     % Add Tree Action menus.
  77.     %-----------------------
  78.     plot(ntree,'addTreeAction',fig_tree,'Restore Initial Tree');
  79.     plot(ntree,'addTreeAction',fig_tree,'Store Tree');
  80.     plot(ntree,'addTreeAction',fig_tree,'Restore Last Stored Tree');
  81.     m = plot(ntree,'addTreeAction',fig_tree,'De-noising Method');
  82.     set(m,'Separator','on')
  83.     plot(ntree,'addTreeAction',fig_tree,'De-noise');
  84.     plot(ntree,'storeValue',fig_tree,'DenMeth','sqtwolog');
  85.     % Store the TREE.
  86.     %----------------
  87.     plot(ntree,'storeValue',fig_tree,'InitialTREE',t);
  88.     plot(ntree,'storeValue',fig_tree,'LastTREE',t);
  89.     % Set default Node Label to 'Index'.
  90.     %-----------------------------------
  91.     plot(ntree,'setNodeLabel',fig_tree,'Index');
  92.   case {'length','type','epsVal'}
  93.     t = plot(ntree,'read',fig_tree);
  94.     if nbin<3 , nodes = allnodes(t); else , nodes = varargin{3}; end
  95.     n = length(nodes);
  96.     switch option
  97.       case 'length' , labtype = 's';
  98.       case 'type'   , labtype = 't';
  99.       case 'epsVal' , labtype = 'ev';
  100.     end
  101.     labels = tlabels(t,labtype,nodes);
  102.     err    = ~isequal(n,size(labels,1));
  103.     varargout = {labels,err};
  104.   case 'Reconstruct'
  105.     node = plot(ntree,'getNode',fig_tree);
  106.     if isempty(node) , return; end
  107.     t = plot(ntree,'read',fig_tree);
  108.     axe_vis = plot(ntree,'getValue',fig_tree,'axe_vis');
  109.     %============================================================%
  110.     mousefrm(fig_tree,'watch')
  111.     x = rnodcoef(t,node);
  112.     if ~isempty(x)
  113.         if min(size(x))<2
  114.             plot(x,'Color','r','parent',axe_vis);
  115.             lx = length(x);
  116.             if lx> 1 , set(axe_vis,'Xlim',[1,lx]); end
  117.         else
  118.            NBC = 128;
  119.            colormap(pink(NBC))
  120.            image(wcodemat(x,NBC,'mat',0),'parent',axe_vis);
  121.         end
  122.         endTitle = '.';
  123.     else
  124.         delete(get(axe_vis,'Children'))
  125.         endTitle = ' ==> NONE.';
  126.     end
  127.     order = treeord(t);
  128.     [d,p] = ind2depo(order,node);
  129.     ldep = sprintf('(%0.f,%0.f)',d,p);
  130.     lind = sprintf('(%0.f)',node);
  131.     axeTitle = ['data for node: ' lind ' or ' ldep endTitle];
  132.     wtitle(axeTitle,'parent',axe_vis);
  133.     mousefrm(fig_tree,'arrow')
  134.     %============================================================%
  135.   case 'Restore Initial Tree'
  136.     tInit = plot(ntree,'getValue',fig_tree,'InitialTREE');
  137.     tLast = plot(ntree,'getValue',fig_tree,'LastTREE');
  138.     plot(tInit,fig_tree);
  139.     plot(ntree,'storeValue',fig_tree,'LastTREE',tLast);
  140.   case 'Store Tree'
  141.     t = plot(ntree,'read',fig_tree);
  142.     plot(ntree,'storeValue',fig_tree,'LastTREE',t);
  143.   case 'Restore Last Stored Tree'
  144.     tInit = plot(ntree,'getValue',fig_tree,'InitialTREE');
  145.     tLast = plot(ntree,'getValue',fig_tree,'LastTREE');
  146.     tAct  = plot(ntree,'read',fig_tree);
  147.     plot(tLast,fig_tree);
  148.     plot(ntree,'storeValue',fig_tree,'InitialTREE',tInit);
  149.   case 'De-noising Method'
  150.     meth = {'sqtwolog','rigrsure','heursure','minimaxi',...
  151.             'penalhi','penalme','penallo'};
  152.     m = menu('Choose De-noising Method',meth);
  153.     if isempty(m)
  154.         meth = plot(ntree,'getValue',fig_tree,'DenMeth');
  155.     else
  156.         meth = meth{m};
  157.     end
  158.     plot(ntree,'storeValue',fig_tree,'DenMeth',meth);
  159.     t = plot(ntree,'read',fig_tree);
  160.     set(fig_tree,'Name',...
  161.         ['Fig ' int2str(fig_tree) ...
  162.  ' - EDWT Tree Object - Extension Mode: ',getwtbo(t,'dwtMode'), ...
  163.          '  -  De-noising Method: ',meth]);
  164.   case 'De-noise'
  165.     tInit = plot(ntree,'getValue',fig_tree,'InitialTREE');
  166.     tLast = plot(ntree,'getValue',fig_tree,'LastTREE');
  167.     t = plot(ntree,'read',fig_tree);
  168.     order = treeord(t);
  169.     depth = treedpth(t);
  170.     dpstn = leaves(t,'dps');
  171.     dTN = dpstn(:,1);
  172.     pTN = dpstn(:,2);
  173.     remORD = rem(dpstn(:,2),order);
  174.     appIDX = find(remORD==0 | remORD==3);
  175.     detIDX = find(remORD==1 | remORD==2);
  176.     nbDWT  = length(appIDX);
  177.     tnDWT  = cell(nbDWT,1);
  178.     j = appIDX(end);
  179.     d = dTN(j);
  180.     p = pTN(j);
  181.     tmp = [d,p];
  182.     while d>0
  183.       r = rem(p,order);
  184.       switch r
  185.         case 0 , tmp = [tmp ; [d,p+1]];
  186.         case 3 , tmp = [tmp ; [d,p-1]];
  187.       end
  188.       d = d-1;
  189.       p = fix(p/order);
  190.     end
  191.     tnTMP = depo2ind(order,tmp);
  192.     [CFS,sizes] = read(t,'data',tnTMP,'sizes',tnTMP);
  193.     coefs = cat(2,CFS{:});
  194.     lenSIG = max(read(t,'sizes',0));
  195.     longs = [max(sizes,[],2) ; lenSIG]';
  196.     meth = plot(ntree,'getValue',fig_tree,'DenMeth');
  197.     switch meth
  198.       case {'sqtwolog','rigrsure','heursure','minimaxi'} , param = 'sln';
  199.       case 'penalhi' , param = 5;
  200.       case 'penalme' , param = 2;
  201.       case 'penallo' , param = 1.5;
  202.     end
  203.     thrDWT = wthrmngr('dw1ddenoLVL',meth,coefs,longs,param);
  204.     level = dpstn(detIDX,1);
  205.     idxTN = depo2ind(order,dpstn(detIDX,:));
  206.     CFS = read(t,'data',idxTN);
  207.     for k=1:length(detIDX)
  208.         CFS{k} = wthresh(CFS{k},'h',thrDWT(level(k)));
  209.         t = write(t,'data',idxTN(k),CFS{k});
  210.     end
  211.     plot(t,fig_tree);
  212.     plot(ntree,'storeValue',fig_tree,'InitialTREE',tInit);
  213.     plot(ntree,'storeValue',fig_tree,'LastTREE',tLast);
  214.     plot(ntree,'storeValue',fig_tree,'DenMeth',meth);
  215.     set(fig_tree,'Name',...
  216.         ['Fig ' int2str(fig_tree) ...
  217.  ' - EDWT Tree Object - Extension Mode: ',getwtbo(t,'dwtMode'), ...
  218.          '  -  De-noising Method: ',meth]);
  219.    otherwise
  220.      try
  221.        nbout = nargout;
  222.        varargout{1:nbout} = plot(dtree,varargin{:});
  223.      end
  224.     
  225. end
  226. %-------------------------------------------------------------------------%
  227. % Internal Functions                                                      %
  228. %-------------------------------------------------------------------------%
  229. function labels = tlabels(t,varargin)
  230. labtype = varargin{1};
  231. if length(varargin)<2
  232.     nodes = allnodes(t);
  233. else
  234.     nodes = varargin{2};
  235. end
  236. nbnodes = length(nodes);
  237. labels  = [];
  238. order = treeord(t);
  239. switch labtype
  240.    case 's'
  241.      sizes = read(t,'sizes',nodes);
  242.      for k=1:nbnodes
  243.          labels = strvcat(labels,sprintf('%0.f',max(sizes(k,:))));
  244.      end
  245.    case 't'
  246.      [d,p] = ind2depo(order,nodes);
  247.      p = rem(p,order);
  248.      pstr = repLine('a',nbnodes);
  249.      I = find(p==1); pd = repLine('d',length(I)); pstr(I,:) = pd;
  250.      I = find(p==2); pd = repLine('d',length(I)); pstr(I,:) = pd;
  251.      I = find(p==3); pd = repLine('a',length(I)); pstr(I,:) = pd;
  252.      lp = repLine('(',nbnodes);
  253.      rp = repLine(')',nbnodes);
  254.      labels = [lp pstr rp];
  255.    case 'ev'
  256.      [d,p] = ind2depo(order,nodes);
  257.      p = rem(p,order);
  258.      pstr = repLine('0',nbnodes);
  259.      I = find(p==1); pd = repLine('0',length(I)); pstr(I,:) = pd;
  260.      I = find(p==2); pd = repLine('1',length(I)); pstr(I,:) = pd;
  261.      I = find(p==3); pd = repLine('1',length(I)); pstr(I,:) = pd;
  262.      lp = repLine('(',nbnodes);
  263.      rp = repLine(')',nbnodes);
  264.      labels = [lp pstr rp];
  265. end
  266. %-------------------------------------------------------------------------%
  267. function m = repLine(c,n)
  268. %REPLINE Replicate Lines.
  269. m = c(ones(n,1),:);
  270. %-------------------------------------------------------------------------%