Commit 96320cac authored by Hamdi Sahloul's avatar Hamdi Sahloul

[moved from opencv] cuda::polarToCart: test double precision and tune tolerance

original commit: https://github.com/opencv/opencv/commit/99326123733dfa9a24cc8c1dac4bc402310e0b06
parent 4457f882
...@@ -1346,6 +1346,7 @@ PERF_TEST_P(Sz, MagnitudeSqr, ...@@ -1346,6 +1346,7 @@ PERF_TEST_P(Sz, MagnitudeSqr,
// Phase // Phase
DEF_PARAM_TEST(Sz_AngleInDegrees, cv::Size, bool); DEF_PARAM_TEST(Sz_AngleInDegrees, cv::Size, bool);
DEF_PARAM_TEST(Sz_Type_AngleInDegrees, cv::Size, MatType, bool);
PERF_TEST_P(Sz_AngleInDegrees, Phase, PERF_TEST_P(Sz_AngleInDegrees, Phase,
Combine(CUDA_TYPICAL_MAT_SIZES, Combine(CUDA_TYPICAL_MAT_SIZES,
...@@ -1423,17 +1424,19 @@ PERF_TEST_P(Sz_AngleInDegrees, CartToPolar, ...@@ -1423,17 +1424,19 @@ PERF_TEST_P(Sz_AngleInDegrees, CartToPolar,
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// PolarToCart // PolarToCart
PERF_TEST_P(Sz_AngleInDegrees, PolarToCart, PERF_TEST_P(Sz_Type_AngleInDegrees, PolarToCart,
Combine(CUDA_TYPICAL_MAT_SIZES, Combine(CUDA_TYPICAL_MAT_SIZES,
testing::Values(CV_32FC1, CV_64FC1),
Bool())) Bool()))
{ {
const cv::Size size = GET_PARAM(0); const cv::Size size = GET_PARAM(0);
const bool angleInDegrees = GET_PARAM(1); const int type = GET_PARAM(1);
const bool angleInDegrees = GET_PARAM(2);
cv::Mat magnitude(size, CV_32FC1); cv::Mat magnitude(size, type);
declare.in(magnitude, WARMUP_RNG); declare.in(magnitude, WARMUP_RNG);
cv::Mat angle(size, CV_32FC1); cv::Mat angle(size, type);
declare.in(angle, WARMUP_RNG); declare.in(angle, WARMUP_RNG);
if (PERF_RUN_CUDA()) if (PERF_RUN_CUDA())
......
...@@ -2754,10 +2754,11 @@ INSTANTIATE_TEST_CASE_P(CUDA_Arithm, CartToPolar, testing::Combine( ...@@ -2754,10 +2754,11 @@ INSTANTIATE_TEST_CASE_P(CUDA_Arithm, CartToPolar, testing::Combine(
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// polarToCart // polarToCart
PARAM_TEST_CASE(PolarToCart, cv::cuda::DeviceInfo, cv::Size, AngleInDegrees, UseRoi) PARAM_TEST_CASE(PolarToCart, cv::cuda::DeviceInfo, cv::Size, MatType, AngleInDegrees, UseRoi)
{ {
cv::cuda::DeviceInfo devInfo; cv::cuda::DeviceInfo devInfo;
cv::Size size; cv::Size size;
int type;
bool angleInDegrees; bool angleInDegrees;
bool useRoi; bool useRoi;
...@@ -2765,8 +2766,9 @@ PARAM_TEST_CASE(PolarToCart, cv::cuda::DeviceInfo, cv::Size, AngleInDegrees, Use ...@@ -2765,8 +2766,9 @@ PARAM_TEST_CASE(PolarToCart, cv::cuda::DeviceInfo, cv::Size, AngleInDegrees, Use
{ {
devInfo = GET_PARAM(0); devInfo = GET_PARAM(0);
size = GET_PARAM(1); size = GET_PARAM(1);
angleInDegrees = GET_PARAM(2); type = GET_PARAM(2);
useRoi = GET_PARAM(3); angleInDegrees = GET_PARAM(3);
useRoi = GET_PARAM(4);
cv::cuda::setDevice(devInfo.deviceID()); cv::cuda::setDevice(devInfo.deviceID());
} }
...@@ -2774,24 +2776,26 @@ PARAM_TEST_CASE(PolarToCart, cv::cuda::DeviceInfo, cv::Size, AngleInDegrees, Use ...@@ -2774,24 +2776,26 @@ PARAM_TEST_CASE(PolarToCart, cv::cuda::DeviceInfo, cv::Size, AngleInDegrees, Use
CUDA_TEST_P(PolarToCart, Accuracy) CUDA_TEST_P(PolarToCart, Accuracy)
{ {
cv::Mat magnitude = randomMat(size, CV_32FC1); cv::Mat magnitude = randomMat(size, type);
cv::Mat angle = randomMat(size, CV_32FC1); cv::Mat angle = randomMat(size, type);
const double tol = (type == CV_32FC1 ? 1.6e-4 : 1e-4) * (angleInDegrees ? 1.0 : 19.0);
cv::cuda::GpuMat x = createMat(size, CV_32FC1, useRoi); cv::cuda::GpuMat x = createMat(size, type, useRoi);
cv::cuda::GpuMat y = createMat(size, CV_32FC1, useRoi); cv::cuda::GpuMat y = createMat(size, type, useRoi);
cv::cuda::polarToCart(loadMat(magnitude, useRoi), loadMat(angle, useRoi), x, y, angleInDegrees); cv::cuda::polarToCart(loadMat(magnitude, useRoi), loadMat(angle, useRoi), x, y, angleInDegrees);
cv::Mat x_gold; cv::Mat x_gold;
cv::Mat y_gold; cv::Mat y_gold;
cv::polarToCart(magnitude, angle, x_gold, y_gold, angleInDegrees); cv::polarToCart(magnitude, angle, x_gold, y_gold, angleInDegrees);
EXPECT_MAT_NEAR(x_gold, x, 1e-4); EXPECT_MAT_NEAR(x_gold, x, tol);
EXPECT_MAT_NEAR(y_gold, y, 1e-4); EXPECT_MAT_NEAR(y_gold, y, tol);
} }
INSTANTIATE_TEST_CASE_P(CUDA_Arithm, PolarToCart, testing::Combine( INSTANTIATE_TEST_CASE_P(CUDA_Arithm, PolarToCart, testing::Combine(
ALL_DEVICES, ALL_DEVICES,
DIFFERENT_SIZES, DIFFERENT_SIZES,
testing::Values(CV_32FC1, CV_64FC1),
testing::Values(AngleInDegrees(false), AngleInDegrees(true)), testing::Values(AngleInDegrees(false), AngleInDegrees(true)),
WHOLE_SUBMAT)); WHOLE_SUBMAT));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment