www.gusucode.com > MATLAB实现图像的SIFT特征提取,并做在不同光照、不同视角下的特征匹配 > util/plotsiftframe.m

    function h=plotsiftframe(frames,varargin)
% PLOTSIFTFRAME  Plot SIFT frame
%   H=PLOTSIFTFRAME(FRAMES) plots the SIFT frames FRAMES and returns
%   and handle H to the resulting line set. FRAMES has the same format
%   used by SIFT().
%



if size(frames,1) ~= 4
	error('FRAMES should be a 4xK matrix') ;
end


putlabel = 0 ;
labels=[];
style='arrow' ;

for k=1:2:length(varargin)
  switch lower(varargin{k})
    
    case 'style'
      switch lower(varargin{k+1})
        case 'circle'
          style = 'circle';
        case 'arrow'
          style = 'arrow' ;
        otherwise
          error(['Unknown style type ''', style, '''.']) ;
      end
      
    case 'labels'
      labels = varargin{k+1} ;
      putlabel = 1;
      
    otherwise
      error(['Unknown option ''',varargin{k},'''.']) ;
  end  
end

K = size(frames,2) ;

% --------------------------------------------------------------------
%                  Do the work
% --------------------------------------------------------------------

hold on ;
K=size(frames,2) ;
thr=linspace(0,2*pi,40) ;

allx = nan*ones(1, 40*K+(K-1)) ;
ally = nan*ones(1, 40*K+(K-1)) ;

allxf = nan*ones(1, 3*K) ;
allyf = nan*ones(1, 3*K) ;

for k=1:K
	xc=frames(1,k) ;
	yc=frames(2,k) ;
	r=1.5*4*frames(3,k) ;
	th=frames(4,k) ;
	
	x = r*cos(thr) + xc ;
	y = r*sin(thr) + yc ;
		
	allx((k-1)*(41) + (1:40)) = x ;
	ally((k-1)*(41) + (1:40)) = y ;

	allxf((k-1)*3 + (1:2)) = [xc xc+r*cos(th)] ;
	allyf((k-1)*3 + (1:2)) = [yc yc+r*sin(th)] ;
	
	if putlabel
		x=xc+r ;
		y=yc ;
		h=text(x+2,y,sprintf('%d',labels(k))) ;
		set(h,'Color',[1 0 0]) ;
		plot(x,y,'r.') ;
	end

end

switch style
  case 'circle'    
    h=line([allx nan allxf], [ally nan allyf], 'Color','g','LineWidth',3) ;
  case 'arrow'
    h=line([allxf], [allyf], 'Color','g','LineWidth',3) ;
end