added extra debug parameters in resize test
authorIlya Lavrenov <ilya.lavrenov@itseez.com>
Mon, 17 Sep 2012 13:08:06 +0000 (17:08 +0400)
committerIlya Lavrenov <ilya.lavrenov@itseez.com>
Mon, 17 Sep 2012 13:08:06 +0000 (17:08 +0400)
modules/imgproc/test/test_imgwarp.cpp
modules/imgproc/test/test_imgwarp_strict.cpp

index c43ecd4..64bd7cc 100644 (file)
@@ -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<ushort>(dy);
+        ushort* aD = actual.ptr<ushort>(dy);
+        
+        for (int dx = 0; dx < dsize.width; ++dx)
+            if (fabs(static_cast<float>(aD[dx] - eD[dx])) > elem_diff)
+            {
+                cvtest::TS::ptr()->printf(cvtest::TS::SUMMARY, "Inf norm: %f\n", static_cast<float>(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);
 }
 
index 4730314..62cb900 100644 (file)
@@ -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<float>(ssize.width) / dsize.width,
-                scale_y = static_cast<float>(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<double>(ssize.width) / dsize.width;
+                double scale_y = static_cast<double>(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);