kdtree.h
上传用户:lwxipeng
上传日期:2022-05-16
资源大小:15982k
文件大小:3k
源码类别:

视频捕捉/采集

开发平台:

Visual C++

  1. /**@file
  2. Functions and structures for maintaining a k-d tree database of image
  3. features.
  4. For more information, refer to:
  5. Beis, J. S. and Lowe, D. G.  Shape indexing using approximate
  6. nearest-neighbor search in high-dimensional spaces.  In <EM>Conference
  7. on Computer Vision and Pattern Recognition (CVPR)</EM> (2003),
  8. pp. 1000--1006.
  9. Copyright (C) 2006  Rob Hess <hess@eecs.oregonstate.edu>
  10. @version 1.1.1-20070330
  11. */
  12. #ifndef KDTREE_H
  13. #define KDTREE_H
  14. #include "cxcore.h"
  15. #ifdef __cplusplus 
  16. extern "C" { 
  17. #endif 
  18. /********************************* Structures ********************************/
  19. struct feature;
  20. /** a node in a k-d tree */
  21. struct kd_node
  22. {
  23. int ki;                      /**< partition key index */
  24. double kv;                   /**< partition key value */
  25. int leaf;                    /**< 1 if node is a leaf, 0 otherwise */
  26. struct feature* features;    /**< features at this node */
  27. int n;                       /**< number of features */
  28. struct kd_node* kd_left;     /**< left child */
  29. struct kd_node* kd_right;    /**< right child */
  30. };
  31. /*************************** Function Prototypes *****************************/
  32. /**
  33. A function to build a k-d tree database from keypoints in an array.
  34. @param features an array of features
  35. @param n the number of features in a features
  36. @return Returns the root of a kd tree built from a features.
  37. */
  38. extern struct kd_node* kdtree_build( struct feature* features, int n );
  39. /**
  40. Finds an image feature's approximate k nearest neighbors in a kd tree using
  41. Best Bin First search.
  42. @param kd_root root of an image feature kd tree
  43. @param feat image feature for whose neighbors to search
  44. @param k number of neighbors to find
  45. @param nbrs pointer to an array in which to store pointers to neighbors
  46. in order of increasing descriptor distance
  47. @param max_nn_chks search is cut off after examining this many tree entries
  48. @return Returns the number of neighbors found and stored in a nbrs, or
  49. -1 on error.
  50. */
  51. extern  int kdtree_bbf_knn( struct kd_node* kd_root, struct feature* feat,
  52.   int k, struct feature*** nbrs, int max_nn_chks );
  53. /**
  54. Finds an image feature's approximate k nearest neighbors within a specified
  55. spatial region in a kd tree using Best Bin First search.
  56. @param kd_root root of an image feature kd tree
  57. @param feat image feature for whose neighbors to search
  58. @param k number of neighbors to find
  59. @param nbrs pointer to an array in which to store pointers to neighbors
  60. in order of increasing descriptor distance
  61. @param max_nn_chks search is cut off after examining this many tree entries
  62. @param rect rectangular region in which to search for neighbors
  63. @param model if true, spatial search is based on kdtree features' model
  64. locations; otherwise it is based on their image locations
  65. @return Returns the number of neighbors found and stored in a nbrs
  66. (in case a k neighbors could not be found before examining
  67. a max_nn_checks keypoint entries).
  68. */
  69. extern   int kdtree_bbf_spatial_knn( struct kd_node* kd_root,
  70. struct feature* feat, int k,
  71. struct feature*** nbrs, int max_nn_chks,
  72. CvRect rect, int model );
  73. /**
  74. De-allocates memory held by a kd tree
  75. @param kd_root pointer to the root of a kd tree
  76. */
  77. extern   void kdtree_release( struct kd_node* kd_root );
  78. #ifdef __cplusplus 
  79. }
  80. #endif 
  81. #endif