perf_surf.cuda.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. #include "perf_precomp.hpp"
  43. #if defined(HAVE_CUDA) && defined(OPENCV_ENABLE_NONFREE)
  44. #include "opencv2/ts/cuda_perf.hpp"
  45. namespace opencv_test { namespace {
  46. //////////////////////////////////////////////////////////////////////
  47. // SURF
  48. #ifdef HAVE_OPENCV_CUDAARITHM
  49. DEF_PARAM_TEST_1(Image, string);
  50. PERF_TEST_P(Image, CUDA_SURF,
  51. Values<std::string>("gpu/perf/aloe.png"))
  52. {
  53. declare.time(50.0);
  54. const cv::Mat img = readImage(GetParam(), cv::IMREAD_GRAYSCALE);
  55. ASSERT_FALSE(img.empty());
  56. if (PERF_RUN_CUDA())
  57. {
  58. cv::cuda::SURF_CUDA d_surf;
  59. const cv::cuda::GpuMat d_img(img);
  60. cv::cuda::GpuMat d_keypoints, d_descriptors;
  61. TEST_CYCLE() d_surf(d_img, cv::cuda::GpuMat(), d_keypoints, d_descriptors);
  62. std::vector<cv::KeyPoint> gpu_keypoints;
  63. d_surf.downloadKeypoints(d_keypoints, gpu_keypoints);
  64. cv::Mat gpu_descriptors(d_descriptors);
  65. sortKeyPoints(gpu_keypoints, gpu_descriptors);
  66. SANITY_CHECK_KEYPOINTS(gpu_keypoints);
  67. SANITY_CHECK(gpu_descriptors, 1e-3);
  68. }
  69. else
  70. {
  71. cv::Ptr<cv::Feature2D> surf = cv::xfeatures2d::SURF::create();
  72. std::vector<cv::KeyPoint> cpu_keypoints;
  73. cv::Mat cpu_descriptors;
  74. TEST_CYCLE() surf->detect(img, cpu_keypoints);
  75. TEST_CYCLE() surf->compute(img, cpu_keypoints, cpu_descriptors);
  76. SANITY_CHECK_KEYPOINTS(cpu_keypoints);
  77. SANITY_CHECK(cpu_descriptors);
  78. }
  79. }
  80. #endif // HAVE_OPENCV_CUDAARITHM
  81. }} // namespace
  82. #endif // HAVE_CUDA && OPENCV_ENABLE_NONFREE