www.gusucode.com > 超全的模式识别matlab源码程序 > code/click_points.m
function [patterns, targets, params, region] = click_points(region) %Manually enter points into the workspace ax = region(1:4); h = findobj(findobj('Tag','classifier_GUI'),'Tag','txtNumberPointsPerClick'); if ~isempty(h), N = str2num(get(h,'String')); else N = 20; end h = findobj(findobj('Tag','classifier_GUI'),'Tag','Distribution'); if ~isempty(h), st = get(h, 'String'); val = get(h, 'Value'); distribution = st(val); else distribution = 'Gaussian'; end hold on axis(ax) patterns = []; targets = []; distx = (region(2) - region(1))/20; disty = (region(4) - region(3))/20; %Print the text on figure: t1 = text(region(1)+distx,region(3)+disty*3,'Class A => Left Mouse Click/Drag'); t2 = text(region(1)+distx,region(3)+disty*2,'Class B => Right Mouse Click/Drag'); t3 = text(region(1)+distx,region(3)+disty,'To Stop => Click any key on keyboard'); %Coordinates of figure for display: h = findobj(gcbf,'Tag','classifier_GUI'); p = get(h,'Position'); wx1 = p(1); wx2 = p(3); wy1 = p(2); wy2 = p(4); d = 0.000001; params(1).mu = []; params(2).mu = []; while 1 %Take the x,y of patterns per one click %k = waitforbuttonpress; %point1 = get(h,'CurrentPoint'); % button down detected [x, y, button] = ginput(1); point1 = [x y]; finalRect = rbbox; % return figure units point2 = get(gca,'CurrentPoint'); % button up detected if (isempty(point1)), point1 = point2; end point1 = point1(1,1:2); % extract x and y point2 = point2(1,1:2); mx = (point1(1) + point2(1))/2; my = (point1(2) + point2(2))/2; m = [mx ; my]; if (strcmp(distribution, 'Gaussian')) sx = max(0.02, abs(point1(1)-point2(1))/5); sy = max(0.02, abs(point1(2)-point2(2))/5); sigma = [sx 0 ; 0 sy]; %Calculate the points: points = sigma * randn(2,N) + m * ones(1,N); else sx = abs(point1(1)-point2(1)); sy = abs(point1(2)-point2(2)); sigma = [sx, sy; 0, 0]; %Calculate the points: points = (sigma(1,:)'*ones(1,N)) .* rand(2,N) + (m-sigma(1,:)'/2) * ones(1,N); end %Check the mouse output in order to set the class or exit : switch button case 1 plot(points(1,:),points(2,:),'gx') patterns = [patterns,points]; targets = [targets,ones(1,N)]; in = size(params(2).mu,1); params(2).mu(in+1,:)= m'; params(2).sigma(in+1,:,:) = sigma; params(2).type(in+1,:) = cellstr(distribution); case 3 plot(points(1,:),points(2,:),'bo') patterns = [patterns,points]; targets = [targets,zeros(1,N)]; in = size(params(1).mu,1); params(1).mu(in+1,:)= m'; params(1).sigma(in+1,:,:) = sigma; params(1).type(in+1,:) = cellstr(distribution); otherwise break end axis(ax) end in = size(params(1).mu,1); params(1).w = ones(in,1)/in; in = size(params(2).mu,1); params(2).w = ones(in,1)/in; params(1).p = length(params(1).w) / (length(params(1).w) + length(params(2).w)); params(2).p = length(params(2).w) / (length(params(1).w) + length(params(2).w)); region = [ax,100]; set(t1,'Visible','off') set(t2,'Visible','off') set(t3,'Visible','off') hold off;