added perf test for cv::Canny
authorIlya Lavrenov <ilya.lavrenov@itseez.com>
Mon, 13 Jan 2014 15:46:00 +0000 (19:46 +0400)
committerIlya Lavrenov <ilya.lavrenov@itseez.com>
Wed, 15 Jan 2014 16:06:24 +0000 (20:06 +0400)
modules/imgproc/perf/opencl/perf_filters.cpp
modules/imgproc/perf/opencl/perf_imgproc.cpp
modules/ts/include/opencv2/ts/ocl_perf.hpp

index fad50b0..25b11ca 100644 (file)
 namespace cvtest {
 namespace ocl {
 
+typedef tuple<Size, MatType, int> FilterParams;
+typedef TestBaseWithParam<FilterParams> FilterFixture;
+
 ///////////// Blur ////////////////////////
 
-typedef Size_MatType BlurFixture;
+typedef FilterFixture BlurFixture;
 
 OCL_PERF_TEST_P(BlurFixture, Blur,
-            ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
+                ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5)))
 {
-    const Size_MatType_t params = GetParam();
-    const Size srcSize = get<0>(params), ksize(3, 3);
-    const int type = get<1>(params), bordertype = BORDER_CONSTANT;
+    const FilterParams params = GetParam();
+    const Size srcSize = get<0>(params);
+    const int type = get<1>(params), ksize = get<2>(params), bordertype = BORDER_CONSTANT;
     const double eps = CV_MAT_DEPTH(type) <= CV_32S ? 1 : 1e-5;
 
     checkDeviceMaxMemoryAllocSize(srcSize, type);
@@ -69,21 +72,21 @@ OCL_PERF_TEST_P(BlurFixture, Blur,
     UMat src(srcSize, type), dst(srcSize, type);
     declare.in(src, WARMUP_RNG).out(dst);
 
-    OCL_TEST_CYCLE() cv::blur(src, dst, ksize, Point(-1, -1), bordertype);
+    OCL_TEST_CYCLE() cv::blur(src, dst, Size(ksize, ksize), Point(-1, -1), bordertype);
 
     SANITY_CHECK(dst, eps);
 }
 
 ///////////// Laplacian////////////////////////
 
-typedef Size_MatType LaplacianFixture;
+typedef FilterFixture LaplacianFixture;
 
 OCL_PERF_TEST_P(LaplacianFixture, Laplacian,
-            ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
+                ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5)))
 {
-    const Size_MatType_t params = GetParam();
+    const FilterParams params = GetParam();
     const Size srcSize = get<0>(params);
-    const int type = get<1>(params), ksize = 3;
+    const int type = get<1>(params), ksize = get<2>(params);
     const double eps = CV_MAT_DEPTH(type) <= CV_32S ? 1 : 1e-5;
 
     checkDeviceMaxMemoryAllocSize(srcSize, type);
@@ -98,14 +101,14 @@ OCL_PERF_TEST_P(LaplacianFixture, Laplacian,
 
 ///////////// Erode ////////////////////
 
-typedef Size_MatType ErodeFixture;
+typedef FilterFixture ErodeFixture;
 
 OCL_PERF_TEST_P(ErodeFixture, Erode,
-            ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
+            ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5)))
 {
-    const Size_MatType_t params = GetParam();
+    const FilterParams params = GetParam();
     const Size srcSize = get<0>(params);
-    const int type = get<1>(params), ksize = 3;
+    const int type = get<1>(params), ksize = get<2>(params);
     const Mat ker = getStructuringElement(MORPH_RECT, Size(ksize, ksize));
 
     checkDeviceMaxMemoryAllocSize(srcSize, type);
@@ -120,14 +123,14 @@ OCL_PERF_TEST_P(ErodeFixture, Erode,
 
 ///////////// Dilate ////////////////////
 
-typedef Size_MatType DilateFixture;
+typedef FilterFixture DilateFixture;
 
 OCL_PERF_TEST_P(DilateFixture, Dilate,
-            ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
+            ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5)))
 {
-    const Size_MatType_t params = GetParam();
+    const FilterParams params = GetParam();
     const Size srcSize = get<0>(params);
-    const int type = get<1>(params), ksize = 3;
+    const int type = get<1>(params), ksize = get<2>(params);
     const Mat ker = getStructuringElement(MORPH_RECT, Size(ksize, ksize));
 
     checkDeviceMaxMemoryAllocSize(srcSize, type);
@@ -144,15 +147,15 @@ OCL_PERF_TEST_P(DilateFixture, Dilate,
 
 CV_ENUM(MorphOp, MORPH_OPEN, MORPH_CLOSE, MORPH_GRADIENT, MORPH_TOPHAT, MORPH_BLACKHAT)
 
-typedef tuple<Size, MatType, MorphOp> MorphologyExParams;
+typedef tuple<Size, MatType, MorphOp, int> MorphologyExParams;
 typedef TestBaseWithParam<MorphologyExParams> MorphologyExFixture;
 
 OCL_PERF_TEST_P(MorphologyExFixture, MorphologyEx,
-                ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, MorphOp::all()))
+                ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, MorphOp::all(), OCL_PERF_ENUM(3, 5)))
 {
     const MorphologyExParams params = GetParam();
     const Size srcSize = get<0>(params);
-    const int type = get<1>(params), op = get<2>(params), ksize = 3;
+    const int type = get<1>(params), op = get<2>(params), ksize = get<3>(params);
     const Mat ker = getStructuringElement(MORPH_RECT, Size(ksize, ksize));
 
     checkDeviceMaxMemoryAllocSize(srcSize, type);
@@ -210,14 +213,14 @@ OCL_PERF_TEST_P(ScharrFixture, Scharr,
 
 ///////////// GaussianBlur ////////////////////////
 
-typedef Size_MatType GaussianBlurFixture;
+typedef FilterFixture GaussianBlurFixture;
 
 OCL_PERF_TEST_P(GaussianBlurFixture, GaussianBlur,
-            ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
+            ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5, 7)))
 {
-    const Size_MatType_t params = GetParam();
+    const FilterParams params = GetParam();
     const Size srcSize = get<0>(params);
-    const int type = get<1>(params), ksize = 7;
+    const int type = get<1>(params), ksize = get<2>(params);
     const double eps = CV_MAT_DEPTH(type) <= CV_32S ? 1 + DBL_EPSILON : 3e-4;
 
     checkDeviceMaxMemoryAllocSize(srcSize, type);
@@ -232,14 +235,14 @@ OCL_PERF_TEST_P(GaussianBlurFixture, GaussianBlur,
 
 ///////////// Filter2D ////////////////////////
 
-typedef Size_MatType Filter2DFixture;
+typedef FilterFixture Filter2DFixture;
 
 OCL_PERF_TEST_P(Filter2DFixture, Filter2D,
-            ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES))
+            ::testing::Combine(OCL_TEST_SIZES, OCL_TEST_TYPES, OCL_PERF_ENUM(3, 5)))
 {
-    const Size_MatType_t params = GetParam();
+    const FilterParams params = GetParam();
     const Size srcSize = get<0>(params);
-    const int type = get<1>(params), ksize = 3;
+    const int type = get<1>(params), ksize = get<2>(params);
     const double eps = CV_MAT_DEPTH(type) <= CV_32S ? 1 : 1e-5;
 
     checkDeviceMaxMemoryAllocSize(srcSize, type);
index d5de677..7c102fa 100644 (file)
@@ -132,7 +132,7 @@ OCL_PERF_TEST_P(CornerHarrisFixture, CornerHarris,
 
     OCL_TEST_CYCLE() cv::cornerHarris(src, dst, 5, 7, 0.1, borderType);
 
-    SANITY_CHECK(dst, 3e-5);
+    SANITY_CHECK(dst, 5e-5);
 }
 
 ///////////// Integral ////////////////////////
@@ -212,6 +212,32 @@ OCL_PERF_TEST_P(SqrBoxFilterFixture, SqrBoxFilter, OCL_TEST_SIZES)
     SANITY_CHECK(dst);
 }
 
