cxflann.h
上传用户:soukeisyuu
上传日期:2022-07-03
资源大小:5943k
文件大小:7k
源码类别:

波变换

开发平台:

Visual C++

  1. /*M///////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
  4. //
  5. //  By downloading, copying, installing or using the software you agree to this license.
  6. //  If you do not agree to this license, do not download, install,
  7. //  copy or use the software.
  8. //
  9. //
  10. //                           License Agreement
  11. //                For Open Source Computer Vision Library
  12. //
  13. // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
  14. // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
  15. // Third party copyrights are property of their respective owners.
  16. //
  17. // Redistribution and use in source and binary forms, with or without modification,
  18. // are permitted provided that the following conditions are met:
  19. //
  20. //   * Redistribution's of source code must retain the above copyright notice,
  21. //     this list of conditions and the following disclaimer.
  22. //
  23. //   * Redistribution's in binary form must reproduce the above copyright notice,
  24. //     this list of conditions and the following disclaimer in the documentation
  25. //     and/or other materials provided with the distribution.
  26. //
  27. //   * The name of the copyright holders may not be used to endorse or promote products
  28. //     derived from this software without specific prior written permission.
  29. //
  30. // This software is provided by the copyright holders and contributors "as is" and
  31. // any express or implied warranties, including, but not limited to, the implied
  32. // warranties of merchantability and fitness for a particular purpose are disclaimed.
  33. // In no event shall the Intel Corporation or contributors be liable for any direct,
  34. // indirect, incidental, special, exemplary, or consequential damages
  35. // (including, but not limited to, procurement of substitute goods or services;
  36. // loss of use, data, or profits; or business interruption) however caused
  37. // and on any theory of liability, whether in contract, strict liability,
  38. // or tort (including negligence or otherwise) arising in any way out of
  39. // the use of this software, even if advised of the possibility of such damage.
  40. //
  41. //M*/
  42. #ifndef CXFLANN_H_
  43. #define CXFLANN_H_
  44. #ifdef __cplusplus
  45. namespace flann
  46. {
  47. class Index;
  48. }
  49. namespace cv {
  50. namespace flann {
  51. /* Nearest neighbor index algorithms */
  52. enum flann_algorithm_t {
  53. LINEAR = 0,
  54. KDTREE = 1,
  55. KMEANS = 2,
  56. COMPOSITE = 3,
  57. SAVED = 254,
  58. AUTOTUNED = 255
  59. };
  60. enum flann_centers_init_t {
  61. CENTERS_RANDOM = 0,
  62. CENTERS_GONZALES = 1,
  63. CENTERS_KMEANSPP = 2
  64. };
  65. enum flann_log_level_t {
  66. LOG_NONE = 0,
  67. LOG_FATAL = 1,
  68. LOG_ERROR = 2,
  69. LOG_WARN = 3,
  70. LOG_INFO = 4
  71. };
  72. enum flann_distance_t {
  73. EUCLIDEAN = 1,
  74. MANHATTAN = 2,
  75. MINKOWSKI = 3
  76. };
  77. class CV_EXPORTS IndexFactory
  78. {
  79. public:
  80.     virtual ~IndexFactory() {}
  81. virtual ::flann::Index* createIndex(const Mat& dataset) const = 0;
  82. };
  83. struct CV_EXPORTS IndexParams : public IndexFactory {
  84. protected:
  85. IndexParams() {};
  86. };
  87. struct CV_EXPORTS LinearIndexParams : public IndexParams {
  88. LinearIndexParams() {};
  89. ::flann::Index* createIndex(const Mat& dataset) const;
  90. };
  91. struct CV_EXPORTS KDTreeIndexParams : public IndexParams {
  92. KDTreeIndexParams(int trees_ = 4) : trees(trees_) {};
  93. int trees;                 // number of randomized trees to use (for kdtree)
  94. ::flann::Index* createIndex(const Mat& dataset) const;
  95. };
  96. struct CV_EXPORTS KMeansIndexParams : public IndexParams {
  97. KMeansIndexParams(int branching_ = 32, int iterations_ = 11,
  98. flann_centers_init_t centers_init_ = CENTERS_RANDOM, float cb_index_ = 0.2 ) :
  99. branching(branching_),
  100. iterations(iterations_),
  101. centers_init(centers_init_),
  102. cb_index(cb_index_) {};
  103. int branching;             // branching factor (for kmeans tree)
  104. int iterations;            // max iterations to perform in one kmeans clustering (kmeans tree)
  105. flann_centers_init_t centers_init;          // algorithm used for picking the initial cluster centers for kmeans tree
  106.     float cb_index;            // cluster boundary index. Used when searching the kmeans tree
  107.     ::flann::Index* createIndex(const Mat& dataset) const;
  108. };
  109. struct CV_EXPORTS CompositeIndexParams : public IndexParams {
  110. CompositeIndexParams(int trees_ = 4, int branching_ = 32, int iterations_ = 11,
  111. flann_centers_init_t centers_init_ = CENTERS_RANDOM, float cb_index_ = 0.2 ) :
  112. trees(trees_),
  113. branching(branching_),
  114. iterations(iterations_),
  115. centers_init(centers_init_),
  116. cb_index(cb_index_) {};
  117. int trees;                 // number of randomized trees to use (for kdtree)
  118. int branching;             // branching factor (for kmeans tree)
  119. int iterations;            // max iterations to perform in one kmeans clustering (kmeans tree)
  120. flann_centers_init_t centers_init;          // algorithm used for picking the initial cluster centers for kmeans tree
  121.     float cb_index;            // cluster boundary index. Used when searching the kmeans tree
  122.     ::flann::Index* createIndex(const Mat& dataset) const;
  123. };
  124. struct CV_EXPORTS AutotunedIndexParams : public IndexParams {
  125. AutotunedIndexParams( float target_precision_ = 0.9, float build_weight_ = 0.01,
  126. float memory_weight_ = 0, float sample_fraction_ = 0.1) :
  127. target_precision(target_precision_),
  128. build_weight(build_weight_),
  129. memory_weight(memory_weight_),
  130. sample_fraction(sample_fraction_) {};
  131. float target_precision;    // precision desired (used for autotuning, -1 otherwise)
  132. float build_weight;        // build tree time weighting factor
  133. float memory_weight;       // index memory weighting factor
  134.     float sample_fraction;     // what fraction of the dataset to use for autotuning
  135.     ::flann::Index* createIndex(const Mat& dataset) const;
  136. };
  137. struct CV_EXPORTS SavedIndexParams : public IndexParams {
  138. SavedIndexParams() {}
  139. SavedIndexParams(std::string filename_) : filename(filename_) {}
  140. std::string filename; // filename of the stored index
  141. ::flann::Index* createIndex(const Mat& dataset) const;
  142. };
  143. struct CV_EXPORTS SearchParams {
  144. SearchParams(int checks_ = 32) :
  145. checks(checks_) {};
  146. int checks;
  147. };
  148. class CV_EXPORTS Index {
  149. ::flann::Index* nnIndex;
  150. public:
  151. Index(const Mat& features, const IndexParams& params);
  152. ~Index();
  153. void knnSearch(const vector<float>& queries, vector<int>& indices, vector<float>& dists, int knn, const SearchParams& params);
  154. void knnSearch(const Mat& queries, Mat& indices, Mat& dists, int knn, const SearchParams& params);
  155. int radiusSearch(const vector<float>& query, vector<int>& indices, vector<float>& dists, float radius, const SearchParams& params);
  156. int radiusSearch(const Mat& query, Mat& indices, Mat& dists, float radius, const SearchParams& params);
  157. void save(std::string filename);
  158. int veclen() const;
  159. int size() const;
  160. };
  161. CV_EXPORTS int hierarchicalClustering(const Mat& features, Mat& centers,
  162.                                       const KMeansIndexParams& params);
  163. }
  164. }
  165. #endif // __cplusplus
  166. #endif /* CXFLANN_H_ */