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

📄 colormapsmake.m

📁 Matlab下的EEG处理程序库
💻 M
📖 第 1 页 / 共 2 页
字号:
    if strcmp(button,'normal')    % left mouse button
      global M_BUTTON_DOWN M_PNTS M_LINES M_TEXT
      ii = find(X > nodes(:,1));  % find node above point
      minnode = max(ii);
      ii = find(X < nodes(:,1));  % find node below point
      maxnode = min(ii);
      if (X - nodes(minnode,1)) > (nodes(maxnode,1)-X) % if closer to maxnode
         if maxnode == nodenum;     % if maxnode is the endnode
           nodes(maxnode,2) = max(min(Y,1),0);  % only move Y-position
         else
           nodes(maxnode,1) = round(X);         % move node
           nodes(maxnode,2) = max(min(Y,1),0);
         end 
         M_BUTTON_DOWN = maxnode;               % save what node was selected
      elseif (X - nodes(minnode,1)) < (nodes(maxnode,1)-X)% if closer to minnode
         if minnode == 1     %if firstnode
           nodes(minnode,2) = max(min(Y,1),0); % only move Y-position
         else
           nodes(minnode,1) = round(X);        % move node
           nodes(minnode,2) = max(min(Y,1),0);
         end
         M_BUTTON_DOWN = minnode;              % save what node was selected
      end      
      cla
      for i = 1:nodenum-1                 % Redraw axis
        M_PNTS(i) = plot(nodes(i,1),nodes(i,2),'ow');
        M_LINES(i) = line([nodes(i,1),nodes(i+1)],...
            [nodes(i,2),nodes(i+1,2)],'color',lcolor);
      end
      M_PNTS(i+1) = plot(nodes(nodenum,1),nodes(nodenum,2),'ow');
      
      M_TEXT = text(0,1.05,...
          [' ',int2str(nodes(M_BUTTON_DOWN,1)),', ',...
            num2str(nodes(M_BUTTON_DOWN,2),2)],...
          'Color','w','clipping','off',...
          'VerticalAlignment','bottom',...
          'FontSize',10);
      
      axis([1 nodes(nodenum,1) 0 1])    


    elseif strcmp(button,'extend')     % Middle Mouse Button
      global M_BUTTON_DOWN M_PNTS M_LINES M_TEXT
      
      ii = find(X > nodes(:,1));       % find node below
      minnode = max(ii);
      ii = find(X < nodes(:,1));       % find node above
      maxnode = min(ii);
      nodes = [nodes(1:minnode,:);[round(X),max(min(Y,1),0)];...
          nodes(maxnode:nodenum,:)];   % add node shifting those above
      nodenum = size(nodes,1);
      M_BUTTON_DOWN = minnode+1;
      cla
      for i = 1:nodenum-1              % Redraw axis
        M_PNTS(i) = plot(nodes(i,1),nodes(i,2),'ow');
        M_LINES(i) = line([nodes(i,1),nodes(i+1)],...
            [nodes(i,2),nodes(i+1,2)],'color',lcolor);
      end
      M_PNTS(i+1) = plot(nodes(nodenum,1),nodes(nodenum,2),'ow'); 
      M_TEXT = text(0,1.05,...
          [' ',int2str(nodes(M_BUTTON_DOWN,1)),', ',...
            num2str(nodes(M_BUTTON_DOWN,2),2)],...
          'Color','w','clipping','off',...
          'VerticalAlignment','bottom',...
          'FontSize',10);
      
      axis([1 nodes(nodenum,1) 0 1])
      
    elseif strcmp(button,'alt')          % Right Mouse Button
      ii = find(X > nodes(:,1));         % find node below
      minnode = max(ii);
      ii = find(X < nodes(:,1));         % find node above
      maxnode = min(ii);
      if (X - nodes(minnode,1)) > (nodes(maxnode,1)-X)    % reassign nodes
        if maxnode < nodenum;
          nodes = [nodes(1:maxnode-1,:);nodes(maxnode+1:nodenum,:)];
        end
      elseif (X - nodes(minnode,1)) < (nodes(maxnode,1)-X)
        if minnode > 1
          nodes = [nodes(1:minnode-1,:);nodes(minnode+1:nodenum,:)];
        end
      end
      nodenum = size(nodes,1);
      cla
      for i = 1:nodenum-1       %redraw axis
         plot(nodes(i,1),nodes(i,2),'ow')
         line([nodes(i,1),nodes(i+1)],[nodes(i,2),nodes(i+1,2)],'color',lcolor)
      end
      plot(nodes(nodenum,1),nodes(nodenum,2),'ow') 
      axis([1 nodes(nodenum,1) 0 1])
    end
    set(axhandle,'UserData',nodes)  % update nodes


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


