⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 creatset.m

📁 支持向量机工具箱
💻 M
📖 第 1 页 / 共 2 页
字号:
function result = creatset(action,varargin)
% CREATSET interactive data sets generator.
%
% Generator is fully controled by mouse. The mouse buttons have
% the following functions:
% --------------------------------------------------------
% Left button  - creates a new point or distribution
% Right button - erases the point or distribution
%
% If normal distributed mixture is created then
% double-click on the left button gets info, moreover makes distribution
% selected - change of a covarianace matrix is then possible.
% --------------------------------------------------------------------
%
% Syntax
% creatset('finite')
% creatset('normal')
% creatset('...',K)
% creatset('...',K,'fce',arg1,arg2,..)
%
% Statistical Pattern Recognition Toolbox, Vojtech Franc, Vaclav Hlavac
% (c) Czech Technical University Prague, http://cmp.felk.cvut.cz
% Written Vojtech Franc (diploma thesis) 04.11.1999
% Modifications
% 24. 6.00 V. Hlavac, comments polished.

XCOLORS=['b','r','g','y','m','k','c'];      % colors of the ellipses
MAXCOLOR=size(XCOLORS,2);
ID_NORMAL='Infinite sets, Normal distributions';
ID_FINITE='Finite sets, Enumeration';
DX_SPACE=0.5;   % space betwean the nearest point and the left and right border
DY_SPACE=0.5;   % --//--                                  top and bottom -//-

if nargin < 1,
   action = 'finite';
end

switch lower(action)
case 'finite'
   % == We will create finite data sets ===================================
   if nargin < 2,
      K=2;
   else
      K=varargin{1};
   end
   creatset('initialize',action,K,varargin{2:nargin-1});

case 'normal'
   % == We will create normal distributed sets  ===========================
   if nargin < 2,
      K=2;
   else
      K=varargin{1};
   end
   creatset('initialize',action,K,varargin{2:nargin-1});


