// This file is part of OpenCV project. // It is subject to the license terms in the LICENSE file found in the top-level directory // of this distribution and at http://opencv.org/license.html. // // Copyright (C) 2014, Itseez, Inc, all rights reserved. #include "../perf_precomp.hpp" #include "opencv2/ts/ocl_perf.hpp" #ifdef HAVE_OPENCL namespace cvtest { namespace ocl { using namespace cv; using namespace perf; using namespace std; using namespace std::tr1; #define SURF_MATCH_CONFIDENCE 0.65f #define ORB_MATCH_CONFIDENCE 0.3f #define WORK_MEGAPIX 0.6 typedef TestBaseWithParam stitch; #ifdef HAVE_OPENCV_XFEATURES2D #define TEST_DETECTORS testing::Values("surf", "orb", "akaze") #else #define TEST_DETECTORS testing::Values("orb", "akaze") #endif OCL_PERF_TEST_P(stitch, a123, TEST_DETECTORS) { UMat pano; vector _imgs; _imgs.push_back( imread( getDataPath("stitching/a1.png") ) ); _imgs.push_back( imread( getDataPath("stitching/a2.png") ) ); _imgs.push_back( imread( getDataPath("stitching/a3.png") ) ); vector imgs = ToUMat(_imgs); Ptr featuresFinder = getFeatureFinder(GetParam()); Ptr featuresMatcher = GetParam() == "orb" ? makePtr(false, ORB_MATCH_CONFIDENCE) : makePtr(false, SURF_MATCH_CONFIDENCE); declare.iterations(20); while(next()) { Stitcher stitcher = Stitcher::createDefault(); stitcher.setFeaturesFinder(featuresFinder); stitcher.setFeaturesMatcher(featuresMatcher); stitcher.setWarper(makePtr()); stitcher.setRegistrationResol(WORK_MEGAPIX); startTimer(); stitcher.stitch(imgs, pano); stopTimer(); } EXPECT_NEAR(pano.size().width, 1182, 50); EXPECT_NEAR(pano.size().height, 682, 30); SANITY_CHECK_NOTHING(); } OCL_PERF_TEST_P(stitch, b12, TEST_DETECTORS) { UMat pano; vector imgs; imgs.push_back( imread( getDataPath("stitching/b1.png") ) ); imgs.push_back( imread( getDataPath("stitching/b2.png") ) ); Ptr featuresFinder = getFeatureFinder(GetParam()); Ptr featuresMatcher = GetParam() == "orb" ? makePtr(false, ORB_MATCH_CONFIDENCE) : makePtr(false, SURF_MATCH_CONFIDENCE); declare.iterations(20); while(next()) { Stitcher stitcher = Stitcher::createDefault(); stitcher.setFeaturesFinder(featuresFinder); stitcher.setFeaturesMatcher(featuresMatcher); stitcher.setWarper(makePtr()); stitcher.setRegistrationResol(WORK_MEGAPIX); startTimer(); stitcher.stitch(imgs, pano); stopTimer(); } EXPECT_NEAR(pano.size().width, 1124, 50); EXPECT_NEAR(pano.size().height, 644, 30); SANITY_CHECK_NOTHING(); } OCL_PERF_TEST_P(stitch, boat, TEST_DETECTORS) { Size expected_dst_size(10789, 2663); checkDeviceMaxMemoryAllocSize(expected_dst_size, CV_16SC3, 4); UMat pano; vector _imgs; _imgs.push_back( imread( getDataPath("stitching/boat1.jpg") ) ); _imgs.push_back( imread( getDataPath("stitching/boat2.jpg") ) ); _imgs.push_back( imread( getDataPath("stitching/boat3.jpg") ) ); _imgs.push_back( imread( getDataPath("stitching/boat4.jpg") ) ); _imgs.push_back( imread( getDataPath("stitching/boat5.jpg") ) ); _imgs.push_back( imread( getDataPath("stitching/boat6.jpg") ) ); vector imgs = ToUMat(_imgs); Ptr featuresFinder = getFeatureFinder(GetParam()); Ptr featuresMatcher = GetParam() == "orb" ? makePtr(false, ORB_MATCH_CONFIDENCE) : makePtr(false, SURF_MATCH_CONFIDENCE); declare.iterations(20); while(next()) { Stitcher stitcher = Stitcher::createDefault(); stitcher.setFeaturesFinder(featuresFinder); stitcher.setFeaturesMatcher(featuresMatcher); stitcher.setWarper(makePtr()); stitcher.setRegistrationResol(WORK_MEGAPIX); startTimer(); stitcher.stitch(imgs, pano); stopTimer(); } EXPECT_NEAR(pano.size().width, expected_dst_size.width, 200); EXPECT_NEAR(pano.size().height, expected_dst_size.height, 100); SANITY_CHECK_NOTHING(); } } } // namespace cvtest::ocl #endif // HAVE_OPENCL