nonfree.hpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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 __OPENCV_XFEATURES2D_FEATURES_2D_HPP__
  43. #define __OPENCV_XFEATURES2D_FEATURES_2D_HPP__
  44. #include "opencv2/features2d.hpp"
  45. namespace cv
  46. {
  47. namespace xfeatures2d
  48. {
  49. //! @addtogroup xfeatures2d_nonfree
  50. //! @{
  51. /** @brief Class for extracting keypoints and computing descriptors using the Scale Invariant Feature Transform
  52. (SIFT) algorithm by D. Lowe @cite Lowe04 .
  53. */
  54. class CV_EXPORTS_W SIFT : public Feature2D
  55. {
  56. public:
  57. /**
  58. @param nfeatures The number of best features to retain. The features are ranked by their scores
  59. (measured in SIFT algorithm as the local contrast)
  60. @param nOctaveLayers The number of layers in each octave. 3 is the value used in D. Lowe paper. The
  61. number of octaves is computed automatically from the image resolution.
  62. @param contrastThreshold The contrast threshold used to filter out weak features in semi-uniform
  63. (low-contrast) regions. The larger the threshold, the less features are produced by the detector.
  64. @param edgeThreshold The threshold used to filter out edge-like features. Note that the its meaning
  65. is different from the contrastThreshold, i.e. the larger the edgeThreshold, the less features are
  66. filtered out (more features are retained).
  67. @param sigma The sigma of the Gaussian applied to the input image at the octave \#0. If your image
  68. is captured with a weak camera with soft lenses, you might want to reduce the number.
  69. */
  70. CV_WRAP static Ptr<SIFT> create( int nfeatures = 0, int nOctaveLayers = 3,
  71. double contrastThreshold = 0.04, double edgeThreshold = 10,
  72. double sigma = 1.6);
  73. };
  74. typedef SIFT SiftFeatureDetector;
  75. typedef SIFT SiftDescriptorExtractor;
  76. /** @brief Class for extracting Speeded Up Robust Features from an image @cite Bay06 .
  77. The algorithm parameters:
  78. - member int extended
  79. - 0 means that the basic descriptors (64 elements each) shall be computed
  80. - 1 means that the extended descriptors (128 elements each) shall be computed
  81. - member int upright
  82. - 0 means that detector computes orientation of each feature.
  83. - 1 means that the orientation is not computed (which is much, much faster). For example,
  84. if you match images from a stereo pair, or do image stitching, the matched features
  85. likely have very similar angles, and you can speed up feature extraction by setting
  86. upright=1.
  87. - member double hessianThreshold
  88. Threshold for the keypoint detector. Only features, whose hessian is larger than
  89. hessianThreshold are retained by the detector. Therefore, the larger the value, the less
  90. keypoints you will get. A good default value could be from 300 to 500, depending from the
  91. image contrast.
  92. - member int nOctaves
  93. The number of a gaussian pyramid octaves that the detector uses. It is set to 4 by default.
  94. If you want to get very large features, use the larger value. If you want just small
  95. features, decrease it.
  96. - member int nOctaveLayers
  97. The number of images within each octave of a gaussian pyramid. It is set to 2 by default.
  98. @note
  99. - An example using the SURF feature detector can be found at
  100. opencv_source_code/samples/cpp/generic_descriptor_match.cpp
  101. - Another example using the SURF feature detector, extractor and matcher can be found at
  102. opencv_source_code/samples/cpp/matcher_simple.cpp
  103. */
  104. class CV_EXPORTS_W SURF : public Feature2D
  105. {
  106. public:
  107. /**
  108. @param hessianThreshold Threshold for hessian keypoint detector used in SURF.
  109. @param nOctaves Number of pyramid octaves the keypoint detector will use.
  110. @param nOctaveLayers Number of octave layers within each octave.
  111. @param extended Extended descriptor flag (true - use extended 128-element descriptors; false - use
  112. 64-element descriptors).
  113. @param upright Up-right or rotated features flag (true - do not compute orientation of features;
  114. false - compute orientation).
  115. */
  116. CV_WRAP static Ptr<SURF> create(double hessianThreshold=100,
  117. int nOctaves = 4, int nOctaveLayers = 3,
  118. bool extended = false, bool upright = false);
  119. CV_WRAP virtual void setHessianThreshold(double hessianThreshold) = 0;
  120. CV_WRAP virtual double getHessianThreshold() const = 0;
  121. CV_WRAP virtual void setNOctaves(int nOctaves) = 0;
  122. CV_WRAP virtual int getNOctaves() const = 0;
  123. CV_WRAP virtual void setNOctaveLayers(int nOctaveLayers) = 0;
  124. CV_WRAP virtual int getNOctaveLayers() const = 0;
  125. CV_WRAP virtual void setExtended(bool extended) = 0;
  126. CV_WRAP virtual bool getExtended() const = 0;
  127. CV_WRAP virtual void setUpright(bool upright) = 0;
  128. CV_WRAP virtual bool getUpright() const = 0;
  129. };
  130. typedef SURF SurfFeatureDetector;
  131. typedef SURF SurfDescriptorExtractor;
  132. //! @}
  133. }
  134. } /* namespace cv */
  135. #endif