From 0e9e0a01db21c77d2409cdf65affa93ab2f42e62 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Fri, 25 May 2012 11:26:43 +0000 Subject: [PATCH] Added new perf tests for boxFilter --- modules/imgproc/doc/filtering.rst | 2 +- modules/imgproc/perf/perf_blur.cpp | 52 +++++++++++++++++++++++++++++++++++++- modules/imgproc/src/smooth.cpp | 2 +- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/modules/imgproc/doc/filtering.rst b/modules/imgproc/doc/filtering.rst index 2bfc2d0..7d23e15 100644 --- a/modules/imgproc/doc/filtering.rst +++ b/modules/imgproc/doc/filtering.rst @@ -511,7 +511,7 @@ Unnormalized box filter is useful for computing various integral characteristics .. seealso:: - :ocv:func:`boxFilter`, + :ocv:func:`blur`, :ocv:func:`bilateralFilter`, :ocv:func:`GaussianBlur`, :ocv:func:`medianBlur`, diff --git a/modules/imgproc/perf/perf_blur.cpp b/modules/imgproc/perf/perf_blur.cpp index 1fc668c..4bb778f 100644 --- a/modules/imgproc/perf/perf_blur.cpp +++ b/modules/imgproc/perf/perf_blur.cpp @@ -92,6 +92,56 @@ PERF_TEST_P(Size_MatType_BorderType3x3, blur3x3, SANITY_CHECK(dst, 1e-3); } +PERF_TEST_P(Size_MatType_BorderType3x3, box3x3, + testing::Combine( + testing::Values(szODD, szQVGA, szVGA, sz720p), + testing::Values(CV_8UC1, CV_16SC1, CV_32SC1, CV_32FC1, CV_32FC3), + testing::ValuesIn(BorderType3x3::all()) + ) + ) +{ + Size size = get<0>(GetParam()); + int type = get<1>(GetParam()); + BorderType3x3 btype = get<2>(GetParam()); + + Mat src(size, type); + Mat dst(size, type); + + declare.in(src, WARMUP_RNG).out(dst); + + TEST_CYCLE() boxFilter(src, dst, -1, Size(3,3), Point(-1,-1), false, btype); + + SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE); +} + +PERF_TEST_P(Size_MatType_BorderType3x3, box3x3_inplace, + testing::Combine( + testing::Values(szODD, szQVGA, szVGA, sz720p), + testing::Values(CV_8UC1, CV_16SC1, CV_32SC1, CV_32FC1, CV_32FC3), + testing::ValuesIn(BorderType3x3::all()) + ) + ) +{ + Size size = get<0>(GetParam()); + int type = get<1>(GetParam()); + BorderType3x3 btype = get<2>(GetParam()); + + Mat src(size, type); + Mat dst(size, type); + + declare.in(src, WARMUP_RNG).out(dst); + + while(next()) + { + src.copyTo(dst); + startTimer(); + boxFilter(dst, dst, -1, Size(3,3), Point(-1,-1), false, btype); + stopTimer(); + } + + SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE); +} + PERF_TEST_P(Size_MatType_BorderType, gaussianBlur5x5, testing::Combine( testing::Values(szODD, szQVGA, szVGA, sz720p), @@ -117,7 +167,7 @@ PERF_TEST_P(Size_MatType_BorderType, gaussianBlur5x5, PERF_TEST_P(Size_MatType_BorderType, blur5x5, testing::Combine( testing::Values(szODD, szQVGA, szVGA, sz720p), - testing::Values(CV_8UC1, CV_8UC4, CV_16UC1, CV_16SC1, CV_32FC1), + testing::Values(CV_8UC1, CV_8UC4, CV_16UC1, CV_16SC1, CV_32FC1, CV_32FC3), testing::ValuesIn(BorderType::all()) ) ) diff --git a/modules/imgproc/src/smooth.cpp b/modules/imgproc/src/smooth.cpp index e18f3bd..eda4c85 100644 --- a/modules/imgproc/src/smooth.cpp +++ b/modules/imgproc/src/smooth.cpp @@ -279,7 +279,7 @@ cv::Ptr cv::createBoxFilter( int srcType, int dstType, Size ks { int sdepth = CV_MAT_DEPTH(srcType); int cn = CV_MAT_CN(srcType), sumType = CV_64F; - if( sdepth < CV_32S && (!normalize || + if( sdepth <= CV_32S && (!normalize || ksize.width*ksize.height <= (sdepth == CV_8U ? (1<<23) : sdepth == CV_16U ? (1 << 15) : (1 << 16))) ) sumType = CV_32S; -- 2.7.4