mirror of
https://github.com/opencv/opencv_contrib.git
synced 2025-10-16 13:57:05 +08:00
xfeatures2d: move SIFT to main repository
This commit is contained in:
@@ -64,7 +64,7 @@ $ cmake -D OPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules -D BUILD_opencv_<r
|
|||||||
|
|
||||||
- **tracking**: Vision Based Object Tracking -- Use and/or evaluate one of 5 different visual object tracking techniques.
|
- **tracking**: Vision Based Object Tracking -- Use and/or evaluate one of 5 different visual object tracking techniques.
|
||||||
|
|
||||||
- **xfeatures2d**: Features2D extra -- Extra 2D Features Framework containing experimental and non-free 2D feature detector/descriptor algorithms. SURF, SIFT, BRIEF, Censure, Freak, LUCID, Daisy, Self-similar.
|
- **xfeatures2d**: Features2D extra -- Extra 2D Features Framework containing experimental and non-free 2D feature detector/descriptor algorithms. SURF, BRIEF, Censure, Freak, LUCID, Daisy, Self-similar.
|
||||||
|
|
||||||
- **ximgproc**: Extended Image Processing -- Structured Forests / Domain Transform Filter / Guided Filter / Adaptive Manifold Filter / Joint Bilateral Filter / Superpixels / Ridge Detection Filter.
|
- **ximgproc**: Extended Image Processing -- Structured Forests / Domain Transform Filter / Guided Filter / Adaptive Manifold Filter / Joint Bilateral Filter / Superpixels / Ridge Detection Filter.
|
||||||
|
|
||||||
|
@@ -5,4 +5,4 @@ Extra 2D Features Framework
|
|||||||
2. Non-free 2D feature algorithms
|
2. Non-free 2D feature algorithms
|
||||||
|
|
||||||
Extra 2D Features Framework containing experimental and non-free 2D feature detector/descriptor algorithms:
|
Extra 2D Features Framework containing experimental and non-free 2D feature detector/descriptor algorithms:
|
||||||
SURF, SIFT, BRIEF, Censure, Freak, LUCID, Daisy, Self-similar.
|
SURF, BRIEF, Censure, Freak, LUCID, Daisy, Self-similar.
|
||||||
|
@@ -60,17 +60,6 @@
|
|||||||
year = {2016}
|
year = {2016}
|
||||||
}
|
}
|
||||||
|
|
||||||
@article{Lowe04,
|
|
||||||
title = {Distinctive image features from scale-invariant keypoints},
|
|
||||||
author = {Lowe, David G},
|
|
||||||
journal = {International journal of computer vision},
|
|
||||||
volume = {60},
|
|
||||||
number = {2},
|
|
||||||
pages = {91--110},
|
|
||||||
year = {2004},
|
|
||||||
publisher = {Kluwer Academic Publishers}
|
|
||||||
}
|
|
||||||
|
|
||||||
@article{Mikolajczyk2004,
|
@article{Mikolajczyk2004,
|
||||||
title = {Scale \& affine invariant interest point detectors},
|
title = {Scale \& affine invariant interest point detectors},
|
||||||
author = {Mikolajczyk, Krystian and Schmid, Cordelia},
|
author = {Mikolajczyk, Krystian and Schmid, Cordelia},
|
||||||
|
@@ -65,39 +65,6 @@ namespace cv
|
|||||||
namespace xfeatures2d
|
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<SIFT> 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
|
//! @addtogroup xfeatures2d_experiment
|
||||||
//! @{
|
//! @{
|
||||||
|
|
||||||
|
@@ -1,72 +0,0 @@
|
|||||||
// This file is part of OpenCV project.
|
|
||||||
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
||||||
// of this distribution and at http://opencv.org/license.html.
|
|
||||||
#include "perf_precomp.hpp"
|
|
||||||
|
|
||||||
namespace opencv_test { namespace {
|
|
||||||
|
|
||||||
typedef perf::TestBaseWithParam<std::string> sift;
|
|
||||||
|
|
||||||
#define SIFT_IMAGES \
|
|
||||||
"cv/detectors_descriptors_evaluation/images_datasets/leuven/img1.png",\
|
|
||||||
"stitching/a3.png"
|
|
||||||
|
|
||||||
PERF_TEST_P(sift, detect, testing::Values(SIFT_IMAGES))
|
|
||||||
{
|
|
||||||
string filename = getDataPath(GetParam());
|
|
||||||
Mat frame = imread(filename, IMREAD_GRAYSCALE);
|
|
||||||
ASSERT_FALSE(frame.empty()) << "Unable to load source image " << filename;
|
|
||||||
|
|
||||||
Mat mask;
|
|
||||||
declare.in(frame).time(90);
|
|
||||||
Ptr<SIFT> detector = SIFT::create();
|
|
||||||
vector<KeyPoint> points;
|
|
||||||
|
|
||||||
PERF_SAMPLE_BEGIN();
|
|
||||||
detector->detect(frame, points, mask);
|
|
||||||
PERF_SAMPLE_END();
|
|
||||||
|
|
||||||
SANITY_CHECK_NOTHING();
|
|
||||||
}
|
|
||||||
|
|
||||||
PERF_TEST_P(sift, extract, testing::Values(SIFT_IMAGES))
|
|
||||||
{
|
|
||||||
string filename = getDataPath(GetParam());
|
|
||||||
Mat frame = imread(filename, IMREAD_GRAYSCALE);
|
|
||||||
ASSERT_FALSE(frame.empty()) << "Unable to load source image " << filename;
|
|
||||||
|
|
||||||
Mat mask;
|
|
||||||
declare.in(frame).time(90);
|
|
||||||
|
|
||||||
Ptr<SIFT> detector = SIFT::create();
|
|
||||||
vector<KeyPoint> points;
|
|
||||||
Mat descriptors;
|
|
||||||
detector->detect(frame, points, mask);
|
|
||||||
|
|
||||||
PERF_SAMPLE_BEGIN();
|
|
||||||
detector->compute(frame, points, descriptors);
|
|
||||||
PERF_SAMPLE_END();
|
|
||||||
|
|
||||||
SANITY_CHECK_NOTHING();
|
|
||||||
}
|
|
||||||
|
|
||||||
PERF_TEST_P(sift, full, testing::Values(SIFT_IMAGES))
|
|
||||||
{
|
|
||||||
string filename = getDataPath(GetParam());
|
|
||||||
Mat frame = imread(filename, IMREAD_GRAYSCALE);
|
|
||||||
ASSERT_FALSE(frame.empty()) << "Unable to load source image " << filename;
|
|
||||||
|
|
||||||
Mat mask;
|
|
||||||
declare.in(frame).time(90);
|
|
||||||
Ptr<SIFT> detector = SIFT::create();
|
|
||||||
vector<KeyPoint> points;
|
|
||||||
Mat descriptors;
|
|
||||||
|
|
||||||
PERF_SAMPLE_BEGIN();
|
|
||||||
detector->detectAndCompute(frame, mask, points, descriptors, false);
|
|
||||||
PERF_SAMPLE_END();
|
|
||||||
|
|
||||||
SANITY_CHECK_NOTHING();
|
|
||||||
}
|
|
||||||
|
|
||||||
}} // namespace
|
|
@@ -61,6 +61,4 @@
|
|||||||
|
|
||||||
#include "opencv2/core/private.hpp"
|
#include "opencv2/core/private.hpp"
|
||||||
|
|
||||||
#define USE_AVX2 (cv::checkHardwareSupport(CV_CPU_AVX2))
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -987,12 +987,6 @@ void CV_DescriptorMatcherTest::run( int )
|
|||||||
* Detectors
|
* Detectors
|
||||||
*/
|
*/
|
||||||
|
|
||||||
TEST( Features2d_Detector_SIFT, regression )
|
|
||||||
{
|
|
||||||
CV_FeatureDetectorTest test( "detector-sift", SIFT::create() );
|
|
||||||
test.safe_run();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef OPENCV_ENABLE_NONFREE
|
#ifdef OPENCV_ENABLE_NONFREE
|
||||||
TEST( Features2d_Detector_SURF, regression )
|
TEST( Features2d_Detector_SURF, regression )
|
||||||
{
|
{
|
||||||
@@ -1028,12 +1022,6 @@ TEST( Features2d_Detector_Harris_Laplace_Affine, regression )
|
|||||||
/*
|
/*
|
||||||
* Descriptors
|
* Descriptors
|
||||||
*/
|
*/
|
||||||
TEST( Features2d_DescriptorExtractor_SIFT, regression )
|
|
||||||
{
|
|
||||||
CV_DescriptorExtractorTest<L1<float> > test( "descriptor-sift", 1.0f,
|
|
||||||
SIFT::create() );
|
|
||||||
test.safe_run();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef OPENCV_ENABLE_NONFREE
|
#ifdef OPENCV_ENABLE_NONFREE
|
||||||
TEST( Features2d_DescriptorExtractor_SURF, regression )
|
TEST( Features2d_DescriptorExtractor_SURF, regression )
|
||||||
@@ -1413,34 +1401,6 @@ TEST(DISABLED_Features2d_SURF_using_mask, regression)
|
|||||||
FeatureDetectorUsingMaskTest test(SURF::create());
|
FeatureDetectorUsingMaskTest test(SURF::create());
|
||||||
test.safe_run();
|
test.safe_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST( XFeatures2d_DescriptorExtractor, batch )
|
|
||||||
{
|
|
||||||
string path = string(cvtest::TS::ptr()->get_data_path() + "detectors_descriptors_evaluation/images_datasets/graf");
|
|
||||||
vector<Mat> imgs, descriptors;
|
|
||||||
vector<vector<KeyPoint> > keypoints;
|
|
||||||
int i, n = 6;
|
|
||||||
Ptr<SIFT> sift = SIFT::create();
|
|
||||||
|
|
||||||
for( i = 0; i < n; i++ )
|
|
||||||
{
|
|
||||||
string imgname = format("%s/img%d.png", path.c_str(), i+1);
|
|
||||||
Mat img = imread(imgname, 0);
|
|
||||||
imgs.push_back(img);
|
|
||||||
}
|
|
||||||
|
|
||||||
sift->detect(imgs, keypoints);
|
|
||||||
sift->compute(imgs, keypoints, descriptors);
|
|
||||||
|
|
||||||
ASSERT_EQ((int)keypoints.size(), n);
|
|
||||||
ASSERT_EQ((int)descriptors.size(), n);
|
|
||||||
|
|
||||||
for( i = 0; i < n; i++ )
|
|
||||||
{
|
|
||||||
EXPECT_GT((int)keypoints[i].size(), 100);
|
|
||||||
EXPECT_GT(descriptors[i].rows, 100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif // NONFREE
|
#endif // NONFREE
|
||||||
|
|
||||||
}} // namespace
|
}} // namespace
|
||||||
|
@@ -121,12 +121,6 @@ TEST(Features2d_Detector_Keypoints_SURF, validation)
|
|||||||
CV_FeatureDetectorKeypointsTest test(xfeatures2d::SURF::create());
|
CV_FeatureDetectorKeypointsTest test(xfeatures2d::SURF::create());
|
||||||
test.safe_run();
|
test.safe_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Features2d_Detector_Keypoints_SIFT, validation)
|
|
||||||
{
|
|
||||||
CV_FeatureDetectorKeypointsTest test(xfeatures2d::SIFT::create());
|
|
||||||
test.safe_run();
|
|
||||||
}
|
|
||||||
#endif // NONFREE
|
#endif // NONFREE
|
||||||
|
|
||||||
|
|
||||||
|
@@ -610,14 +610,6 @@ TEST(Features2d_RotationInvariance_Detector_SURF, regression)
|
|||||||
test.safe_run();
|
test.safe_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Features2d_RotationInvariance_Detector_SIFT, DISABLED_regression)
|
|
||||||
{
|
|
||||||
DetectorRotationInvarianceTest test(SIFT::create(),
|
|
||||||
0.45f,
|
|
||||||
0.70f);
|
|
||||||
test.safe_run();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Descriptors's rotation invariance check
|
* Descriptors's rotation invariance check
|
||||||
*/
|
*/
|
||||||
@@ -629,15 +621,7 @@ TEST(Features2d_RotationInvariance_Descriptor_SURF, regression)
|
|||||||
0.83f);
|
0.83f);
|
||||||
test.safe_run();
|
test.safe_run();
|
||||||
}
|
}
|
||||||
|
#endif // NONFREE
|
||||||
TEST(Features2d_RotationInvariance_Descriptor_SIFT, regression)
|
|
||||||
{
|
|
||||||
DescriptorRotationInvarianceTest test(SIFT::create(),
|
|
||||||
SIFT::create(),
|
|
||||||
NORM_L1,
|
|
||||||
0.98f);
|
|
||||||
test.safe_run();
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(Features2d_RotationInvariance_Descriptor_LATCH, regression)
|
TEST(Features2d_RotationInvariance_Descriptor_LATCH, regression)
|
||||||
{
|
{
|
||||||
@@ -647,7 +631,6 @@ TEST(Features2d_RotationInvariance_Descriptor_LATCH, regression)
|
|||||||
0.98f);
|
0.98f);
|
||||||
test.safe_run();
|
test.safe_run();
|
||||||
}
|
}
|
||||||
#endif // NONFREE
|
|
||||||
|
|
||||||
TEST(DISABLED_Features2d_RotationInvariance_Descriptor_DAISY, regression)
|
TEST(DISABLED_Features2d_RotationInvariance_Descriptor_DAISY, regression)
|
||||||
{
|
{
|
||||||
@@ -806,14 +789,6 @@ TEST(Features2d_ScaleInvariance_Detector_SURF, regression)
|
|||||||
test.safe_run();
|
test.safe_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Features2d_ScaleInvariance_Detector_SIFT, regression)
|
|
||||||
{
|
|
||||||
DetectorScaleInvarianceTest test(SIFT::create(),
|
|
||||||
0.69f,
|
|
||||||
0.98f);
|
|
||||||
test.safe_run();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Descriptor's scale invariance check
|
* Descriptor's scale invariance check
|
||||||
*/
|
*/
|
||||||
@@ -826,16 +801,6 @@ TEST(Features2d_ScaleInvariance_Descriptor_SURF, regression)
|
|||||||
test.safe_run();
|
test.safe_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Features2d_ScaleInvariance_Descriptor_SIFT, regression)
|
|
||||||
{
|
|
||||||
DescriptorScaleInvarianceTest test(SIFT::create(),
|
|
||||||
SIFT::create(),
|
|
||||||
NORM_L1,
|
|
||||||
0.78f);
|
|
||||||
test.safe_run();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TEST(Features2d_RotationInvariance2_Detector_SURF, regression)
|
TEST(Features2d_RotationInvariance2_Detector_SURF, regression)
|
||||||
{
|
{
|
||||||
Mat cross(100, 100, CV_8UC1, Scalar(255));
|
Mat cross(100, 100, CV_8UC1, Scalar(255));
|
||||||
|
Reference in New Issue
Block a user