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
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