diff --git a/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp b/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp index ca958c8b1..1c0a5f802 100644 --- a/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp +++ b/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp @@ -65,6 +65,39 @@ namespace cv namespace xfeatures2d { + +/** @brief Class for extracting keypoints and computing descriptors using the Scale Invariant Feature Transform +(SIFT) algorithm by D. Lowe @cite Lowe04 . +*/ +class CV_EXPORTS_W SIFT : public Feature2D +{ +public: + /** + @param nfeatures The number of best features to retain. The features are ranked by their scores + (measured in SIFT algorithm as the local contrast) + + @param nOctaveLayers The number of layers in each octave. 3 is the value used in D. Lowe paper. The + number of octaves is computed automatically from the image resolution. + + @param contrastThreshold The contrast threshold used to filter out weak features in semi-uniform + (low-contrast) regions. The larger the threshold, the less features are produced by the detector. + + @param edgeThreshold The threshold used to filter out edge-like features. Note that the its meaning + is different from the contrastThreshold, i.e. the larger the edgeThreshold, the less features are + filtered out (more features are retained). + + @param sigma The sigma of the Gaussian applied to the input image at the octave \#0. If your image + is captured with a weak camera with soft lenses, you might want to reduce the number. + */ + CV_WRAP static Ptr create(int nfeatures = 0, int nOctaveLayers = 3, + double contrastThreshold = 0.04, double edgeThreshold = 10, + double sigma = 1.6); +}; + +typedef SIFT SiftFeatureDetector; +typedef SIFT SiftDescriptorExtractor; + + //! @addtogroup xfeatures2d_experiment //! @{ diff --git a/modules/xfeatures2d/include/opencv2/xfeatures2d/nonfree.hpp b/modules/xfeatures2d/include/opencv2/xfeatures2d/nonfree.hpp index 953397255..472d82280 100644 --- a/modules/xfeatures2d/include/opencv2/xfeatures2d/nonfree.hpp +++ b/modules/xfeatures2d/include/opencv2/xfeatures2d/nonfree.hpp @@ -50,40 +50,6 @@ namespace cv namespace xfeatures2d { -//! @addtogroup xfeatures2d_nonfree -//! @{ - -/** @brief Class for extracting keypoints and computing descriptors using the Scale Invariant Feature Transform -(SIFT) algorithm by D. Lowe @cite Lowe04 . - */ -class CV_EXPORTS_W SIFT : public Feature2D -{ -public: - /** - @param nfeatures The number of best features to retain. The features are ranked by their scores - (measured in SIFT algorithm as the local contrast) - - @param nOctaveLayers The number of layers in each octave. 3 is the value used in D. Lowe paper. The - number of octaves is computed automatically from the image resolution. - - @param contrastThreshold The contrast threshold used to filter out weak features in semi-uniform - (low-contrast) regions. The larger the threshold, the less features are produced by the detector. - - @param edgeThreshold The threshold used to filter out edge-like features. Note that the its meaning - is different from the contrastThreshold, i.e. the larger the edgeThreshold, the less features are - filtered out (more features are retained). - - @param sigma The sigma of the Gaussian applied to the input image at the octave \#0. If your image - is captured with a weak camera with soft lenses, you might want to reduce the number. - */ - CV_WRAP static Ptr create( int nfeatures = 0, int nOctaveLayers = 3, - double contrastThreshold = 0.04, double edgeThreshold = 10, - double sigma = 1.6); -}; - -typedef SIFT SiftFeatureDetector; -typedef SIFT SiftDescriptorExtractor; - /** @brief Class for extracting Speeded Up Robust Features from an image @cite Bay06 . The algorithm parameters: diff --git a/modules/xfeatures2d/src/sift.cpp b/modules/xfeatures2d/src/sift.cpp index ec1abf1f5..0fd98b1d6 100644 --- a/modules/xfeatures2d/src/sift.cpp +++ b/modules/xfeatures2d/src/sift.cpp @@ -114,8 +114,6 @@ namespace cv namespace xfeatures2d { -#ifdef OPENCV_ENABLE_NONFREE - /*! SIFT implementation. @@ -1202,14 +1200,5 @@ void SIFT_Impl::detectAndCompute(InputArray _image, InputArray _mask, } } -#else // ! #ifdef OPENCV_ENABLE_NONFREE -Ptr SIFT::create( int, int, double, double, double ) -{ - CV_Error(Error::StsNotImplemented, - "This algorithm is patented and is excluded in this configuration; " - "Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library"); -} -#endif - } } diff --git a/modules/xfeatures2d/test/test_features2d.cpp b/modules/xfeatures2d/test/test_features2d.cpp index 2b17896f1..65e2b63f8 100644 --- a/modules/xfeatures2d/test/test_features2d.cpp +++ b/modules/xfeatures2d/test/test_features2d.cpp @@ -987,13 +987,13 @@ void CV_DescriptorMatcherTest::run( int ) * Detectors */ -#ifdef OPENCV_ENABLE_NONFREE TEST( Features2d_Detector_SIFT, regression ) { CV_FeatureDetectorTest test( "detector-sift", SIFT::create() ); test.safe_run(); } +#ifdef OPENCV_ENABLE_NONFREE TEST( Features2d_Detector_SURF, regression ) { CV_FeatureDetectorTest test( "detector-surf", SURF::create() ); @@ -1028,7 +1028,6 @@ TEST( Features2d_Detector_Harris_Laplace_Affine, regression ) /* * Descriptors */ -#ifdef OPENCV_ENABLE_NONFREE TEST( Features2d_DescriptorExtractor_SIFT, regression ) { CV_DescriptorExtractorTest > test( "descriptor-sift", 1.0f, @@ -1036,6 +1035,7 @@ TEST( Features2d_DescriptorExtractor_SIFT, regression ) test.safe_run(); } +#ifdef OPENCV_ENABLE_NONFREE TEST( Features2d_DescriptorExtractor_SURF, regression ) { #ifdef HAVE_OPENCL @@ -1334,8 +1334,9 @@ protected: Ptr f2d; }; -#ifdef OPENCV_ENABLE_NONFREE TEST(Features2d_SIFTHomographyTest, regression) { CV_DetectPlanarTest test("SIFT", 80, SIFT::create()); test.safe_run(); } + +#ifdef OPENCV_ENABLE_NONFREE TEST(Features2d_SURFHomographyTest, regression) { CV_DetectPlanarTest test("SURF", 80, SURF::create()); test.safe_run(); } #endif @@ -1400,13 +1401,13 @@ protected: Ptr featureDetector_; }; -#ifdef OPENCV_ENABLE_NONFREE TEST(Features2d_SIFT_using_mask, regression) { FeatureDetectorUsingMaskTest test(SIFT::create()); test.safe_run(); } +#ifdef OPENCV_ENABLE_NONFREE TEST(DISABLED_Features2d_SURF_using_mask, regression) { FeatureDetectorUsingMaskTest test(SURF::create());