+<hr><h2><a name="cv_motion_feature">Feature Matching</a></h2>
+
+<hr><h3><a name="decl_cvCreateFeatureTree">CreateFeatureTree</a></h3>
+<p class="Blurb">Constructs a tree of feature vectors</p>
+<pre>
+CvFeatureTree* cvCreateFeatureTree(CvMat* desc);
+</pre><p><dl>
+<dt>desc<dd>n x d matrix of n d-dimensional feature vectors (CV_32FC1 or CV_64FC1).
+</dl></p><p>
+The function <code>cvCreateFeatureTree</code> constructs a balanced kd-tree index of
+the given feature vectors. The lifetime of the desc matrix must exceed that
+of the returned tree. I.e., no copy is made of the vectors.
+</p>
+
+<hr><h3><a name="decl_cvReleaseFeatureTree">ReleaseFeatureTree</a></h3>
+<p class="Blurb">Destroys a tree of feature vectors</p>
+<pre>
+void cvReleaseFeatureTree(CvFeatureTree* tr);
+</pre><p><dl>
+<dt>tr<dd>pointer to tree being destroyed.
+</dl></p><p>
+The function <code>cvReleaseFeatureTree</code> deallocates the given kd-tree.
+</p>
+
+<hr><h3><a name="decl_cvFindFeatures">FindFeatures</a></h3>
+<p class="Blurb">Finds approximate k nearest neighbors of given vectors using best-bin-first search</p>
+<pre>
+void cvFindFeatures(CvFeatureTree* tr, CvMat* desc,
+ CvMat* results, CvMat* dist, int k=2, int emax=20);
+</pre><p><dl>
+<dt>tr<dd>pointer to kd-tree index of reference vectors.
+<dt>desc<dd>m x d matrix of (row-)vectors to find the nearest neighbors of.
+<dt>results<dd>m x k set of row indices of matching vectors (referring to matrix passed to cvCreateFeatureTree). Contains -1 in some columns if fewer than k neighbors found.
+<dt>dist<dd>m x k matrix of distances to k nearest neighbors.
+<dt>k<dd>The number of neighbors to find.
+<dt>emax<dd>The maximum number of leaves to visit.
+</dl></p><p>
+The function <code>cvFindFeatures</code> finds (with high probability) the <code>k</code> nearest
+neighbors in <code>tr</code> for each of the given (row-)vectors in <code>desc</code>, using
+best-bin-first searching (<a href="#paper_beis97">[Beis97]</a>).
+The complexity of the entire operation is at most <code>O(m*emax*log2(n))</code>,
+where <code>n</code> is the number of vectors in the tree.
+</p>
+
+<hr><h3><a name="decl_cvFindFeaturesBoxed">FindFeaturesBoxed</a></h3>
+<p class="Blurb">Orthogonal range search</p>
+<pre>
+int cvFindFeaturesBoxed(CvFeatureTree* tr,
+ CvMat* bounds_min, CvMat* bounds_max,
+ CvMat* results);
+</pre><p><dl>
+<dt>tr<dd>pointer to kd-tree index of reference vectors.
+<dt>bounds_min<dd>1 x d or d x 1 vector (CV_32FC1 or CV_64FC1) giving minimum value for each dimension.
+<dt>bounds_max<dd>1 x d or d x 1 vector (CV_32FC1 or CV_64FC1) giving maximum value for each dimension.
+<dt>results<dd>1 x m or m x 1 vector (CV_32SC1) to contain output row indices (referring to matrix passed to cvCreateFeatureTree).
+</dl></p><p>
+The function <code>cvFindFeaturesBoxed</code> performs orthogonal range seaching on the
+given kd-tree. That is, it returns the set of vectors <code>v</code> in <code>tr</code> that satisfy
+<code>bounds_min[i] <= v[i] <= bounds_max[i], 0 <= i < d</code>, where <code>d</code> is the dimension
+of vectors in the tree.
+The function returns the number of such vectors found.
+</p>