case 'initialize'
   % == Initialize dialog window =========================================

   % get input arguments
   K=varargin{2};

   % == Figure ===========================================================
   hfigure = figure(...
      'Visible','off',...
    'NumberTitle','off', ...
       'Units','normalized', ...
      'RendererMode','manual');

   % == Axes =============================================================
   haxes1= axes(...
       'Units','normalized', ...
      'ButtonDownFcn','creatset(''click'',gcf)',...
      'Box','on', ...
      'XGrid','on', ...
      'YGrid','on', ...
      'NextPlot','add',...
      'Position',[0.1 0.1 0.65 0.85]);
   axis([-1 1 -1 1]);
   xlabel('X');
   ylabel('Y');


   % == Buttons ==========================================================
   left=0.8;
   bottom=0.05;
   height=0.05;
   width=0.15;

   % close button
   hbtclose = uicontrol( ...
      'Units','Normalized', ...
      'Callback','creatset(''close'',gcf)',...
        'ListboxTop',0, ...
        'Position',[left bottom width height], ...
        'String','Close');

   % ok button
   bottom=bottom+1*height;
   hbtok = uicontrol( ...
      'Units','Normalized', ...
      'Callback','creatset(''ok'',gcf)',...
        'ListboxTop',0, ...
      'UserData',varargin,...
      'Position',[left bottom width height], ...
        'String','OK');

   % info button
   bottom=bottom+1.5*height;
   hbtinfo = uicontrol( ...
      'Units','Normalized', ...
      'Callback','creatset(''info'',gcf)',...
        'ListboxTop',0, ...
        'Position',[left bottom width height], ...
        'String','Info');

   % load button
   bottom=bottom+1.5*height;
   hbtload = uicontrol( ...
      'Units','Normalized', ...
      'Callback','creatset(''load'',gcf)',...
        'ListboxTop',0, ...
        'Position',[left bottom width height], ...
        'String','Load');

   % save button
   file=struct('name','noname.mat','path','','pathname','noname.mat');
   bottom=bottom+1*height;
   hbtsave = uicontrol( ...
      'Units','Normalized', ...
      'Callback','creatset(''save'',gcf)',...
        'ListboxTop',0, ...
      'Position',[left bottom width height], ...
      'UserData',file,...
        'String','Save');

   % == Popup menus ===================================================

   % popup menu - class
   % title
   bottom=0.91;
   htxclass =uicontrol( ...
      'Style','text', ...
      'Units','normalized', ...
      'Position',[left bottom width 0.9*height], ...
      'String','Class');

   % popup menu
   for i=1:K,
      txnum=sprintf(' %d ',i);
      classes(i,1:size(txnum,2))=txnum;
   end

   bottom=bottom-height;
   hpuclass=uicontrol( ...
      'Style','popup', ...
      'Units','normalized', ...
      'Position',[left bottom width height], ...
      'String',classes);

   % == Edit lines =======================================================

   % x-axis
   bottom=bottom-1.2*height;
   htxxaxis=uicontrol( ...
      'Style','text', ...
      'Units','normalized', ...
      'Position',[left bottom width 0.9*height], ...
      'String','X-Axis');
   bottom=bottom-height;
   hedxaxis = uicontrol(...
    'Units','normalized', ...
      'ListboxTop',0, ...
        'Position',[left bottom width height], ...
      'CallBack','creatset(''setaxis'',gcf)',...
      'Style','edit',...
      'String','[-1 1]');

   % y-axis
   bottom=bottom-1.2*height;
   htxyaxis=uicontrol( ...
      'Style','text', ...
      'Units','normalized', ...
      'Position',[left bottom width 0.9*height], ...
      'String','Y-Axis');
   bottom=bottom-height;
   hedyaxis = uicontrol(...
    'Units','normalized', ...
      'ListboxTop',0, ...
      'Position',[left bottom width height], ...
      'CallBack','creatset(''setaxis'',gcf)',...
      'Style','edit',...
      'String','[-1 1]');

   % normal distributions are given by SIGMA in addition
   if strcmpi(varargin{1},'normal'),

      % label
      bottom=bottom-1.5*height;
      htxcov=uicontrol( ...
         'Style','text', ...
         'Units','normalized', ...
         'Position',[left bottom width 0.9*height], ...
         'String','Covariance');

      % cov(xy)
      bottom=bottom-height;
      hedxx = uicontrol(...
        'Units','normalized', ...
         'ListboxTop',0, ...
         'Position',[left bottom width*0.5 height], ...
         'CallBack','creatset(''setcov'',gcf,1)',...
         'Style','edit',...
         'String','1');
      % cov(xy)
      hedxy = uicontrol(...
        'Units','normalized', ...
         'ListboxTop',0, ...
         'Position',[left+width*0.5 bottom width*0.5 height], ...
         'CallBack','creatset(''setcov'',gcf,2)',...
         'Style','edit',...
         'String','0');
      % cov(yx)
      bottom=bottom-height;
      hedyx = uicontrol(...
        'Units','normalized', ...
         'ListboxTop',0, ...
         'Position',[left bottom width*0.5 height], ...
         'CallBack','creatset(''setcov'',gcf,3)',...
         'Style','edit',...
         'String','0');
      % cov(yy)
      hedyy = uicontrol(...
        'Units','normalized', ...
         'ListboxTop',0, ...
         'Position',[left+width*0.5 bottom width*0.5 height], ...
         'CallBack','creatset(''setcov'',gcf,4)',...
         'Style','edit',...
         'String','1');

      bottom=bottom-1.2*height;
      htxmi1=uicontrol( ...
         'Style','text', ...
         'Units','normalized', ...
         'Position',[left bottom width 0.9*height], ...
         'String','MI=[');
      bottom=bottom-0.9*height;
      htxmi2=uicontrol( ...
         'Style','text', ...
         'Units','normalized', ...
         'Position',[left bottom width 0.9*height], ...
         'String','    ]');
   end

   % == Axes title ========================================================
   pos=get(haxes1,'Position');
   titletext=sprintf('File: %s',file.name);
   fontsize=(1-pos(2)-pos(4))*0.8;
   htitle=title(titletext,...
      'VerticalAlignment','bottom',...
      'HorizontalAlignment','left',...
      'FontUnits','normalized',...
      'Units','normalized',...
      'Position',[0 1 0],...
      'FontSize',fontsize);


   % =========================================================================

   % create the structures according to the current set type
   switch lower(varargin{1}),
   case 'finite'
      set(hfigure,'name','Finite data set generator');
      ident=ID_FINITE;
      % set handlers
      handlers=struct(...
         'settype',lower(varargin{1}),...
         'saved',1,...
         'btsave',hbtsave,...
         'edxaxis',hedxaxis,...
         'edyaxis',hedyaxis,...
         'title',htitle,...
         'btok',hbtok,...
         'axes1',haxes1,...
         'puclass',hpuclass );
   case 'normal'
      set(hfigure,'name','Normal distribution generator');
      ident=ID_NORMAL;
      % set handlers
      handlers=struct(...
         'settype',lower(varargin{1}),...
         'currpoint',0,...
         'currhandle',0,...
         'saved',1,...
         'title',htitle,...
         'btsave',hbtsave,...
         'edxaxis',hedxaxis,...
         'edyaxis',hedyaxis,...
         'txmi1',htxmi1,...
         'txmi2',htxmi2,...
         'edxx',hedxx,...
         'edxy',hedxy,...
         'edyx',hedyx,...
         'edyy',hedyy,...
         'btok',hbtok,...
         'axes1',haxes1,...
         'puclass',hpuclass );
   end

   sets=struct(...
      'K',zeros(1,K),...
      'X',[],...
      'I',[],...
      'MI',[],...
      'SIGMA',[],...
      'N',2,...
      'id',ident);

   % store handlers and data set structure
   set(hfigure,'UserData',handlers);
   set(haxes1,'UserData',sets);


   % set figure as visible
   set(hfigure,'Visible','on');


