TEST(DomainTransformTest, AuthorReferenceAccuracy) { string dir = getOpenCVExtraDir() + "cv/edgefilter"; double ss = 30; double sc = 0.2 * 255; Mat src = imread(dir + "/statue.png"); Mat ref_NC = imread(dir + "/dt/authors_statue_NC_ss30_sc0.2.png"); Mat ref_IC = imread(dir + "/dt/authors_statue_IC_ss30_sc0.2.png"); Mat ref_RF = imread(dir + "/dt/authors_statue_RF_ss30_sc0.2.png"); ASSERT_FALSE(src.empty()); ASSERT_FALSE(ref_NC.empty()); ASSERT_FALSE(ref_IC.empty()); ASSERT_FALSE(ref_RF.empty()); cv::setNumThreads(cv::getNumberOfCPUs()); Mat res_NC, res_IC, res_RF; dtFilter(src, src, res_NC, ss, sc, DTF_NC); dtFilter(src, src, res_IC, ss, sc, DTF_IC); dtFilter(src, src, res_RF, ss, sc, DTF_RF); double totalMaxError = 1.0/64.0*src.total(); EXPECT_LE(cvtest::norm(res_NC, ref_NC, NORM_L2), totalMaxError); EXPECT_LE(cvtest::norm(res_NC, ref_NC, NORM_INF), 1); EXPECT_LE(cvtest::norm(res_IC, ref_IC, NORM_L2), totalMaxError); EXPECT_LE(cvtest::norm(res_IC, ref_IC, NORM_INF), 1); EXPECT_LE(cvtest::norm(res_RF, ref_RF, NORM_L2), totalMaxError); EXPECT_LE(cvtest::norm(res_IC, ref_IC, NORM_INF), 1); }
TEST(DomainTransformTest, BoxFilter_NC_accuracy) { double MAX_DIF = 1; int radius = 5; double sc = 1.0; double ss = 1.01*radius / sqrt(3.0); Mat src = imread(getOpenCVExtraDir() + "cv/edgefilter/statue.png"); ASSERT_TRUE(!src.empty()); Mat1b guide(src.size(), 200); Mat res_dt, res_box; blur(src, res_box, Size(2 * radius + 1, 2 * radius + 1)); dtFilter(guide, src, res_dt, ss, sc, DTF_NC, 1); EXPECT_LE(cv::norm(res_dt, res_box, NORM_L2), MAX_DIF*src.total()); }
TEST_P(DomainTransformTest, MultiThreadReproducibility) { if (cv::getNumberOfCPUs() == 1) return; double MAX_DIF = 1.0; double MAX_MEAN_DIF = 1.0 / 256.0; int loopsCount = 2; RNG rng(0); DTParams params = GetParam(); Size size = get<0>(params); int mode = get<1>(params); int guideType = get<2>(params); int srcType = get<3>(params); Mat original = imread(getOpenCVExtraDir() + "cv/edgefilter/statue.png"); Mat guide = convertTypeAndSize(original, guideType, size); Mat src = convertTypeAndSize(original, srcType, size); for (int iter = 0; iter <= loopsCount; iter++) { double ss = rng.uniform(0.0, 100.0); double sc = rng.uniform(0.0, 100.0); cv::setNumThreads(cv::getNumberOfCPUs()); Mat resMultithread; dtFilter(guide, src, resMultithread, ss, sc, mode); cv::setNumThreads(1); Mat resSingleThread; dtFilter(guide, src, resSingleThread, ss, sc, mode); EXPECT_LE(cv::norm(resSingleThread, resMultithread, NORM_INF), MAX_DIF); EXPECT_LE(cv::norm(resSingleThread, resMultithread, NORM_L1), MAX_MEAN_DIF*src.total()); } }
static std::string _tf(TString filename) { return (getOpenCVExtraDir() + "/dnn/") + filename; }