added NORM_L2SQR type to cv::norm
This commit is contained in:
@@ -909,7 +909,7 @@ OCL_PERF_TEST_P(PSNRFixture, PSNR,
|
|||||||
|
|
||||||
OCL_TEST_CYCLE() psnr = cv::PSNR(src1, src2);
|
OCL_TEST_CYCLE() psnr = cv::PSNR(src1, src2);
|
||||||
|
|
||||||
SANITY_CHECK(psnr, 1e-6, ERROR_RELATIVE);
|
SANITY_CHECK(psnr, 1e-4, ERROR_RELATIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
} } // namespace cvtest::ocl
|
} } // namespace cvtest::ocl
|
||||||
|
@@ -1902,7 +1902,7 @@ static bool ocl_norm( InputArray _src, int normType, InputArray _mask, double &
|
|||||||
bool doubleSupport = ocl::Device::getDefault().doubleFPConfig() > 0,
|
bool doubleSupport = ocl::Device::getDefault().doubleFPConfig() > 0,
|
||||||
haveMask = _mask.kind() != _InputArray::NONE;
|
haveMask = _mask.kind() != _InputArray::NONE;
|
||||||
|
|
||||||
if ( !(normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2) ||
|
if ( !(normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2 || normType == NORM_L2SQR) ||
|
||||||
(!doubleSupport && depth == CV_64F) || (normType == NORM_INF && haveMask && cn != 1))
|
(!doubleSupport && depth == CV_64F) || (normType == NORM_INF && haveMask && cn != 1))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -1937,12 +1937,12 @@ static bool ocl_norm( InputArray _src, int normType, InputArray _mask, double &
|
|||||||
|
|
||||||
cv::minMaxIdx(haveMask ? abssrc : abssrc.reshape(1), NULL, &result, NULL, NULL, _mask);
|
cv::minMaxIdx(haveMask ? abssrc : abssrc.reshape(1), NULL, &result, NULL, NULL, _mask);
|
||||||
}
|
}
|
||||||
else if (normType == NORM_L1 || normType == NORM_L2)
|
else if (normType == NORM_L1 || normType == NORM_L2 || normType == NORM_L2SQR)
|
||||||
{
|
{
|
||||||
Scalar sc;
|
Scalar sc;
|
||||||
bool unstype = depth == CV_8U || depth == CV_16U;
|
bool unstype = depth == CV_8U || depth == CV_16U;
|
||||||
|
|
||||||
if ( !ocl_sum(haveMask ? src : src.reshape(1), sc, normType == NORM_L2 ?
|
if ( !ocl_sum(haveMask ? src : src.reshape(1), sc, normType == NORM_L2 || normType == NORM_L2SQR ?
|
||||||
OCL_OP_SUM_SQR : (unstype ? OCL_OP_SUM : OCL_OP_SUM_ABS), _mask) )
|
OCL_OP_SUM_SQR : (unstype ? OCL_OP_SUM : OCL_OP_SUM_ABS), _mask) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -1953,7 +1953,7 @@ static bool ocl_norm( InputArray _src, int normType, InputArray _mask, double &
|
|||||||
for (int i = 0; i < cn; ++i)
|
for (int i = 0; i < cn; ++i)
|
||||||
s += sc[i];
|
s += sc[i];
|
||||||
|
|
||||||
result = normType == NORM_L1 ? s : std::sqrt(s);
|
result = normType == NORM_L1 || normType == NORM_L2SQR ? s : std::sqrt(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -2261,7 +2261,7 @@ static bool ocl_norm( InputArray _src1, InputArray _src2, int normType, double &
|
|||||||
bool relative = (normType & NORM_RELATIVE) != 0;
|
bool relative = (normType & NORM_RELATIVE) != 0;
|
||||||
normType &= ~NORM_RELATIVE;
|
normType &= ~NORM_RELATIVE;
|
||||||
|
|
||||||
if ( !(normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2) ||
|
if ( !(normType == NORM_INF || normType == NORM_L1 || normType == NORM_L2 || normType == NORM_L2SQR) ||
|
||||||
(!doubleSupport && depth == CV_64F))
|
(!doubleSupport && depth == CV_64F))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@@ -1011,7 +1011,6 @@ OCL_TEST_P(Phase, angleInDegree)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
OCL_TEST_P(Phase, angleInRadians)
|
OCL_TEST_P(Phase, angleInRadians)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < test_loop_times; j++)
|
for (int j = 0; j < test_loop_times; j++)
|
||||||
@@ -1548,6 +1547,25 @@ OCL_TEST_P(PatchNaNs, Mat)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////////// Psnr ////////////////////////////////////////////////
|
||||||
|
|
||||||
|
typedef ArithmTestBase Psnr;
|
||||||
|
|
||||||
|
OCL_TEST_P(Psnr, Mat)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < test_loop_times; j++)
|
||||||
|
{
|
||||||
|
generateTestData();
|
||||||
|
|
||||||
|
double cpuRes = 0, gpuRes = 0;
|
||||||
|
|
||||||
|
OCL_OFF(cpuRes = cv::PSNR(src1_roi, src2_roi));
|
||||||
|
OCL_ON(gpuRes = cv::PSNR(usrc1_roi, usrc2_roi));
|
||||||
|
|
||||||
|
EXPECT_PRED3(relativeError, cpuRes, gpuRes, 1e-6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////// Instantiation /////////////////////////////////////////
|
//////////////////////////////////////// Instantiation /////////////////////////////////////////
|
||||||
|
|
||||||
OCL_INSTANTIATE_TEST_CASE_P(Arithm, Lut, Combine(::testing::Values(CV_8U, CV_8S), OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool(), Bool()));
|
OCL_INSTANTIATE_TEST_CASE_P(Arithm, Lut, Combine(::testing::Values(CV_8U, CV_8S), OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool(), Bool()));
|
||||||
@@ -1587,6 +1605,7 @@ OCL_INSTANTIATE_TEST_CASE_P(Arithm, InRange, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHA
|
|||||||
OCL_INSTANTIATE_TEST_CASE_P(Arithm, ConvertScaleAbs, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
|
OCL_INSTANTIATE_TEST_CASE_P(Arithm, ConvertScaleAbs, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
|
||||||
OCL_INSTANTIATE_TEST_CASE_P(Arithm, ScaleAdd, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
|
OCL_INSTANTIATE_TEST_CASE_P(Arithm, ScaleAdd, Combine(OCL_ALL_DEPTHS, OCL_ALL_CHANNELS, Bool()));
|
||||||
OCL_INSTANTIATE_TEST_CASE_P(Arithm, PatchNaNs, Combine(OCL_ALL_CHANNELS, Bool()));
|
OCL_INSTANTIATE_TEST_CASE_P(Arithm, PatchNaNs, Combine(OCL_ALL_CHANNELS, Bool()));
|
||||||
|
OCL_INSTANTIATE_TEST_CASE_P(Arithm, Psnr, Combine(::testing::Values((MatDepth)CV_8U), OCL_ALL_CHANNELS, Bool()));
|
||||||
|
|
||||||
} } // namespace cvtest::ocl
|
} } // namespace cvtest::ocl
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user