+///////////// Canny ////////////////////////
+
+typedef tuple<int, bool> CannyParams;
+typedef TestBaseWithParam<CannyParams> CannyFixture;
+
+OCL_PERF_TEST_P(CannyFixture, Canny, ::testing::Combine(OCL_PERF_ENUM(3, 5), Bool()))
+{
+    const CannyParams params = GetParam();
+    int apertureSize = get<0>(params);
+    bool L2Grad = get<1>(params);
+
+    Mat _img = imread(getDataPath("gpu/stereobm/aloe-L.png"), cv::IMREAD_GRAYSCALE);
+    ASSERT_TRUE(!_img.empty()) << "can't open aloe-L.png";
+
+    UMat img;
+    _img.copyTo(img);
+    UMat edges(img.size(), CV_8UC1);
+
+    declare.in(img, WARMUP_RNG).out(edges);
+
+    OCL_TEST_CYCLE() cv::Canny(img, edges, 50.0, 100.0, apertureSize, L2Grad);
+
+    SANITY_CHECK(edges);
+}
+
+
 } } // namespace cvtest::ocl
 
 #endif // HAVE_OPENCL
index 0024377..37d2886 100644 (file)
@@ -57,19 +57,33 @@ using std::tr1::tuple;
 
 #define OCL_PERF_STRATEGY PERF_STRATEGY_SIMPLE
 
+#define OCL_PERF_TEST(fixture, name) SIMPLE_PERF_TEST(fixture, name)
 #define OCL_PERF_TEST_P(fixture, name, params) SIMPLE_PERF_TEST_P(fixture, name, params)
 
-#define SIMPLE_PERF_TEST_P(fixture, name, params)\
-    class OCL##_##fixture##_##name : public fixture {\
-    public:\
-        OCL##_##fixture##_##name() {}\
-    protected:\
-        virtual void PerfTestBody();\
-    };\
-    TEST_P(OCL##_##fixture##_##name, name){ declare.strategy(OCL_PERF_STRATEGY); RunPerfTestBody(); }\
-    INSTANTIATE_TEST_CASE_P(/*none*/, OCL##_##fixture##_##name, params);\
+#define SIMPLE_PERF_TEST(fixture, name) \
+    class OCL##_##fixture##_##name : \
+        public ::perf::TestBase \
+    { \
+    public: \
+        OCL##_##fixture##_##name() { } \
+    protected: \
+        virtual void PerfTestBody(); \
+    }; \
+    TEST_F(OCL##_##fixture##_##name, name) { declare.strategy(OCL_PERF_STRATEGY); RunPerfTestBody(); } \
     void OCL##_##fixture##_##name::PerfTestBody()
 
+#define SIMPLE_PERF_TEST_P(fixture, name, params) \
+    class OCL##_##fixture##_##name : \
+        public fixture \
+    { \
+    public: \
+        OCL##_##fixture##_##name() { } \
+    protected: \
+        virtual void PerfTestBody(); \
+    }; \
+    TEST_P(OCL##_##fixture##_##name, name) { declare.strategy(OCL_PERF_STRATEGY); RunPerfTestBody(); } \
+    INSTANTIATE_TEST_CASE_P(/*none*/, OCL##_##fixture##_##name, params); \
+    void OCL##_##fixture##_##name::PerfTestBody()
 
 #define OCL_SIZE_1 szVGA
 #define OCL_SIZE_2 sz720p