mirror of
https://github.com/opencv/opencv.git
synced 2025-06-12 20:42:53 +08:00
features2d(test): more AKAZE tests
This commit is contained in:
parent
ad2e864a9a
commit
94dbc35d92
@ -2144,7 +2144,8 @@ void generateDescriptorSubsample(Mat& sampleList, Mat& comparisons, int nbits,
|
|||||||
}
|
}
|
||||||
ssz *= nchannels;
|
ssz *= nchannels;
|
||||||
|
|
||||||
CV_Assert(nbits <= ssz); // Descriptor size can't be bigger than full descriptor
|
CV_Assert(ssz == 162*nchannels);
|
||||||
|
CV_Assert(nbits <= ssz && "Descriptor size can't be bigger than full descriptor (486 = 162*3 - 3 channels)");
|
||||||
|
|
||||||
// Since the full descriptor is usually under 10k elements, we pick
|
// Since the full descriptor is usually under 10k elements, we pick
|
||||||
// the selection from the full matrix. We take as many samples per
|
// the selection from the full matrix. We take as many samples per
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace cv;
|
using namespace cv;
|
||||||
|
using namespace testing;
|
||||||
|
|
||||||
const string FEATURES2D_DIR = "features2d";
|
const string FEATURES2D_DIR = "features2d";
|
||||||
const string IMAGE_FILENAME = "tsukuba.png";
|
const string IMAGE_FILENAME = "tsukuba.png";
|
||||||
@ -417,68 +418,82 @@ TEST( Features2d_DescriptorExtractor, batch )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST( Features2d_Feature2d, no_crash )
|
class DescriptorImage : public TestWithParam<std::string>
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual void SetUp() {
|
||||||
|
pattern = GetParam();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string pattern;
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_P(DescriptorImage, no_crash)
|
||||||
{
|
{
|
||||||
const String& pattern = string(cvtest::TS::ptr()->get_data_path() + "shared/*.png");
|
|
||||||
vector<String> fnames;
|
vector<String> fnames;
|
||||||
glob(pattern, fnames, false);
|
glob(cvtest::TS::ptr()->get_data_path() + pattern, fnames, false);
|
||||||
sort(fnames.begin(), fnames.end());
|
sort(fnames.begin(), fnames.end());
|
||||||
|
|
||||||
Ptr<AKAZE> akaze = AKAZE::create();
|
Ptr<AKAZE> akaze_mldb = AKAZE::create(AKAZE::DESCRIPTOR_MLDB);
|
||||||
|
Ptr<AKAZE> akaze_mldb_upright = AKAZE::create(AKAZE::DESCRIPTOR_MLDB_UPRIGHT);
|
||||||
|
Ptr<AKAZE> akaze_mldb_256 = AKAZE::create(AKAZE::DESCRIPTOR_MLDB, 256);
|
||||||
|
Ptr<AKAZE> akaze_mldb_upright_256 = AKAZE::create(AKAZE::DESCRIPTOR_MLDB_UPRIGHT, 256);
|
||||||
|
Ptr<AKAZE> akaze_kaze = AKAZE::create(AKAZE::DESCRIPTOR_KAZE);
|
||||||
|
Ptr<AKAZE> akaze_kaze_upright = AKAZE::create(AKAZE::DESCRIPTOR_KAZE_UPRIGHT);
|
||||||
Ptr<ORB> orb = ORB::create();
|
Ptr<ORB> orb = ORB::create();
|
||||||
Ptr<KAZE> kaze = KAZE::create();
|
Ptr<KAZE> kaze = KAZE::create();
|
||||||
Ptr<BRISK> brisk = BRISK::create();
|
Ptr<BRISK> brisk = BRISK::create();
|
||||||
size_t i, n = fnames.size();
|
size_t n = fnames.size();
|
||||||
vector<KeyPoint> keypoints;
|
vector<KeyPoint> keypoints;
|
||||||
Mat descriptors;
|
Mat descriptors;
|
||||||
orb->setMaxFeatures(5000);
|
orb->setMaxFeatures(5000);
|
||||||
|
|
||||||
for( i = 0; i < n; i++ )
|
for(size_t i = 0; i < n; i++ )
|
||||||
{
|
{
|
||||||
printf("%d. image: %s:\n", (int)i, fnames[i].c_str());
|
printf("%d. image: %s:\n", (int)i, fnames[i].c_str());
|
||||||
if( strstr(fnames[i].c_str(), "MP.png") != 0 )
|
if( strstr(fnames[i].c_str(), "MP.png") != 0 )
|
||||||
|
{
|
||||||
|
printf("\tskip\n");
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
bool checkCount = strstr(fnames[i].c_str(), "templ.png") == 0;
|
bool checkCount = strstr(fnames[i].c_str(), "templ.png") == 0;
|
||||||
|
|
||||||
Mat img = imread(fnames[i], -1);
|
Mat img = imread(fnames[i], -1);
|
||||||
printf("\tAKAZE ... "); fflush(stdout);
|
|
||||||
akaze->detectAndCompute(img, noArray(), keypoints, descriptors);
|
|
||||||
printf("(%d keypoints) ", (int)keypoints.size()); fflush(stdout);
|
|
||||||
if( checkCount )
|
|
||||||
{
|
|
||||||
EXPECT_GT((int)keypoints.size(), 0);
|
|
||||||
}
|
|
||||||
ASSERT_EQ(descriptors.rows, (int)keypoints.size());
|
|
||||||
printf("ok\n");
|
|
||||||
|
|
||||||
printf("\tKAZE ... "); fflush(stdout);
|
printf("\t%dx%d\n", img.cols, img.rows);
|
||||||
kaze->detectAndCompute(img, noArray(), keypoints, descriptors);
|
|
||||||
printf("(%d keypoints) ", (int)keypoints.size()); fflush(stdout);
|
|
||||||
if( checkCount )
|
|
||||||
{
|
|
||||||
EXPECT_GT((int)keypoints.size(), 0);
|
|
||||||
}
|
|
||||||
ASSERT_EQ(descriptors.rows, (int)keypoints.size());
|
|
||||||
printf("ok\n");
|
|
||||||
|
|
||||||
printf("\tORB ... "); fflush(stdout);
|
#define TEST_DETECTOR(name, descriptor) \
|
||||||
orb->detectAndCompute(img, noArray(), keypoints, descriptors);
|
keypoints.clear(); descriptors.release(); \
|
||||||
printf("(%d keypoints) ", (int)keypoints.size()); fflush(stdout);
|
printf("\t" name "\n"); fflush(stdout); \
|
||||||
if( checkCount )
|
descriptor->detectAndCompute(img, noArray(), keypoints, descriptors); \
|
||||||
{
|
printf("\t\t\t(%d keypoints, descriptor size = %d)\n", (int)keypoints.size(), descriptors.cols); fflush(stdout); \
|
||||||
EXPECT_GT((int)keypoints.size(), 0);
|
if (checkCount) \
|
||||||
}
|
{ \
|
||||||
|
EXPECT_GT((int)keypoints.size(), 0); \
|
||||||
|
} \
|
||||||
ASSERT_EQ(descriptors.rows, (int)keypoints.size());
|
ASSERT_EQ(descriptors.rows, (int)keypoints.size());
|
||||||
printf("ok\n");
|
|
||||||
|
|
||||||
printf("\tBRISK ... "); fflush(stdout);
|
TEST_DETECTOR("AKAZE:MLDB", akaze_mldb);
|
||||||
brisk->detectAndCompute(img, noArray(), keypoints, descriptors);
|
TEST_DETECTOR("AKAZE:MLDB_UPRIGHT", akaze_mldb_upright);
|
||||||
printf("(%d keypoints) ", (int)keypoints.size()); fflush(stdout);
|
TEST_DETECTOR("AKAZE:MLDB_256", akaze_mldb_256);
|
||||||
if( checkCount )
|
TEST_DETECTOR("AKAZE:MLDB_UPRIGHT_256", akaze_mldb_upright_256);
|
||||||
{
|
TEST_DETECTOR("AKAZE:KAZE", akaze_kaze);
|
||||||
EXPECT_GT((int)keypoints.size(), 0);
|
TEST_DETECTOR("AKAZE:KAZE_UPRIGHT", akaze_kaze_upright);
|
||||||
}
|
TEST_DETECTOR("KAZE", kaze);
|
||||||
ASSERT_EQ(descriptors.rows, (int)keypoints.size());
|
TEST_DETECTOR("ORB", orb);
|
||||||
printf("ok\n");
|
TEST_DETECTOR("BRISK", brisk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INSTANTIATE_TEST_CASE_P(Features2d, DescriptorImage,
|
||||||
|
testing::Values(
|
||||||
|
"shared/lena.png",
|
||||||
|
"shared/box*.png",
|
||||||
|
"shared/fruits*.png",
|
||||||
|
"shared/airplane.png",
|
||||||
|
"shared/graffiti.png",
|
||||||
|
"shared/1_itseez-0001*.png",
|
||||||
|
"shared/pic*.png",
|
||||||
|
"shared/templ.png"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
@ -8,7 +8,11 @@ from pprint import PrettyPrinter as PP
|
|||||||
LONG_TESTS_DEBUG_VALGRIND = [
|
LONG_TESTS_DEBUG_VALGRIND = [
|
||||||
('calib3d', 'Calib3d_InitUndistortRectifyMap.accuracy', 2017.22),
|
('calib3d', 'Calib3d_InitUndistortRectifyMap.accuracy', 2017.22),
|
||||||
('dnn', 'Reproducibility*', 1000), # large DNN models
|
('dnn', 'Reproducibility*', 1000), # large DNN models
|
||||||
('features2d', 'Features2d_Feature2d.no_crash', 1235.68),
|
('features2d', 'Features2d/DescriptorImage.no_crash/3', 1000),
|
||||||
|
('features2d', 'Features2d/DescriptorImage.no_crash/4', 1000),
|
||||||
|
('features2d', 'Features2d/DescriptorImage.no_crash/5', 1000),
|
||||||
|
('features2d', 'Features2d/DescriptorImage.no_crash/6', 1000),
|
||||||
|
('features2d', 'Features2d/DescriptorImage.no_crash/7', 1000),
|
||||||
('imgcodecs', 'Imgcodecs_Png.write_big', 1000), # memory limit
|
('imgcodecs', 'Imgcodecs_Png.write_big', 1000), # memory limit
|
||||||
('imgcodecs', 'Imgcodecs_Tiff.decode_tile16384x16384', 1000), # memory limit
|
('imgcodecs', 'Imgcodecs_Tiff.decode_tile16384x16384', 1000), # memory limit
|
||||||
('ml', 'ML_RTrees.regression', 1423.47),
|
('ml', 'ML_RTrees.regression', 1423.47),
|
||||||
|
Loading…
Reference in New Issue
Block a user