From 82d3efc6c053455f1217e5af32732b69ef834a51 Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Mon, 13 Jan 2014 19:46:00 +0400 Subject: [PATCH] added perf test for cv::Canny --- modules/imgproc/perf/opencl/perf_filters.cpp | 61 +++++++++++++++------------- modules/imgproc/perf/opencl/perf_imgproc.cpp | 28 ++++++++++++- modules/ts/include/opencv2/ts/ocl_perf.hpp | 32 +++++++++++---- 3 files changed, 82 insertions(+), 39 deletions(-) diff --git a/modules/imgproc/perf/opencl/perf_filters.cpp b/modules/imgproc/perf/opencl/perf_filters.cpp index fad50b0..25b11ca 100644 --- a/modules/imgproc/perf/opencl/perf_filters.cpp +++ b/modules/imgproc/perf/opencl/perf_filters.cpp @@ -52,16 +52,19 @@ namespace cvtest { namespace ocl { +typedef tuple FilterParams; +typedef TestBaseWithParam 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 MorphologyExParams; +typedef tuple MorphologyExParams; typedef TestBaseWithParam 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); diff --git a/modules/imgproc/perf/opencl/perf_imgproc.cpp b/modules/imgproc/perf/opencl/perf_imgproc.cpp index d5de677..7c102fa 100644 --- a/modules/imgproc/perf/opencl/perf_imgproc.cpp +++ b/modules/imgproc/perf/opencl/perf_imgproc.cpp @@ -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 CannyParams; +typedef TestBaseWithParam 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 diff --git a/modules/ts/include/opencv2/ts/ocl_perf.hpp b/modules/ts/include/opencv2/ts/ocl_perf.hpp index 0024377..37d2886 100644 --- a/modules/ts/include/opencv2/ts/ocl_perf.hpp +++ b/modules/ts/include/opencv2/ts/ocl_perf.hpp @@ -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 -- 2.7.4