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 #ifdef HAVE_OPENCV_CALIB3D
     46 
     47 #include "opencv2/calib3d.hpp"
     48 
     49 using namespace std;
     50 using namespace testing;
     51 using namespace perf;
     52 
     53 DEF_PARAM_TEST_1(Count, int);
     54 
     55 //////////////////////////////////////////////////////////////////////
     56 // ProjectPoints
     57 
     58 PERF_TEST_P(Count, Calib3D_ProjectPoints,
     59             Values(5000, 10000, 20000))
     60 {
     61     const int count = GetParam();
     62 
     63     cv::Mat src(1, count, CV_32FC3);
     64     declare.in(src, WARMUP_RNG);
     65 
     66     const cv::Mat rvec = cv::Mat::ones(1, 3, CV_32FC1);
     67     const cv::Mat tvec = cv::Mat::ones(1, 3, CV_32FC1);
     68     const cv::Mat camera_mat = cv::Mat::ones(3, 3, CV_32FC1);
     69 
     70     if (PERF_RUN_CUDA())
     71     {
     72         const cv::cuda::GpuMat d_src(src);
     73         cv::cuda::GpuMat dst;
     74 
     75         TEST_CYCLE() cv::cuda::projectPoints(d_src, rvec, tvec, camera_mat, cv::Mat(), dst);
     76 
     77         CUDA_SANITY_CHECK(dst);
     78     }
     79     else
     80     {
     81         cv::Mat dst;
     82 
     83         TEST_CYCLE() cv::projectPoints(src, rvec, tvec, camera_mat, cv::noArray(), dst);
     84 
     85         CPU_SANITY_CHECK(dst);
     86     }
     87 }
     88 
     89 //////////////////////////////////////////////////////////////////////
     90 // SolvePnPRansac
     91 
     92 PERF_TEST_P(Count, Calib3D_SolvePnPRansac,
     93             Values(5000, 10000, 20000))
     94 {
     95     declare.time(10.0);
     96 
     97     const int count = GetParam();
     98 
     99     cv::Mat object(1, count, CV_32FC3);
    100     declare.in(object, WARMUP_RNG);
    101 
    102     cv::Mat camera_mat(3, 3, CV_32FC1);
    103     cv::randu(camera_mat, 0.5, 1);
    104     camera_mat.at<float>(0, 1) = 0.f;
    105     camera_mat.at<float>(1, 0) = 0.f;
    106     camera_mat.at<float>(2, 0) = 0.f;
    107     camera_mat.at<float>(2, 1) = 0.f;
    108 
    109     const cv::Mat dist_coef(1, 8, CV_32F, cv::Scalar::all(0));
    110 
    111     cv::Mat rvec_gold(1, 3, CV_32FC1);
    112     cv::randu(rvec_gold, 0, 1);
    113 
    114     cv::Mat tvec_gold(1, 3, CV_32FC1);
    115     cv::randu(tvec_gold, 0, 1);
    116 
    117     std::vector<cv::Point2f> image_vec;
    118     cv::projectPoints(object, rvec_gold, tvec_gold, camera_mat, dist_coef, image_vec);
    119 
    120     const cv::Mat image(1, count, CV_32FC2, &image_vec[0]);
    121 
    122     cv::Mat rvec;
    123     cv::Mat tvec;
    124 
    125     if (PERF_RUN_CUDA())
    126     {
    127         TEST_CYCLE() cv::cuda::solvePnPRansac(object, image, camera_mat, dist_coef, rvec, tvec);
    128 
    129         CUDA_SANITY_CHECK(rvec, 1e-3);
    130         CUDA_SANITY_CHECK(tvec, 1e-3);
    131     }
    132     else
    133     {
    134         TEST_CYCLE() cv::solvePnPRansac(object, image, camera_mat, dist_coef, rvec, tvec);
    135 
    136         CPU_SANITY_CHECK(rvec, 1e-6);
    137         CPU_SANITY_CHECK(tvec, 1e-6);
    138     }
    139 }
    140 
    141 #endif
    142