Added perf test for remap
authorDaniil Osokin <daniil.osokin@itseez.com>
Fri, 10 Aug 2012 10:24:44 +0000 (14:24 +0400)
committerDaniil Osokin <daniil@daniil-desktop.(none)>
Fri, 10 Aug 2012 11:04:04 +0000 (15:04 +0400)
modules/imgproc/perf/perf_warp.cpp

index ef6b193..215580e 100644 (file)
@@ -7,13 +7,17 @@ using namespace testing;
 using std::tr1::make_tuple;\r
 using std::tr1::get;\r
 \r
+enum{HALF_SIZE=0, UPSIDE_DOWN, REFLECTION_X, REFLECTION_BOTH};\r
 \r
 CV_ENUM(BorderMode, BORDER_CONSTANT, BORDER_REPLICATE);\r
 CV_ENUM(InterType, INTER_NEAREST, INTER_LINEAR);\r
+CV_ENUM(RemapMode, HALF_SIZE, UPSIDE_DOWN, REFLECTION_X, REFLECTION_BOTH);\r
 \r
 typedef TestBaseWithParam< tr1::tuple<Size, InterType, BorderMode> > TestWarpAffine;\r
 typedef TestBaseWithParam< tr1::tuple<Size, InterType, BorderMode> > TestWarpPerspective;\r
+typedef TestBaseWithParam< tr1::tuple<MatType, Size, InterType, BorderMode, RemapMode> > TestRemap;\r
 \r
+void update_map(const Mat& src, Mat& map_x, Mat& map_y, const int remapMode );\r
 \r
 PERF_TEST_P( TestWarpAffine, WarpAffine,\r
              Combine(\r
@@ -74,6 +78,91 @@ PERF_TEST_P( TestWarpPerspective, WarpPerspective,
     TEST_CYCLE() warpPerspective( src, dst, warpMat, sz, interType, borderMode, Scalar::all(150) );\r
 \r
     SANITY_CHECK(dst);\r
+}\r
+\r
+PERF_TEST_P( TestRemap, remap,\r
+             Combine(\r
+                 Values( TYPICAL_MAT_TYPES ),\r
+                 Values( szVGA, sz720p, sz1080p ),\r
+                 ValuesIn( InterType::all() ),\r
+                 ValuesIn( BorderMode::all() ),\r
+                 ValuesIn( RemapMode::all() )\r
+                 )\r
+             )\r
+{\r
+    int type = get<0>(GetParam());\r
+    Size size = get<1>(GetParam());\r
+    int interpolationType = get<2>(GetParam());\r
+    int borderMode = get<3>(GetParam());\r
+    int remapMode = get<4>(GetParam());\r
+    unsigned int height = size.height;\r
+    unsigned int width = size.width;\r
+    Mat source(height, width, type);\r
+    Mat destination;\r
+    Mat map_x(height, width, CV_32F);\r
+    Mat map_y(height, width, CV_32F);\r
+\r
+    declare.in(source, WARMUP_RNG);\r
+\r
+    update_map(source, map_x, map_y, remapMode);\r
+\r
+    TEST_CYCLE()\r
+    {\r
+        remap(source, destination, map_x, map_y, interpolationType, borderMode);\r
+    }\r
+\r
+    SANITY_CHECK(destination, 1);\r
+}\r
+\r
+void update_map(const Mat& src, Mat& map_x, Mat& map_y, const int remapMode )\r
+{\r
+    for( int j = 0; j < src.rows; j++ )\r
+    {\r
+        for( int i = 0; i < src.cols; i++ )\r
+        {\r
+            switch( remapMode )\r
+            {\r
+            case HALF_SIZE:\r
+                if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 )\r
+                {\r
+                    map_x.at<float>(j,i) = 2*( i - src.cols*0.25 ) + 0.5 ;\r
+                    map_y.at<float>(j,i) = 2*( j - src.rows*0.25 ) + 0.5 ;\r
+                }\r
+                else\r
+                {\r
+                    map_x.at<float>(j,i) = 0 ;\r
+                    map_y.at<float>(j,i) = 0 ;\r
+                }\r
+                break;\r
+            case UPSIDE_DOWN:\r
+                map_x.at<float>(j,i) = i ;\r
+                map_y.at<float>(j,i) = src.rows - j ;\r
+                break;\r
+            case REFLECTION_X:\r
+                map_x.at<float>(j,i) = src.cols - i ;\r
+                map_y.at<float>(j,i) = j ;\r
+                break;\r
+            case REFLECTION_BOTH:\r
+                map_x.at<float>(j,i) = src.cols - i ;\r
+                map_y.at<float>(j,i) = src.rows - j ;\r
+                break;\r
+            } // end of switch\r
+        }\r
+    }\r
+}\r
+\r
+PERF_TEST(Transform, getPerspectiveTransform)\r
+{\r
+    unsigned int size = 8;\r
+    Mat source(1, size/2, CV_32FC2);\r
+    Mat destination(1, size/2, CV_32FC2);\r
+    Mat transformCoefficient;\r
+\r
+    declare.in(source, destination, WARMUP_RNG);\r
 \r
+    TEST_CYCLE()\r
+    {\r
+        transformCoefficient = getPerspectiveTransform(source, destination);\r
+    }\r
 }\r
 \r