From a65cb5d2dedb1f8a08791d5a3d42100ebfa86e24 Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Mon, 17 Sep 2012 17:08:06 +0400 Subject: [PATCH] added extra debug parameters in resize test --- modules/imgproc/test/test_imgwarp.cpp | 27 ++++++++++++++++++-- modules/imgproc/test/test_imgwarp_strict.cpp | 17 ++++++++---- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/modules/imgproc/test/test_imgwarp.cpp b/modules/imgproc/test/test_imgwarp.cpp index c43ecd467..64bd7cc42 100644 --- a/modules/imgproc/test/test_imgwarp.cpp +++ b/modules/imgproc/test/test_imgwarp.cpp @@ -1491,16 +1491,39 @@ TEST(Imgproc_resize_area, regression) }; cv::Mat src(16, 16, CV_16UC1, input_data); - cv::Mat actual; cv::Mat expected(5,5,CV_16UC1, expected_data); + cv::Mat actual(expected.size(), expected.type()); - cv::resize(src, actual, cv::Size(), 0.3, 0.3, INTER_AREA); + cv::resize(src, actual, actual.size(), 0.0, 0.0, INTER_AREA); ASSERT_EQ(actual.type(), expected.type()); ASSERT_EQ(actual.size(), expected.size()); Mat diff; absdiff(actual, expected, diff); Mat one_channel_diff = diff.reshape(1); + + int elem_diff = 1.0f; + Size dsize = actual.size(); + for (int dy = 0; dy < dsize.height; ++dy) + { + ushort* eD = expected.ptr(dy); + ushort* aD = actual.ptr(dy); + + for (int dx = 0; dx < dsize.width; ++dx) + if (fabs(static_cast(aD[dx] - eD[dx])) > elem_diff) + { + cvtest::TS::ptr()->printf(cvtest::TS::SUMMARY, "Inf norm: %f\n", static_cast(norm(actual, expected, NORM_INF))); + cvtest::TS::ptr()->printf(cvtest::TS::SUMMARY, "Error in : (%d, %d)\n", dx, dy); + + const int radius = 3; + int rmin = MAX(dy - radius, 0), rmax = MIN(dy + radius, dsize.height); + int cmin = MAX(dx - radius, 0), cmax = MIN(dx + radius, dsize.width); + + std::cout << "actual result:\n" << actual(Range(rmin, rmax), Range(cmin, cmax)) << std::endl; + std::cout << "expected result:\n" << expected(Range(rmin, rmax), Range(cmin, cmax)) << std::endl; + } + } + ASSERT_EQ(norm(one_channel_diff, cv::NORM_INF),0); } diff --git a/modules/imgproc/test/test_imgwarp_strict.cpp b/modules/imgproc/test/test_imgwarp_strict.cpp index 473031422..62cb9004c 100644 --- a/modules/imgproc/test/test_imgwarp_strict.cpp +++ b/modules/imgproc/test/test_imgwarp_strict.cpp @@ -261,11 +261,18 @@ void CV_ImageWarpBaseTest::validate_results() const PRINT_TO_LOG("Dsize: (%d, %d)\n", dsize.width / cn, dsize.height); PRINT_TO_LOG("Ssize: (%d, %d)\n", src.cols, src.rows); - float scale_x = static_cast(ssize.width) / dsize.width, - scale_y = static_cast(ssize.height) / dsize.height; - PRINT_TO_LOG("Interpolation: %s\n", interpolation_to_string(interpolation == INTER_AREA && - fabs(scale_x - cvRound(scale_x)) < FLT_EPSILON && - fabs(scale_y - cvRound(scale_y)) < FLT_EPSILON ? INTER_LANCZOS4 + 1 : interpolation)); + double scale_x = static_cast(ssize.width) / dsize.width; + double scale_y = static_cast(ssize.height) / dsize.height; + bool area_fast = interpolation == INTER_AREA && + fabs(scale_x - cvRound(scale_x)) < FLT_EPSILON && + fabs(scale_y - cvRound(scale_y)) < FLT_EPSILON; + if (area_fast) + { + scale_y = cvRound(scale_y); + scale_x = cvRound(scale_x); + } + + PRINT_TO_LOG("Interpolation: %s\n", interpolation_to_string(area_fast ? INTER_LANCZOS4 + 1 : interpolation)); PRINT_TO_LOG("Scale (x, y): (%lf, %lf)\n", scale_x, scale_y); PRINT_TO_LOG("Elemsize: %d\n", src.elemSize1()); PRINT_TO_LOG("Channels: %d\n", cn);