virtual void test_by_pict() { Mat frame1 = readImage("optflow/RubberWhale1.png", IMREAD_GRAYSCALE); UMat usrc; frame1.copyTo(usrc); int histSize = randomInt(3, 29); float hue_range[] = { 0, 180 }; const float* ranges1 = { hue_range }; Mat hist1; //compute histogram calcHist(&frame1, 1, 0, Mat(), hist1, 1, &histSize, &ranges1, true, false); normalize(hist1, hist1, 0, 255, NORM_MINMAX, -1, Mat()); Mat dst1; UMat udst1, src, uhist1; hist1.copyTo(uhist1); std::vector<UMat> uims; uims.push_back(usrc); std::vector<float> urngs; urngs.push_back(0); urngs.push_back(180); std::vector<int> chs; chs.push_back(0); OCL_OFF(calcBackProject(&frame1, 1, 0, hist1, dst1, &ranges1, 1, true)); OCL_ON(calcBackProject(uims, chs, uhist1, udst1, urngs, 1.0)); EXPECT_MAT_NEAR(dst1, udst1, 0.0); }
OCL_TEST_F(SphericalWarperTest, Mat) { for (int j = 0; j < test_loop_times; j++) { generateTestData(); Ptr<WarperCreator> creator = makePtr<SphericalWarper>(); Ptr<detail::RotationWarper> warper = creator->create(2.0); OCL_OFF(warper->buildMaps(src.size(), K, R, xmap, ymap)); OCL_ON(warper->buildMaps(usrc.size(), K, R, uxmap, uymap)); OCL_OFF(warper->warp(src, K, R, INTER_LINEAR, BORDER_REPLICATE, dst)); OCL_ON(warper->warp(usrc, K, R, INTER_LINEAR, BORDER_REPLICATE, udst)); Near(1e-4); } }
OCL_TEST_P(FastNlMeansDenoising_hsep, Mat) { for (int j = 0; j < test_loop_times; j++) { generateTestData(); OCL_OFF(cv::fastNlMeansDenoising(src_roi, dst_roi, h, templateWindowSize, searchWindowSize, normType)); OCL_ON(cv::fastNlMeansDenoising(usrc_roi, udst_roi, h, templateWindowSize, searchWindowSize, normType)); OCL_EXPECT_MATS_NEAR(dst, 1); } }
void performTest(int channelsIn, int channelsOut, int code, double threshold = 1e-3) { for (int j = 0; j < test_loop_times; j++) { generateTestData(channelsIn, channelsOut); OCL_OFF(cv::cvtColor(src_roi, dst_roi, code, channelsOut)); OCL_ON(cv::cvtColor(usrc_roi, udst_roi, code, channelsOut)); Near(threshold); } }
OCL_TEST_P(CalcBackProject, Mat) { for (int j = 0; j < test_loop_times; j++) { random_roi(); OCL_OFF(cv::calcBackProject(images_roi, channels, hist_roi, dst_roi, ranges, scale)); OCL_ON(cv::calcBackProject(uimages_roi, channels, uhist_roi, udst_roi, ranges, scale)); Near(); } }
OCL_TEST_P(HOG, GetDescriptors) { HOGDescriptor hog; hog.gammaCorrection = true; hog.setSVMDetector(hog.getDefaultPeopleDetector()); std::vector<float> cpu_descriptors; std::vector<float> gpu_descriptors; OCL_OFF(hog.compute(img, cpu_descriptors, hog.winSize)); OCL_ON(hog.compute(uimg, gpu_descriptors, hog.winSize)); Mat cpu_desc(cpu_descriptors), gpu_desc(gpu_descriptors); EXPECT_MAT_SIMILAR(cpu_desc, gpu_desc, 1e-1); }
OCL_TEST_P(HOG, Detect) { HOGDescriptor hog; hog.winSize = winSize; hog.gammaCorrection = true; if (winSize.width == 48 && winSize.height == 96) hog.setSVMDetector(hog.getDaimlerPeopleDetector()); else hog.setSVMDetector(hog.getDefaultPeopleDetector()); std::vector<Rect> cpu_found; std::vector<Rect> gpu_found; OCL_OFF(hog.detectMultiScale(img, cpu_found, 0, Size(8, 8), Size(0, 0), 1.05, 6)); OCL_ON(hog.detectMultiScale(uimg, gpu_found, 0, Size(8, 8), Size(0, 0), 1.05, 6)); EXPECT_LT(checkRectSimilarity(img.size(), cpu_found, gpu_found), 0.05); }
void test_by_pict() { Mat frame1 = readImage("optflow/RubberWhale1.png", IMREAD_GRAYSCALE); UMat usrc; frame1.copyTo(usrc); int histSize = randomInt(3, 29); float hue_range[] = { 0, 180 }; const float* ranges1 = { hue_range }; Mat hist1; //compute histogram calcHist(&frame1, 1, 0, Mat(), hist1, 1, &histSize, &ranges1, true, false); normalize(hist1, hist1, 0, 255, NORM_MINMAX, -1, Mat()); Mat dst1; UMat udst1, src, uhist1; hist1.copyTo(uhist1); std::vector<UMat> uims; uims.push_back(usrc); std::vector<float> urngs; urngs.push_back(0); urngs.push_back(180); std::vector<int> chs; chs.push_back(0); OCL_OFF(calcBackProject(&frame1, 1, 0, hist1, dst1, &ranges1, 1, true)); OCL_ON(calcBackProject(uims, chs, uhist1, udst1, urngs, 1.0)); if (cv::ocl::useOpenCL() && cv::ocl::Device::getDefault().isAMD()) { Size dstSize = dst1.size(); int nDiffs = (int)(0.03f*dstSize.height*dstSize.width); //check if the dst mats are the same except 3% difference EXPECT_MAT_N_DIFF(dst1, udst1, nDiffs); } else { EXPECT_MAT_NEAR(dst1, udst1, 0.0); } }
// single channel, instance method, with and without opencl TEST(TEST_CASE_NAME, single_channel ) { auto fn = []() { quality_test(create_brisque(), get_testfile_1a(), BRISQUE_EXPECTED_1, false, true ); }; OCL_OFF( fn() ); OCL_ON( fn() ); }
OCL_TEST_P(PyrLKOpticalFlow, Mat) { static const int npoints = 1000; static const float eps = 0.03f; static const float erreps = 0.1f; cv::Mat frame0 = readImage("optflow/RubberWhale1.png", cv::IMREAD_GRAYSCALE); ASSERT_FALSE(frame0.empty()); UMat umatFrame0; frame0.copyTo(umatFrame0); cv::Mat frame1 = readImage("optflow/RubberWhale2.png", cv::IMREAD_GRAYSCALE); ASSERT_FALSE(frame1.empty()); UMat umatFrame1; frame1.copyTo(umatFrame1); std::vector<cv::Point2f> pts; cv::goodFeaturesToTrack(frame0, pts, npoints, 0.01, 0.0); std::vector<cv::Point2f> cpuNextPts; std::vector<unsigned char> cpuStatusCPU; std::vector<float> cpuErr; OCL_OFF(cv::calcOpticalFlowPyrLK(frame0, frame1, pts, cpuNextPts, cpuStatusCPU, cpuErr, winSize, maxLevel, criteria, flags, minEigThreshold)); UMat umatNextPts, umatStatus, umatErr; OCL_ON(cv::calcOpticalFlowPyrLK(umatFrame0, umatFrame1, pts, umatNextPts, umatStatus, umatErr, winSize, maxLevel, criteria, flags, minEigThreshold)); std::vector<cv::Point2f> nextPts; umatNextPts.reshape(2, 1).copyTo(nextPts); std::vector<unsigned char> status; umatStatus.reshape(1, 1).copyTo(status); std::vector<float> err; umatErr.reshape(1, 1).copyTo(err); ASSERT_EQ(cpuNextPts.size(), nextPts.size()); ASSERT_EQ(cpuStatusCPU.size(), status.size()); size_t mistmatch = 0; size_t errmatch = 0; for (size_t i = 0; i < nextPts.size(); ++i) { if (status[i] != cpuStatusCPU[i]) { ++mistmatch; continue; } if (status[i]) { cv::Point2i a = nextPts[i]; cv::Point2i b = cpuNextPts[i]; bool eq = std::abs(a.x - b.x) < 1 && std::abs(a.y - b.y) < 1; float errdiff = 0.0f; if (!eq || errdiff > 1e-1) { ++mistmatch; continue; } eq = std::abs(cpuErr[i] - err[i]) < 0.01; if(!eq) ++errmatch; } } double bad_ratio = static_cast<double>(mistmatch) / (nextPts.size()); double err_ratio = static_cast<double>(errmatch) / (nextPts.size()); ASSERT_LE(bad_ratio, eps); ASSERT_LE(err_ratio, erreps); }
// single channel, with and without opencl TEST(TEST_CASE_NAME, single_channel ) { auto fn = []() { quality_test(quality::QualityMSE::create(get_testfile_1a()), get_testfile_1b(), MSE_EXPECTED_1); }; OCL_OFF( fn() ); OCL_ON( fn() ); }