Home | History | Annotate | Download | only in perf
      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) 2000-2008, Intel Corporation, all rights reserved.
     14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
     15 // Third party copyrights are property of their respective owners.
     16 //
     17 // Redistribution and use in source and binary forms, with or without modification,
     18 // are permitted provided that the following conditions are met:
     19 //
     20 //   * Redistribution's of source code must retain the above copyright notice,
     21 //     this list of conditions and the following disclaimer.
     22 //
     23 //   * Redistribution's in binary form must reproduce the above copyright notice,
     24 //     this list of conditions and the following disclaimer in the documentation
     25 //     and/or other materials provided with the distribution.
     26 //
     27 //   * The name of the copyright holders may not be used to endorse or promote products
     28 //     derived from this software without specific prior written permission.
     29 //
     30 // This software is provided by the copyright holders and contributors "as is" and
     31 // any express or implied warranties, including, but not limited to, the implied
     32 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     33 // In no event shall the Intel Corporation or contributors be liable for any direct,
     34 // indirect, incidental, special, exemplary, or consequential damages
     35 // (including, but not limited to, procurement of substitute goods or services;
     36 // loss of use, data, or profits; or business interruption) however caused
     37 // and on any theory of liability, whether in contract, strict liability,
     38 // or tort (including negligence or otherwise) arising in any way out of
     39 // the use of this software, even if advised of the possibility of such damage.
     40 //
     41 //M*/
     42 
     43 #include "perf_precomp.hpp"
     44 
     45 using namespace std;
     46 using namespace testing;
     47 using namespace perf;
     48 
     49 ////////////////////////////////////////////////////////////////////////////////
     50 // MatchTemplate8U
     51 
     52 CV_ENUM(TemplateMethod, TM_SQDIFF, TM_SQDIFF_NORMED, TM_CCORR, TM_CCORR_NORMED, TM_CCOEFF, TM_CCOEFF_NORMED)
     53 
     54 DEF_PARAM_TEST(Sz_TemplateSz_Cn_Method, cv::Size, cv::Size, MatCn, TemplateMethod);
     55 
     56 PERF_TEST_P(Sz_TemplateSz_Cn_Method, MatchTemplate8U,
     57             Combine(CUDA_TYPICAL_MAT_SIZES,
     58                     Values(cv::Size(5, 5), cv::Size(16, 16), cv::Size(30, 30)),
     59                     CUDA_CHANNELS_1_3_4,
     60                     TemplateMethod::all()))
     61 {
     62     declare.time(300.0);
     63 
     64     const cv::Size size = GET_PARAM(0);
     65     const cv::Size templ_size = GET_PARAM(1);
     66     const int cn = GET_PARAM(2);
     67     const int method = GET_PARAM(3);
     68 
     69     cv::Mat image(size, CV_MAKE_TYPE(CV_8U, cn));
     70     cv::Mat templ(templ_size, CV_MAKE_TYPE(CV_8U, cn));
     71     declare.in(image, templ, WARMUP_RNG);
     72 
     73     if (PERF_RUN_CUDA())
     74     {
     75         const cv::cuda::GpuMat d_image(image);
     76         const cv::cuda::GpuMat d_templ(templ);
     77         cv::cuda::GpuMat dst;
     78 
     79         cv::Ptr<cv::cuda::TemplateMatching> alg = cv::cuda::createTemplateMatching(image.type(), method);
     80 
     81         TEST_CYCLE() alg->match(d_image, d_templ, dst);
     82 
     83         CUDA_SANITY_CHECK(dst, 1e-5, ERROR_RELATIVE);
     84     }
     85     else
     86     {
     87         cv::Mat dst;
     88 
     89         TEST_CYCLE() cv::matchTemplate(image, templ, dst, method);
     90 
     91         CPU_SANITY_CHECK(dst);
     92     }
     93 }
     94 
     95 ////////////////////////////////////////////////////////////////////////////////
     96 // MatchTemplate32F
     97 
     98 PERF_TEST_P(Sz_TemplateSz_Cn_Method, MatchTemplate32F,
     99             Combine(CUDA_TYPICAL_MAT_SIZES,
    100                     Values(cv::Size(5, 5), cv::Size(16, 16), cv::Size(30, 30)),
    101                     CUDA_CHANNELS_1_3_4,
    102                     Values(TemplateMethod(cv::TM_SQDIFF), TemplateMethod(cv::TM_CCORR))))
    103 {
    104     declare.time(300.0);
    105 
    106     const cv::Size size = GET_PARAM(0);
    107     const cv::Size templ_size = GET_PARAM(1);
    108     const int cn = GET_PARAM(2);
    109     int method = GET_PARAM(3);
    110 
    111     cv::Mat image(size, CV_MAKE_TYPE(CV_32F, cn));
    112     cv::Mat templ(templ_size, CV_MAKE_TYPE(CV_32F, cn));
    113     declare.in(image, templ, WARMUP_RNG);
    114 
    115     if (PERF_RUN_CUDA())
    116     {
    117         const cv::cuda::GpuMat d_image(image);
    118         const cv::cuda::GpuMat d_templ(templ);
    119         cv::cuda::GpuMat dst;
    120 
    121         cv::Ptr<cv::cuda::TemplateMatching> alg = cv::cuda::createTemplateMatching(image.type(), method);
    122 
    123         TEST_CYCLE() alg->match(d_image, d_templ, dst);
    124 
    125         CUDA_SANITY_CHECK(dst, 1e-6, ERROR_RELATIVE);
    126     }
    127     else
    128     {
    129         cv::Mat dst;
    130 
    131         TEST_CYCLE() cv::matchTemplate(image, templ, dst, method);
    132 
    133         CPU_SANITY_CHECK(dst);
    134     }
    135 }
    136