FOREST = VL_KDTREEBUILD(X) returns a structure FOREST containing the kd-tree indexing the data X. X is a M x N dimensional matrix of class DOUBLE or SINGLE with one data point per column. Use VL_KDTREEQUERY() to query the index.

VL_KDETREEBUILD() accepts the following options:

NumTrees [1]

  Specifies the number of semi-randomized KD-trees to add to the forest. Multiple trees can be used to improve approximate nearest-neighbors searches with VL_KDTREEQUERY().

ThresholdMethod [MEDIAN]

  Specifies the thresholding method used to split the data. Two methods are supported: split around the median (MEDIAN) or split around the mean (MEAN).

Verbose

  Increases the verbosity level (can be repeated).

Distance [L2]

  Specifies the type of norm which the KD-Tree should use (L1 or L2)

The FOREST structure has the following fields:

FOREST.TREES

  A structure array with one element per tree.

FOREST.DIMENSION

  Dimensionality of the indexed data.

FOREST.NUMDATA

  Number of indexed data points.

The TREE structure has the following fields:

TREE.NODES

  A structure array representing the nodes of the tree.

TREE.DATAINDEX

  A 1 x NUMDATA vector of class UINT32 representing a permutation of the data.

Nodes are numbered from 1 to NUMNODES. The NODES structure array has the following fields:

NODES.LOWERCHILD and NODES.UPPERCHILD

  1 x NUMNODES vectors of class INT32. A positive value is the index of the lower/upper child node. A negative value denotes a leaf and is (after negation) is the first or last element plus one of a range of entries in the permutation TREE.DATAINDEX. Such entries are in turn indexes of the data points that belong to that leaf. Typically there is one point per leaf.

NODES.SPLITDIMENSION and NODES.SPLITTHRESHOLD

  1 x NUMNODES vector of class UINT32 and DOUBLE, respectively, with the index of the splitting dimension and the threshold for each node.

See also: VL_KDTREEQUERY(), VL_HELP().