1 #include "perf_precomp.hpp"
2
3 using namespace std;
4 using namespace cv;
5 using namespace perf;
6 using std::tr1::make_tuple;
7 using std::tr1::get;
8
9 typedef perf::TestBaseWithParam<std::string> orb;
10
11 #define ORB_IMAGES \
12 "cv/detectors_descriptors_evaluation/images_datasets/leuven/img1.png",\
13 "stitching/a3.png"
14
PERF_TEST_P(orb,detect,testing::Values (ORB_IMAGES))15 PERF_TEST_P(orb, detect, testing::Values(ORB_IMAGES))
16 {
17 string filename = getDataPath(GetParam());
18 Mat frame = imread(filename, IMREAD_GRAYSCALE);
19
20 if (frame.empty())
21 FAIL() << "Unable to load source image " << filename;
22
23 Mat mask;
24 declare.in(frame);
25 Ptr<ORB> detector = ORB::create(1500, 1.3f, 1);
26 vector<KeyPoint> points;
27
28 TEST_CYCLE() detector->detect(frame, points, mask);
29
30 sort(points.begin(), points.end(), comparators::KeypointGreater());
31 SANITY_CHECK_KEYPOINTS(points, 1e-5);
32 }
33
PERF_TEST_P(orb,extract,testing::Values (ORB_IMAGES))34 PERF_TEST_P(orb, extract, testing::Values(ORB_IMAGES))
35 {
36 string filename = getDataPath(GetParam());
37 Mat frame = imread(filename, IMREAD_GRAYSCALE);
38
39 if (frame.empty())
40 FAIL() << "Unable to load source image " << filename;
41
42 Mat mask;
43 declare.in(frame);
44
45 Ptr<ORB> detector = ORB::create(1500, 1.3f, 1);
46 vector<KeyPoint> points;
47 detector->detect(frame, points, mask);
48 sort(points.begin(), points.end(), comparators::KeypointGreater());
49
50 Mat descriptors;
51
52 TEST_CYCLE() detector->compute(frame, points, descriptors);
53
54 SANITY_CHECK(descriptors);
55 }
56
PERF_TEST_P(orb,full,testing::Values (ORB_IMAGES))57 PERF_TEST_P(orb, full, testing::Values(ORB_IMAGES))
58 {
59 string filename = getDataPath(GetParam());
60 Mat frame = imread(filename, IMREAD_GRAYSCALE);
61
62 if (frame.empty())
63 FAIL() << "Unable to load source image " << filename;
64
65 Mat mask;
66 declare.in(frame);
67 Ptr<ORB> detector = ORB::create(1500, 1.3f, 1);
68
69 vector<KeyPoint> points;
70 Mat descriptors;
71
72 TEST_CYCLE() detector->detectAndCompute(frame, mask, points, descriptors, false);
73
74 perf::sort(points, descriptors);
75 SANITY_CHECK_KEYPOINTS(points, 1e-5);
76 SANITY_CHECK(descriptors);
77 }
78