elseif strcmp(bins,'up')            % Mouse Button Up Handler
    figh = gcbf;
    global M_TEXT
    delete(M_TEXT)
    clear global M_BUTTON_DOWN M_LINES M_PNTS M_TEXT % clear variables
    UserData = get(figh,'UserData');
    fighandle = str2num(get(figh,'tag')); % get figure to apply colormap
    axhandle = gca;
    nodes = get(axhandle,'UserData');    % get nodes
    tagval = get(axhandle,'tag');
    if strcmp(tagval,'cb') | strcmp(tagval,'hd')
      return   % if colorbar or title axis then return
    end
    for i = 1:size(nodes,1)-1
      W = lspace(nodes(i,2),nodes(i+1,2),nodes(i+1,1)-nodes(i,1)+1);
      map(nodes(i,1):nodes(i+1,1)-1) = W(1:nodes(i+1,1)-nodes(i,1))';
    end
    map(nodes(i+1,1)) = nodes(i+1,2);
    if strcmp(tagval,'r')
      UserData(:,1) = map';
    elseif strcmp(tagval,'g')
      UserData(:,2) = map';
    elseif strcmp(tagval,'b')
      UserData(:,3) = map';
    elseif strcmp(tagval,'y')
      UserData(:,4) = map';
    end
    set(figh,'UserData',UserData,'Colormap',...      % assign new colormap
        UserData(:,1:3).*(UserData(:,4)*ones(1,3)))
    if fighandle ~= figh
      set(fighandle,'Colormap',UserData(:,1:3).*(UserData(:,4)*ones(1,3)))
    end
   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  elseif strcmp(bins,'motion')      % Mouse Motion Handler
    global M_BUTTON_DOWN M_LINES M_PNTS M_TEXT
    if isempty(M_BUTTON_DOWN)
      return     % If mouse button is not down then return
    end   
    axhandle = gca;
    nodes = get(gca,'UserData');
    tagval = get(gca,'tag');
    P = get(axhandle,'CurrentPoint');
    X = P(1,1);
    Y = P(1,2);
    nodenum = size(nodes,1);
    if M_BUTTON_DOWN == 1 | M_BUTTON_DOWN == nodenum; % move selected node to 
      nodes(M_BUTTON_DOWN,2) = max(min(Y,1),0);       % new mouse position
    else
      nodes(M_BUTTON_DOWN,1) = max(nodes(M_BUTTON_DOWN-1,1), ...
          min(nodes(M_BUTTON_DOWN+1,1),round(X)));
      nodes(M_BUTTON_DOWN,2) = max(min(Y,1),0);
    end
    
    delete(M_PNTS(M_BUTTON_DOWN))
    M_PNTS(M_BUTTON_DOWN) = plot(nodes(M_BUTTON_DOWN,1),...
        nodes(M_BUTTON_DOWN,2),'ow');
    if M_BUTTON_DOWN > 1
      delete(M_LINES(M_BUTTON_DOWN-1))
      M_LINES(M_BUTTON_DOWN-1) = line([nodes(M_BUTTON_DOWN-1,1),...
            nodes(M_BUTTON_DOWN,1)],...
          [nodes(M_BUTTON_DOWN-1,2),nodes(M_BUTTON_DOWN,2)],'color',tagval);
    end
    if M_BUTTON_DOWN < nodenum
      delete(M_LINES(M_BUTTON_DOWN))
      M_LINES(M_BUTTON_DOWN) = line([nodes(M_BUTTON_DOWN,1),...
            nodes(M_BUTTON_DOWN+1,1)],...
          [nodes(M_BUTTON_DOWN,2),nodes(M_BUTTON_DOWN+1,2)],'color',tagval);
    end  
    
    delete(M_TEXT)
    M_TEXT = text(0,1.05,...
          [' ',int2str(nodes(M_BUTTON_DOWN,1)),', ',...
            num2str(nodes(M_BUTTON_DOWN,2),2)],...
          'Color','w','clipping','off',...
          'VerticalAlignment','bottom',...
          'FontSize',10);
    
    axis([1 nodes(nodenum,1) 0 1])
    set(axhandle,'UserData',nodes)
    
  elseif strcmp(bins,'export')   % export colormap to desktop
    fig = gcbf;
    pos = get(fig,'Position');
    figx = 400;                  % set up dialog figure
    figy = 200;
    figh = figure('Units','pixels',...
        'Position',...
        [pos(1)+pos(3)/2-figx/2 pos(2)+pos(4)/2-figy/2 figx figy],...
        'Resize','off','CloseRequestFcn','','menubar','none',...
        'numbertitle','off');
    uicolor = get(figh,'Color');
    
    % text uicontrol
    uicontrol('Style','Text','Units','Pixels',...
        'String','Output Colormap to Desktop Variable:',...
        'Position',[20 figy-40 300 22],'HorizontalAlignment','left',...
        'FontSize',14,'BackGroundColor',uicolor)
    
    % edit uicontrol
    ui1 = uicontrol('Style','Edit','Units','Pixels',...
        'String','cmap','FontSize',12,...
        'Position',[120 figy-100 150 30]);
    
    TIMESTRING = ['[OBJ1,FIGH1] = gcbo;',...
                  'OBJHAN = get(OBJ1,''UserData'');',...
                  'LAB1 = get(OBJHAN(1),''string'');',...
                  'DATA1 = get(OBJHAN(2),''Colormap'');',...
                  'eval([LAB1,'' = DATA1;'']);',...
                  'delete(FIGH1);',...
                  'clear OBJ1 FIGH1 OBJHAN DATA1 LAB1'];
    
    % OK Button
    uicontrol('Style','PushButton','Units','Pixels',...
        'String','OK','FontSize',14,...
        'Position',[figx/4-20 10 65 30],...
        'UserData',[ui1 fig],'Callback',TIMESTRING)
    
    TIMESTRING = ['[OBJ1,FIGH1] = gcbo;',...
                'delete(FIGH1);',...
                'clear OBJ1 FIGH1;'];
    
    % Cancel Button
    uicontrol('Style','PushButton','Units','Pixels',...
        'String','Cancel','FontSize',14,...
        'Position',[3*figx/4-20 10 65 30],...
        'Callback',TIMESTRING)
    
  elseif strcmp(bins,'help')   % Help function
      
      helpstr = sprintf(['Left Button - move RGB node\n',...
                         'Middle Button - add node to RGB\n',...
                         'Right Button - remove node (>2)\n\n',...
                         'Export button - assign colormap to variable']);
      
      help = helpdlg(helpstr,'ColorMap HELP');
      
      
  elseif strcmp(bins,'close')   % Close Request function
    figh = gcbf;
    clear global M_BUTTON_DOWN M_LINES M_PNTS M_TEXT % get rid of global vars
    delete(figh)
  
  elseif strcmp(bins,'reset')   % reset Colormap to original values
    fighandle = gcbf;
    obj = findobj('tag','hd','parent',fighandle);
    map = get(obj,'UserData');  % get original colormap stored in hd axes
    set(fighandle,'Colormap',map,...
        'UserData',[map , ones(size(map,1),1)])
    
    obj = findobj('tag','cb','parent',fighandle);
    nodes = get(obj,'UserData');  % get node values stored in cb axes
    red = nodes(4:nodes(1,1)+3,:);
    green = nodes(nodes(1,1)+4:nodes(1,1)+nodes(2,1)+3,:);
    blue = nodes(nodes(1,1)+nodes(2,1)+4:nodes(1,1)+nodes(2,1)+...
        nodes(3,1)+3,:);
    
    obj = findobj('tag','r','parent',fighandle);
    axes(obj)                         % reset colormap graphs
    cla
    nodenum = nodes(1,1);
    for i = 1:nodenum-1
      plot(red(i,1),red(i,2),'ow')
      line([red(i,1),red(i+1)],[red(i,2),red(i+1,2)],'color','r')
    end
    plot(red(nodenum,1),red(nodenum,2),'ow')
    set(obj,'UserData',red)
    
    obj = findobj('tag','g','parent',fighandle);
    axes(obj)
    cla
    nodenum = nodes(2,1);
    for i = 1:nodenum-1
      plot(green(i,1),green(i,2),'ow')
      line([green(i,1),green(i+1)],[green(i,2),green(i+1,2)],'color','g')
    end
    plot(green(nodenum,1),green(nodenum,2),'ow')
    set(obj,'UserData',green)
    
    obj = findobj('tag','b','parent',fighandle);
    axes(obj)
    cla
    nodenum = nodes(3,1);
    for i = 1:nodenum-1
      plot(blue(i,1),blue(i,2),'ow')
      line([blue(i,1),blue(i+1)],[blue(i,2),blue(i+1,2)],'color','b')
    end
    plot(blue(nodenum,1),blue(nodenum,2),'ow')
    set(obj,'UserData',blue)
    
    obj = findobj('tag','y','parent',fighandle);
    axes(obj)
    cla
    trans = [1 1;size(map,1) 1];
    nodenum = 2;
    for i = 1:nodenum-1
      plot(trans(i,1),trans(i,2),'ow')
      line([trans(i,1),trans(i+1)],[trans(i,2),trans(i+1,2)],'color','y')
    end
    plot(trans(nodenum,1),trans(nodenum,2),'ow') 
    set(obj,'UserData',trans)
    figh = str2num(get(fighandle,'tag'));
    if figh~=fighandle
      set(figh,'Colormap',map)
    end
  end
end


return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function out = lspace(x,y,N)
% LSPACE
%   Unfortunately, linspace.m changed in Matlab 5.2, and it doesn't work
%   the same. The new function cannot handle the command linspace(0,0,24). 
%   It just returns an empty matrix.


out = [x+(0:N-2)*(y-x)/(N-1) y];

return

⌨️ 快捷键说明

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