case 'setcov'
   % == Set covariance matrix of current selected point ===================

   % get handlers
   hfigure=varargin{1};
   h=get(hfigure,'UserData');

   %get data set
   sets=get(h.axes1,'UserData');

   % current point
   i=h.currpoint;

   if varargin{2}==2,
      set(h.edyx,'String',get(h.edxy,'String'));
   elseif varargin{2}==3,
      set(h.edxy,'String',get(h.edyx,'String'));
   end

   % if some point is selected
   if i ~= 0,
      % get cov. matrix from edit lines
      sigma(1,1)=str2num(get(h.edxx,'String'));
      sigma(1,2)=str2num(get(h.edxy,'String'));
      sigma(2,1)=str2num(get(h.edyx,'String'));
      sigma(2,2)=str2num(get(h.edyy,'String'));

      % is sigma positive definite ?
      [aa,p]=chol(sigma);
      if p ~= 0,
         set(h.edxx,'String','1');
         set(h.edxy,'String','0');
         set(h.edyx,'String','0');
         set(h.edyy,'String','1');
         sigma=eye(2,2);
      end

      sets.SIGMA(:,(i-1)*2+1:i*2)=sigma;
      set(h.axes1,'UserData',sets);

%%%      window=axis;
      window=getaxis(h.axes1);
      R=min([(window(2)-window(1)),(window(4)-window(3))])/20;
      i=h.currpoint;
      class=sets.I(i);
%%      isigma=inv(sigma);
      mi=sets.MI(:,i);
%%%      [x,y]=ellipse(isigma,20,R,mi);
      [x,y]=ellips(mi,sigma,R);

      if h.currhandle==0,
         % draw new ellipse
         h.currhandle =fill(x,y,XCOLORS(mod(class-1,MAXCOLOR)+1),...
            'EraseMode','none',...
            'ButtonDownFcn','creatset(''click'',gcf)',...
            'Tag','ellipse',...
            'UserData',mi);
         set(hfigure,'UserData',h);
      else
         set(h.currhandle,'XData',x,'YData',y,'EraseMode','normal');
      end
   end % if i ~= 0,

case 'redraw'
   % == Redraw axes ===========================================================
   hfigure=varargin{1};
   h = get(hfigure,'UserData');      % get handlers

   children=get(h.axes1,'Children' );
   set(children,'EraseMode','normal','Visible','off');

   % get sets
   sets=get(h.axes1,'UserData');

   % set axes
   if strcmpi(sets.id,ID_FINITE)==1,
      maxs=max(sets.X');
      mins=min(sets.X');
   elseif strcmpi(sets.id,ID_NORMAL )==1,
      % set axes
      maxs=max(sets.MI');
      mins=min(sets.MI');
   end
   dx=min( (maxs(1)-mins(1)), 1 )*DX_SPACE;
   dy=min( (maxs(2)-mins(2)), 1 )*DY_SPACE;
   x1=round(mins(1)-dx);
   x2=round(maxs(1)+dx);
   y1=round(mins(2)-dy);
   y2=round(maxs(2)+dx);
   win=[x1 x2 y1 y2];
   axes(h.axes1);
   %%%   axis(win);
   setaxis(h.axes1,win);

   % redraw points or ellipses
   if strcmpi(sets.id,ID_FINITE)==1,
      % points
      for i=1:sum(sets.K),
         line(sets.X(1,i),sets.X(2,i), ...
            'LineStyle','none', ...
            'Marker','.', ...
            'Color',XCOLORS(mod(sets.I(i)-1,MAXCOLOR)+1), ...
            'MarkerSize',25, ...
            'ButtonDownFcn','creatset(''click'',gcf)',...
            'EraseMode','none',...
            'Tag','point');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -