1 #include "perf_precomp.hpp"
2 
3 using namespace std;
4 using namespace cv;
5 using namespace perf;
6 using namespace testing;
7 using std::tr1::make_tuple;
8 using std::tr1::get;
9 
10 typedef tr1::tuple<Size, MatType> Size_Source_t;
11 typedef TestBaseWithParam<Size_Source_t> Size_Source;
12 typedef TestBaseWithParam<Size> TestMatSize;
13 
14 static const float rangeHight = 256.0f;
15 static const float rangeLow = 0.0f;
16 
PERF_TEST_P(Size_Source,calcHist1d,testing::Combine (testing::Values (sz3MP,sz5MP),testing::Values (CV_8U,CV_16U,CV_32F)))17 PERF_TEST_P(Size_Source, calcHist1d,
18             testing::Combine(testing::Values(sz3MP, sz5MP),
19                              testing::Values(CV_8U, CV_16U, CV_32F) )
20             )
21 {
22     Size size = get<0>(GetParam());
23     MatType type = get<1>(GetParam());
24     Mat source(size.height, size.width, type);
25     Mat hist;
26     int channels [] = {0};
27     int histSize [] = {256};
28     int dims = 1;
29     int numberOfImages = 1;
30 
31     const float range[] = {rangeLow, rangeHight};
32     const float* ranges[] = {range};
33 
34     randu(source, rangeLow, rangeHight);
35 
36     declare.in(source);
37 
38     TEST_CYCLE_MULTIRUN(3)
39     {
40         calcHist(&source, numberOfImages, channels, Mat(), hist, dims, histSize, ranges);
41     }
42 
43     SANITY_CHECK(hist);
44 }
45 
PERF_TEST_P(Size_Source,calcHist2d,testing::Combine (testing::Values (sz3MP,sz5MP),testing::Values (CV_8UC2,CV_16UC2,CV_32FC2)))46 PERF_TEST_P(Size_Source, calcHist2d,
47             testing::Combine(testing::Values(sz3MP, sz5MP),
48                              testing::Values(CV_8UC2, CV_16UC2, CV_32FC2) )
49             )
50 {
51     Size size = get<0>(GetParam());
52     MatType type = get<1>(GetParam());
53     Mat source(size.height, size.width, type);
54     Mat hist;
55     int channels [] = {0, 1};
56     int histSize [] = {256, 256};
57     int dims = 2;
58     int numberOfImages = 1;
59 
60     const float r[] = {rangeLow, rangeHight};
61     const float* ranges[] = {r, r};
62 
63     randu(source, rangeLow, rangeHight);
64 
65     declare.in(source);
66     TEST_CYCLE()
67     {
68         calcHist(&source, numberOfImages, channels, Mat(), hist, dims, histSize, ranges);
69     }
70 
71     SANITY_CHECK(hist);
72 }
73 
PERF_TEST_P(Size_Source,calcHist3d,testing::Combine (testing::Values (sz3MP,sz5MP),testing::Values (CV_8UC3,CV_16UC3,CV_32FC3)))74 PERF_TEST_P(Size_Source, calcHist3d,
75             testing::Combine(testing::Values(sz3MP, sz5MP),
76                              testing::Values(CV_8UC3, CV_16UC3, CV_32FC3) )
77             )
78 {
79     Size size = get<0>(GetParam());
80     MatType type = get<1>(GetParam());
81     Mat hist;
82     int channels [] = {0, 1, 2};
83     int histSize [] = {32, 32, 32};
84     int dims = 3;
85     int numberOfImages = 1;
86     Mat source(size.height, size.width, type);
87 
88     const float r[] = {rangeLow, rangeHight};
89     const float* ranges[] = {r, r, r};
90 
91     randu(source, rangeLow, rangeHight);
92 
93     declare.in(source);
94     TEST_CYCLE()
95     {
96         calcHist(&source, numberOfImages, channels, Mat(), hist, dims, histSize, ranges);
97     }
98 
99     SANITY_CHECK(hist);
100 }
101 
102 #define MatSize TestMatSize
PERF_TEST_P(MatSize,equalizeHist,testing::Values (TYPICAL_MAT_SIZES))103 PERF_TEST_P(MatSize, equalizeHist,
104             testing::Values(TYPICAL_MAT_SIZES)
105             )
106 {
107     Size size = GetParam();
108     Mat source(size.height, size.width, CV_8U);
109     Mat destination;
110     declare.in(source, WARMUP_RNG);
111 
112     TEST_CYCLE()
113     {
114         equalizeHist(source, destination);
115     }
116 
117     SANITY_CHECK(destination);
118 }
119 #undef MatSize
120 
121 typedef tr1::tuple<Size, double> Sz_ClipLimit_t;
122 typedef TestBaseWithParam<Sz_ClipLimit_t> Sz_ClipLimit;
123 
124 PERF_TEST_P(Sz_ClipLimit, CLAHE,
125             testing::Combine(testing::Values(::perf::szVGA, ::perf::sz720p, ::perf::sz1080p),
126                              testing::Values(0.0, 40.0))
127             )
128 {
129     const Size size = get<0>(GetParam());
130     const double clipLimit = get<1>(GetParam());
131 
132     Mat src(size, CV_8UC1);
133     declare.in(src, WARMUP_RNG);
134 
135     Ptr<CLAHE> clahe = createCLAHE(clipLimit);
136     Mat dst;
137 
138     TEST_CYCLE() clahe->apply(src, dst);
139 
140     SANITY_CHECK(dst);
141 }
142