123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- // 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 "test_precomp.hpp"
- #include "features2d/test/test_detectors_invariance.impl.hpp" // main OpenCV repo
- #include "features2d/test/test_descriptors_invariance.impl.hpp" // main OpenCV repo
- namespace opencv_test { namespace {
- static const char* const IMAGE_TSUKUBA = "features2d/tsukuba.png";
- static const char* const IMAGE_BIKES = "detectors_descriptors_evaluation/images_datasets/bikes/img1.png";
- // ========================== ROTATION INVARIANCE =============================
- #ifdef OPENCV_ENABLE_NONFREE
- INSTANTIATE_TEST_CASE_P(SURF, DetectorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA, SURF::create(), 0.40f, 0.76f)
- ));
- INSTANTIATE_TEST_CASE_P(SURF, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA, SURF::create(), SURF::create(), 0.83f)
- ));
- #endif // NONFREE
- INSTANTIATE_TEST_CASE_P(LATCH, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA, SIFT::create(), LATCH::create(), 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(BEBLID, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA, SIFT::create(), BEBLID::create(6.75), 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(DAISY, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- BRISK::create(),
- DAISY::create(15, 3, 8, 8, DAISY::NRM_NONE, noArray(), true, true),
- 0.79f)
- ));
- #ifdef OPENCV_XFEATURES2D_HAS_VGG_DATA
- INSTANTIATE_TEST_CASE_P(VGG120, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- KAZE::create(),
- VGG::create(VGG::VGG_120, 1.4f, true, true, 48.0f, false),
- 0.97f)
- ));
- INSTANTIATE_TEST_CASE_P(VGG80, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- KAZE::create(),
- VGG::create(VGG::VGG_80, 1.4f, true, true, 48.0f, false),
- 0.97f)
- ));
- INSTANTIATE_TEST_CASE_P(VGG64, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- KAZE::create(),
- VGG::create(VGG::VGG_64, 1.4f, true, true, 48.0f, false),
- 0.97f)
- ));
- INSTANTIATE_TEST_CASE_P(VGG48, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- KAZE::create(),
- VGG::create(VGG::VGG_48, 1.4f, true, true, 48.0f, false),
- 0.97f)
- ));
- #endif // OPENCV_XFEATURES2D_HAS_VGG_DATA
- #ifdef OPENCV_ENABLE_NONFREE
- INSTANTIATE_TEST_CASE_P(BRIEF_64, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- BriefDescriptorExtractor::create(64,true),
- 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(BRIEF_32, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- BriefDescriptorExtractor::create(32,true),
- 0.97f)
- ));
- INSTANTIATE_TEST_CASE_P(BRIEF_16, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- BriefDescriptorExtractor::create(16, true),
- 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(FREAK, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- FREAK::create(),
- 0.90f)
- ));
- #ifdef OPENCV_XFEATURES2D_HAS_BOOST_DATA
- INSTANTIATE_TEST_CASE_P(BoostDesc_BGM, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- BoostDesc::create(BoostDesc::BGM, true, 6.25f),
- 0.999f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BGM_HARD, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- BoostDesc::create(BoostDesc::BGM_HARD, true, 6.25f),
- 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BGM_BILINEAR, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- BoostDesc::create(BoostDesc::BGM_BILINEAR, true, 6.25f),
- 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BGM_LBGM, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- BoostDesc::create(BoostDesc::LBGM, true, 6.25f),
- 0.999f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BINBOOST_64, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- BoostDesc::create(BoostDesc::BINBOOST_64, true, 6.25f),
- 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BINBOOST_128, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- BoostDesc::create(BoostDesc::BINBOOST_128, true, 6.25f),
- 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BINBOOST_256, DescriptorRotationInvariance, Values(
- make_tuple(IMAGE_TSUKUBA,
- SURF::create(),
- BoostDesc::create(BoostDesc::BINBOOST_256, true, 6.25f),
- 0.999f)
- ));
- #endif // OPENCV_XFEATURES2D_HAS_BOOST_DATA
- #endif
- // ============================ SCALE INVARIANCE ==============================
- #ifdef OPENCV_ENABLE_NONFREE
- INSTANTIATE_TEST_CASE_P(SURF, DetectorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES, SURF::create(), 0.64f, 0.84f)
- ));
- INSTANTIATE_TEST_CASE_P(SURF, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES, SURF::create(), SURF::create(), 0.7f)
- ));
- #endif // NONFREE
- #if 0 // DAISY is not scale invariant
- INSTANTIATE_TEST_CASE_P(DISABLED_DAISY, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- BRISK::create(),
- DAISY::create(15, 3, 8, 8, DAISY::NRM_NONE, noArray(), true, true),
- 0.1f)
- ));
- #endif
- #ifdef OPENCV_XFEATURES2D_HAS_VGG_DATA
- INSTANTIATE_TEST_CASE_P(VGG120, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- KAZE::create(),
- VGG::create(VGG::VGG_120, 1.4f, true, true, 48.0f, false),
- 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(VGG80, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- KAZE::create(),
- VGG::create(VGG::VGG_80, 1.4f, true, true, 48.0f, false),
- 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(VGG64, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- KAZE::create(),
- VGG::create(VGG::VGG_64, 1.4f, true, true, 48.0f, false),
- 0.97f)
- ));
- INSTANTIATE_TEST_CASE_P(VGG48, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- KAZE::create(),
- VGG::create(VGG::VGG_48, 1.4f, true, true, 48.0f, false),
- 0.93f)
- ));
- #endif // OPENCV_XFEATURES2D_HAS_VGG_DATA
- #ifdef OPENCV_ENABLE_NONFREE // SURF detector is used in tests
- #ifdef OPENCV_XFEATURES2D_HAS_BOOST_DATA
- INSTANTIATE_TEST_CASE_P(BoostDesc_BGM, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- SURF::create(),
- BoostDesc::create(BoostDesc::BGM, true, 6.25f),
- 0.98f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BGM_HARD, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- SURF::create(),
- BoostDesc::create(BoostDesc::BGM_HARD, true, 6.25f),
- 0.75f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BGM_BILINEAR, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- SURF::create(),
- BoostDesc::create(BoostDesc::BGM_BILINEAR, true, 6.25f),
- 0.95f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_LBGM, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- SURF::create(),
- BoostDesc::create(BoostDesc::LBGM, true, 6.25f),
- 0.95f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BINBOOST_64, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- SURF::create(),
- BoostDesc::create(BoostDesc::BINBOOST_64, true, 6.25f),
- 0.75f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BINBOOST_128, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- SURF::create(),
- BoostDesc::create(BoostDesc::BINBOOST_128, true, 6.25f),
- 0.95f)
- ));
- INSTANTIATE_TEST_CASE_P(BoostDesc_BINBOOST_256, DescriptorScaleInvariance, Values(
- make_tuple(IMAGE_BIKES,
- SURF::create(),
- BoostDesc::create(BoostDesc::BINBOOST_256, true, 6.25f),
- 0.98f)
- ));
- #endif // OPENCV_XFEATURES2D_HAS_BOOST_DATA
- #endif // NONFREE
- // ============================== OTHER TESTS =================================
- #ifdef OPENCV_ENABLE_NONFREE
- TEST(Features2d_RotationInvariance2_Detector_SURF, regression)
- {
- Mat cross(100, 100, CV_8UC1, Scalar(255));
- line(cross, Point(30, 50), Point(69, 50), Scalar(100), 3);
- line(cross, Point(50, 30), Point(50, 69), Scalar(100), 3);
- Ptr<SURF> surf = SURF::create(8000., 3, 4, true, false);
- vector<KeyPoint> keypoints;
- surf->detect(cross, keypoints);
- // Expect 5 keypoints. One keypoint has coordinates (50.0, 50.0).
- // The other 4 keypoints should have the same response.
- // The order of the keypoints is indeterminate.
- ASSERT_EQ(keypoints.size(), (vector<KeyPoint>::size_type) 5);
- int i1 = -1;
- for(int i = 0; i < 5; i++)
- {
- if(keypoints[i].pt.x == 50.0f)
- ;
- else if(i1 == -1)
- i1 = i;
- else
- ASSERT_LT(fabs(keypoints[i1].response - keypoints[i].response) / keypoints[i1].response, 1e-6);
- }
- }
- #endif // NONFREE
- }} // namespace
|