From 2170811e48a1f4bf7f8fb350f5eb3eb7866cdf68 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Fri, 13 Jul 2018 14:34:46 +0300 Subject: [PATCH 1/3] imgproc(perf): update getPerspectiveTransform perf test Function is very fast, so 0.000 ms results are useless. 1000 runs requires 25ms on i7-6700K. --- modules/imgproc/perf/perf_warp.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/imgproc/perf/perf_warp.cpp b/modules/imgproc/perf/perf_warp.cpp index 728a7bba70..b51e9ae75c 100644 --- a/modules/imgproc/perf/perf_warp.cpp +++ b/modules/imgproc/perf/perf_warp.cpp @@ -271,7 +271,7 @@ void update_map(const Mat& src, Mat& map_x, Mat& map_y, const int remapMode ) } } -PERF_TEST(Transform, getPerspectiveTransform) +PERF_TEST(Transform, getPerspectiveTransform_1000) { unsigned int size = 8; Mat source(1, size/2, CV_32FC2); @@ -280,12 +280,14 @@ PERF_TEST(Transform, getPerspectiveTransform) declare.in(source, destination, WARMUP_RNG); - TEST_CYCLE() + PERF_SAMPLE_BEGIN() + for (int i = 0; i < 1000; i++) { transformCoefficient = getPerspectiveTransform(source, destination); } + PERF_SAMPLE_END() - SANITY_CHECK(transformCoefficient, 1e-5); + SANITY_CHECK_NOTHING(); } } // namespace From 71c6cb9c226998bb30d3408eb6d252b81a053f21 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Fri, 13 Jul 2018 14:39:32 +0300 Subject: [PATCH 2/3] imgproc(getPerspectiveTransform): solve(DECOMP_SVD -> LU) --- modules/imgproc/src/imgwarp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/imgproc/src/imgwarp.cpp b/modules/imgproc/src/imgwarp.cpp index 9e069bc84d..dea61f8e7a 100644 --- a/modules/imgproc/src/imgwarp.cpp +++ b/modules/imgproc/src/imgwarp.cpp @@ -3061,7 +3061,7 @@ cv::Mat cv::getPerspectiveTransform( const Point2f src[], const Point2f dst[] ) b[i+4] = dst[i].y; } - solve( A, B, X, DECOMP_SVD ); + solve(A, B, X, DECOMP_LU); M.ptr()[8] = 1.; return M; From 01558519296cadec3ebc69522006a47fe8907144 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Fri, 13 Jul 2018 14:57:46 +0300 Subject: [PATCH 3/3] imgproc(getPerspectiveTransform): add configuration parameter --- modules/imgproc/src/imgwarp.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/imgproc/src/imgwarp.cpp b/modules/imgproc/src/imgwarp.cpp index dea61f8e7a..66981e8f3d 100644 --- a/modules/imgproc/src/imgwarp.cpp +++ b/modules/imgproc/src/imgwarp.cpp @@ -50,6 +50,7 @@ #include "precomp.hpp" #include "opencl_kernels_imgproc.hpp" #include "hal_replacement.hpp" +#include #include "opencv2/core/hal/intrin.hpp" #include "opencv2/core/openvx/ovx_defs.hpp" #include "opencv2/core/softfloat.hpp" @@ -3061,7 +3062,9 @@ cv::Mat cv::getPerspectiveTransform( const Point2f src[], const Point2f dst[] ) b[i+4] = dst[i].y; } - solve(A, B, X, DECOMP_LU); + static int param_IMGPROC_GETPERSPECTIVETRANSFORM_SOLVE_METHOD = + (int)utils::getConfigurationParameterSizeT("OPENCV_IMGPROC_GETPERSPECTIVETRANSFORM_SOLVE_METHOD", (size_t)DECOMP_LU); + solve(A, B, X, param_IMGPROC_GETPERSPECTIVETRANSFORM_SOLVE_METHOD); M.ptr()[8] = 1.; return M;