simplify logics in filter tests, remove redundant code in arithm tests

This commit is contained in:
yao 2013-05-08 15:12:12 +08:00
parent 52dbbae82c
commit e4d3378230
2 changed files with 161 additions and 685 deletions

View File

@ -12,6 +12,7 @@
//
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// @Authors
@ -21,6 +22,7 @@
// Jiang Liyuan,jlyuan001.good@163.com
// Rock Li, Rock.Li@amd.com
// Zailong Wu, bullet@yeah.net
// Yao Wang, bitwangyaoyao@gmail.com
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
@ -87,14 +89,13 @@ PARAM_TEST_CASE(ArithmTestBase, MatType, bool)
int maskx;
int masky;
//src mat with roi
cv::Mat mat1_roi;
cv::Mat mat2_roi;
cv::Mat mask_roi;
cv::Mat dst_roi;
cv::Mat dst1_roi; //bak
//std::vector<cv::ocl::Info> oclinfo;
//ocl dst mat for testing
cv::ocl::oclMat gdst_whole;
cv::ocl::oclMat gdst1_whole; //bak
@ -202,17 +203,12 @@ TEST_P(Lut, Mat)
cv::Mat cpu_dst;
gdst_whole.download (cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 0, "");
}
}
////////////////////////////////exp/////////////////////////////////////////////////
struct Exp : ArithmTestBase {};
TEST_P(Exp, Mat)
@ -227,16 +223,13 @@ TEST_P(Exp, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 2, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 2, "");
}
}
////////////////////////////////log/////////////////////////////////////////////////
struct Log : ArithmTestBase {};
TEST_P(Log, Mat)
@ -245,24 +238,17 @@ TEST_P(Log, Mat)
{
random_roi();
cv::log(mat1_roi, dst_roi);
cv::ocl::log(gmat1, gdst);
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, "");
}
}
////////////////////////////////add/////////////////////////////////////////////////
struct Add : ArithmTestBase {};
TEST_P(Add, Mat)
@ -276,9 +262,7 @@ TEST_P(Add, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
@ -293,9 +277,7 @@ TEST_P(Add, Mat_Mask)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
TEST_P(Add, Scalar)
@ -309,9 +291,7 @@ TEST_P(Add, Scalar)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -326,9 +306,7 @@ TEST_P(Add, Scalar_Mask)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -348,9 +326,7 @@ TEST_P(Sub, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
@ -365,11 +341,10 @@ TEST_P(Sub, Mat_Mask)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
TEST_P(Sub, Scalar)
{
for(int j = 0; j < LOOP_TIMES; j++)
@ -381,9 +356,7 @@ TEST_P(Sub, Scalar)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -398,9 +371,7 @@ TEST_P(Sub, Scalar_Mask)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -420,9 +391,7 @@ TEST_P(Mul, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char s[1024];
sprintf(s, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, s);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
@ -440,9 +409,7 @@ TEST_P(Mul, Mat_Scalar)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.001, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.001, "");
}
}
@ -461,10 +428,7 @@ TEST_P(Div, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, "");
}
}
@ -482,10 +446,7 @@ TEST_P(Div, Mat_Scalar)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.001, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.001, "");
}
}
@ -503,10 +464,7 @@ TEST_P(Absdiff, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0, "");
}
}
@ -521,10 +479,7 @@ TEST_P(Absdiff, Mat_Scalar)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -546,10 +501,8 @@ TEST_P(CartToPolar, angleInDegree)
cv::Mat cpu_dst1;
gdst1_whole.download(cpu_dst1);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.5, sss);
EXPECT_MAT_NEAR(dst1, cpu_dst1, 0.5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.5, "");
EXPECT_MAT_NEAR(dst1, cpu_dst1, 0.5, "");
}
}
@ -567,16 +520,12 @@ TEST_P(CartToPolar, angleInRadians)
cv::Mat cpu_dst1;
gdst1_whole.download(cpu_dst1);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.5, sss);
EXPECT_MAT_NEAR(dst1, cpu_dst1, 0.5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.5, "");
EXPECT_MAT_NEAR(dst1, cpu_dst1, 0.5, "");
}
}
struct PolarToCart : ArithmTestBase {};
TEST_P(PolarToCart, angleInDegree)
@ -593,11 +542,9 @@ TEST_P(PolarToCart, angleInDegree)
cv::Mat cpu_dst1;
gdst1_whole.download(cpu_dst1);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.5, sss);
EXPECT_MAT_NEAR(dst1, cpu_dst1, 0.5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.5, "");
EXPECT_MAT_NEAR(dst1, cpu_dst1, 0.5, "");
}
}
@ -615,11 +562,9 @@ TEST_P(PolarToCart, angleInRadians)
cv::Mat cpu_dst1;
gdst1_whole.download(cpu_dst1);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.5, sss);
EXPECT_MAT_NEAR(dst1, cpu_dst1, 0.5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.5, "");
EXPECT_MAT_NEAR(dst1, cpu_dst1, 0.5, "");
}
}
@ -639,16 +584,12 @@ TEST_P(Magnitude, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
struct Transpose : ArithmTestBase {};
TEST_P(Transpose, Mat)
@ -662,17 +603,13 @@ TEST_P(Transpose, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
struct Flip : ArithmTestBase {};
TEST_P(Flip, X)
@ -686,10 +623,8 @@ TEST_P(Flip, X)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -704,10 +639,8 @@ TEST_P(Flip, Y)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -722,15 +655,12 @@ TEST_P(Flip, BOTH)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
struct MinMax : ArithmTestBase {};
TEST_P(MinMax, MAT)
@ -761,12 +691,8 @@ TEST_P(MinMax, MAT)
double minVal_, maxVal_;
cv::ocl::minMax(gmat1, &minVal_, &maxVal_);
//check results
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_DOUBLE_EQ(minVal_, minVal) << sss;
EXPECT_DOUBLE_EQ(maxVal_, maxVal) << sss;
EXPECT_DOUBLE_EQ(minVal_, minVal);
EXPECT_DOUBLE_EQ(maxVal_, maxVal);
}
}
@ -799,12 +725,8 @@ TEST_P(MinMax, MASK)
double minVal_, maxVal_;
cv::ocl::minMax(gmat1, &minVal_, &maxVal_, gmask);
//check results
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_DOUBLE_EQ(minVal_, minVal) << sss;
EXPECT_DOUBLE_EQ(maxVal_, maxVal) << sss;
EXPECT_DOUBLE_EQ(minVal_, minVal);
EXPECT_DOUBLE_EQ(maxVal_, maxVal);
}
}
@ -915,17 +837,13 @@ TEST_P(MinMaxLoc, MAT)
error1 = ::abs(mat1_roi.at<double>(maxLoc_) - mat1_roi.at<double>(maxLoc));
}
//check results
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_DOUBLE_EQ(minVal_, minVal);
EXPECT_DOUBLE_EQ(maxVal_, maxVal);
EXPECT_DOUBLE_EQ(minlocVal_, minlocVal);
EXPECT_DOUBLE_EQ(maxlocVal_, maxlocVal);
EXPECT_DOUBLE_EQ(minVal_, minVal) << sss;
EXPECT_DOUBLE_EQ(maxVal_, maxVal) << sss;
EXPECT_DOUBLE_EQ(minlocVal_, minlocVal) << sss;
EXPECT_DOUBLE_EQ(maxlocVal_, maxlocVal) << sss;
EXPECT_DOUBLE_EQ(error0, 0.0) << sss;
EXPECT_DOUBLE_EQ(error1, 0.0) << sss;
EXPECT_DOUBLE_EQ(error0, 0.0);
EXPECT_DOUBLE_EQ(error1, 0.0);
}
}
@ -1036,17 +954,13 @@ TEST_P(MinMaxLoc, MASK)
error1 = ::abs(mat1_roi.at<double>(maxLoc_) - mat1_roi.at<double>(maxLoc));
}
//check results
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_DOUBLE_EQ(minVal_, minVal);
EXPECT_DOUBLE_EQ(maxVal_, maxVal);
EXPECT_DOUBLE_EQ(minlocVal_, minlocVal);
EXPECT_DOUBLE_EQ(maxlocVal_, maxlocVal);
EXPECT_DOUBLE_EQ(minVal_, minVal) << sss;
EXPECT_DOUBLE_EQ(maxVal_, maxVal) << sss;
EXPECT_DOUBLE_EQ(minlocVal_, minlocVal) << sss;
EXPECT_DOUBLE_EQ(maxlocVal_, maxlocVal) << sss;
EXPECT_DOUBLE_EQ(error0, 0.0) << sss;
EXPECT_DOUBLE_EQ(error1, 0.0) << sss;
EXPECT_DOUBLE_EQ(error0, 0.0);
EXPECT_DOUBLE_EQ(error1, 0.0);
}
}
@ -1060,14 +974,12 @@ TEST_P(Sum, MAT)
random_roi();
Scalar cpures = cv::sum(mat1_roi);
Scalar gpures = cv::ocl::sum(gmat1);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
//check results
EXPECT_NEAR(cpures[0], gpures[0], 0.1) << sss;
EXPECT_NEAR(cpures[1], gpures[1], 0.1) << sss;
EXPECT_NEAR(cpures[2], gpures[2], 0.1) << sss;
EXPECT_NEAR(cpures[3], gpures[3], 0.1) << sss;
EXPECT_NEAR(cpures[0], gpures[0], 0.1);
EXPECT_NEAR(cpures[1], gpures[1], 0.1);
EXPECT_NEAR(cpures[2], gpures[2], 0.1);
EXPECT_NEAR(cpures[3], gpures[3], 0.1);
}
}
@ -1082,11 +994,7 @@ TEST_P(CountNonZero, MAT)
int cpures = cv::countNonZero(mat1_roi);
int gpures = cv::ocl::countNonZero(gmat1);
//check results
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_DOUBLE_EQ((double)cpures, (double)gpures) << sss;
EXPECT_DOUBLE_EQ((double)cpures, (double)gpures);
}
}
@ -1112,9 +1020,7 @@ TEST_P(Phase, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-2, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-2, "");
}
}
}
@ -1134,10 +1040,8 @@ TEST_P(Bitwise_and, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
@ -1152,10 +1056,8 @@ TEST_P(Bitwise_and, Mat_Mask)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
TEST_P(Bitwise_and, Scalar)
@ -1169,10 +1071,8 @@ TEST_P(Bitwise_and, Scalar)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -1188,11 +1088,8 @@ TEST_P(Bitwise_and, Scalar_Mask)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char *sss = new char[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
delete[] sss;
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -1213,10 +1110,8 @@ TEST_P(Bitwise_or, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
@ -1231,10 +1126,8 @@ TEST_P(Bitwise_or, Mat_Mask)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
TEST_P(Bitwise_or, Scalar)
@ -1248,10 +1141,8 @@ TEST_P(Bitwise_or, Scalar)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -1266,10 +1157,8 @@ TEST_P(Bitwise_or, Scalar_Mask)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -1290,10 +1179,8 @@ TEST_P(Bitwise_xor, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
@ -1308,10 +1195,8 @@ TEST_P(Bitwise_xor, Mat_Mask)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
TEST_P(Bitwise_xor, Scalar)
@ -1325,10 +1210,8 @@ TEST_P(Bitwise_xor, Scalar)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -1343,10 +1226,8 @@ TEST_P(Bitwise_xor, Scalar_Mask)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -1366,10 +1247,8 @@ TEST_P(Bitwise_not, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
@ -1386,7 +1265,7 @@ TEST_P(Compare, Mat)
}
int cmp_codes[] = {CMP_EQ, CMP_GT, CMP_GE, CMP_LT, CMP_LE, CMP_NE};
const char *cmp_str[] = {"CMP_EQ", "CMP_GT", "CMP_GE", "CMP_LT", "CMP_LE", "CMP_NE"};
//const char *cmp_str[] = {"CMP_EQ", "CMP_GT", "CMP_GE", "CMP_LT", "CMP_LE", "CMP_NE"};
int cmp_num = sizeof(cmp_codes) / sizeof(int);
for (int i = 0; i < cmp_num; ++i)
@ -1401,10 +1280,8 @@ TEST_P(Compare, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "cmptype=%s, roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", cmp_str[i], roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 0.0, "");
}
}
@ -1430,10 +1307,7 @@ TEST_P(Pow, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, "");
}
}
@ -1464,16 +1338,13 @@ TEST_P(MagnitudeSqr, Mat)
// end = cv::getTickCount();
cv::ocl::oclMat clmat1(mat1), clmat2(mat2), cldst;
cv::ocl::magnitudeSqr(clmat1, clmat2, cldst);
cv::Mat cpu_dst;
cldst.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, "");
}
}
@ -1498,10 +1369,7 @@ TEST_P(AddWeighted, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d,maskx=%d,masky=%d,src2x=%d,src2y=%d", roicols, roirows, src1x, src1y, dstx, dsty, maskx, masky, src2x, src2y);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}

View File

@ -12,6 +12,7 @@
//
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// @Authors
@ -19,6 +20,7 @@
// Jia Haipeng, jiahaipeng95@gmail.com
// Zero Lin, Zero.Lin@amd.com
// Zhang Ying, zhangying913@gmail.com
// Yao Wang, bitwangyaoyao@gmail.com
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
@ -55,121 +57,13 @@ using namespace testing;
using namespace std;
PARAM_TEST_CASE(FilterTestBase, MatType, bool)
PARAM_TEST_CASE(FilterTestBase,
MatType,
cv::Size, // kernel size
cv::Size, // dx,dy
int // border type, or iteration
)
{
int type;
cv::Scalar val;
//src mat
cv::Mat mat1;
cv::Mat mat2;
cv::Mat mask;
cv::Mat dst;
cv::Mat dst1; //bak, for two outputs
// set up roi
int roicols;
int roirows;
int src1x;
int src1y;
int src2x;
int src2y;
int dstx;
int dsty;
int maskx;
int masky;
//src mat with roi
cv::Mat mat1_roi;
cv::Mat mat2_roi;
cv::Mat mask_roi;
cv::Mat dst_roi;
cv::Mat dst1_roi; //bak
//std::vector<cv::ocl::Info> oclinfo;
//ocl dst mat for testing
cv::ocl::oclMat gdst_whole;
cv::ocl::oclMat gdst1_whole; //bak
//ocl mat with roi
cv::ocl::oclMat gmat1;
cv::ocl::oclMat gmat2;
cv::ocl::oclMat gdst;
cv::ocl::oclMat gdst1; //bak
cv::ocl::oclMat gmask;
virtual void SetUp()
{
type = GET_PARAM(0);
cv::RNG &rng = TS::ptr()->get_rng();
cv::Size size(MWIDTH, MHEIGHT);
mat1 = randomMat(rng, size, type, 5, 16, false);
mat2 = randomMat(rng, size, type, 5, 16, false);
dst = randomMat(rng, size, type, 5, 16, false);
dst1 = randomMat(rng, size, type, 5, 16, false);
mask = randomMat(rng, size, CV_8UC1, 0, 2, false);
cv::threshold(mask, mask, 0.5, 255., CV_8UC1);
val = cv::Scalar(rng.uniform(-10.0, 10.0), rng.uniform(-10.0, 10.0), rng.uniform(-10.0, 10.0), rng.uniform(-10.0, 10.0));
}
void random_roi()
{
#ifdef RANDOMROI
//randomize ROI
cv::RNG &rng = TS::ptr()->get_rng();
roicols = rng.uniform(1, mat1.cols);
roirows = rng.uniform(1, mat1.rows);
src1x = rng.uniform(0, mat1.cols - roicols);
src1y = rng.uniform(0, mat1.rows - roirows);
src2x = rng.uniform(0, mat2.cols - roicols);
src2y = rng.uniform(0, mat2.rows - roirows);
dstx = rng.uniform(0, dst.cols - roicols);
dsty = rng.uniform(0, dst.rows - roirows);
maskx = rng.uniform(0, mask.cols - roicols);
masky = rng.uniform(0, mask.rows - roirows);
#else
roicols = mat1.cols;
roirows = mat1.rows;
src1x = 0;
src1y = 0;
src2x = 0;
src2y = 0;
dstx = 0;
dsty = 0;
maskx = 0;
masky = 0;
#endif
mat1_roi = mat1(Rect(src1x, src1y, roicols, roirows));
mat2_roi = mat2(Rect(src2x, src2y, roicols, roirows));
mask_roi = mask(Rect(maskx, masky, roicols, roirows));
dst_roi = dst(Rect(dstx, dsty, roicols, roirows));
dst1_roi = dst1(Rect(dstx, dsty, roicols, roirows));
gdst_whole = dst;
gdst = gdst_whole(Rect(dstx, dsty, roicols, roirows));
gdst1_whole = dst1;
gdst1 = gdst1_whole(Rect(dstx, dsty, roicols, roirows));
gmat1 = mat1_roi;
gmat2 = mat2_roi;
gmask = mask_roi;
}
};
/////////////////////////////////////////////////////////////////////////////////////////////////
// blur
PARAM_TEST_CASE(Blur, MatType, cv::Size, int)
{
int type;
cv::Size ksize;
int bordertype;
//src mat
cv::Mat mat1;
cv::Mat dst;
@ -185,7 +79,7 @@ PARAM_TEST_CASE(Blur, MatType, cv::Size, int)
//src mat with roi
cv::Mat mat1_roi;
cv::Mat dst_roi;
//std::vector<cv::ocl::Info> oclinfo;
//ocl dst mat for testing
cv::ocl::oclMat gdst_whole;
@ -193,23 +87,6 @@ PARAM_TEST_CASE(Blur, MatType, cv::Size, int)
cv::ocl::oclMat gmat1;
cv::ocl::oclMat gdst;
virtual void SetUp()
{
type = GET_PARAM(0);
ksize = GET_PARAM(1);
bordertype = GET_PARAM(2);
cv::RNG &rng = TS::ptr()->get_rng();
cv::Size size(MWIDTH, MHEIGHT);
mat1 = randomMat(rng, size, type, 5, 16, false);
dst = randomMat(rng, size, type, 5, 16, false);
//int devnums = getDevice(oclinfo, OPENCV_DEFAULT_OPENCL_DEVICE);
//CV_Assert(devnums > 0);
////if you want to use undefault device, set it here
////setDevice(oclinfo[0]);
}
void random_roi()
{
#ifdef RANDOMROI
@ -236,12 +113,33 @@ PARAM_TEST_CASE(Blur, MatType, cv::Size, int)
gdst_whole = dst;
gdst = gdst_whole(Rect(dstx, dsty, roicols, roirows));
gmat1 = mat1_roi;
}
};
/////////////////////////////////////////////////////////////////////////////////////////////////
// blur
struct Blur : FilterTestBase
{
int type;
cv::Size ksize;
int bordertype;
virtual void SetUp()
{
type = GET_PARAM(0);
ksize = GET_PARAM(1);
bordertype = GET_PARAM(3);
cv::RNG &rng = TS::ptr()->get_rng();
cv::Size size(MWIDTH, MHEIGHT);
mat1 = randomMat(rng, size, type, 5, 16, false);
dst = randomMat(rng, size, type, 5, 16, false);
}
};
TEST_P(Blur, Mat)
{
for(int j = 0; j < LOOP_TIMES; j++)
@ -253,9 +151,8 @@ TEST_P(Blur, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d", roicols, roirows, src1x, src1y, dstx, dsty);
EXPECT_MAT_NEAR(dst, cpu_dst, 1.0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1.0, "");
}
}
@ -264,34 +161,10 @@ TEST_P(Blur, Mat)
/////////////////////////////////////////////////////////////////////////////////////////////////
//Laplacian
PARAM_TEST_CASE(LaplacianTestBase, MatType, int)
struct Laplacian : FilterTestBase
{
int type;
int ksize;
//src mat
cv::Mat mat;
cv::Mat dst;
// set up roi
int roicols;
int roirows;
int srcx;
int srcy;
int dstx;
int dsty;
//src mat with roi
cv::Mat mat_roi;
cv::Mat dst_roi;
//ocl dst mat for testing
cv::ocl::oclMat gdst_whole;
//ocl mat with roi
cv::ocl::oclMat gmat;
cv::ocl::oclMat gdst;
cv::Size ksize;
virtual void SetUp()
{
@ -301,58 +174,26 @@ PARAM_TEST_CASE(LaplacianTestBase, MatType, int)
cv::RNG &rng = TS::ptr()->get_rng();
cv::Size size(MWIDTH, MHEIGHT);
mat = randomMat(rng, size, type, 5, 16, false);
mat1 = randomMat(rng, size, type, 5, 16, false);
dst = randomMat(rng, size, type, 5, 16, false);
}
void random_roi()
{
#ifdef RANDOMROI
//randomize ROI
cv::RNG &rng = TS::ptr()->get_rng();
roicols = rng.uniform(2, mat.cols);
roirows = rng.uniform(2, mat.rows);
srcx = rng.uniform(0, mat.cols - roicols);
srcy = rng.uniform(0, mat.rows - roirows);
dstx = rng.uniform(0, dst.cols - roicols);
dsty = rng.uniform(0, dst.rows - roirows);
#else
roicols = mat.cols;
roirows = mat.rows;
srcx = 0;
srcy = 0;
dstx = 0;
dsty = 0;
#endif
mat_roi = mat(Rect(srcx, srcy, roicols, roirows));
dst_roi = dst(Rect(dstx, dsty, roicols, roirows));
gdst_whole = dst;
gdst = gdst_whole(Rect(dstx, dsty, roicols, roirows));
gmat = mat_roi;
}
};
struct Laplacian : LaplacianTestBase {};
TEST_P(Laplacian, Accuracy)
{
for(int j = 0; j < LOOP_TIMES; j++)
{
random_roi();
cv::Laplacian(mat_roi, dst_roi, -1, ksize, 1);
cv::ocl::Laplacian(gmat, gdst, -1, ksize, 1);
cv::Laplacian(mat1_roi, dst_roi, -1, ksize.width, 1);
cv::ocl::Laplacian(gmat1, gdst, -1, ksize.width, 1);
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d", roicols, roirows, srcx, srcy, dstx, dsty);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
@ -360,8 +201,7 @@ TEST_P(Laplacian, Accuracy)
/////////////////////////////////////////////////////////////////////////////////////////////////
// erode & dilate
PARAM_TEST_CASE(ErodeDilateBase, MatType, int)
struct ErodeDilate : FilterTestBase
{
int type;
int iterations;
@ -369,33 +209,10 @@ PARAM_TEST_CASE(ErodeDilateBase, MatType, int)
//erode or dilate kernel
cv::Mat kernel;
//src mat
cv::Mat mat1;
cv::Mat dst;
// set up roi
int roicols;
int roirows;
int src1x;
int src1y;
int dstx;
int dsty;
//src mat with roi
cv::Mat mat1_roi;
cv::Mat dst_roi;
//ocl dst mat for testing
cv::ocl::oclMat gdst_whole;
//ocl mat with roi
cv::ocl::oclMat gmat1;
cv::ocl::oclMat gdst;
virtual void SetUp()
{
type = GET_PARAM(0);
iterations = GET_PARAM(1);
iterations = GET_PARAM(3);
cv::RNG &rng = TS::ptr()->get_rng();
cv::Size size(MWIDTH, MHEIGHT);
@ -407,43 +224,11 @@ PARAM_TEST_CASE(ErodeDilateBase, MatType, int)
}
void random_roi()
{
#ifdef RANDOMROI
//randomize ROI
cv::RNG &rng = TS::ptr()->get_rng();
roicols = rng.uniform(2, mat1.cols);
roirows = rng.uniform(2, mat1.rows);
src1x = rng.uniform(0, mat1.cols - roicols);
src1y = rng.uniform(0, mat1.rows - roirows);
dstx = rng.uniform(0, dst.cols - roicols);
dsty = rng.uniform(0, dst.rows - roirows);
#else
roicols = mat1.cols;
roirows = mat1.rows;
src1x = 0;
src1y = 0;
dstx = 0;
dsty = 0;
#endif
mat1_roi = mat1(Rect(src1x, src1y, roicols, roirows));
dst_roi = dst(Rect(dstx, dsty, roicols, roirows));
gdst_whole = dst;
gdst = gdst_whole(Rect(dstx, dsty, roicols, roirows));
gmat1 = mat1_roi;
}
};
// erode
struct Erode : ErodeDilateBase {};
TEST_P(Erode, Mat)
TEST_P(ErodeDilate, Mat)
{
for(int j = 0; j < LOOP_TIMES; j++)
{
@ -454,81 +239,39 @@ TEST_P(Erode, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d", roicols, roirows, src1x, src1y, dstx, dsty);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
// dilate
struct Dilate : ErodeDilateBase {};
TEST_P(Dilate, Mat)
{
for(int j = 0; j < LOOP_TIMES; j++)
{
random_roi();
cv::erode(mat1_roi, dst_roi, kernel, Point(-1, -1), iterations);
cv::ocl::erode(gmat1, gdst, kernel, Point(-1, -1), iterations);
cv::dilate(mat1_roi, dst_roi, kernel, Point(-1, -1), iterations);
cv::ocl::dilate(gmat1, gdst, kernel, Point(-1, -1), iterations);
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d", roicols, roirows, src1x, src1y, dstx, dsty);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1e-5, "");
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
// Sobel
PARAM_TEST_CASE(Sobel, MatType, int, int, int, int)
struct Sobel : FilterTestBase
{
int type;
int dx, dy, ksize, bordertype;
//src mat
cv::Mat mat1;
cv::Mat dst;
// set up roi
int roicols;
int roirows;
int src1x;
int src1y;
int dstx;
int dsty;
//src mat with roi
cv::Mat mat1_roi;
cv::Mat dst_roi;
//ocl dst mat for testing
cv::ocl::oclMat gdst_whole;
//ocl mat with roi
cv::ocl::oclMat gmat1;
cv::ocl::oclMat gdst;
virtual void SetUp()
{
type = GET_PARAM(0);
dx = GET_PARAM(1);
dy = GET_PARAM(2);
ksize = GET_PARAM(3);
bordertype = GET_PARAM(4);
Size s = GET_PARAM(1);
ksize = s.width;
s = GET_PARAM(2);
dx = s.width;
dy = s.height;
bordertype = GET_PARAM(3);
cv::RNG &rng = TS::ptr()->get_rng();
@ -538,36 +281,6 @@ PARAM_TEST_CASE(Sobel, MatType, int, int, int, int)
dst = randomMat(rng, size, type, 5, 16, false);
}
void random_roi()
{
#ifdef RANDOMROI
//randomize ROI
cv::RNG &rng = TS::ptr()->get_rng();
roicols = rng.uniform(2, mat1.cols);
roirows = rng.uniform(2, mat1.rows);
src1x = rng.uniform(0, mat1.cols - roicols);
src1y = rng.uniform(0, mat1.rows - roirows);
dstx = rng.uniform(0, dst.cols - roicols);
dsty = rng.uniform(0, dst.rows - roirows);
#else
roicols = mat1.cols;
roirows = mat1.rows;
src1x = 0;
src1y = 0;
dstx = 0;
dsty = 0;
#endif
mat1_roi = mat1(Rect(src1x, src1y, roicols, roirows));
dst_roi = dst(Rect(dstx, dsty, roicols, roirows));
gdst_whole = dst;
gdst = gdst_whole(Rect(dstx, dsty, roicols, roirows));
gmat1 = mat1_roi;
}
};
TEST_P(Sobel, Mat)
@ -581,10 +294,8 @@ TEST_P(Sobel, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d", roicols, roirows, src1x, src1y, dstx, dsty);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, "");
}
}
@ -592,39 +303,17 @@ TEST_P(Sobel, Mat)
/////////////////////////////////////////////////////////////////////////////////////////////////
// Scharr
PARAM_TEST_CASE(Scharr, MatType, int, int, int)
struct Scharr : FilterTestBase
{
int type;
int dx, dy, bordertype;
//src mat
cv::Mat mat1;
cv::Mat dst;
// set up roi
int roicols;
int roirows;
int src1x;
int src1y;
int dstx;
int dsty;
//src mat with roi
cv::Mat mat1_roi;
cv::Mat dst_roi;
//ocl dst mat for testing
cv::ocl::oclMat gdst_whole;
//ocl mat with roi
cv::ocl::oclMat gmat1;
cv::ocl::oclMat gdst;
virtual void SetUp()
{
type = GET_PARAM(0);
dx = GET_PARAM(1);
dy = GET_PARAM(2);
Size s = GET_PARAM(2);
dx = s.width;
dy = s.height;
bordertype = GET_PARAM(3);
dx = 1;
dy = 0;
@ -637,36 +326,6 @@ PARAM_TEST_CASE(Scharr, MatType, int, int, int)
}
void random_roi()
{
#ifdef RANDOMROI
//randomize ROI
cv::RNG &rng = TS::ptr()->get_rng();
roicols = rng.uniform(2, mat1.cols);
roirows = rng.uniform(2, mat1.rows);
src1x = rng.uniform(0, mat1.cols - roicols);
src1y = rng.uniform(0, mat1.rows - roirows);
dstx = rng.uniform(0, dst.cols - roicols);
dsty = rng.uniform(0, dst.rows - roirows);
#else
roicols = mat1.cols;
roirows = mat1.rows;
src1x = 0;
src1y = 0;
dstx = 0;
dsty = 0;
#endif
mat1_roi = mat1(Rect(src1x, src1y, roicols, roirows));
dst_roi = dst(Rect(dstx, dsty, roicols, roirows));
gdst_whole = dst;
gdst = gdst_whole(Rect(dstx, dsty, roicols, roirows));
gmat1 = mat1_roi;
}
};
TEST_P(Scharr, Mat)
@ -680,10 +339,8 @@ TEST_P(Scharr, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d", roicols, roirows, src1x, src1y, dstx, dsty);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1, "");
}
}
@ -691,42 +348,18 @@ TEST_P(Scharr, Mat)
/////////////////////////////////////////////////////////////////////////////////////////////////
// GaussianBlur
PARAM_TEST_CASE(GaussianBlur, MatType, cv::Size, int)
struct GaussianBlur : FilterTestBase
{
int type;
cv::Size ksize;
int bordertype;
double sigma1, sigma2;
//src mat
cv::Mat mat1;
cv::Mat dst;
// set up roi
int roicols;
int roirows;
int src1x;
int src1y;
int dstx;
int dsty;
//src mat with roi
cv::Mat mat1_roi;
cv::Mat dst_roi;
//ocl dst mat for testing
cv::ocl::oclMat gdst_whole;
//ocl mat with roi
cv::ocl::oclMat gmat1;
cv::ocl::oclMat gdst;
virtual void SetUp()
{
type = GET_PARAM(0);
ksize = GET_PARAM(1);
bordertype = GET_PARAM(2);
bordertype = GET_PARAM(3);
cv::RNG &rng = TS::ptr()->get_rng();
cv::Size size(MWIDTH, MHEIGHT);
@ -739,36 +372,6 @@ PARAM_TEST_CASE(GaussianBlur, MatType, cv::Size, int)
}
void random_roi()
{
#ifdef RANDOMROI
//randomize ROI
cv::RNG &rng = TS::ptr()->get_rng();
roicols = rng.uniform(2, mat1.cols);
roirows = rng.uniform(2, mat1.rows);
src1x = rng.uniform(0, mat1.cols - roicols);
src1y = rng.uniform(0, mat1.rows - roirows);
dstx = rng.uniform(0, dst.cols - roicols);
dsty = rng.uniform(0, dst.rows - roirows);
#else
roicols = mat1.cols;
roirows = mat1.rows;
src1x = 0;
src1y = 0;
dstx = 0;
dsty = 0;
#endif
mat1_roi = mat1(Rect(src1x, src1y, roicols, roirows));
dst_roi = dst(Rect(dstx, dsty, roicols, roirows));
gdst_whole = dst;
gdst = gdst_whole(Rect(dstx, dsty, roicols, roirows));
gmat1 = mat1_roi;
}
};
TEST_P(GaussianBlur, Mat)
@ -782,47 +385,52 @@ TEST_P(GaussianBlur, Mat)
cv::Mat cpu_dst;
gdst_whole.download(cpu_dst);
char sss[1024];
sprintf(sss, "roicols=%d,roirows=%d,src1x=%d,src1y=%d,dstx=%d,dsty=%d", roicols, roirows, src1x, src1y, dstx, dsty);
EXPECT_MAT_NEAR(dst, cpu_dst, 1.0, sss);
EXPECT_MAT_NEAR(dst, cpu_dst, 1.0, "");
}
}
INSTANTIATE_TEST_CASE_P(Filter, Blur, Combine(Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC4),
INSTANTIATE_TEST_CASE_P(Filter, Blur, Combine(
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC4),
Values(cv::Size(3, 3), cv::Size(5, 5), cv::Size(7, 7)),
Values(Size(0, 0)), //not use
Values((MatType)cv::BORDER_CONSTANT, (MatType)cv::BORDER_REPLICATE, (MatType)cv::BORDER_REFLECT, (MatType)cv::BORDER_REFLECT_101)));
INSTANTIATE_TEST_CASE_P(Filters, Laplacian, Combine(
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4),
Values(1, 3)));
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4),
Values(Size(3, 3)),
Values(Size(0, 0)), //not use
Values(0))); //not use
INSTANTIATE_TEST_CASE_P(Filter, Erode, Combine(Values(CV_8UC1, CV_8UC4, CV_32FC1, CV_32FC4), Values(1)));
//INSTANTIATE_TEST_CASE_P(Filter, Erode, Combine(Values(CV_8UC1, CV_8UC1), Values(false)));
INSTANTIATE_TEST_CASE_P(Filter, Dilate, Combine(Values(CV_8UC1, CV_8UC4, CV_32FC1, CV_32FC4), Values(1)));
//INSTANTIATE_TEST_CASE_P(Filter, Dilate, Combine(Values(CV_8UC1, CV_8UC1), Values(false)));
INSTANTIATE_TEST_CASE_P(Filter, ErodeDilate, Combine(
Values(CV_8UC1, CV_8UC4, CV_32FC1, CV_32FC4),
Values(Size(0, 0)), //not use
Values(Size(0, 0)), //not use
Values(1)));
INSTANTIATE_TEST_CASE_P(Filter, Sobel, Combine(Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4),
Values(1, 2), Values(0, 1), Values(3, 5), Values((MatType)cv::BORDER_CONSTANT,
(MatType)cv::BORDER_REPLICATE)));
INSTANTIATE_TEST_CASE_P(Filter, Sobel, Combine(
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC3, CV_32FC4),
Values(Size(3, 3), Size(5, 5)),
Values(Size(1, 0), Size(1, 1), Size(2, 0), Size(2, 1)),
Values((MatType)cv::BORDER_CONSTANT, (MatType)cv::BORDER_REPLICATE)));
INSTANTIATE_TEST_CASE_P(Filter, Scharr, Combine(
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC4), Values(0, 1), Values(0, 1),
Values((MatType)cv::BORDER_CONSTANT, (MatType)cv::BORDER_REPLICATE)));
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC4),
Values(Size(0, 0)), //not use
Values(Size(0, 0), Size(0, 1), Size(1, 0), Size(1, 1)),
Values((MatType)cv::BORDER_CONSTANT, (MatType)cv::BORDER_REPLICATE)));
INSTANTIATE_TEST_CASE_P(Filter, GaussianBlur, Combine(
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC4),
Values(cv::Size(3, 3), cv::Size(5, 5)),
Values((MatType)cv::BORDER_CONSTANT, (MatType)cv::BORDER_REPLICATE)));
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_32FC1, CV_32FC4),
Values(Size(3, 3), Size(5, 5)),
Values(Size(0, 0)), //not use
Values((MatType)cv::BORDER_CONSTANT, (MatType)cv::BORDER_REPLICATE)));