Source code for
vl_demo_kdtree_ann.m
This file is located in the toolbox/demo folder in VLFeat package.
function vl_demo_kdtree_ann
% VL_DEMO_KDTREE
% Demonstrates the use of a kd-tree for approximate nearest neighbor
% (ANN) queries.
% Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson.
% All rights reserved.
%
% This file is part of the VLFeat library and is made available under
% the terms of the BSD license (see the COPYING file).
randn('state',0) ;
rand('state',0) ;
% Generate some 2D data and a query point
X = rand(2, 100) ;
Q = rand(2,1) ;
% Buld a kd-tree
kdtree = vl_kdtreebuild(X) ;
% Query with increasing accuracy
maxNumComparisonRange = [1 10 20 30] ;
for t = [1 2 3 4]
figure(t) ; clf ;
vl_plotframe(X, 'ro') ;
hold on ;
xl = [.2, .8] ;
yl = [.1, .7] ;
xlim(xl) ;
ylim(yl) ;
% vl_demo_kdtree_plot(kdtree, 1, xl, yl) ;
[i, d] = vl_kdtreequery (kdtree, X, Q, ...
'NumNeighbors', 10, ...
'MaxComparisons', maxNumComparisonRange(t), ...
'Verbose') ;
vl_plotframe(Q,'b*','markersize',10) ;
for k=1:length(i)
if i(k) == 0, continue ; end
vl_plotframe([Q ; sqrt(d(k))],'b-','linewidth',1) ;
vl_plotframe(X(:, i(k)), 'bx','markersize',15) ;
end
title(sprintf('10 ANNs with at most %d comparisions', maxNumComparisonRange(t))) ;
axis square ;
set(gca,'xtick',[],'ytick',[]) ;
vl_demo_print(t, sprintf('kdtree_ann_%d', t)) ;
end