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().