Home | History | Annotate | Download | only in opencl
      1 /*M///////////////////////////////////////////////////////////////////////////////////////
      2 //
      3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
      4 //
      5 //  By downloading, copying, installing or using the software you agree to this license.
      6 //  If you do not agree to this license, do not download, install,
      7 //  copy or use the software.
      8 //
      9 //
     10 //                           License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
     14 // Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
     15 // Third party copyrights are property of their respective owners.
     16 //
     17 // @Authors
     18 //    Fangfang Bai, fangfang (at) multicorewareinc.com
     19 //    Jin Ma,       jin (at) multicorewareinc.com
     20 //
     21 // Redistribution and use in source and binary forms, with or without modification,
     22 // are permitted provided that the following conditions are met:
     23 //
     24 //   * Redistribution's of source code must retain the above copyright notice,
     25 //     this list of conditions and the following disclaimer.
     26 //
     27 //   * Redistribution's in binary form must reproduce the above copyright notice,
     28 //     this list of conditions and the following disclaimer in the documentation
     29 //     and/or other materials provided with the distribution.
     30 //
     31 //   * The name of the copyright holders may not be used to endorse or promote products
     32 //     derived from this software without specific prior written permission.
     33 //
     34 // This software is provided by the copyright holders and contributors as is and
     35 // any express or implied warranties, including, but not limited to, the implied
     36 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     37 // In no event shall the Intel Corporation or contributors be liable for any direct,
     38 // indirect, incidental, special, exemplary, or consequential damages
     39 // (including, but not limited to, procurement of substitute goods or services;
     40 // loss of use, data, or profits; or business interruption) however caused
     41 // and on any theory of liability, whether in contract, strict liability,
     42 // or tort (including negligence or otherwise) arising in any way out of
     43 // the use of this software, even if advised of the possibility of such damage.
     44 //
     45 //M*/
     46 
     47 #include "../perf_precomp.hpp"
     48 #include "opencv2/ts/ocl_perf.hpp"
     49 
     50 using std::tr1::make_tuple;
     51 
     52 #ifdef HAVE_OPENCL
     53 
     54 namespace cvtest {
     55 namespace ocl {
     56 
     57 ///////////// OpticalFlow Dual TVL1 ////////////////////////
     58 typedef tuple< tuple<int, double>, bool> OpticalFlowDualTVL1Params;
     59 typedef TestBaseWithParam<OpticalFlowDualTVL1Params> OpticalFlowDualTVL1Fixture;
     60 
     61 OCL_PERF_TEST_P(OpticalFlowDualTVL1Fixture, OpticalFlowDualTVL1,
     62             ::testing::Combine(
     63                         ::testing::Values(make_tuple<int, double>(-1, 0.3),
     64                                           make_tuple<int, double>(3, 0.5)),
     65                         ::testing::Bool()
     66                                 )
     67             )
     68     {
     69         Mat frame0 = imread(getDataPath("cv/optflow/RubberWhale1.png"), cv::IMREAD_GRAYSCALE);
     70         ASSERT_FALSE(frame0.empty()) << "can't load RubberWhale1.png";
     71 
     72         Mat frame1 = imread(getDataPath("cv/optflow/RubberWhale2.png"), cv::IMREAD_GRAYSCALE);
     73         ASSERT_FALSE(frame1.empty()) << "can't load RubberWhale2.png";
     74 
     75         const Size srcSize = frame0.size();
     76 
     77         const OpticalFlowDualTVL1Params params = GetParam();
     78         const tuple<int, double> filteringScale = get<0>(params);
     79             const int medianFiltering = get<0>(filteringScale);
     80             const double scaleStep = get<1>(filteringScale);
     81         const bool useInitFlow = get<1>(params);
     82         double eps = 0.9;
     83 
     84         UMat uFrame0; frame0.copyTo(uFrame0);
     85         UMat uFrame1; frame1.copyTo(uFrame1);
     86         UMat uFlow(srcSize, CV_32FC2);
     87         declare.in(uFrame0, uFrame1, WARMUP_READ).out(uFlow, WARMUP_READ);
     88 
     89         //create algorithm
     90         cv::Ptr<cv::DualTVL1OpticalFlow> alg = cv::createOptFlow_DualTVL1();
     91 
     92         //set parameters
     93         alg->setScaleStep(scaleStep);
     94         alg->setMedianFiltering(medianFiltering);
     95 
     96         if (useInitFlow)
     97         {
     98             //calculate initial flow as result of optical flow
     99             alg->calc(uFrame0, uFrame1, uFlow);
    100         }
    101 
    102         //set flag to use initial flow
    103         alg->setUseInitialFlow(useInitFlow);
    104         OCL_TEST_CYCLE()
    105             alg->calc(uFrame0, uFrame1, uFlow);
    106 
    107         SANITY_CHECK(uFlow, eps, ERROR_RELATIVE);
    108     }
    109 }
    110 } // namespace cvtest::ocl
    111 
    112 #endif // HAVE_OPENCL
    113