Commit a562b5c9 authored by Ilya Lavrenov's avatar Ilya Lavrenov

fixed ocl::meanStddev and created accuracy test for this function

parent 7379152a
...@@ -454,23 +454,15 @@ Scalar cv::ocl::sqrSum(const oclMat &src) ...@@ -454,23 +454,15 @@ Scalar cv::ocl::sqrSum(const oclMat &src)
void cv::ocl::meanStdDev(const oclMat &src, Scalar &mean, Scalar &stddev) void cv::ocl::meanStdDev(const oclMat &src, Scalar &mean, Scalar &stddev)
{ {
CV_Assert(src.depth() <= CV_32S); double total = 1.0 / src.size().area();
cv::Size sz(1, 1);
int channels = src.oclchannels(); mean = sum(src);
Mat m1(sz, CV_MAKETYPE(CV_32S, channels), cv::Scalar::all(0)), stddev = sqrSum(src);
m2(sz, CV_MAKETYPE(CV_32S, channels), cv::Scalar::all(0));
oclMat dst1(m1), dst2(m2); for (int i = 0; i < 4; ++i)
// arithmetic_sum_run(src, dst1, "arithm_op_sum");
// arithmetic_sum_run(src, dst2, "arithm_op_squares_sum");
m1 = (Mat)dst1;
m2 = (Mat)dst2;
int i = 0, *p = (int *)m1.data, *q = (int *)m2.data;
for (; i < channels; i++)
{ {
mean.val[i] = (double)p[i] / (src.cols * src.rows); mean[i] *= total;
stddev.val[i] = std::sqrt(std::max((double) q[i] / (src.cols * src.rows) - mean.val[i] * mean.val[i] , 0.)); stddev[i] = std::sqrt(std::max(stddev[i] * total - mean.val[i] * mean.val[i] , 0.));
} }
} }
......
...@@ -1440,6 +1440,30 @@ TEST_P(SetIdentity, Mat) ...@@ -1440,6 +1440,30 @@ TEST_P(SetIdentity, Mat)
} }
} }
//////////////////////////////// setIdentity /////////////////////////////////////////////////
typedef ArithmTestBase MeanStdDev;
TEST_P(MeanStdDev, Mat)
{
for (int j = 0; j < LOOP_TIMES; j++)
{
random_roi();
Scalar cpu_mean, cpu_stddev;
Scalar gpu_mean, gpu_stddev;
cv::meanStdDev(src1_roi, cpu_mean, cpu_stddev);
cv::ocl::meanStdDev(gsrc1, gpu_mean, gpu_stddev);
for (int i = 0; i < 4; ++i)
{
EXPECT_NEAR(cpu_mean[i], gpu_mean[i], 1e-5);
EXPECT_NEAR(cpu_stddev[i], gpu_stddev[i], 0.1);
}
}
}
//////////////////////////////////////// Instantiation ///////////////////////////////////////// //////////////////////////////////////// Instantiation /////////////////////////////////////////
INSTANTIATE_TEST_CASE_P(Arithm, Lut, Combine(testing::Range(CV_8U, CV_USRTYPE1), testing::Range(1, 5), Bool(), Bool())); INSTANTIATE_TEST_CASE_P(Arithm, Lut, Combine(testing::Range(CV_8U, CV_USRTYPE1), testing::Range(1, 5), Bool(), Bool()));
...@@ -1470,5 +1494,6 @@ INSTANTIATE_TEST_CASE_P(Arithm, Compare, Combine(testing::Range(CV_8U, CV_USRTYP ...@@ -1470,5 +1494,6 @@ INSTANTIATE_TEST_CASE_P(Arithm, Compare, Combine(testing::Range(CV_8U, CV_USRTYP
INSTANTIATE_TEST_CASE_P(Arithm, Pow, Combine(Values(CV_32F, CV_64F), testing::Range(1, 5), Bool())); INSTANTIATE_TEST_CASE_P(Arithm, Pow, Combine(Values(CV_32F, CV_64F), testing::Range(1, 5), Bool()));
INSTANTIATE_TEST_CASE_P(Arithm, AddWeighted, Combine(testing::Range(CV_8U, CV_USRTYPE1), testing::Range(1, 5), Bool())); INSTANTIATE_TEST_CASE_P(Arithm, AddWeighted, Combine(testing::Range(CV_8U, CV_USRTYPE1), testing::Range(1, 5), Bool()));
INSTANTIATE_TEST_CASE_P(Arithm, SetIdentity, Combine(testing::Range(CV_8U, CV_USRTYPE1), testing::Range(1, 5), Bool())); INSTANTIATE_TEST_CASE_P(Arithm, SetIdentity, Combine(testing::Range(CV_8U, CV_USRTYPE1), testing::Range(1, 5), Bool()));
INSTANTIATE_TEST_CASE_P(Arithm, MeanStdDev, Combine(testing::Range(CV_8U, CV_USRTYPE1), testing::Range(1, 5), Bool()));
#endif // HAVE_OPENCL #endif // HAVE_OPENCL
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