if (cn==1)
{
- float templ_sum = static_cast<float>(sum(_templ)[0]) / tsize.area();
+ Scalar templMean = mean(templ);
+ float templ_sum = (float)templMean[0];
k.args(ocl::KernelArg::ReadOnlyNoSize(image_sums), ocl::KernelArg::ReadWrite(result), templ.rows, templ.cols, templ_sum);
}
else
{
Vec4f templ_sum = Vec4f::all(0);
- templ_sum = sum(templ) / tsize.area();
+ templ_sum = (Vec4f)mean(templ);
k.args(ocl::KernelArg::ReadOnlyNoSize(image_sums), ocl::KernelArg::ReadWrite(result), templ.rows, templ.cols, templ_sum); }
UMAT_UPLOAD_OUTPUT_PARAMETER(result);
}
- void Near(double threshold = 0.0)
+ void Near()
{
- OCL_EXPECT_MATS_NEAR(result, threshold);
+ bool isNormed =
+ method == TM_CCORR_NORMED ||
+ method == TM_SQDIFF_NORMED ||
+ method == TM_CCOEFF_NORMED;
+
+ if (isNormed)
+ OCL_EXPECT_MATS_NEAR(result, 3e-2);
+ else
+ OCL_EXPECT_MATS_NEAR_RELATIVE_SPARSE(result, 1.5e-2);
}
};
OCL_OFF(cv::matchTemplate(image_roi, templ_roi, result_roi, method));
OCL_ON(cv::matchTemplate(uimage_roi, utempl_roi, uresult_roi, method));
- bool isNormed =
- method == TM_CCORR_NORMED ||
- method == TM_SQDIFF_NORMED ||
- method == TM_CCOEFF_NORMED;
-
- double eps = isNormed ? 3e-2 : 255.0 * 255.0 * templ.total() * 2e-5;
-
- Near(eps);
+ Near();
}
}
<< "Size: " << name ## _roi.size() << std::endl; \
} while ((void)0, 0)
+//for sparse matrix
+#define OCL_EXPECT_MATS_NEAR_RELATIVE_SPARSE(name, eps) \
+do \
+{ \
+ ASSERT_EQ(name ## _roi.type(), u ## name ## _roi.type()); \
+ ASSERT_EQ(name ## _roi.size(), u ## name ## _roi.size()); \
+ EXPECT_LE(TestUtils::checkNormRelativeSparse(name ## _roi, u ## name ## _roi), eps) \
+ << "Size: " << name ## _roi.size() << std::endl; \
+ Point _offset; \
+ Size _wholeSize; \
+ name ## _roi.locateROI(_wholeSize, _offset); \
+ Mat _mask(name.size(), CV_8UC1, Scalar::all(255)); \
+ _mask(Rect(_offset, name ## _roi.size())).setTo(Scalar::all(0)); \
+ ASSERT_EQ(name.type(), u ## name.type()); \
+ ASSERT_EQ(name.size(), u ## name.size()); \
+ EXPECT_LE(TestUtils::checkNormRelativeSparse(name, u ## name, _mask), eps) \
+ << "Size: " << name ## _roi.size() << std::endl; \
+} while ((void)0, 0)
+
#define EXPECT_MAT_SIMILAR(mat1, mat2, eps) \
do \
{ \
std::max((double)std::numeric_limits<float>::epsilon(),
(double)std::max(cvtest::norm(m1.getMat(), cv::NORM_INF), cvtest::norm(m2.getMat(), cv::NORM_INF)));
}
+
+ static inline double checkNormRelativeSparse(InputArray m1, InputArray m2, InputArray mask = noArray())
+ {
+ double norm_inf = cvtest::norm(m1.getMat(), m2.getMat(), cv::NORM_INF, mask);
+ double norm_rel = norm_inf /
+ std::max((double)std::numeric_limits<float>::epsilon(),
+ (double)std::max(cvtest::norm(m1.getMat(), cv::NORM_INF), cvtest::norm(m2.getMat(), cv::NORM_INF)));
+ return std::min(norm_inf, norm_rel);
+ }
+
};
#define TEST_DECLARE_INPUT_PARAMETER(name) Mat name, name ## _roi; UMat u ## name, u ## name ## _roi