From 7a0d6f773374969eb3df1ff814e9d865b8f5ece8 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Mon, 25 Feb 2013 14:33:00 +0400 Subject: [PATCH 01/41] Super Resolution module --- modules/java/generator/rst_parser.py | 4 +- modules/superres/CMakeLists.txt | 33 + modules/superres/doc/super_resolution.rst | 84 ++ modules/superres/doc/superres.rst | 8 + .../include/opencv2/superres/optical_flow.hpp | 73 ++ .../include/opencv2/superres/superres.hpp | 98 +++ modules/superres/perf/perf_main.cpp | 3 + modules/superres/perf/perf_precomp.cpp | 1 + modules/superres/perf/perf_precomp.hpp | 26 + modules/superres/perf/perf_superres.cpp | 153 ++++ modules/superres/src/btv_l1.cpp | 619 +++++++++++++++ modules/superres/src/btv_l1_gpu.cpp | 580 ++++++++++++++ modules/superres/src/cuda/btv_l1_gpu.cu | 234 ++++++ modules/superres/src/frame_source.cpp | 255 +++++++ modules/superres/src/input_array_utility.cpp | 273 +++++++ modules/superres/src/input_array_utility.hpp | 63 ++ modules/superres/src/optical_flow.cpp | 721 ++++++++++++++++++ modules/superres/src/precomp.cpp | 43 ++ modules/superres/src/precomp.hpp | 78 ++ modules/superres/src/ring_buffer.hpp | 79 ++ modules/superres/src/super_resolution.cpp | 85 +++ modules/superres/test/test_main.cpp | 3 + modules/superres/test/test_precomp.cpp | 1 + modules/superres/test/test_precomp.hpp | 23 + modules/superres/test/test_superres.cpp | 236 ++++++ samples/gpu/CMakeLists.txt | 2 +- samples/gpu/super_resolution.cpp | 152 ++++ 27 files changed, 3927 insertions(+), 3 deletions(-) create mode 100644 modules/superres/CMakeLists.txt create mode 100644 modules/superres/doc/super_resolution.rst create mode 100644 modules/superres/doc/superres.rst create mode 100644 modules/superres/include/opencv2/superres/optical_flow.hpp create mode 100644 modules/superres/include/opencv2/superres/superres.hpp create mode 100644 modules/superres/perf/perf_main.cpp create mode 100644 modules/superres/perf/perf_precomp.cpp create mode 100644 modules/superres/perf/perf_precomp.hpp create mode 100644 modules/superres/perf/perf_superres.cpp create mode 100644 modules/superres/src/btv_l1.cpp create mode 100644 modules/superres/src/btv_l1_gpu.cpp create mode 100644 modules/superres/src/cuda/btv_l1_gpu.cu create mode 100644 modules/superres/src/frame_source.cpp create mode 100644 modules/superres/src/input_array_utility.cpp create mode 100644 modules/superres/src/input_array_utility.hpp create mode 100644 modules/superres/src/optical_flow.cpp create mode 100644 modules/superres/src/precomp.cpp create mode 100644 modules/superres/src/precomp.hpp create mode 100644 modules/superres/src/ring_buffer.hpp create mode 100644 modules/superres/src/super_resolution.cpp create mode 100644 modules/superres/test/test_main.cpp create mode 100644 modules/superres/test/test_precomp.cpp create mode 100644 modules/superres/test/test_precomp.hpp create mode 100644 modules/superres/test/test_superres.cpp create mode 100644 samples/gpu/super_resolution.cpp diff --git a/modules/java/generator/rst_parser.py b/modules/java/generator/rst_parser.py index a9f5e04c99..33dae447d5 100755 --- a/modules/java/generator/rst_parser.py +++ b/modules/java/generator/rst_parser.py @@ -1,7 +1,7 @@ #/usr/bin/env python import os, sys, re, string, fnmatch -allmodules = ["core", "flann", "imgproc", "ml", "highgui", "video", "features2d", "calib3d", "objdetect", "legacy", "contrib", "gpu", "androidcamera", "java", "python", "stitching", "ts", "photo", "nonfree", "videostab", "ocl"] +allmodules = ["core", "flann", "imgproc", "ml", "highgui", "video", "features2d", "calib3d", "objdetect", "legacy", "contrib", "gpu", "androidcamera", "java", "python", "stitching", "ts", "photo", "nonfree", "videostab", "ocl", "superres"] verbose = False show_warnings = True show_errors = True @@ -380,7 +380,7 @@ class RstParser(object): @classmethod def parse_namespace(cls, func, section_name): - known_namespaces = ["cv", "gpu", "flann"] + known_namespaces = ["cv", "gpu", "flann", "superres"] l = section_name.strip() for namespace in known_namespaces: if l.startswith(namespace + "::"): diff --git a/modules/superres/CMakeLists.txt b/modules/superres/CMakeLists.txt new file mode 100644 index 0000000000..5e82629ae8 --- /dev/null +++ b/modules/superres/CMakeLists.txt @@ -0,0 +1,33 @@ +if(ANDROID OR IOS) + ocv_module_disable(superres) +endif() + +set(the_description "Super Resolution") +ocv_add_module(superres opencv_imgproc opencv_video OPTIONAL opencv_gpu opencv_highgui) +ocv_module_include_directories() + +ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef /wd4127) + +if(HAVE_CUDA) + string(REPLACE "-Wsign-promo" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + + ocv_source_group("Src\\Cuda" GLOB "src/cuda/*.cu") + ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include" ${CUDA_INCLUDE_DIRS}) + + file(GLOB lib_cuda "src/cuda/*.cu") + ocv_cuda_compile(cuda_objs ${lib_cuda}) + + set(cuda_link_libs ${CUDA_LIBRARIES}) +else() + set(lib_cuda "") + set(cuda_objs "") + set(cuda_link_libs "") +endif() + +ocv_glob_module_sources(SOURCES ${lib_cuda} ${cuda_objs}) + +ocv_create_module(${cuda_link_libs}) +ocv_add_precompiled_headers(${the_module}) + +ocv_add_accuracy_tests() +ocv_add_perf_tests() diff --git a/modules/superres/doc/super_resolution.rst b/modules/superres/doc/super_resolution.rst new file mode 100644 index 0000000000..1772b0d2db --- /dev/null +++ b/modules/superres/doc/super_resolution.rst @@ -0,0 +1,84 @@ +Super Resolution +================ + +.. highlight:: cpp + +The Super Resolution module contains a set of functions and classes that can be used to solve the problem of resolution enhancement. There are a few methods implemented, most of them are descibed in the papers [Farsiu03]_ and [Mitzel09]_. + + + +superres::SuperResolution +------------------------- +Base class for Super Resolution algorithms. + +.. ocv:class:: superres::SuperResolution : public Algorithm, public superres::FrameSource + +The class is only used to define the common interface for the whole family of Super Resolution algorithms. + + + +superres::SuperResolution::setInput +----------------------------------- +Set input frame source for Super Resolution algorithm. + +.. ocv:function:: void superres::SuperResolution::setInput(const Ptr& frameSource) + + :param frameSource: Input frame source + + + +superres::SuperResolution::nextFrame +------------------------------------ +Process next frame from input and return output result. + +.. ocv:function:: void superres::SuperResolution::nextFrame(OutputArray frame) + + :param frame: Output result + + + +superres::SuperResolution::collectGarbage +----------------------------------------- +Clear all inner buffers. + +.. ocv:function:: void superres::SuperResolution::collectGarbage() + + + +superres::createSuperResolution_BTVL1 +------------------------------------- +Create Bilateral TV-L1 Super Resolution. + +.. ocv:function:: Ptr superres::createSuperResolution_BTVL1() + +.. ocv:function:: Ptr superres::createSuperResolution_BTVL1_GPU() + +This class implements Super Resolution algorithm described in the papers [Farsiu03]_ and [Mitzel09]_ . + +Here are important members of the class that control the algorithm, which you can set after constructing the class instance: + + * **int scale** Scale factor. + + * **int iterations** Iteration count. + + * **double tau** Asymptotic value of steepest descent method. + + * **double lambda** Weight parameter to balance data term and smoothness term. + + * **double alpha** Parameter of spacial distribution in Bilateral-TV. + + * **int btvKernelSize** Kernel size of Bilateral-TV filter. + + * **int blurKernelSize** Gaussian blur kernel size. + + * **double blurSigma** Gaussian blur sigma. + + * **int temporalAreaRadius** Radius of the temporal search area. + + * **Ptr opticalFlow** Dense optical flow algorithm. + + + +.. [Farsiu03] S. Farsiu, D. Robinson, M. Elad, P. Milanfar. Fast and robust Super-Resolution. Proc 2003 IEEE Int Conf on Image Process, pp. 291–294, 2003. + +.. [Mitzel09] D. Mitzel, T. Pock, T. Schoenemann, D. Cremers. Video super resolution using duality based TV-L1 optical flow. DAGM, 2009. diff --git a/modules/superres/doc/superres.rst b/modules/superres/doc/superres.rst new file mode 100644 index 0000000000..6a69fcaeb9 --- /dev/null +++ b/modules/superres/doc/superres.rst @@ -0,0 +1,8 @@ +************************** +superres. Super Resolution +************************** + +.. toctree:: + :maxdepth: 2 + + super_resolution diff --git a/modules/superres/include/opencv2/superres/optical_flow.hpp b/modules/superres/include/opencv2/superres/optical_flow.hpp new file mode 100644 index 0000000000..bb344fc92f --- /dev/null +++ b/modules/superres/include/opencv2/superres/optical_flow.hpp @@ -0,0 +1,73 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifndef __OPENCV_SUPERRES_OPTICAL_FLOW_HPP__ +#define __OPENCV_SUPERRES_OPTICAL_FLOW_HPP__ + +#include "opencv2/core/core.hpp" + +namespace cv +{ + namespace superres + { + class CV_EXPORTS DenseOpticalFlowExt : public cv::Algorithm + { + public: + virtual void calc(InputArray frame0, InputArray frame1, OutputArray flow1, OutputArray flow2 = noArray()) = 0; + virtual void collectGarbage() = 0; + }; + + CV_EXPORTS Ptr createOptFlow_Farneback(); + CV_EXPORTS Ptr createOptFlow_Farneback_GPU(); + + CV_EXPORTS Ptr createOptFlow_Simple(); + + CV_EXPORTS Ptr createOptFlow_DualTVL1(); + CV_EXPORTS Ptr createOptFlow_DualTVL1_GPU(); + + CV_EXPORTS Ptr createOptFlow_Brox_GPU(); + + CV_EXPORTS Ptr createOptFlow_PyrLK_GPU(); + } +} + +#endif // __OPENCV_SUPERRES_OPTICAL_FLOW_HPP__ diff --git a/modules/superres/include/opencv2/superres/superres.hpp b/modules/superres/include/opencv2/superres/superres.hpp new file mode 100644 index 0000000000..e3e7a1e8dc --- /dev/null +++ b/modules/superres/include/opencv2/superres/superres.hpp @@ -0,0 +1,98 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifndef __OPENCV_SUPERRES_HPP__ +#define __OPENCV_SUPERRES_HPP__ + +#include "opencv2/core/core.hpp" + +namespace cv +{ + namespace superres + { + CV_EXPORTS bool initModule_superres(); + + class CV_EXPORTS FrameSource + { + public: + virtual ~FrameSource(); + + virtual void nextFrame(OutputArray frame) = 0; + virtual void reset() = 0; + }; + + CV_EXPORTS Ptr createFrameSource_Empty(); + + CV_EXPORTS Ptr createFrameSource_Video(const std::string& fileName); + CV_EXPORTS Ptr createFrameSource_Video_GPU(const std::string& fileName); + + CV_EXPORTS Ptr createFrameSource_Camera(int deviceId = 0); + + class CV_EXPORTS SuperResolution : public cv::Algorithm, public FrameSource + { + public: + void setInput(const Ptr& frameSource); + + void nextFrame(OutputArray frame); + void reset(); + + virtual void collectGarbage(); + + protected: + SuperResolution(); + + virtual void initImpl(Ptr& frameSource) = 0; + virtual void processImpl(Ptr& frameSource, OutputArray output) = 0; + + private: + Ptr frameSource_; + bool firstCall_; + }; + + // S. Farsiu , D. Robinson, M. Elad, P. Milanfar. Fast and robust multiframe super resolution. + // Dennis Mitzel, Thomas Pock, Thomas Schoenemann, Daniel Cremers. Video Super Resolution using Duality Based TV-L1 Optical Flow. + CV_EXPORTS Ptr createSuperResolution_BTVL1(); + CV_EXPORTS Ptr createSuperResolution_BTVL1_GPU(); + } +} + +#endif // __OPENCV_SUPERRES_HPP__ diff --git a/modules/superres/perf/perf_main.cpp b/modules/superres/perf/perf_main.cpp new file mode 100644 index 0000000000..230df8190d --- /dev/null +++ b/modules/superres/perf/perf_main.cpp @@ -0,0 +1,3 @@ +#include "perf_precomp.hpp" + +CV_PERF_TEST_MAIN(superres) diff --git a/modules/superres/perf/perf_precomp.cpp b/modules/superres/perf/perf_precomp.cpp new file mode 100644 index 0000000000..8552ac3d42 --- /dev/null +++ b/modules/superres/perf/perf_precomp.cpp @@ -0,0 +1 @@ +#include "perf_precomp.hpp" diff --git a/modules/superres/perf/perf_precomp.hpp b/modules/superres/perf/perf_precomp.hpp new file mode 100644 index 0000000000..732dd1118f --- /dev/null +++ b/modules/superres/perf/perf_precomp.hpp @@ -0,0 +1,26 @@ +#ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wmissing-declarations" +# if defined __clang__ || defined __APPLE__ +# pragma GCC diagnostic ignored "-Wmissing-prototypes" +# pragma GCC diagnostic ignored "-Wextra" +# endif +#endif + +#ifndef __OPENCV_PERF_PRECOMP_HPP__ +#define __OPENCV_PERF_PRECOMP_HPP__ + +#ifdef HAVE_CVCONFIG_H +#include "cvconfig.h" +#endif + +#include "opencv2/core/core.hpp" +#include "opencv2/core/gpumat.hpp" +#include "opencv2/ts/ts_perf.hpp" +#include "opencv2/superres/superres.hpp" +#include "opencv2/superres/optical_flow.hpp" + +#ifdef GTEST_CREATE_SHARED_LIBRARY +#error no modules except ts should have GTEST_CREATE_SHARED_LIBRARY defined +#endif + +#endif diff --git a/modules/superres/perf/perf_superres.cpp b/modules/superres/perf/perf_superres.cpp new file mode 100644 index 0000000000..a0fa8e58d2 --- /dev/null +++ b/modules/superres/perf/perf_superres.cpp @@ -0,0 +1,153 @@ +#include "perf_precomp.hpp" + +using namespace std; +using namespace std::tr1; +using namespace testing; +using namespace perf; +using namespace cv; +using namespace cv::superres; +using namespace cv::gpu; + +#define GPU_SANITY_CHECK(mat, ...) \ + do{ \ + Mat gpu_##mat(mat); \ + SANITY_CHECK(gpu_##mat, ## __VA_ARGS__); \ + } while(0) + +#define CPU_SANITY_CHECK(mat, ...) \ + do{ \ + Mat cpu_##mat(mat); \ + SANITY_CHECK(cpu_##mat, ## __VA_ARGS__); \ + } while(0) + +namespace +{ + class OneFrameSource_CPU : public FrameSource + { + public: + explicit OneFrameSource_CPU(const Mat& frame) : frame_(frame) {} + + void nextFrame(OutputArray frame) + { + frame.getMatRef() = frame_; + } + + void reset() + { + } + + private: + Mat frame_; + }; + + class OneFrameSource_GPU : public FrameSource + { + public: + explicit OneFrameSource_GPU(const GpuMat& frame) : frame_(frame) {} + + void nextFrame(OutputArray frame) + { + frame.getGpuMatRef() = frame_; + } + + void reset() + { + } + + private: + GpuMat frame_; + }; + + class ZeroOpticalFlow : public DenseOpticalFlowExt + { + public: + void calc(InputArray frame0, InputArray, OutputArray flow1, OutputArray flow2) + { + cv::Size size = frame0.size(); + + if (!flow2.needed()) + { + flow1.create(size, CV_32FC2); + + if (flow1.kind() == cv::_InputArray::GPU_MAT) + flow1.getGpuMatRef().setTo(cv::Scalar::all(0)); + else + flow1.getMatRef().setTo(cv::Scalar::all(0)); + } + else + { + flow1.create(size, CV_32FC1); + flow2.create(size, CV_32FC1); + + if (flow1.kind() == cv::_InputArray::GPU_MAT) + flow1.getGpuMatRef().setTo(cv::Scalar::all(0)); + else + flow1.getMatRef().setTo(cv::Scalar::all(0)); + + if (flow2.kind() == cv::_InputArray::GPU_MAT) + flow2.getGpuMatRef().setTo(cv::Scalar::all(0)); + else + flow2.getMatRef().setTo(cv::Scalar::all(0)); + } + } + + void collectGarbage() + { + } + }; +} + +PERF_TEST_P(Size_MatType, SuperResolution_BTVL1, + Combine(Values(szSmall64, szSmall128), + Values(MatType(CV_8UC1), MatType(CV_8UC3)))) +{ + declare.time(5 * 60); + + const Size size = get<0>(GetParam()); + const int type = get<1>(GetParam()); + + Mat frame(size, type); + declare.in(frame, WARMUP_RNG); + + const int scale = 2; + const int iterations = 50; + const int temporalAreaRadius = 1; + Ptr opticalFlow(new ZeroOpticalFlow); + + if (PERF_RUN_GPU()) + { + Ptr superRes = createSuperResolution_BTVL1_GPU(); + + superRes->set("scale", scale); + superRes->set("iterations", iterations); + superRes->set("temporalAreaRadius", temporalAreaRadius); + superRes->set("opticalFlow", opticalFlow); + + superRes->setInput(new OneFrameSource_GPU(GpuMat(frame))); + + GpuMat dst; + superRes->nextFrame(dst); + + TEST_CYCLE_N(10) superRes->nextFrame(dst); + + GPU_SANITY_CHECK(dst); + } + else + { + Ptr superRes = createSuperResolution_BTVL1(); + + superRes->set("scale", scale); + superRes->set("iterations", iterations); + superRes->set("temporalAreaRadius", temporalAreaRadius); + superRes->set("opticalFlow", opticalFlow); + + superRes->setInput(new OneFrameSource_CPU(frame)); + + Mat dst; + superRes->nextFrame(dst); + + TEST_CYCLE_N(10) superRes->nextFrame(dst); + + CPU_SANITY_CHECK(dst); + } +} diff --git a/modules/superres/src/btv_l1.cpp b/modules/superres/src/btv_l1.cpp new file mode 100644 index 0000000000..71c68365d0 --- /dev/null +++ b/modules/superres/src/btv_l1.cpp @@ -0,0 +1,619 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +// S. Farsiu , D. Robinson, M. Elad, P. Milanfar. Fast and robust multiframe super resolution. +// Dennis Mitzel, Thomas Pock, Thomas Schoenemann, Daniel Cremers. Video Super Resolution using Duality Based TV-L1 Optical Flow. + +#include "precomp.hpp" + +using namespace std; +using namespace cv; +using namespace cv::superres; +using namespace cv::superres::detail; + +namespace +{ + void calcRelativeMotions(const vector& forwardMotions, const vector& backwardMotions, + vector& relForwardMotions, vector& relBackwardMotions, + int baseIdx, Size size) + { + const int count = static_cast(forwardMotions.size()); + + relForwardMotions.resize(count); + relForwardMotions[baseIdx].create(size, CV_32FC2); + relForwardMotions[baseIdx].setTo(Scalar::all(0)); + + relBackwardMotions.resize(count); + relBackwardMotions[baseIdx].create(size, CV_32FC2); + relBackwardMotions[baseIdx].setTo(Scalar::all(0)); + + for (int i = baseIdx - 1; i >= 0; --i) + { + add(relForwardMotions[i + 1], forwardMotions[i], relForwardMotions[i]); + + add(relBackwardMotions[i + 1], backwardMotions[i + 1], relBackwardMotions[i]); + } + + for (int i = baseIdx + 1; i < count; ++i) + { + add(relForwardMotions[i - 1], backwardMotions[i], relForwardMotions[i]); + + add(relBackwardMotions[i - 1], forwardMotions[i - 1], relBackwardMotions[i]); + } + } + + void upscaleMotions(const vector& lowResMotions, vector& highResMotions, int scale) + { + highResMotions.resize(lowResMotions.size()); + + for (size_t i = 0; i < lowResMotions.size(); ++i) + { + resize(lowResMotions[i], highResMotions[i], Size(), scale, scale, INTER_CUBIC); + multiply(highResMotions[i], Scalar::all(scale), highResMotions[i]); + } + } + + void buildMotionMaps(const Mat& forwardMotion, const Mat& backwardMotion, Mat& forwardMap, Mat& backwardMap) + { + forwardMap.create(forwardMotion.size(), CV_32FC2); + backwardMap.create(forwardMotion.size(), CV_32FC2); + + for (int y = 0; y < forwardMotion.rows; ++y) + { + const Point2f* forwardMotionRow = forwardMotion.ptr(y); + const Point2f* backwardMotionRow = backwardMotion.ptr(y); + Point2f* forwardMapRow = forwardMap.ptr(y); + Point2f* backwardMapRow = backwardMap.ptr(y); + + for (int x = 0; x < forwardMotion.cols; ++x) + { + Point2f base(static_cast(x), static_cast(y)); + + forwardMapRow[x] = base + backwardMotionRow[x]; + backwardMapRow[x] = base + forwardMotionRow[x]; + } + } + } + + template + void upscaleImpl(const Mat& src, Mat& dst, int scale) + { + dst.create(src.rows * scale, src.cols * scale, src.type()); + dst.setTo(Scalar::all(0)); + + for (int y = 0, Y = 0; y < src.rows; ++y, Y += scale) + { + const T* srcRow = src.ptr(y); + T* dstRow = dst.ptr(Y); + + for (int x = 0, X = 0; x < src.cols; ++x, X += scale) + dstRow[X] = srcRow[x]; + } + } + + void upscale(const Mat& src, Mat& dst, int scale) + { + typedef void (*func_t)(const Mat& src, Mat& dst, int scale); + static const func_t funcs[] = + { + 0, upscaleImpl, 0, upscaleImpl + }; + + CV_Assert( src.channels() == 1 || src.channels() == 3 || src.channels() == 4 ); + + const func_t func = funcs[src.channels()]; + + func(src, dst, scale); + } + + float diffSign(float a, float b) + { + return a > b ? 1.0f : a < b ? -1.0f : 0.0f; + } + Point3f diffSign(Point3f a, Point3f b) + { + return Point3f( + a.x > b.x ? 1.0f : a.x < b.x ? -1.0f : 0.0f, + a.y > b.y ? 1.0f : a.y < b.y ? -1.0f : 0.0f, + a.z > b.z ? 1.0f : a.z < b.z ? -1.0f : 0.0f + ); + } + + void diffSign(const Mat& src1, const Mat& src2, Mat& dst) + { + const int count = src1.cols * src1.channels(); + + dst.create(src1.size(), src1.type()); + + for (int y = 0; y < src1.rows; ++y) + { + const float* src1Ptr = src1.ptr(y); + const float* src2Ptr = src2.ptr(y); + float* dstPtr = dst.ptr(y); + + for (int x = 0; x < count; ++x) + dstPtr[x] = diffSign(src1Ptr[x], src2Ptr[x]); + } + } + + void calcBtvWeights(int btvKernelSize, double alpha, vector& btvWeights) + { + const size_t size = btvKernelSize * btvKernelSize; + + btvWeights.resize(size); + + const int ksize = (btvKernelSize - 1) / 2; + const float alpha_f = static_cast(alpha); + + for (int m = 0, ind = 0; m <= ksize; ++m) + { + for (int l = ksize; l + m >= 0; --l, ++ind) + btvWeights[ind] = pow(alpha_f, std::abs(m) + std::abs(l)); + } + } + + template + struct BtvRegularizationBody : ParallelLoopBody + { + void operator ()(const Range& range) const; + + Mat src; + mutable Mat dst; + int ksize; + const float* btvWeights; + }; + + template + void BtvRegularizationBody::operator ()(const Range& range) const + { + for (int i = range.start; i < range.end; ++i) + { + const T* srcRow = src.ptr(i); + T* dstRow = dst.ptr(i); + + for(int j = ksize; j < src.cols - ksize; ++j) + { + const T srcVal = srcRow[j]; + + for (int m = 0, ind = 0; m <= ksize; ++m) + { + const T* srcRow2 = src.ptr(i - m); + const T* srcRow3 = src.ptr(i + m); + + for (int l = ksize; l + m >= 0; --l, ++ind) + { + dstRow[j] += btvWeights[ind] * (diffSign(srcVal, srcRow3[j + l]) - diffSign(srcRow2[j - l], srcVal)); + } + } + } + } + } + + template + void calcBtvRegularizationImpl(const Mat& src, Mat& dst, int btvKernelSize, const vector& btvWeights) + { + dst.create(src.size(), src.type()); + dst.setTo(Scalar::all(0)); + + const int ksize = (btvKernelSize - 1) / 2; + + BtvRegularizationBody body; + + body.src = src; + body.dst = dst; + body.ksize = ksize; + body.btvWeights = &btvWeights[0]; + + parallel_for_(Range(ksize, src.rows - ksize), body); + } + + void calcBtvRegularization(const Mat& src, Mat& dst, int btvKernelSize, const vector& btvWeights) + { + typedef void (*func_t)(const Mat& src, Mat& dst, int btvKernelSize, const vector& btvWeights); + static const func_t funcs[] = + { + 0, calcBtvRegularizationImpl, 0, calcBtvRegularizationImpl + }; + + const func_t func = funcs[src.channels()]; + + func(src, dst, btvKernelSize, btvWeights); + } + + class BTVL1_Base + { + public: + BTVL1_Base(); + + void process(const vector& src, Mat& dst, + const vector& forwardMotions, const vector& backwardMotions, + int baseIdx); + + void collectGarbage(); + + protected: + int scale_; + int iterations_; + double tau_; + double lambda_; + double alpha_; + int btvKernelSize_; + int blurKernelSize_; + double blurSigma_; + Ptr opticalFlow_; + + private: + Ptr filter_; + int curBlurKernelSize_; + double curBlurSigma_; + int curSrcType_; + + vector btvWeights_; + int curBtvKernelSize_; + double curAlpha_; + + vector lowResForwardMotions_; + vector lowResBackwardMotions_; + + vector highResForwardMotions_; + vector highResBackwardMotions_; + + vector forwardMaps_; + vector backwardMaps_; + + Mat highRes_; + + Mat diffTerm_, regTerm_; + Mat a_, b_, c_; + }; + + BTVL1_Base::BTVL1_Base() + { + scale_ = 4; + iterations_ = 180; + lambda_ = 0.03; + tau_ = 1.3; + alpha_ = 0.7; + btvKernelSize_ = 7; + blurKernelSize_ = 5; + blurSigma_ = 0.0; + opticalFlow_ = createOptFlow_Farneback(); + + curBlurKernelSize_ = -1; + curBlurSigma_ = -1.0; + curSrcType_ = -1; + + curBtvKernelSize_ = -1; + curAlpha_ = -1.0; + } + + void BTVL1_Base::process(const vector& src, Mat& dst, const vector& forwardMotions, const vector& backwardMotions, int baseIdx) + { + CV_Assert( scale_ > 1 ); + CV_Assert( iterations_ > 0 ); + CV_Assert( tau_ > 0.0 ); + CV_Assert( alpha_ > 0.0 ); + CV_Assert( btvKernelSize_ > 0 ); + CV_Assert( blurKernelSize_ > 0 ); + CV_Assert( blurSigma_ >= 0.0 ); + + // update blur filter and btv weights + + if (filter_.empty() || blurKernelSize_ != curBlurKernelSize_ || blurSigma_ != curBlurSigma_ || src[0].type() != curSrcType_) + { + filter_ = createGaussianFilter(src[0].type(), Size(blurKernelSize_, blurKernelSize_), blurSigma_); + curBlurKernelSize_ = blurKernelSize_; + curBlurSigma_ = blurSigma_; + curSrcType_ = src[0].type(); + } + + if (btvWeights_.empty() || btvKernelSize_ != curBtvKernelSize_ || alpha_ != curAlpha_) + { + calcBtvWeights(btvKernelSize_, alpha_, btvWeights_); + curBtvKernelSize_ = btvKernelSize_; + curAlpha_ = alpha_; + } + + // calc high res motions + + calcRelativeMotions(forwardMotions, backwardMotions, lowResForwardMotions_, lowResBackwardMotions_, baseIdx, src[0].size()); + + upscaleMotions(lowResForwardMotions_, highResForwardMotions_, scale_); + upscaleMotions(lowResBackwardMotions_, highResBackwardMotions_, scale_); + + forwardMaps_.resize(highResForwardMotions_.size()); + backwardMaps_.resize(highResForwardMotions_.size()); + for (size_t i = 0; i < highResForwardMotions_.size(); ++i) + buildMotionMaps(highResForwardMotions_[i], highResBackwardMotions_[i], forwardMaps_[i], backwardMaps_[i]); + + // initial estimation + + const Size lowResSize = src[0].size(); + const Size highResSize(lowResSize.width * scale_, lowResSize.height * scale_); + + resize(src[baseIdx], highRes_, highResSize, 0, 0, INTER_CUBIC); + + // iterations + + diffTerm_.create(highResSize, highRes_.type()); + a_.create(highResSize, highRes_.type()); + b_.create(highResSize, highRes_.type()); + c_.create(lowResSize, highRes_.type()); + + for (int i = 0; i < iterations_; ++i) + { + diffTerm_.setTo(Scalar::all(0)); + + for (size_t k = 0; k < src.size(); ++k) + { + // a = M * Ih + remap(highRes_, a_, backwardMaps_[k], noArray(), INTER_NEAREST); + // b = HM * Ih + filter_->apply(a_, b_); + // c = DHM * Ih + resize(b_, c_, lowResSize, 0, 0, INTER_NEAREST); + + diffSign(src[k], c_, c_); + + // a = Dt * diff + upscale(c_, a_, scale_); + // b = HtDt * diff + filter_->apply(a_, b_); + // a = MtHtDt * diff + remap(b_, a_, forwardMaps_[k], noArray(), INTER_NEAREST); + + add(diffTerm_, a_, diffTerm_); + } + + if (lambda_ > 0) + { + calcBtvRegularization(highRes_, regTerm_, btvKernelSize_, btvWeights_); + addWeighted(diffTerm_, 1.0, regTerm_, -lambda_, 0.0, diffTerm_); + } + + addWeighted(highRes_, 1.0, diffTerm_, tau_, 0.0, highRes_); + } + + Rect inner(btvKernelSize_, btvKernelSize_, highRes_.cols - 2 * btvKernelSize_, highRes_.rows - 2 * btvKernelSize_); + highRes_(inner).copyTo(dst); + } + + void BTVL1_Base::collectGarbage() + { + filter_.release(); + + lowResForwardMotions_.clear(); + lowResBackwardMotions_.clear(); + + highResForwardMotions_.clear(); + highResBackwardMotions_.clear(); + + forwardMaps_.clear(); + backwardMaps_.clear(); + + highRes_.release(); + + diffTerm_.release(); + regTerm_.release(); + a_.release(); + b_.release(); + c_.release(); + } + +//////////////////////////////////////////////////////////////////// + + class BTVL1 : public SuperResolution, private BTVL1_Base + { + public: + AlgorithmInfo* info() const; + + BTVL1(); + + void collectGarbage(); + + protected: + void initImpl(Ptr& frameSource); + void processImpl(Ptr& frameSource, OutputArray output); + + private: + int temporalAreaRadius_; + + void readNextFrame(Ptr& frameSource); + void processFrame(int idx); + + Mat curFrame_; + Mat prevFrame_; + + vector frames_; + vector forwardMotions_; + vector backwardMotions_; + vector outputs_; + + int storePos_; + int procPos_; + int outPos_; + + vector srcFrames_; + vector srcForwardMotions_; + vector srcBackwardMotions_; + Mat finalOutput_; + }; + + CV_INIT_ALGORITHM(BTVL1, "SuperResolution.BTVL1", + obj.info()->addParam(obj, "scale", obj.scale_, false, 0, 0, "Scale factor."); + obj.info()->addParam(obj, "iterations", obj.iterations_, false, 0, 0, "Iteration count."); + obj.info()->addParam(obj, "tau", obj.tau_, false, 0, 0, "Asymptotic value of steepest descent method."); + obj.info()->addParam(obj, "lambda", obj.lambda_, false, 0, 0, "Weight parameter to balance data term and smoothness term."); + obj.info()->addParam(obj, "alpha", obj.alpha_, false, 0, 0, "Parameter of spacial distribution in Bilateral-TV."); + obj.info()->addParam(obj, "btvKernelSize", obj.btvKernelSize_, false, 0, 0, "Kernel size of Bilateral-TV filter."); + obj.info()->addParam(obj, "blurKernelSize", obj.blurKernelSize_, false, 0, 0, "Gaussian blur kernel size."); + obj.info()->addParam(obj, "blurSigma", obj.blurSigma_, false, 0, 0, "Gaussian blur sigma."); + obj.info()->addParam(obj, "temporalAreaRadius", obj.temporalAreaRadius_, false, 0, 0, "Radius of the temporal search area."); + obj.info()->addParam(obj, "opticalFlow", obj.opticalFlow_, false, 0, 0, "Dense optical flow algorithm.")); + + BTVL1::BTVL1() + { + temporalAreaRadius_ = 4; + } + + void BTVL1::collectGarbage() + { + curFrame_.release(); + prevFrame_.release(); + + frames_.clear(); + forwardMotions_.clear(); + backwardMotions_.clear(); + outputs_.clear(); + + srcFrames_.clear(); + srcForwardMotions_.clear(); + srcBackwardMotions_.clear(); + finalOutput_.release(); + + SuperResolution::collectGarbage(); + BTVL1_Base::collectGarbage(); + } + + void BTVL1::initImpl(Ptr& frameSource) + { + const int cacheSize = 2 * temporalAreaRadius_ + 1; + + frames_.resize(cacheSize); + forwardMotions_.resize(cacheSize); + backwardMotions_.resize(cacheSize); + outputs_.resize(cacheSize); + + storePos_ = -1; + + for (int t = -temporalAreaRadius_; t <= temporalAreaRadius_; ++t) + readNextFrame(frameSource); + + for (int i = 0; i <= temporalAreaRadius_; ++i) + processFrame(i); + + procPos_ = temporalAreaRadius_; + outPos_ = -1; + } + + void BTVL1::processImpl(Ptr& frameSource, OutputArray _output) + { + if (outPos_ >= storePos_) + { + _output.release(); + return; + } + + readNextFrame(frameSource); + + if (procPos_ < storePos_) + { + ++procPos_; + processFrame(procPos_); + } + + ++outPos_; + const Mat& curOutput = at(outPos_, outputs_); + + if (_output.kind() < _InputArray::OPENGL_BUFFER) + curOutput.convertTo(_output, CV_8U); + else + { + curOutput.convertTo(finalOutput_, CV_8U); + arrCopy(finalOutput_, _output); + } + } + + void BTVL1::readNextFrame(Ptr& frameSource) + { + frameSource->nextFrame(curFrame_); + + if (curFrame_.empty()) + return; + + ++storePos_; + curFrame_.convertTo(at(storePos_, frames_), CV_32F); + + if (storePos_ > 0) + { + opticalFlow_->calc(prevFrame_, curFrame_, at(storePos_ - 1, forwardMotions_)); + opticalFlow_->calc(curFrame_, prevFrame_, at(storePos_, backwardMotions_)); + } + + curFrame_.copyTo(prevFrame_); + } + + void BTVL1::processFrame(int idx) + { + const int startIdx = max(idx - temporalAreaRadius_, 0); + const int procIdx = idx; + const int endIdx = min(startIdx + 2 * temporalAreaRadius_, storePos_); + + const int count = endIdx - startIdx + 1; + + srcFrames_.resize(count); + srcForwardMotions_.resize(count); + srcBackwardMotions_.resize(count); + + int baseIdx = -1; + + for (int i = startIdx, k = 0; i <= endIdx; ++i, ++k) + { + if (i == procIdx) + baseIdx = k; + + srcFrames_[k] = at(i, frames_); + + if (i < endIdx) + srcForwardMotions_[k] = at(i, forwardMotions_); + if (i > startIdx) + srcBackwardMotions_[k] = at(i, backwardMotions_); + } + + process(srcFrames_, at(idx, outputs_), srcForwardMotions_, srcBackwardMotions_, baseIdx); + } +} + +Ptr cv::superres::createSuperResolution_BTVL1() +{ + return new BTVL1; +} diff --git a/modules/superres/src/btv_l1_gpu.cpp b/modules/superres/src/btv_l1_gpu.cpp new file mode 100644 index 0000000000..4820d716a9 --- /dev/null +++ b/modules/superres/src/btv_l1_gpu.cpp @@ -0,0 +1,580 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +// S. Farsiu , D. Robinson, M. Elad, P. Milanfar. Fast and robust multiframe super resolution. +// Dennis Mitzel, Thomas Pock, Thomas Schoenemann, Daniel Cremers. Video Super Resolution using Duality Based TV-L1 Optical Flow. + +#include "precomp.hpp" + +using namespace std; +using namespace cv; +using namespace cv::gpu; +using namespace cv::superres; +using namespace cv::superres::detail; + +#ifndef HAVE_CUDA + +Ptr cv::superres::createSuperResolution_BTVL1_GPU() +{ + CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); + return Ptr(); +} + +#else // HAVE_CUDA + +namespace btv_l1_device +{ + void buildMotionMaps(PtrStepSzf forwardMotionX, PtrStepSzf forwardMotionY, + PtrStepSzf backwardMotionX, PtrStepSzf bacwardMotionY, + PtrStepSzf forwardMapX, PtrStepSzf forwardMapY, + PtrStepSzf backwardMapX, PtrStepSzf backwardMapY); + + template + void upscale(const PtrStepSzb src, PtrStepSzb dst, int scale, cudaStream_t stream); + + void diffSign(PtrStepSzf src1, PtrStepSzf src2, PtrStepSzf dst, cudaStream_t stream); + + void loadBtvWeights(const float* weights, size_t count); + template void calcBtvRegularization(PtrStepSzb src, PtrStepSzb dst, int ksize); +} + +namespace +{ + void calcRelativeMotions(const vector >& forwardMotions, const vector >& backwardMotions, + vector >& relForwardMotions, vector >& relBackwardMotions, + int baseIdx, Size size) + { + const int count = static_cast(forwardMotions.size()); + + relForwardMotions.resize(count); + relForwardMotions[baseIdx].first.create(size, CV_32FC1); + relForwardMotions[baseIdx].first.setTo(Scalar::all(0)); + relForwardMotions[baseIdx].second.create(size, CV_32FC1); + relForwardMotions[baseIdx].second.setTo(Scalar::all(0)); + + relBackwardMotions.resize(count); + relBackwardMotions[baseIdx].first.create(size, CV_32FC1); + relBackwardMotions[baseIdx].first.setTo(Scalar::all(0)); + relBackwardMotions[baseIdx].second.create(size, CV_32FC1); + relBackwardMotions[baseIdx].second.setTo(Scalar::all(0)); + + for (int i = baseIdx - 1; i >= 0; --i) + { + gpu::add(relForwardMotions[i + 1].first, forwardMotions[i].first, relForwardMotions[i].first); + gpu::add(relForwardMotions[i + 1].second, forwardMotions[i].second, relForwardMotions[i].second); + + gpu::add(relBackwardMotions[i + 1].first, backwardMotions[i + 1].first, relBackwardMotions[i].first); + gpu::add(relBackwardMotions[i + 1].second, backwardMotions[i + 1].second, relBackwardMotions[i].second); + } + + for (int i = baseIdx + 1; i < count; ++i) + { + gpu::add(relForwardMotions[i - 1].first, backwardMotions[i].first, relForwardMotions[i].first); + gpu::add(relForwardMotions[i - 1].second, backwardMotions[i].second, relForwardMotions[i].second); + + gpu::add(relBackwardMotions[i - 1].first, forwardMotions[i - 1].first, relBackwardMotions[i].first); + gpu::add(relBackwardMotions[i - 1].second, forwardMotions[i - 1].second, relBackwardMotions[i].second); + } + } + + void upscaleMotions(const vector >& lowResMotions, vector >& highResMotions, int scale) + { + highResMotions.resize(lowResMotions.size()); + + for (size_t i = 0; i < lowResMotions.size(); ++i) + { + gpu::resize(lowResMotions[i].first, highResMotions[i].first, Size(), scale, scale, INTER_CUBIC); + gpu::resize(lowResMotions[i].second, highResMotions[i].second, Size(), scale, scale, INTER_CUBIC); + + gpu::multiply(highResMotions[i].first, Scalar::all(scale), highResMotions[i].first); + gpu::multiply(highResMotions[i].second, Scalar::all(scale), highResMotions[i].second); + } + } + + void buildMotionMaps(const pair& forwardMotion, const pair& backwardMotion, + pair& forwardMap, pair& backwardMap) + { + forwardMap.first.create(forwardMotion.first.size(), CV_32FC1); + forwardMap.second.create(forwardMotion.first.size(), CV_32FC1); + + backwardMap.first.create(forwardMotion.first.size(), CV_32FC1); + backwardMap.second.create(forwardMotion.first.size(), CV_32FC1); + + btv_l1_device::buildMotionMaps(forwardMotion.first, forwardMotion.second, + backwardMotion.first, backwardMotion.second, + forwardMap.first, forwardMap.second, + backwardMap.first, backwardMap.second); + } + + void upscale(const GpuMat& src, GpuMat& dst, int scale, Stream& stream) + { + typedef void (*func_t)(const PtrStepSzb src, PtrStepSzb dst, int scale, cudaStream_t stream); + static const func_t funcs[] = + { + 0, btv_l1_device::upscale<1>, 0, btv_l1_device::upscale<3>, btv_l1_device::upscale<4> + }; + + CV_Assert( src.channels() == 1 || src.channels() == 3 || src.channels() == 4 ); + + dst.create(src.rows * scale, src.cols * scale, src.type()); + dst.setTo(Scalar::all(0)); + + const func_t func = funcs[src.channels()]; + + func(src, dst, scale, StreamAccessor::getStream(stream)); + } + + void diffSign(const GpuMat& src1, const GpuMat& src2, GpuMat& dst, Stream& stream) + { + dst.create(src1.size(), src1.type()); + + btv_l1_device::diffSign(src1.reshape(1), src2.reshape(1), dst.reshape(1), StreamAccessor::getStream(stream)); + } + + void calcBtvWeights(int btvKernelSize, double alpha, vector& btvWeights) + { + const size_t size = btvKernelSize * btvKernelSize; + + btvWeights.resize(size); + + const int ksize = (btvKernelSize - 1) / 2; + const float alpha_f = static_cast(alpha); + + for (int m = 0, ind = 0; m <= ksize; ++m) + { + for (int l = ksize; l + m >= 0; --l, ++ind) + btvWeights[ind] = pow(alpha_f, std::abs(m) + std::abs(l)); + } + + btv_l1_device::loadBtvWeights(&btvWeights[0], size); + } + + void calcBtvRegularization(const GpuMat& src, GpuMat& dst, int btvKernelSize) + { + typedef void (*func_t)(PtrStepSzb src, PtrStepSzb dst, int ksize); + static const func_t funcs[] = + { + 0, + btv_l1_device::calcBtvRegularization<1>, + 0, + btv_l1_device::calcBtvRegularization<3>, + btv_l1_device::calcBtvRegularization<4> + }; + + dst.create(src.size(), src.type()); + dst.setTo(Scalar::all(0)); + + const int ksize = (btvKernelSize - 1) / 2; + + funcs[src.channels()](src, dst, ksize); + } + + class BTVL1_GPU_Base + { + public: + BTVL1_GPU_Base(); + + void process(const vector& src, GpuMat& dst, + const vector >& forwardMotions, const vector >& backwardMotions, + int baseIdx); + + void collectGarbage(); + + protected: + int scale_; + int iterations_; + double lambda_; + double tau_; + double alpha_; + int btvKernelSize_; + int blurKernelSize_; + double blurSigma_; + Ptr opticalFlow_; + + private: + vector > filters_; + int curBlurKernelSize_; + double curBlurSigma_; + int curSrcType_; + + vector btvWeights_; + int curBtvKernelSize_; + double curAlpha_; + + vector > lowResForwardMotions_; + vector > lowResBackwardMotions_; + + vector > highResForwardMotions_; + vector > highResBackwardMotions_; + + vector > forwardMaps_; + vector > backwardMaps_; + + GpuMat highRes_; + + vector streams_; + vector diffTerms_; + vector a_, b_, c_; + GpuMat regTerm_; + }; + + BTVL1_GPU_Base::BTVL1_GPU_Base() + { + scale_ = 4; + iterations_ = 180; + lambda_ = 0.03; + tau_ = 1.3; + alpha_ = 0.7; + btvKernelSize_ = 7; + blurKernelSize_ = 5; + blurSigma_ = 0.0; + opticalFlow_ = createOptFlow_Farneback_GPU(); + + curBlurKernelSize_ = -1; + curBlurSigma_ = -1.0; + curSrcType_ = -1; + + curBtvKernelSize_ = -1; + curAlpha_ = -1.0; + } + + void BTVL1_GPU_Base::process(const vector& src, GpuMat& dst, + const vector >& forwardMotions, const vector >& backwardMotions, + int baseIdx) + { + CV_Assert( scale_ > 1 ); + CV_Assert( iterations_ > 0 ); + CV_Assert( tau_ > 0.0 ); + CV_Assert( alpha_ > 0.0 ); + CV_Assert( btvKernelSize_ > 0 && btvKernelSize_ <= 16 ); + CV_Assert( blurKernelSize_ > 0 ); + CV_Assert( blurSigma_ >= 0.0 ); + + // update blur filter and btv weights + + if (filters_.size() != src.size() || blurKernelSize_ != curBlurKernelSize_ || blurSigma_ != curBlurSigma_ || src[0].type() != curSrcType_) + { + filters_.resize(src.size()); + for (size_t i = 0; i < src.size(); ++i) + filters_[i] = createGaussianFilter_GPU(src[0].type(), Size(blurKernelSize_, blurKernelSize_), blurSigma_); + curBlurKernelSize_ = blurKernelSize_; + curBlurSigma_ = blurSigma_; + curSrcType_ = src[0].type(); + } + + if (btvWeights_.empty() || btvKernelSize_ != curBtvKernelSize_ || alpha_ != curAlpha_) + { + calcBtvWeights(btvKernelSize_, alpha_, btvWeights_); + curBtvKernelSize_ = btvKernelSize_; + curAlpha_ = alpha_; + } + + // calc motions between input frames + + calcRelativeMotions(forwardMotions, backwardMotions, lowResForwardMotions_, lowResBackwardMotions_, baseIdx, src[0].size()); + + upscaleMotions(lowResForwardMotions_, highResForwardMotions_, scale_); + upscaleMotions(lowResBackwardMotions_, highResBackwardMotions_, scale_); + + forwardMaps_.resize(highResForwardMotions_.size()); + backwardMaps_.resize(highResForwardMotions_.size()); + for (size_t i = 0; i < highResForwardMotions_.size(); ++i) + buildMotionMaps(highResForwardMotions_[i], highResBackwardMotions_[i], forwardMaps_[i], backwardMaps_[i]); + + // initial estimation + + const Size lowResSize = src[0].size(); + const Size highResSize(lowResSize.width * scale_, lowResSize.height * scale_); + + gpu::resize(src[baseIdx], highRes_, highResSize, 0, 0, INTER_CUBIC); + + // iterations + + streams_.resize(src.size()); + diffTerms_.resize(src.size()); + a_.resize(src.size()); + b_.resize(src.size()); + c_.resize(src.size()); + + for (int i = 0; i < iterations_; ++i) + { + for (size_t k = 0; k < src.size(); ++k) + { + // a = M * Ih + gpu::remap(highRes_, a_[k], backwardMaps_[k].first, backwardMaps_[k].second, INTER_NEAREST, BORDER_REPLICATE, Scalar(), streams_[k]); + // b = HM * Ih + filters_[k]->apply(a_[k], b_[k], Rect(0,0,-1,-1), streams_[k]); + // c = DHF * Ih + gpu::resize(b_[k], c_[k], lowResSize, 0, 0, INTER_NEAREST, streams_[k]); + + diffSign(src[k], c_[k], c_[k], streams_[k]); + + // a = Dt * diff + upscale(c_[k], a_[k], scale_, streams_[k]); + // b = HtDt * diff + filters_[k]->apply(a_[k], b_[k], Rect(0,0,-1,-1), streams_[k]); + // diffTerm = MtHtDt * diff + gpu::remap(b_[k], diffTerms_[k], forwardMaps_[k].first, forwardMaps_[k].second, INTER_NEAREST, BORDER_REPLICATE, Scalar(), streams_[k]); + } + + if (lambda_ > 0) + { + calcBtvRegularization(highRes_, regTerm_, btvKernelSize_); + gpu::addWeighted(highRes_, 1.0, regTerm_, -tau_ * lambda_, 0.0, highRes_); + } + + for (size_t k = 0; k < src.size(); ++k) + { + streams_[k].waitForCompletion(); + gpu::addWeighted(highRes_, 1.0, diffTerms_[k], tau_, 0.0, highRes_); + } + } + + Rect inner(btvKernelSize_, btvKernelSize_, highRes_.cols - 2 * btvKernelSize_, highRes_.rows - 2 * btvKernelSize_); + highRes_(inner).copyTo(dst); + } + + void BTVL1_GPU_Base::collectGarbage() + { + filters_.clear(); + + lowResForwardMotions_.clear(); + lowResBackwardMotions_.clear(); + + highResForwardMotions_.clear(); + highResBackwardMotions_.clear(); + + forwardMaps_.clear(); + backwardMaps_.clear(); + + highRes_.release(); + + diffTerms_.clear(); + a_.clear(); + b_.clear(); + c_.clear(); + regTerm_.release(); + } + +//////////////////////////////////////////////////////////// + + class BTVL1_GPU : public SuperResolution, private BTVL1_GPU_Base + { + public: + AlgorithmInfo* info() const; + + BTVL1_GPU(); + + void collectGarbage(); + + protected: + void initImpl(Ptr& frameSource); + void processImpl(Ptr& frameSource, OutputArray output); + + private: + int temporalAreaRadius_; + + void readNextFrame(Ptr& frameSource); + void processFrame(int idx); + + GpuMat curFrame_; + GpuMat prevFrame_; + + vector frames_; + vector > forwardMotions_; + vector > backwardMotions_; + vector outputs_; + + int storePos_; + int procPos_; + int outPos_; + + vector srcFrames_; + vector > srcForwardMotions_; + vector > srcBackwardMotions_; + GpuMat finalOutput_; + }; + + CV_INIT_ALGORITHM(BTVL1_GPU, "SuperResolution.BTVL1_GPU", + obj.info()->addParam(obj, "scale", obj.scale_, false, 0, 0, "Scale factor."); + obj.info()->addParam(obj, "iterations", obj.iterations_, false, 0, 0, "Iteration count."); + obj.info()->addParam(obj, "tau", obj.tau_, false, 0, 0, "Asymptotic value of steepest descent method."); + obj.info()->addParam(obj, "lambda", obj.lambda_, false, 0, 0, "Weight parameter to balance data term and smoothness term."); + obj.info()->addParam(obj, "alpha", obj.alpha_, false, 0, 0, "Parameter of spacial distribution in Bilateral-TV."); + obj.info()->addParam(obj, "btvKernelSize", obj.btvKernelSize_, false, 0, 0, "Kernel size of Bilateral-TV filter."); + obj.info()->addParam(obj, "blurKernelSize", obj.blurKernelSize_, false, 0, 0, "Gaussian blur kernel size."); + obj.info()->addParam(obj, "blurSigma", obj.blurSigma_, false, 0, 0, "Gaussian blur sigma."); + obj.info()->addParam(obj, "temporalAreaRadius", obj.temporalAreaRadius_, false, 0, 0, "Radius of the temporal search area."); + obj.info()->addParam(obj, "opticalFlow", obj.opticalFlow_, false, 0, 0, "Dense optical flow algorithm.")); + + BTVL1_GPU::BTVL1_GPU() + { + temporalAreaRadius_ = 4; + } + + void BTVL1_GPU::collectGarbage() + { + curFrame_.release(); + prevFrame_.release(); + + frames_.clear(); + forwardMotions_.clear(); + backwardMotions_.clear(); + outputs_.clear(); + + srcFrames_.clear(); + srcForwardMotions_.clear(); + srcBackwardMotions_.clear(); + finalOutput_.release(); + + SuperResolution::collectGarbage(); + BTVL1_GPU_Base::collectGarbage(); + } + + void BTVL1_GPU::initImpl(Ptr& frameSource) + { + const int cacheSize = 2 * temporalAreaRadius_ + 1; + + frames_.resize(cacheSize); + forwardMotions_.resize(cacheSize); + backwardMotions_.resize(cacheSize); + outputs_.resize(cacheSize); + + storePos_ = -1; + + for (int t = -temporalAreaRadius_; t <= temporalAreaRadius_; ++t) + readNextFrame(frameSource); + + for (int i = 0; i <= temporalAreaRadius_; ++i) + processFrame(i); + + procPos_ = temporalAreaRadius_; + outPos_ = -1; + } + + void BTVL1_GPU::processImpl(Ptr& frameSource, OutputArray _output) + { + if (outPos_ >= storePos_) + { + _output.release(); + return; + } + + readNextFrame(frameSource); + + if (procPos_ < storePos_) + { + ++procPos_; + processFrame(procPos_); + } + + ++outPos_; + const GpuMat& curOutput = at(outPos_, outputs_); + + if (_output.kind() == _InputArray::GPU_MAT) + curOutput.convertTo(_output.getGpuMatRef(), CV_8U); + else + { + curOutput.convertTo(finalOutput_, CV_8U); + arrCopy(finalOutput_, _output); + } + } + + void BTVL1_GPU::readNextFrame(Ptr& frameSource) + { + frameSource->nextFrame(curFrame_); + + if (curFrame_.empty()) + return; + + ++storePos_; + curFrame_.convertTo(at(storePos_, frames_), CV_32F); + + if (storePos_ > 0) + { + pair& forwardMotion = at(storePos_ - 1, forwardMotions_); + pair& backwardMotion = at(storePos_, backwardMotions_); + + opticalFlow_->calc(prevFrame_, curFrame_, forwardMotion.first, forwardMotion.second); + opticalFlow_->calc(curFrame_, prevFrame_, backwardMotion.first, backwardMotion.second); + } + + curFrame_.copyTo(prevFrame_); + } + + void BTVL1_GPU::processFrame(int idx) + { + const int startIdx = max(idx - temporalAreaRadius_, 0); + const int procIdx = idx; + const int endIdx = min(startIdx + 2 * temporalAreaRadius_, storePos_); + + const int count = endIdx - startIdx + 1; + + srcFrames_.resize(count); + srcForwardMotions_.resize(count); + srcBackwardMotions_.resize(count); + + int baseIdx = -1; + + for (int i = startIdx, k = 0; i <= endIdx; ++i, ++k) + { + if (i == procIdx) + baseIdx = k; + + srcFrames_[k] = at(i, frames_); + + if (i < endIdx) + srcForwardMotions_[k] = at(i, forwardMotions_); + if (i > startIdx) + srcBackwardMotions_[k] = at(i, backwardMotions_); + } + + process(srcFrames_, at(idx, outputs_), srcForwardMotions_, srcBackwardMotions_, baseIdx); + } +} + +Ptr cv::superres::createSuperResolution_BTVL1_GPU() +{ + return new BTVL1_GPU; +} + +#endif // HAVE_CUDA diff --git a/modules/superres/src/cuda/btv_l1_gpu.cu b/modules/superres/src/cuda/btv_l1_gpu.cu new file mode 100644 index 0000000000..772e11d4fe --- /dev/null +++ b/modules/superres/src/cuda/btv_l1_gpu.cu @@ -0,0 +1,234 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "opencv2/gpu/device/common.hpp" +#include "opencv2/gpu/device/transform.hpp" +#include "opencv2/gpu/device/vec_traits.hpp" +#include "opencv2/gpu/device/vec_math.hpp" + +using namespace cv::gpu; +using namespace cv::gpu::device; + +namespace btv_l1_device +{ + void buildMotionMaps(PtrStepSzf forwardMotionX, PtrStepSzf forwardMotionY, + PtrStepSzf backwardMotionX, PtrStepSzf bacwardMotionY, + PtrStepSzf forwardMapX, PtrStepSzf forwardMapY, + PtrStepSzf backwardMapX, PtrStepSzf backwardMapY); + + template + void upscale(const PtrStepSzb src, PtrStepSzb dst, int scale, cudaStream_t stream); + + void diffSign(PtrStepSzf src1, PtrStepSzf src2, PtrStepSzf dst, cudaStream_t stream); + + void loadBtvWeights(const float* weights, size_t count); + template void calcBtvRegularization(PtrStepSzb src, PtrStepSzb dst, int ksize); +} + +namespace btv_l1_device +{ + __global__ void buildMotionMapsKernel(const PtrStepSzf forwardMotionX, const PtrStepf forwardMotionY, + PtrStepf backwardMotionX, PtrStepf backwardMotionY, + PtrStepf forwardMapX, PtrStepf forwardMapY, + PtrStepf backwardMapX, PtrStepf backwardMapY) + { + const int x = blockIdx.x * blockDim.x + threadIdx.x; + const int y = blockIdx.y * blockDim.y + threadIdx.y; + + if (x >= forwardMotionX.cols || y >= forwardMotionX.rows) + return; + + const float fx = forwardMotionX(y, x); + const float fy = forwardMotionY(y, x); + + const float bx = backwardMotionX(y, x); + const float by = backwardMotionY(y, x); + + forwardMapX(y, x) = x + bx; + forwardMapY(y, x) = y + by; + + backwardMapX(y, x) = x + fx; + backwardMapY(y, x) = y + fy; + } + + void buildMotionMaps(PtrStepSzf forwardMotionX, PtrStepSzf forwardMotionY, + PtrStepSzf backwardMotionX, PtrStepSzf bacwardMotionY, + PtrStepSzf forwardMapX, PtrStepSzf forwardMapY, + PtrStepSzf backwardMapX, PtrStepSzf backwardMapY) + { + const dim3 block(32, 8); + const dim3 grid(divUp(forwardMapX.cols, block.x), divUp(forwardMapX.rows, block.y)); + + buildMotionMapsKernel<<>>(forwardMotionX, forwardMotionY, + backwardMotionX, bacwardMotionY, + forwardMapX, forwardMapY, + backwardMapX, backwardMapY); + cudaSafeCall( cudaGetLastError() ); + + cudaSafeCall( cudaDeviceSynchronize() ); + } + + template + __global__ void upscaleKernel(const PtrStepSz src, PtrStep dst, const int scale) + { + const int x = blockIdx.x * blockDim.x + threadIdx.x; + const int y = blockIdx.y * blockDim.y + threadIdx.y; + + if (x >= src.cols || y >= src.rows) + return; + + dst(y * scale, x * scale) = src(y, x); + } + + template + void upscale(const PtrStepSzb src, PtrStepSzb dst, int scale, cudaStream_t stream) + { + typedef typename TypeVec::vec_type src_t; + + const dim3 block(32, 8); + const dim3 grid(divUp(src.cols, block.x), divUp(src.rows, block.y)); + + upscaleKernel<<>>((PtrStepSz) src, (PtrStepSz) dst, scale); + cudaSafeCall( cudaGetLastError() ); + + if (stream == 0) + cudaSafeCall( cudaDeviceSynchronize() ); + } + + template void upscale<1>(const PtrStepSzb src, PtrStepSzb dst, int scale, cudaStream_t stream); + template void upscale<3>(const PtrStepSzb src, PtrStepSzb dst, int scale, cudaStream_t stream); + template void upscale<4>(const PtrStepSzb src, PtrStepSzb dst, int scale, cudaStream_t stream); + + __device__ __forceinline__ float diffSign(float a, float b) + { + return a > b ? 1.0f : a < b ? -1.0f : 0.0f; + } + __device__ __forceinline__ float3 diffSign(const float3& a, const float3& b) + { + return make_float3( + a.x > b.x ? 1.0f : a.x < b.x ? -1.0f : 0.0f, + a.y > b.y ? 1.0f : a.y < b.y ? -1.0f : 0.0f, + a.z > b.z ? 1.0f : a.z < b.z ? -1.0f : 0.0f + ); + } + __device__ __forceinline__ float4 diffSign(const float4& a, const float4& b) + { + return make_float4( + a.x > b.x ? 1.0f : a.x < b.x ? -1.0f : 0.0f, + a.y > b.y ? 1.0f : a.y < b.y ? -1.0f : 0.0f, + a.z > b.z ? 1.0f : a.z < b.z ? -1.0f : 0.0f, + 0.0f + ); + } + + struct DiffSign : binary_function + { + __device__ __forceinline__ float operator ()(float a, float b) const + { + return diffSign(a, b); + } + }; +} + +namespace cv { namespace gpu { namespace device +{ + template <> struct TransformFunctorTraits : DefaultTransformFunctorTraits + { + enum { smart_block_dim_y = 8 }; + enum { smart_shift = 4 }; + }; +}}} + +namespace btv_l1_device +{ + void diffSign(PtrStepSzf src1, PtrStepSzf src2, PtrStepSzf dst, cudaStream_t stream) + { + transform(src1, src2, dst, DiffSign(), WithOutMask(), stream); + } + + __constant__ float c_btvRegWeights[16*16]; + + template + __global__ void calcBtvRegularizationKernel(const PtrStepSz src, PtrStep dst, const int ksize) + { + const int x = blockIdx.x * blockDim.x + threadIdx.x + ksize; + const int y = blockIdx.y * blockDim.y + threadIdx.y + ksize; + + if (y >= src.rows - ksize || x >= src.cols - ksize) + return; + + const T srcVal = src(y, x); + + T dstVal = VecTraits::all(0); + + for (int m = 0, count = 0; m <= ksize; ++m) + { + for (int l = ksize; l + m >= 0; --l, ++count) + dstVal = dstVal + c_btvRegWeights[count] * (diffSign(srcVal, src(y + m, x + l)) - diffSign(src(y - m, x - l), srcVal)); + } + + dst(y, x) = dstVal; + } + + void loadBtvWeights(const float* weights, size_t count) + { + cudaSafeCall( cudaMemcpyToSymbol(c_btvRegWeights, weights, count * sizeof(float)) ); + } + + template + void calcBtvRegularization(PtrStepSzb src, PtrStepSzb dst, int ksize) + { + typedef typename TypeVec::vec_type src_t; + + const dim3 block(32, 8); + const dim3 grid(divUp(src.cols, block.x), divUp(src.rows, block.y)); + + calcBtvRegularizationKernel<<>>((PtrStepSz) src, (PtrStepSz) dst, ksize); + cudaSafeCall( cudaGetLastError() ); + + cudaSafeCall( cudaDeviceSynchronize() ); + } + + template void calcBtvRegularization<1>(PtrStepSzb src, PtrStepSzb dst, int ksize); + template void calcBtvRegularization<3>(PtrStepSzb src, PtrStepSzb dst, int ksize); + template void calcBtvRegularization<4>(PtrStepSzb src, PtrStepSzb dst, int ksize); +} diff --git a/modules/superres/src/frame_source.cpp b/modules/superres/src/frame_source.cpp new file mode 100644 index 0000000000..b22d0d03c1 --- /dev/null +++ b/modules/superres/src/frame_source.cpp @@ -0,0 +1,255 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "precomp.hpp" + +using namespace std; +using namespace cv; +using namespace cv::gpu; +using namespace cv::superres; +using namespace cv::superres::detail; + +cv::superres::FrameSource::~FrameSource() +{ +} + +////////////////////////////////////////////////////// +// EmptyFrameSource + +namespace +{ + class EmptyFrameSource : public FrameSource + { + public: + void nextFrame(OutputArray frame); + void reset(); + }; + + void EmptyFrameSource::nextFrame(OutputArray frame) + { + frame.release(); + } + + void EmptyFrameSource::reset() + { + } +} + +Ptr cv::superres::createFrameSource_Empty() +{ + return new EmptyFrameSource; +} + +////////////////////////////////////////////////////// +// VideoFrameSource & CameraFrameSource + +#ifndef HAVE_OPENCV_HIGHGUI + +Ptr cv::superres::createFrameSource_Video(const string& fileName) +{ + (void) fileName; + CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); + return Ptr(); +} + +Ptr cv::superres::createFrameSource_Camera(int deviceId) +{ + (void) deviceId; + CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); + return Ptr(); +} + +#else // HAVE_OPENCV_HIGHGUI + +namespace +{ + class CaptureFrameSource : public FrameSource + { + public: + void nextFrame(OutputArray frame); + + protected: + VideoCapture vc_; + + private: + Mat frame_; + }; + + void CaptureFrameSource::nextFrame(OutputArray _frame) + { + if (_frame.kind() == _InputArray::MAT) + { + vc_ >> _frame.getMatRef(); + } + else + { + vc_ >> frame_; + arrCopy(frame_, _frame); + } + } + + class VideoFrameSource : public CaptureFrameSource + { + public: + VideoFrameSource(const string& fileName); + + void reset(); + + private: + string fileName_; + }; + + VideoFrameSource::VideoFrameSource(const string& fileName) : fileName_(fileName) + { + reset(); + } + + void VideoFrameSource::reset() + { + vc_.release(); + vc_.open(fileName_); + CV_Assert( vc_.isOpened() ); + } + + class CameraFrameSource : public CaptureFrameSource + { + public: + CameraFrameSource(int deviceId); + + void reset(); + + private: + int deviceId_; + }; + + CameraFrameSource::CameraFrameSource(int deviceId) : deviceId_(deviceId) + { + reset(); + } + + void CameraFrameSource::reset() + { + vc_.release(); + vc_.open(deviceId_); + CV_Assert( vc_.isOpened() ); + } +} + +Ptr cv::superres::createFrameSource_Video(const string& fileName) +{ + return new VideoFrameSource(fileName); +} + +Ptr cv::superres::createFrameSource_Camera(int deviceId) +{ + return new CameraFrameSource(deviceId); +} + +#endif // HAVE_OPENCV_HIGHGUI + +////////////////////////////////////////////////////// +// VideoFrameSource_GPU + +#ifndef HAVE_OPENCV_GPU + +Ptr cv::superres::createFrameSource_Video_GPU(const string& fileName) +{ + (void) fileName; + CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); + return Ptr(); +} + +#else // HAVE_OPENCV_GPU + +namespace +{ + class VideoFrameSource_GPU : public FrameSource + { + public: + VideoFrameSource_GPU(const string& fileName); + + void nextFrame(OutputArray frame); + void reset(); + + private: + string fileName_; + VideoReader_GPU reader_; + GpuMat frame_; + }; + + VideoFrameSource_GPU::VideoFrameSource_GPU(const string& fileName) : fileName_(fileName) + { + reset(); + } + + void VideoFrameSource_GPU::nextFrame(OutputArray _frame) + { + if (_frame.kind() == _InputArray::GPU_MAT) + { + bool res = reader_.read(_frame.getGpuMatRef()); + if (!res) + _frame.release(); + } + else + { + bool res = reader_.read(frame_); + if (!res) + _frame.release(); + else + arrCopy(frame_, _frame); + } + } + + void VideoFrameSource_GPU::reset() + { + reader_.close(); + reader_.open(fileName_); + CV_Assert( reader_.isOpened() ); + } +} + +Ptr cv::superres::createFrameSource_Video_GPU(const string& fileName) +{ + return new VideoFrameSource(fileName); +} + +#endif // HAVE_OPENCV_GPU diff --git a/modules/superres/src/input_array_utility.cpp b/modules/superres/src/input_array_utility.cpp new file mode 100644 index 0000000000..8d905bf2d3 --- /dev/null +++ b/modules/superres/src/input_array_utility.cpp @@ -0,0 +1,273 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "precomp.hpp" + +using namespace std; +using namespace cv; +using namespace cv::gpu; + +Mat cv::superres::arrGetMat(InputArray arr, Mat& buf) +{ + switch (arr.kind()) + { + case _InputArray::GPU_MAT: + arr.getGpuMat().download(buf); + return buf; + + case _InputArray::OPENGL_BUFFER: + arr.getOGlBuffer().copyTo(buf); + return buf; + + case _InputArray::OPENGL_TEXTURE: + arr.getOGlTexture2D().copyTo(buf); + return buf; + + default: + return arr.getMat(); + } +} + +GpuMat cv::superres::arrGetGpuMat(InputArray arr, GpuMat& buf) +{ + switch (arr.kind()) + { + case _InputArray::GPU_MAT: + return arr.getGpuMat(); + + case _InputArray::OPENGL_BUFFER: + arr.getOGlBuffer().copyTo(buf); + return buf; + + case _InputArray::OPENGL_TEXTURE: + arr.getOGlTexture2D().copyTo(buf); + return buf; + + default: + buf.upload(arr.getMat()); + return buf; + } +} + +namespace +{ + void mat2mat(InputArray src, OutputArray dst) + { + src.getMat().copyTo(dst); + } + void arr2buf(InputArray src, OutputArray dst) + { + dst.getOGlBufferRef().copyFrom(src); + } + void arr2tex(InputArray src, OutputArray dst) + { + dst.getOGlTexture2D().copyFrom(src); + } + void mat2gpu(InputArray src, OutputArray dst) + { + dst.getGpuMatRef().upload(src.getMat()); + } + void buf2arr(InputArray src, OutputArray dst) + { + src.getOGlBuffer().copyTo(dst); + } + void tex2arr(InputArray src, OutputArray dst) + { + src.getOGlTexture2D().copyTo(dst); + } + void gpu2mat(InputArray src, OutputArray dst) + { + GpuMat d = src.getGpuMat(); + dst.create(d.size(), d.type()); + Mat m = dst.getMat(); + d.download(m); + } + void gpu2gpu(InputArray src, OutputArray dst) + { + src.getGpuMat().copyTo(dst.getGpuMatRef()); + } +} + +void cv::superres::arrCopy(InputArray src, OutputArray dst) +{ + typedef void (*func_t)(InputArray src, OutputArray dst); + static const func_t funcs[10][10] = + { + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, arr2buf, arr2tex, mat2gpu}, + {0, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, arr2buf, arr2tex, mat2gpu}, + {0, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, arr2buf, arr2tex, mat2gpu}, + {0, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, arr2buf, arr2tex, mat2gpu}, + {0, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, arr2buf, arr2tex, mat2gpu}, + {0, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, mat2mat, arr2buf, arr2tex, mat2gpu}, + {0, buf2arr, buf2arr, buf2arr, buf2arr, buf2arr, buf2arr, buf2arr, buf2arr, buf2arr}, + {0, tex2arr, tex2arr, tex2arr, tex2arr, tex2arr, tex2arr, tex2arr, tex2arr, tex2arr}, + {0, gpu2mat, gpu2mat, gpu2mat, gpu2mat, gpu2mat, gpu2mat, arr2buf, arr2tex, gpu2gpu} + }; + + const int src_kind = src.kind() >> _InputArray::KIND_SHIFT; + const int dst_kind = dst.kind() >> _InputArray::KIND_SHIFT; + + CV_DbgAssert( src_kind >= 0 && src_kind < 10 ); + CV_DbgAssert( dst_kind >= 0 && dst_kind < 10 ); + + const func_t func = funcs[src_kind][dst_kind]; + CV_DbgAssert( func != 0 ); + + func(src, dst); +} + +namespace +{ + void convertToCn(InputArray src, OutputArray dst, int cn) + { + CV_Assert( src.channels() == 1 || src.channels() == 3 || src.channels() == 4 ); + CV_Assert( cn == 1 || cn == 3 || cn == 4 ); + + static const int codes[5][5] = + { + {-1, -1, -1, -1, -1}, + {-1, -1, -1, COLOR_GRAY2BGR, COLOR_GRAY2BGRA}, + {-1, -1, -1, -1, -1}, + {-1, COLOR_BGR2GRAY, -1, -1, COLOR_BGR2BGRA}, + {-1, COLOR_BGRA2GRAY, -1, COLOR_BGRA2BGR, -1}, + }; + + const int code = codes[src.channels()][cn]; + CV_DbgAssert( code >= 0 ); + + switch (src.kind()) + { + case _InputArray::GPU_MAT: + #ifdef HAVE_OPENCV_GPU + gpu::cvtColor(src.getGpuMat(), dst.getGpuMatRef(), code, cn); + #else + CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); + #endif + break; + + default: + cvtColor(src, dst, code, cn); + break; + } + } + + void convertToDepth(InputArray src, OutputArray dst, int depth) + { + CV_Assert( src.depth() <= CV_64F ); + CV_Assert( depth == CV_8U || depth == CV_32F ); + + static const double maxVals[] = + { + numeric_limits::max(), + numeric_limits::max(), + numeric_limits::max(), + numeric_limits::max(), + numeric_limits::max(), + 1.0, + 1.0, + }; + + const double scale = maxVals[depth] / maxVals[src.depth()]; + + switch (src.kind()) + { + case _InputArray::GPU_MAT: + src.getGpuMat().convertTo(dst.getGpuMatRef(), depth, scale); + break; + + default: + src.getMat().convertTo(dst, depth, scale); + break; + } + } +} + +Mat cv::superres::convertToType(const Mat& src, int type, Mat& buf0, Mat& buf1) +{ + if (src.type() == type) + return src; + + const int depth = CV_MAT_DEPTH(type); + const int cn = CV_MAT_CN(type); + + if (src.depth() == depth) + { + convertToCn(src, buf0, cn); + return buf0; + } + + if (src.channels() == cn) + { + convertToDepth(src, buf1, depth); + return buf1; + } + + convertToCn(src, buf0, cn); + convertToDepth(buf0, buf1, depth); + return buf1; +} + +GpuMat cv::superres::convertToType(const GpuMat& src, int type, GpuMat& buf0, GpuMat& buf1) +{ + if (src.type() == type) + return src; + + const int depth = CV_MAT_DEPTH(type); + const int cn = CV_MAT_CN(type); + + if (src.depth() == depth) + { + convertToCn(src, buf0, cn); + return buf0; + } + + if (src.channels() == cn) + { + convertToDepth(src, buf1, depth); + return buf1; + } + + convertToCn(src, buf0, cn); + convertToDepth(buf0, buf1, depth); + return buf1; +} diff --git a/modules/superres/src/input_array_utility.hpp b/modules/superres/src/input_array_utility.hpp new file mode 100644 index 0000000000..790d6216b0 --- /dev/null +++ b/modules/superres/src/input_array_utility.hpp @@ -0,0 +1,63 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifndef __OPENCV_SUPERRES_INPUT_ARRAY_UTILITY_HPP__ +#define __OPENCV_SUPERRES_INPUT_ARRAY_UTILITY_HPP__ + +#include "opencv2/core/core.hpp" +#include "opencv2/core/gpumat.hpp" + +namespace cv +{ + namespace superres + { + CV_EXPORTS Mat arrGetMat(InputArray arr, Mat& buf); + CV_EXPORTS gpu::GpuMat arrGetGpuMat(InputArray arr, gpu::GpuMat& buf); + + CV_EXPORTS void arrCopy(InputArray src, OutputArray dst); + + CV_EXPORTS Mat convertToType(const Mat& src, int type, Mat& buf0, Mat& buf1); + CV_EXPORTS gpu::GpuMat convertToType(const gpu::GpuMat& src, int type, gpu::GpuMat& buf0, gpu::GpuMat& buf1); + } +} + +#endif // __OPENCV_SUPERRES_INPUT_ARRAY_UTILITY_HPP__ diff --git a/modules/superres/src/optical_flow.cpp b/modules/superres/src/optical_flow.cpp new file mode 100644 index 0000000000..8c8454c8a2 --- /dev/null +++ b/modules/superres/src/optical_flow.cpp @@ -0,0 +1,721 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "precomp.hpp" + +using namespace std; +using namespace cv; +using namespace cv::gpu; +using namespace cv::superres; +using namespace cv::superres::detail; + +/////////////////////////////////////////////////////////////////// +// CpuOpticalFlow + +namespace +{ + class CpuOpticalFlow : public DenseOpticalFlowExt + { + public: + explicit CpuOpticalFlow(int work_type); + + void calc(InputArray frame0, InputArray frame1, OutputArray flow1, OutputArray flow2); + void collectGarbage(); + + protected: + virtual void impl(const Mat& input0, const Mat& input1, OutputArray dst) = 0; + + private: + int work_type_; + Mat buf_[6]; + Mat flow_; + Mat flows_[2]; + }; + + CpuOpticalFlow::CpuOpticalFlow(int work_type) : work_type_(work_type) + { + } + + void CpuOpticalFlow::calc(InputArray _frame0, InputArray _frame1, OutputArray _flow1, OutputArray _flow2) + { + Mat frame0 = arrGetMat(_frame0, buf_[0]); + Mat frame1 = arrGetMat(_frame1, buf_[1]); + + CV_Assert( frame1.type() == frame0.type() ); + CV_Assert( frame1.size() == frame0.size() ); + + Mat input0 = convertToType(frame0, work_type_, buf_[2], buf_[3]); + Mat input1 = convertToType(frame1, work_type_, buf_[4], buf_[5]); + + if (!_flow2.needed() && _flow1.kind() < _InputArray::OPENGL_BUFFER) + { + impl(input0, input1, _flow1); + return; + } + + impl(input0, input1, flow_); + + if (!_flow2.needed()) + { + arrCopy(flow_, _flow1); + } + else + { + split(flow_, flows_); + + arrCopy(flows_[0], _flow1); + arrCopy(flows_[1], _flow2); + } + } + + void CpuOpticalFlow::collectGarbage() + { + for (int i = 0; i < 6; ++i) + buf_[i].release(); + flow_.release(); + flows_[0].release(); + flows_[1].release(); + } +} + +/////////////////////////////////////////////////////////////////// +// Farneback + +namespace +{ + class Farneback : public CpuOpticalFlow + { + public: + AlgorithmInfo* info() const; + + Farneback(); + + protected: + void impl(const Mat& input0, const Mat& input1, OutputArray dst); + + private: + double pyrScale_; + int numLevels_; + int winSize_; + int numIters_; + int polyN_; + double polySigma_; + int flags_; + }; + + CV_INIT_ALGORITHM(Farneback, "DenseOpticalFlowExt.Farneback", + obj.info()->addParam(obj, "pyrScale", obj.pyrScale_); + obj.info()->addParam(obj, "numLevels", obj.numLevels_); + obj.info()->addParam(obj, "winSize", obj.winSize_); + obj.info()->addParam(obj, "numIters", obj.numIters_); + obj.info()->addParam(obj, "polyN", obj.polyN_); + obj.info()->addParam(obj, "polySigma", obj.polySigma_); + obj.info()->addParam(obj, "flags", obj.flags_)); + + Farneback::Farneback() : CpuOpticalFlow(CV_8UC1) + { + pyrScale_ = 0.5; + numLevels_ = 5; + winSize_ = 13; + numIters_ = 10; + polyN_ = 5; + polySigma_ = 1.1; + flags_ = 0; + } + + void Farneback::impl(const Mat& input0, const Mat& input1, OutputArray dst) + { + calcOpticalFlowFarneback(input0, input1, dst, pyrScale_, numLevels_, winSize_, numIters_, polyN_, polySigma_, flags_); + } +} + +Ptr cv::superres::createOptFlow_Farneback() +{ + return new Farneback; +} + +/////////////////////////////////////////////////////////////////// +// Simple + +namespace +{ + class Simple : public CpuOpticalFlow + { + public: + AlgorithmInfo* info() const; + + Simple(); + + protected: + void impl(const Mat& input0, const Mat& input1, OutputArray dst); + + private: + int layers_; + int averagingBlockSize_; + int maxFlow_; + double sigmaDist_; + double sigmaColor_; + int postProcessWindow_; + double sigmaDistFix_; + double sigmaColorFix_; + double occThr_; + int upscaleAveragingRadius_; + double upscaleSigmaDist_; + double upscaleSigmaColor_; + double speedUpThr_; + }; + + CV_INIT_ALGORITHM(Simple, "DenseOpticalFlowExt.Simple", + obj.info()->addParam(obj, "layers", obj.layers_); + obj.info()->addParam(obj, "averagingBlockSize", obj.averagingBlockSize_); + obj.info()->addParam(obj, "maxFlow", obj.maxFlow_); + obj.info()->addParam(obj, "sigmaDist", obj.sigmaDist_); + obj.info()->addParam(obj, "sigmaColor", obj.sigmaColor_); + obj.info()->addParam(obj, "postProcessWindow", obj.postProcessWindow_); + obj.info()->addParam(obj, "sigmaDistFix", obj.sigmaDistFix_); + obj.info()->addParam(obj, "sigmaColorFix", obj.sigmaColorFix_); + obj.info()->addParam(obj, "occThr", obj.occThr_); + obj.info()->addParam(obj, "upscaleAveragingRadius", obj.upscaleAveragingRadius_); + obj.info()->addParam(obj, "upscaleSigmaDist", obj.upscaleSigmaDist_); + obj.info()->addParam(obj, "upscaleSigmaColor", obj.upscaleSigmaColor_); + obj.info()->addParam(obj, "speedUpThr", obj.speedUpThr_)); + + Simple::Simple() : CpuOpticalFlow(CV_8UC3) + { + layers_ = 3; + averagingBlockSize_ = 2; + maxFlow_ = 4; + sigmaDist_ = 4.1; + sigmaColor_ = 25.5; + postProcessWindow_ = 18; + sigmaDistFix_ = 55.0; + sigmaColorFix_ = 25.5; + occThr_ = 0.35; + upscaleAveragingRadius_ = 18; + upscaleSigmaDist_ = 55.0; + upscaleSigmaColor_ = 25.5; + speedUpThr_ = 10; + } + + void Simple::impl(const Mat& _input0, const Mat& _input1, OutputArray dst) + { + Mat input0 = _input0; + Mat input1 = _input1; + calcOpticalFlowSF(input0, input1, dst.getMatRef(), + layers_, + averagingBlockSize_, + maxFlow_, + sigmaDist_, + sigmaColor_, + postProcessWindow_, + sigmaDistFix_, + sigmaColorFix_, + occThr_, + upscaleAveragingRadius_, + upscaleSigmaDist_, + upscaleSigmaColor_, + speedUpThr_); + } +} + +Ptr cv::superres::createOptFlow_Simple() +{ + return new Simple; +} + +/////////////////////////////////////////////////////////////////// +// DualTVL1 + +namespace +{ + class DualTVL1 : public CpuOpticalFlow + { + public: + AlgorithmInfo* info() const; + + DualTVL1(); + + void collectGarbage(); + + protected: + void impl(const Mat& input0, const Mat& input1, OutputArray dst); + + private: + double tau_; + double lambda_; + double theta_; + int nscales_; + int warps_; + double epsilon_; + int iterations_; + bool useInitialFlow_; + + Ptr alg_; + }; + + CV_INIT_ALGORITHM(DualTVL1, "DenseOpticalFlowExt.DualTVL1", + obj.info()->addParam(obj, "tau", obj.tau_); + obj.info()->addParam(obj, "lambda", obj.lambda_); + obj.info()->addParam(obj, "theta", obj.theta_); + obj.info()->addParam(obj, "nscales", obj.nscales_); + obj.info()->addParam(obj, "warps", obj.warps_); + obj.info()->addParam(obj, "epsilon", obj.epsilon_); + obj.info()->addParam(obj, "iterations", obj.iterations_); + obj.info()->addParam(obj, "useInitialFlow", obj.useInitialFlow_)); + + DualTVL1::DualTVL1() : CpuOpticalFlow(CV_8UC1) + { + alg_ = cv::createOptFlow_DualTVL1(); + tau_ = alg_->getDouble("tau"); + lambda_ = alg_->getDouble("lambda"); + theta_ = alg_->getDouble("theta"); + nscales_ = alg_->getInt("nscales"); + warps_ = alg_->getInt("warps"); + epsilon_ = alg_->getDouble("epsilon"); + iterations_ = alg_->getInt("iterations"); + useInitialFlow_ = alg_->getBool("useInitialFlow"); + } + + void DualTVL1::impl(const Mat& input0, const Mat& input1, OutputArray dst) + { + alg_->set("tau", tau_); + alg_->set("lambda", lambda_); + alg_->set("theta", theta_); + alg_->set("nscales", nscales_); + alg_->set("warps", warps_); + alg_->set("epsilon", epsilon_); + alg_->set("iterations", iterations_); + alg_->set("useInitialFlow", useInitialFlow_); + + alg_->calc(input0, input1, dst); + } + + void DualTVL1::collectGarbage() + { + alg_->collectGarbage(); + CpuOpticalFlow::collectGarbage(); + } +} + +Ptr cv::superres::createOptFlow_DualTVL1() +{ + return new DualTVL1; +} + +/////////////////////////////////////////////////////////////////// +// GpuOpticalFlow + +#ifndef HAVE_OPENCV_GPU + +Ptr cv::superres::createOptFlow_Farneback_GPU() +{ + CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); + return Ptr(); +} + +Ptr cv::superres::createOptFlow_DualTVL1_GPU() +{ + CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); + return Ptr(); +} + +Ptr cv::superres::createOptFlow_Brox_GPU() +{ + CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); + return Ptr(); +} + +Ptr cv::superres::createOptFlow_PyrLK_GPU() +{ + CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); + return Ptr(); +} + +#else // HAVE_OPENCV_GPU + +namespace +{ + class GpuOpticalFlow : public DenseOpticalFlowExt + { + public: + explicit GpuOpticalFlow(int work_type); + + void calc(InputArray frame0, InputArray frame1, OutputArray flow1, OutputArray flow2); + void collectGarbage(); + + protected: + virtual void impl(const GpuMat& input0, const GpuMat& input1, GpuMat& dst1, GpuMat& dst2) = 0; + + private: + int work_type_; + GpuMat buf_[6]; + GpuMat u_, v_, flow_; + }; + + GpuOpticalFlow::GpuOpticalFlow(int work_type) : work_type_(work_type) + { + } + + void GpuOpticalFlow::calc(InputArray _frame0, InputArray _frame1, OutputArray _flow1, OutputArray _flow2) + { + GpuMat frame0 = arrGetGpuMat(_frame0, buf_[0]); + GpuMat frame1 = arrGetGpuMat(_frame1, buf_[1]); + + CV_Assert( frame1.type() == frame0.type() ); + CV_Assert( frame1.size() == frame0.size() ); + + GpuMat input0 = convertToType(frame0, work_type_, buf_[2], buf_[3]); + GpuMat input1 = convertToType(frame1, work_type_, buf_[4], buf_[5]); + + if (_flow2.needed() && _flow1.kind() == _InputArray::GPU_MAT && _flow2.kind() == _InputArray::GPU_MAT) + { + impl(input0, input1, _flow1.getGpuMatRef(), _flow2.getGpuMatRef()); + return; + } + + impl(input0, input1, u_, v_); + + if (_flow2.needed()) + { + arrCopy(u_, _flow1); + arrCopy(v_, _flow2); + } + else + { + GpuMat src[] = {u_, v_}; + merge(src, 2, flow_); + arrCopy(flow_, _flow1); + } + } + + void GpuOpticalFlow::collectGarbage() + { + for (int i = 0; i < 6; ++i) + buf_[i].release(); + u_.release(); + v_.release(); + flow_.release(); + } +} + +/////////////////////////////////////////////////////////////////// +// Brox_GPU + +namespace +{ + class Brox_GPU : public GpuOpticalFlow + { + public: + AlgorithmInfo* info() const; + + Brox_GPU(); + + void collectGarbage(); + + protected: + void impl(const GpuMat& input0, const GpuMat& input1, GpuMat& dst1, GpuMat& dst2); + + private: + double alpha_; + double gamma_; + double scaleFactor_; + int innerIterations_; + int outerIterations_; + int solverIterations_; + + BroxOpticalFlow alg_; + }; + + CV_INIT_ALGORITHM(Brox_GPU, "DenseOpticalFlowExt.Brox_GPU", + obj.info()->addParam(obj, "alpha", obj.alpha_, false, 0, 0, "Flow smoothness"); + obj.info()->addParam(obj, "gamma", obj.gamma_, false, 0, 0, "Gradient constancy importance"); + obj.info()->addParam(obj, "scaleFactor", obj.scaleFactor_, false, 0, 0, "Pyramid scale factor"); + obj.info()->addParam(obj, "innerIterations", obj.innerIterations_, false, 0, 0, "Number of lagged non-linearity iterations (inner loop)"); + obj.info()->addParam(obj, "outerIterations", obj.outerIterations_, false, 0, 0, "Number of warping iterations (number of pyramid levels)"); + obj.info()->addParam(obj, "solverIterations", obj.solverIterations_, false, 0, 0, "Number of linear system solver iterations")); + + Brox_GPU::Brox_GPU() : GpuOpticalFlow(CV_32FC1), alg_(0.197f, 50.0f, 0.8f, 10, 77, 10) + { + alpha_ = alg_.alpha; + gamma_ = alg_.gamma; + scaleFactor_ = alg_.scale_factor; + innerIterations_ = alg_.inner_iterations; + outerIterations_ = alg_.outer_iterations; + solverIterations_ = alg_.solver_iterations; + } + + void Brox_GPU::impl(const GpuMat& input0, const GpuMat& input1, GpuMat& dst1, GpuMat& dst2) + { + alg_.alpha = static_cast(alpha_); + alg_.gamma = static_cast(gamma_); + alg_.scale_factor = static_cast(scaleFactor_); + alg_.inner_iterations = innerIterations_; + alg_.outer_iterations = outerIterations_; + alg_.solver_iterations = solverIterations_; + + alg_(input0, input1, dst1, dst2); + } + + void Brox_GPU::collectGarbage() + { + alg_.buf.release(); + GpuOpticalFlow::collectGarbage(); + } +} + +Ptr cv::superres::createOptFlow_Brox_GPU() +{ + return new Brox_GPU; +} + +/////////////////////////////////////////////////////////////////// +// PyrLK_GPU + +namespace +{ + class PyrLK_GPU : public GpuOpticalFlow + { + public: + AlgorithmInfo* info() const; + + PyrLK_GPU(); + + void collectGarbage(); + + protected: + void impl(const GpuMat& input0, const GpuMat& input1, GpuMat& dst1, GpuMat& dst2); + + private: + int winSize_; + int maxLevel_; + int iterations_; + + PyrLKOpticalFlow alg_; + }; + + CV_INIT_ALGORITHM(PyrLK_GPU, "DenseOpticalFlowExt.PyrLK_GPU", + obj.info()->addParam(obj, "winSize", obj.winSize_); + obj.info()->addParam(obj, "maxLevel", obj.maxLevel_); + obj.info()->addParam(obj, "iterations", obj.iterations_)); + + PyrLK_GPU::PyrLK_GPU() : GpuOpticalFlow(CV_8UC1) + { + winSize_ = alg_.winSize.width; + maxLevel_ = alg_.maxLevel; + iterations_ = alg_.iters; + } + + void PyrLK_GPU::impl(const GpuMat& input0, const GpuMat& input1, GpuMat& dst1, GpuMat& dst2) + { + alg_.winSize.width = winSize_; + alg_.winSize.height = winSize_; + alg_.maxLevel = maxLevel_; + alg_.iters = iterations_; + + alg_.dense(input0, input1, dst1, dst2); + } + + void PyrLK_GPU::collectGarbage() + { + alg_.releaseMemory(); + GpuOpticalFlow::collectGarbage(); + } +} + +Ptr cv::superres::createOptFlow_PyrLK_GPU() +{ + return new PyrLK_GPU; +} + +/////////////////////////////////////////////////////////////////// +// Farneback_GPU + +namespace +{ + class Farneback_GPU : public GpuOpticalFlow + { + public: + AlgorithmInfo* info() const; + + Farneback_GPU(); + + void collectGarbage(); + + protected: + void impl(const GpuMat& input0, const GpuMat& input1, GpuMat& dst1, GpuMat& dst2); + + private: + double pyrScale_; + int numLevels_; + int winSize_; + int numIters_; + int polyN_; + double polySigma_; + int flags_; + + FarnebackOpticalFlow alg_; + }; + + CV_INIT_ALGORITHM(Farneback_GPU, "DenseOpticalFlowExt.Farneback_GPU", + obj.info()->addParam(obj, "pyrScale", obj.pyrScale_); + obj.info()->addParam(obj, "numLevels", obj.numLevels_); + obj.info()->addParam(obj, "winSize", obj.winSize_); + obj.info()->addParam(obj, "numIters", obj.numIters_); + obj.info()->addParam(obj, "polyN", obj.polyN_); + obj.info()->addParam(obj, "polySigma", obj.polySigma_); + obj.info()->addParam(obj, "flags", obj.flags_)); + + Farneback_GPU::Farneback_GPU() : GpuOpticalFlow(CV_8UC1) + { + pyrScale_ = alg_.pyrScale; + numLevels_ = alg_.numLevels; + winSize_ = alg_.winSize; + numIters_ = alg_.numIters; + polyN_ = alg_.polyN; + polySigma_ = alg_.polySigma; + flags_ = alg_.flags; + } + + void Farneback_GPU::impl(const GpuMat& input0, const GpuMat& input1, GpuMat& dst1, GpuMat& dst2) + { + alg_.pyrScale = pyrScale_; + alg_.numLevels = numLevels_; + alg_.winSize = winSize_; + alg_.numIters = numIters_; + alg_.polyN = polyN_; + alg_.polySigma = polySigma_; + alg_.flags = flags_; + + alg_(input0, input1, dst1, dst2); + } + + void Farneback_GPU::collectGarbage() + { + alg_.releaseMemory(); + GpuOpticalFlow::collectGarbage(); + } +} + +Ptr cv::superres::createOptFlow_Farneback_GPU() +{ + return new Farneback_GPU; +} + +/////////////////////////////////////////////////////////////////// +// DualTVL1_GPU + +namespace +{ + class DualTVL1_GPU : public GpuOpticalFlow + { + public: + AlgorithmInfo* info() const; + + DualTVL1_GPU(); + + void collectGarbage(); + + protected: + void impl(const GpuMat& input0, const GpuMat& input1, GpuMat& dst1, GpuMat& dst2); + + private: + double tau_; + double lambda_; + double theta_; + int nscales_; + int warps_; + double epsilon_; + int iterations_; + bool useInitialFlow_; + + OpticalFlowDual_TVL1_GPU alg_; + }; + + CV_INIT_ALGORITHM(DualTVL1_GPU, "DenseOpticalFlowExt.DualTVL1_GPU", + obj.info()->addParam(obj, "tau", obj.tau_); + obj.info()->addParam(obj, "lambda", obj.lambda_); + obj.info()->addParam(obj, "theta", obj.theta_); + obj.info()->addParam(obj, "nscales", obj.nscales_); + obj.info()->addParam(obj, "warps", obj.warps_); + obj.info()->addParam(obj, "epsilon", obj.epsilon_); + obj.info()->addParam(obj, "iterations", obj.iterations_); + obj.info()->addParam(obj, "useInitialFlow", obj.useInitialFlow_)); + + DualTVL1_GPU::DualTVL1_GPU() : GpuOpticalFlow(CV_8UC1) + { + tau_ = alg_.tau; + lambda_ = alg_.lambda; + theta_ = alg_.theta; + nscales_ = alg_.nscales; + warps_ = alg_.warps; + epsilon_ = alg_.epsilon; + iterations_ = alg_.iterations; + useInitialFlow_ = alg_.useInitialFlow; + } + + void DualTVL1_GPU::impl(const GpuMat& input0, const GpuMat& input1, GpuMat& dst1, GpuMat& dst2) + { + alg_.tau = tau_; + alg_.lambda = lambda_; + alg_.theta = theta_; + alg_.nscales = nscales_; + alg_.warps = warps_; + alg_.epsilon = epsilon_; + alg_.iterations = iterations_; + alg_.useInitialFlow = useInitialFlow_; + + alg_(input0, input1, dst1, dst2); + } + + void DualTVL1_GPU::collectGarbage() + { + alg_.collectGarbage(); + GpuOpticalFlow::collectGarbage(); + } +} + +Ptr cv::superres::createOptFlow_DualTVL1_GPU() +{ + return new DualTVL1_GPU; +} + +#endif // HAVE_OPENCV_GPU diff --git a/modules/superres/src/precomp.cpp b/modules/superres/src/precomp.cpp new file mode 100644 index 0000000000..111385282e --- /dev/null +++ b/modules/superres/src/precomp.cpp @@ -0,0 +1,43 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "precomp.hpp" diff --git a/modules/superres/src/precomp.hpp b/modules/superres/src/precomp.hpp new file mode 100644 index 0000000000..2b4d0d9d64 --- /dev/null +++ b/modules/superres/src/precomp.hpp @@ -0,0 +1,78 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifndef __OPENCV_PRECOMP_H__ +#define __OPENCV_PRECOMP_H__ + +#include +#include + +#ifdef HAVE_CVCONFIG_H + #include "cvconfig.h" +#endif + +#include "opencv2/opencv_modules.hpp" +#include "opencv2/core/core.hpp" +#include "opencv2/core/gpumat.hpp" +#include "opencv2/core/opengl_interop.hpp" +#include "opencv2/core/internal.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include "opencv2/video/tracking.hpp" + +#ifdef HAVE_OPENCV_GPU + #include "opencv2/gpu/gpu.hpp" + #ifdef HAVE_CUDA + #include "opencv2/gpu/stream_accessor.hpp" + #endif +#endif + +#ifdef HAVE_OPENCV_HIGHGUI + #include "opencv2/highgui/highgui.hpp" +#endif + +#include "opencv2/superres/superres.hpp" +#include "opencv2/superres/optical_flow.hpp" +#include "input_array_utility.hpp" + +#include "ring_buffer.hpp" + +#endif /* __OPENCV_PRECOMP_H__ */ diff --git a/modules/superres/src/ring_buffer.hpp b/modules/superres/src/ring_buffer.hpp new file mode 100644 index 0000000000..3c51d7a26d --- /dev/null +++ b/modules/superres/src/ring_buffer.hpp @@ -0,0 +1,79 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifndef __RING_BUFFER_HPP__ +#define __RING_BUFFER_HPP__ + +#include "precomp.hpp" + +namespace cv +{ + namespace superres + { + namespace detail + { + template + inline const T& at(int index, const std::vector& items) + { + const int len = static_cast(items.size()); + if (index < 0) + index -= ((index - len + 1) / len) * len; + if (index >= len) + index %= len; + return items[index]; + } + + template + inline T& at(int index, std::vector& items) + { + const int len = static_cast(items.size()); + if (index < 0) + index -= ((index - len + 1) / len) * len; + if (index >= len) + index %= len; + return items[index]; + } + } + } +} + +#endif // __RING_BUFFER_HPP__ diff --git a/modules/superres/src/super_resolution.cpp b/modules/superres/src/super_resolution.cpp new file mode 100644 index 0000000000..73a2147ef0 --- /dev/null +++ b/modules/superres/src/super_resolution.cpp @@ -0,0 +1,85 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "precomp.hpp" + +using namespace std; +using namespace cv; +using namespace cv::superres; + +bool cv::superres::initModule_superres() +{ + return !createSuperResolution_BTVL1().empty(); +} + +cv::superres::SuperResolution::SuperResolution() +{ + frameSource_ = createFrameSource_Empty(); + firstCall_ = true; +} + +void cv::superres::SuperResolution::setInput(const Ptr& frameSource) +{ + frameSource_ = frameSource; + firstCall_ = true; +} + +void cv::superres::SuperResolution::nextFrame(OutputArray frame) +{ + if (firstCall_) + { + initImpl(frameSource_); + firstCall_ = false; + } + + processImpl(frameSource_, frame); +} + +void cv::superres::SuperResolution::reset() +{ + frameSource_->reset(); + firstCall_ = true; +} + +void cv::superres::SuperResolution::collectGarbage() +{ +} diff --git a/modules/superres/test/test_main.cpp b/modules/superres/test/test_main.cpp new file mode 100644 index 0000000000..146e262850 --- /dev/null +++ b/modules/superres/test/test_main.cpp @@ -0,0 +1,3 @@ +#include "test_precomp.hpp" + +CV_TEST_MAIN("superres") diff --git a/modules/superres/test/test_precomp.cpp b/modules/superres/test/test_precomp.cpp new file mode 100644 index 0000000000..5956e13e3e --- /dev/null +++ b/modules/superres/test/test_precomp.cpp @@ -0,0 +1 @@ +#include "test_precomp.hpp" diff --git a/modules/superres/test/test_precomp.hpp b/modules/superres/test/test_precomp.hpp new file mode 100644 index 0000000000..84c0a76ad2 --- /dev/null +++ b/modules/superres/test/test_precomp.hpp @@ -0,0 +1,23 @@ +#ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wmissing-declarations" +# if defined __clang__ || defined __APPLE__ +# pragma GCC diagnostic ignored "-Wmissing-prototypes" +# pragma GCC diagnostic ignored "-Wextra" +# endif +#endif + +#ifndef __OPENCV_TEST_PRECOMP_HPP__ +#define __OPENCV_TEST_PRECOMP_HPP__ + +#ifdef HAVE_CVCONFIG_H +#include "cvconfig.h" +#endif + +#include "opencv2/opencv_modules.hpp" +#include "opencv2/core/core.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include "opencv2/ts/ts.hpp" +#include "opencv2/superres/superres.hpp" +#include "input_array_utility.hpp" + +#endif diff --git a/modules/superres/test/test_superres.cpp b/modules/superres/test/test_superres.cpp new file mode 100644 index 0000000000..44d6a7a2a0 --- /dev/null +++ b/modules/superres/test/test_superres.cpp @@ -0,0 +1,236 @@ +#include "test_precomp.hpp" + +class AllignedFrameSource : public cv::superres::FrameSource +{ +public: + AllignedFrameSource(const cv::Ptr& base, int scale); + + void nextFrame(cv::OutputArray frame); + void reset(); + +private: + cv::Ptr base_; + cv::Mat origFrame_; + int scale_; +}; + +AllignedFrameSource::AllignedFrameSource(const cv::Ptr& base, int scale) : + base_(base), scale_(scale) +{ + CV_Assert( !base_.empty() ); +} + +void AllignedFrameSource::nextFrame(cv::OutputArray frame) +{ + base_->nextFrame(origFrame_); + + if (origFrame_.rows % scale_ == 0 && origFrame_.cols % scale_ == 0) + { + cv::superres::arrCopy(origFrame_, frame); + } + else + { + cv::Rect ROI(0, 0, (origFrame_.cols / scale_) * scale_, (origFrame_.rows / scale_) * scale_); + cv::superres::arrCopy(origFrame_(ROI), frame); + } +} + +void AllignedFrameSource::reset() +{ + base_->reset(); +} + +class DegradeFrameSource : public cv::superres::FrameSource +{ +public: + DegradeFrameSource(const cv::Ptr& base, int scale); + + void nextFrame(cv::OutputArray frame); + void reset(); + +private: + cv::Ptr base_; + cv::Mat origFrame_; + cv::Mat blurred_; + cv::Mat deg_; + double iscale_; +}; + +DegradeFrameSource::DegradeFrameSource(const cv::Ptr& base, int scale) : + base_(base), iscale_(1.0 / scale) +{ + CV_Assert( !base_.empty() ); +} + +void addGaussNoise(cv::Mat& image, double sigma) +{ + cv::Mat noise(image.size(), CV_32FC(image.channels())); + cvtest::TS::ptr()->get_rng().fill(noise, cv::RNG::NORMAL, 0.0, sigma); + + cv::addWeighted(image, 1.0, noise, 1.0, 0.0, image, image.depth()); +} + +void addSpikeNoise(cv::Mat& image, int frequency) +{ + cv::Mat_ mask(image.size(), 0); + + for (int y = 0; y < mask.rows; ++y) + { + for (int x = 0; x < mask.cols; ++x) + { + if (cvtest::TS::ptr()->get_rng().uniform(0, frequency) < 1) + mask(y, x) = 255; + } + } + + image.setTo(cv::Scalar::all(255), mask); +} + +void DegradeFrameSource::nextFrame(cv::OutputArray frame) +{ + base_->nextFrame(origFrame_); + + cv::GaussianBlur(origFrame_, blurred_, cv::Size(5, 5), 0); + cv::resize(blurred_, deg_, cv::Size(), iscale_, iscale_, cv::INTER_NEAREST); + + addGaussNoise(deg_, 10.0); + addSpikeNoise(deg_, 500); + + cv::superres::arrCopy(deg_, frame); +} + +void DegradeFrameSource::reset() +{ + base_->reset(); +} + +double MSSIM(const cv::Mat& i1, const cv::Mat& i2) +{ + const double C1 = 6.5025; + const double C2 = 58.5225; + + const int depth = CV_32F; + + cv::Mat I1, I2; + i1.convertTo(I1, depth); + i2.convertTo(I2, depth); + + cv::Mat I2_2 = I2.mul(I2); // I2^2 + cv::Mat I1_2 = I1.mul(I1); // I1^2 + cv::Mat I1_I2 = I1.mul(I2); // I1 * I2 + + cv::Mat mu1, mu2; + cv::GaussianBlur(I1, mu1, cv::Size(11, 11), 1.5); + cv::GaussianBlur(I2, mu2, cv::Size(11, 11), 1.5); + + cv::Mat mu1_2 = mu1.mul(mu1); + cv::Mat mu2_2 = mu2.mul(mu2); + cv::Mat mu1_mu2 = mu1.mul(mu2); + + cv::Mat sigma1_2, sigma2_2, sigma12; + + cv::GaussianBlur(I1_2, sigma1_2, cv::Size(11, 11), 1.5); + sigma1_2 -= mu1_2; + + cv::GaussianBlur(I2_2, sigma2_2, cv::Size(11, 11), 1.5); + sigma2_2 -= mu2_2; + + cv::GaussianBlur(I1_I2, sigma12, cv::Size(11, 11), 1.5); + sigma12 -= mu1_mu2; + + cv::Mat t1, t2; + cv::Mat numerator; + cv::Mat denominator; + + // t3 = ((2*mu1_mu2 + C1).*(2*sigma12 + C2)) + t1 = 2 * mu1_mu2 + C1; + t2 = 2 * sigma12 + C2; + numerator = t1.mul(t2); + + // t1 =((mu1_2 + mu2_2 + C1).*(sigma1_2 + sigma2_2 + C2)) + t1 = mu1_2 + mu2_2 + C1; + t2 = sigma1_2 + sigma2_2 + C2; + denominator = t1.mul(t2); + + // ssim_map = numerator./denominator; + cv::Mat ssim_map; + cv::divide(numerator, denominator, ssim_map); + + // mssim = average of ssim map + cv::Scalar mssim = cv::mean(ssim_map); + + if (i1.channels() == 1) + return mssim[0]; + + return (mssim[0] + mssim[1] + mssim[3]) / 3; +} + +class SuperResolution : public testing::Test +{ +public: + void RunTest(cv::Ptr superRes); +}; + +void SuperResolution::RunTest(cv::Ptr superRes) +{ + const std::string inputVideoName = cvtest::TS::ptr()->get_data_path() + "car.avi"; + const int scale = 2; + const int iterations = 100; + const int temporalAreaRadius = 2; + + ASSERT_FALSE( superRes.empty() ); + + const int btvKernelSize = superRes->getInt("btvKernelSize"); + + superRes->set("scale", scale); + superRes->set("iterations", iterations); + superRes->set("temporalAreaRadius", temporalAreaRadius); + + cv::Ptr goldSource(new AllignedFrameSource(cv::superres::createFrameSource_Video(inputVideoName), scale)); + cv::Ptr lowResSource(new DegradeFrameSource(new AllignedFrameSource(cv::superres::createFrameSource_Video(inputVideoName), scale), scale)); + + // skip first frame + cv::Mat frame; + + lowResSource->nextFrame(frame); + goldSource->nextFrame(frame); + + cv::Rect inner(btvKernelSize, btvKernelSize, frame.cols - 2 * btvKernelSize, frame.rows - 2 * btvKernelSize); + + superRes->setInput(lowResSource); + + double srAvgMSSIM = 0.0; + const int count = 10; + + cv::Mat goldFrame, superResFrame; + for (int i = 0; i < count; ++i) + { + goldSource->nextFrame(goldFrame); + ASSERT_FALSE( goldFrame.empty() ); + + superRes->nextFrame(superResFrame); + ASSERT_FALSE( superResFrame.empty() ); + + const double srMSSIM = MSSIM(goldFrame(inner), superResFrame); + + srAvgMSSIM += srMSSIM; + } + + srAvgMSSIM /= count; + + EXPECT_GE( srAvgMSSIM, 0.5 ); +} + +TEST_F(SuperResolution, BTVL1) +{ + RunTest(cv::superres::createSuperResolution_BTVL1()); +} + +#if defined(HAVE_OPENCV_GPU) && defined(HAVE_CUDA) + +TEST_F(SuperResolution, BTVL1_GPU) +{ + RunTest(cv::superres::createSuperResolution_BTVL1_GPU()); +} + +#endif diff --git a/samples/gpu/CMakeLists.txt b/samples/gpu/CMakeLists.txt index 6abb7e5af8..9fd19e28c4 100644 --- a/samples/gpu/CMakeLists.txt +++ b/samples/gpu/CMakeLists.txt @@ -1,7 +1,7 @@ SET(OPENCV_GPU_SAMPLES_REQUIRED_DEPS opencv_core opencv_flann opencv_imgproc opencv_highgui opencv_ml opencv_video opencv_objdetect opencv_features2d opencv_calib3d opencv_legacy opencv_contrib opencv_gpu - opencv_nonfree) + opencv_nonfree opencv_superres) ocv_check_dependencies(${OPENCV_GPU_SAMPLES_REQUIRED_DEPS}) diff --git a/samples/gpu/super_resolution.cpp b/samples/gpu/super_resolution.cpp new file mode 100644 index 0000000000..2dd3656b0e --- /dev/null +++ b/samples/gpu/super_resolution.cpp @@ -0,0 +1,152 @@ +#include +#include +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include "opencv2/contrib/contrib.hpp" +#include "opencv2/superres/superres.hpp" +#include "opencv2/superres/optical_flow.hpp" + +using namespace std; +using namespace cv; +using namespace cv::superres; + +#define MEASURE_TIME(op) \ + { \ + TickMeter tm; \ + tm.start(); \ + op; \ + tm.stop(); \ + cout << tm.getTimeSec() << " sec" << endl; \ + } + +static Ptr createOptFlow(const string& name, bool useGpu) +{ + if (name == "farneback") + { + if (useGpu) + return createOptFlow_Farneback_GPU(); + else + return createOptFlow_Farneback(); + } + else if (name == "simple") + return createOptFlow_Simple(); + else if (name == "tvl1") + { + if (useGpu) + return createOptFlow_DualTVL1_GPU(); + else + return createOptFlow_DualTVL1(); + } + else if (name == "brox") + return createOptFlow_Brox_GPU(); + else if (name == "pyrlk") + return createOptFlow_PyrLK_GPU(); + else + { + cerr << "Incorrect Optical Flow algorithm - " << name << endl; + exit(-1); + } + + return Ptr(); +} + +int main(int argc, const char* argv[]) +{ + CommandLineParser cmd(argc, argv, + "{ v | video | | Input video }" + "{ o | output | | Output video }" + "{ s | scale | 4 | Scale factor }" + "{ i | iterations | 180 | Iteration count }" + "{ t | temporal | 4 | Radius of the temporal search area }" + "{ f | flow | farneback | Optical flow algorithm (farneback, simple, tvl1, brox, pyrlk) }" + "{ gpu | gpu | false | Use GPU }" + "{ h | help | false | Print help message }" + ); + + if (cmd.get("help")) + { + cout << "This sample demonstrates Super Resolution algorithms for video sequence" << endl; + cmd.printParams(); + return 0; + } + + const string inputVideoName = cmd.get("video"); + const string outputVideoName = cmd.get("output"); + const int scale = cmd.get("scale"); + const int iterations = cmd.get("iterations"); + const int temporalAreaRadius = cmd.get("temporal"); + const string optFlow = cmd.get("flow"); + const bool useGpu = cmd.get("gpu"); + + Ptr superRes; + if (useGpu) + superRes = createSuperResolution_BTVL1_GPU(); + else + superRes = createSuperResolution_BTVL1(); + + superRes->set("scale", scale); + superRes->set("iterations", iterations); + superRes->set("temporalAreaRadius", temporalAreaRadius); + superRes->set("opticalFlow", createOptFlow(optFlow, useGpu)); + + Ptr frameSource; + if (useGpu) + { + // Try to use gpu Video Decoding + try + { + frameSource = createFrameSource_Video_GPU(inputVideoName); + Mat frame; + frameSource->nextFrame(frame); + } + catch (const cv::Exception&) + { + frameSource.release(); + } + } + if (frameSource.empty()) + frameSource = createFrameSource_Video(inputVideoName); + + // skip first frame, it is usually corrupted + { + Mat frame; + frameSource->nextFrame(frame); + cout << "Input : " << inputVideoName << " " << frame.size() << endl; + cout << "Scale factor : " << scale << endl; + cout << "Iterations : " << iterations << endl; + cout << "Temporal radius : " << temporalAreaRadius << endl; + cout << "Optical Flow : " << optFlow << endl; + cout << "Mode : " << (useGpu ? "GPU" : "CPU") << endl; + } + + superRes->setInput(frameSource); + + VideoWriter writer; + + for (int i = 0;; ++i) + { + cout << '[' << setw(3) << i << "] : "; + + Mat result; + MEASURE_TIME(superRes->nextFrame(result)); + + if (result.empty()) + break; + + imshow("Super Resolution", result); + + if (waitKey(1000) > 0) + break; + + if (!outputVideoName.empty()) + { + if (!writer.isOpened()) + writer.open(outputVideoName, CV_FOURCC('X', 'V', 'I', 'D'), 25.0, result.size()); + writer << result; + } + } + + return 0; +} From 7f0d6d42f0a22db5984e17dc38ad03e8a548d029 Mon Sep 17 00:00:00 2001 From: yao Date: Fri, 8 Mar 2013 10:30:01 +0800 Subject: [PATCH 02/41] fix mismatch on NV OCL and some AMD GPUs --- modules/ocl/src/kernels/moments.cl | 75 +++++++++++++---------- modules/ocl/src/moments.cpp | 96 +++++++++++++----------------- 2 files changed, 88 insertions(+), 83 deletions(-) diff --git a/modules/ocl/src/kernels/moments.cl b/modules/ocl/src/kernels/moments.cl index bd3001eeef..60488372e7 100644 --- a/modules/ocl/src/kernels/moments.cl +++ b/modules/ocl/src/kernels/moments.cl @@ -1,42 +1,56 @@ #if defined (DOUBLE_SUPPORT) + +#ifdef cl_khr_fp64 #pragma OPENCL EXTENSION cl_khr_fp64:enable +#elif defined (cl_amd_fp64) +#pragma OPENCL EXTENSION cl_amd_fp64:enable +#endif +typedef double T; + #else typedef float double; typedef float4 double4; +typedef long T; #define convert_double4 convert_float4 #endif //#pragma OPENCL EXTENSION cl_amd_printf:enable //#if defined (DOUBLE_SUPPORT) -__kernel void icvContourMoments(int contour_total, - __global float* reader_oclmat_data, - __global double* dst_a00, - __global double* dst_a10, - __global double* dst_a01, - __global double* dst_a20, - __global double* dst_a11, - __global double* dst_a02, - __global double* dst_a30, - __global double* dst_a21, - __global double* dst_a12, - __global double* dst_a03) +#define DST_ROW_A00 0 +#define DST_ROW_A10 1 +#define DST_ROW_A01 2 +#define DST_ROW_A20 3 +#define DST_ROW_A11 4 +#define DST_ROW_A02 5 +#define DST_ROW_A30 6 +#define DST_ROW_A21 7 +#define DST_ROW_A12 8 +#define DST_ROW_A03 9 + +__kernel void icvContourMoments(int contour_total, + __global float* reader_oclmat_data, + __global T* dst_a, + int dst_step) { - double xi_1, yi_1, xi_12, yi_12, xi, yi, xi2, yi2, dxy, xii_1, yii_1; + T xi_1, yi_1, xi_12, yi_12, xi, yi, xi2, yi2, dxy, xii_1, yii_1; int idx = get_global_id(0); - xi_1 = *(reader_oclmat_data + (get_global_id(0) << 1)); - yi_1 = *(reader_oclmat_data + (get_global_id(0) << 1) + 1); + if (idx < 0 || idx >= contour_total) + return; + + xi_1 = (T)(*(reader_oclmat_data + (get_global_id(0) << 1))); + yi_1 = (T)(*(reader_oclmat_data + (get_global_id(0) << 1) + 1)); xi_12 = xi_1 * xi_1; yi_12 = yi_1 * yi_1; if(idx == contour_total - 1) { - xi = *(reader_oclmat_data); - yi = *(reader_oclmat_data + 1); + xi = (T)(*(reader_oclmat_data)); + yi = (T)(*(reader_oclmat_data + 1)); } else { - xi = *(reader_oclmat_data + (idx + 1) * 2); - yi = *(reader_oclmat_data + (idx + 1) * 2 + 1); + xi = (T)(*(reader_oclmat_data + (idx + 1) * 2)); + yi = (T)(*(reader_oclmat_data + (idx + 1) * 2 + 1)); } xi2 = xi * xi; @@ -44,19 +58,20 @@ __kernel void icvContourMoments(int contour_total, dxy = xi_1 * yi - xi * yi_1; xii_1 = xi_1 + xi; yii_1 = yi_1 + yi; - - dst_a00[idx] = dxy; - dst_a10[idx] = dxy * xii_1; - dst_a01[idx] = dxy * yii_1; - dst_a20[idx] = dxy * (xi_1 * xii_1 + xi2); - dst_a11[idx] = dxy * (xi_1 * (yii_1 + yi_1) + xi * (yii_1 + yi)); - dst_a02[idx] = dxy * (yi_1 * yii_1 + yi2); - dst_a30[idx] = dxy * xii_1 * (xi_12 + xi2); - dst_a03[idx] = dxy * yii_1 * (yi_12 + yi2); - dst_a21[idx] = + + dst_step /= sizeof(T); + *( dst_a + DST_ROW_A00 * dst_step + idx) = dxy; + *( dst_a + DST_ROW_A10 * dst_step + idx) = dxy * xii_1; + *( dst_a + DST_ROW_A01 * dst_step + idx) = dxy * yii_1; + *( dst_a + DST_ROW_A20 * dst_step + idx) = dxy * (xi_1 * xii_1 + xi2); + *( dst_a + DST_ROW_A11 * dst_step + idx) = dxy * (xi_1 * (yii_1 + yi_1) + xi * (yii_1 + yi)); + *( dst_a + DST_ROW_A02 * dst_step + idx) = dxy * (yi_1 * yii_1 + yi2); + *( dst_a + DST_ROW_A30 * dst_step + idx) = dxy * xii_1 * (xi_12 + xi2); + *( dst_a + DST_ROW_A03 * dst_step + idx) = dxy * yii_1 * (yi_12 + yi2); + *( dst_a + DST_ROW_A21 * dst_step + idx) = dxy * (xi_12 * (3 * yi_1 + yi) + 2 * xi * xi_1 * yii_1 + xi2 * (yi_1 + 3 * yi)); - dst_a12[idx] = + *( dst_a + DST_ROW_A12 * dst_step + idx) = dxy * (yi_12 * (3 * xi_1 + xi) + 2 * yi * yi_1 * xii_1 + yi2 * (xi_1 + 3 * xi)); } diff --git a/modules/ocl/src/moments.cpp b/modules/ocl/src/moments.cpp index 6979433ab3..4abca0383f 100644 --- a/modules/ocl/src/moments.cpp +++ b/modules/ocl/src/moments.cpp @@ -98,25 +98,19 @@ static void icvContourMoments( CvSeq* contour, CvMoments* mom ) CvSeqReader reader; int lpt = contour->total; double a00, a10, a01, a20, a11, a02, a30, a21, a12, a03; - int dst_type = cv::ocl::Context::getContext()->impl->double_support ? CV_64FC1 : CV_32FC1; cvStartReadSeq( contour, &reader, 0 ); - cv::ocl::oclMat dst_a00(1,lpt,dst_type); - cv::ocl::oclMat dst_a10(1,lpt,dst_type); - cv::ocl::oclMat dst_a01(1,lpt,dst_type); - cv::ocl::oclMat dst_a20(1,lpt,dst_type); - cv::ocl::oclMat dst_a11(1,lpt,dst_type); - cv::ocl::oclMat dst_a02(1,lpt,dst_type); - cv::ocl::oclMat dst_a30(1,lpt,dst_type); - cv::ocl::oclMat dst_a21(1,lpt,dst_type); - cv::ocl::oclMat dst_a12(1,lpt,dst_type); - cv::ocl::oclMat dst_a03(1,lpt,dst_type); size_t reader_size = lpt << 1; cv::Mat reader_mat(1,reader_size,CV_32FC1); bool is_float = CV_SEQ_ELTYPE(contour) == CV_32FC2; + if (!cv::ocl::Context::getContext()->impl->double_support && is_float) + { + CV_Error(CV_StsUnsupportedFormat, "Moments - double is not supported by your GPU!"); + } + if( is_float ) { for(size_t i = 0; i < reader_size; ++i) @@ -136,6 +130,7 @@ static void icvContourMoments( CvSeq* contour, CvMoments* mom ) } } + cv::ocl::oclMat dst_a(10, lpt, CV_64FC1); cv::ocl::oclMat reader_oclmat(reader_mat); int llength = std::min(lpt,128); size_t localThreads[3] = { llength, 1, 1}; @@ -143,48 +138,43 @@ static void icvContourMoments( CvSeq* contour, CvMoments* mom ) vector > args; args.push_back( make_pair( sizeof(cl_int) , (void *)&contour->total )); args.push_back( make_pair( sizeof(cl_mem) , (void *)&reader_oclmat.data )); - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a00.data )); - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a10.data )); - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a01.data )); - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a20.data )); - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a11.data )); - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a02.data )); - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a30.data )); - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a21.data )); - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a12.data )); - args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a03.data )); - openCLExecuteKernel(dst_a00.clCxt, &moments, "icvContourMoments", globalThreads, localThreads, args, -1, -1); - - cv::Mat dst(dst_a00); - cv::Scalar s = cv::sum(dst); - a00 = s[0]; - dst = dst_a10; - s = cv::sum(dst); - a10 = s[0];//dstsum[1]; - dst = dst_a01; - s = cv::sum(dst); - a01 = s[0];//dstsum[2]; - dst = dst_a20; - s = cv::sum(dst); - a20 = s[0];//dstsum[3]; - dst = dst_a11; - s = cv::sum(dst); - a11 = s[0];//dstsum[4]; - dst = dst_a02; - s = cv::sum(dst); - a02 = s[0];//dstsum[5]; - dst = dst_a30; - s = cv::sum(dst); - a30 = s[0];//dstsum[6]; - dst = dst_a21; - s = cv::sum(dst); - a21 = s[0];//dstsum[7]; - dst = dst_a12; - s = cv::sum(dst); - a12 = s[0];//dstsum[8]; - dst = dst_a03; - s = cv::sum(dst); - a03 = s[0];//dstsum[9]; + args.push_back( make_pair( sizeof(cl_mem) , (void *)&dst_a.data )); + cl_int dst_step = (cl_int)dst_a.step; + args.push_back( make_pair( sizeof(cl_int) , (void *)&dst_step )); + + openCLExecuteKernel(dst_a.clCxt, &moments, "icvContourMoments", globalThreads, localThreads, args, -1, -1); + + cv::Mat dst(dst_a); + a00 = a10 = a01 = a20 = a11 = a02 = a30 = a21 = a12 = a03 = 0.0; + if (!cv::ocl::Context::getContext()->impl->double_support) + { + for (int i = 0; i < contour->total; ++i) + { + a00 += dst.at(0, i); + a10 += dst.at(1, i); + a01 += dst.at(2, i); + a20 += dst.at(3, i); + a11 += dst.at(4, i); + a02 += dst.at(5, i); + a30 += dst.at(6, i); + a21 += dst.at(7, i); + a12 += dst.at(8, i); + a03 += dst.at(9, i); + } + } + else + { + a00 = cv::sum(dst.row(0))[0]; + a10 = cv::sum(dst.row(1))[0]; + a01 = cv::sum(dst.row(2))[0]; + a20 = cv::sum(dst.row(3))[0]; + a11 = cv::sum(dst.row(4))[0]; + a02 = cv::sum(dst.row(5))[0]; + a30 = cv::sum(dst.row(6))[0]; + a21 = cv::sum(dst.row(7))[0]; + a12 = cv::sum(dst.row(8))[0]; + a03 = cv::sum(dst.row(9))[0]; + } double db1_2, db1_6, db1_12, db1_24, db1_20, db1_60; if( fabs(a00) > FLT_EPSILON ) From 8942eaf0d79e49c6fdf19965b2ab2bed923f9805 Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Mon, 11 Mar 2013 11:17:19 +0400 Subject: [PATCH 03/41] Stetch support for Android View classes added (Feature #2840) --- .../java/android+CameraBridgeViewBase.java | 19 ++++++++++++++++++- .../src/java/android+JavaCameraView.java | 6 ++++++ .../src/java/android+NativeCameraView.java | 6 ++++++ .../res/layout/tutorial3_surface_view.xml | 4 ++-- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/modules/java/generator/src/java/android+CameraBridgeViewBase.java b/modules/java/generator/src/java/android+CameraBridgeViewBase.java index 4dd3af96f1..e76ac26c56 100644 --- a/modules/java/generator/src/java/android+CameraBridgeViewBase.java +++ b/modules/java/generator/src/java/android+CameraBridgeViewBase.java @@ -15,6 +15,7 @@ import android.content.DialogInterface; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Rect; import android.util.AttributeSet; import android.util.Log; import android.view.SurfaceHolder; @@ -44,6 +45,7 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac protected int mFrameHeight; protected int mMaxHeight; protected int mMaxWidth; + protected float mScale = 0; protected int mPreviewFormat = Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA; protected int mCameraIndex = -1; protected boolean mEnabled; @@ -389,7 +391,22 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac Canvas canvas = getHolder().lockCanvas(); if (canvas != null) { canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR); - canvas.drawBitmap(mCacheBitmap, (canvas.getWidth() - mCacheBitmap.getWidth()) / 2, (canvas.getHeight() - mCacheBitmap.getHeight()) / 2, null); + Log.d(TAG, "mStretch value: " + mScale); + + if (mScale != 0) { + canvas.drawBitmap(mCacheBitmap, new Rect(0,0,mCacheBitmap.getWidth(), mCacheBitmap.getHeight()), + new Rect((int)((canvas.getWidth() - mScale*mCacheBitmap.getWidth()) / 2), + (int)((canvas.getHeight() - mScale*mCacheBitmap.getHeight()) / 2), + (int)((canvas.getWidth() - mScale*mCacheBitmap.getWidth()) / 2 + mScale*mCacheBitmap.getWidth()), + (int)((canvas.getHeight() - mScale*mCacheBitmap.getHeight()) / 2 + mScale*mCacheBitmap.getHeight())), null); + } else { + canvas.drawBitmap(mCacheBitmap, new Rect(0,0,mCacheBitmap.getWidth(), mCacheBitmap.getHeight()), + new Rect((canvas.getWidth() - mCacheBitmap.getWidth()) / 2, + (canvas.getHeight() - mCacheBitmap.getHeight()) / 2, + (canvas.getWidth() - mCacheBitmap.getWidth()) / 2 + mCacheBitmap.getWidth(), + (canvas.getHeight() - mCacheBitmap.getHeight()) / 2 + mCacheBitmap.getHeight()), null); + } + if (mFpsMeter != null) { mFpsMeter.measure(); mFpsMeter.draw(canvas, 20, 30); diff --git a/modules/java/generator/src/java/android+JavaCameraView.java b/modules/java/generator/src/java/android+JavaCameraView.java index 962899ad8f..34fe6091ae 100644 --- a/modules/java/generator/src/java/android+JavaCameraView.java +++ b/modules/java/generator/src/java/android+JavaCameraView.java @@ -10,6 +10,7 @@ import android.hardware.Camera.PreviewCallback; import android.os.Build; import android.util.AttributeSet; import android.util.Log; +import android.view.ViewGroup.LayoutParams; import org.opencv.core.CvType; import org.opencv.core.Mat; @@ -130,6 +131,11 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb mFrameWidth = params.getPreviewSize().width; mFrameHeight = params.getPreviewSize().height; + if ((getLayoutParams().width == LayoutParams.MATCH_PARENT) && (getLayoutParams().height == LayoutParams.MATCH_PARENT)) + mScale = Math.min(((float)height)/mFrameHeight, ((float)width)/mFrameWidth); + else + mScale = 0; + if (mFpsMeter != null) { mFpsMeter.setResolution(mFrameWidth, mFrameHeight); } diff --git a/modules/java/generator/src/java/android+NativeCameraView.java b/modules/java/generator/src/java/android+NativeCameraView.java index 3802167b35..496ed53d6e 100644 --- a/modules/java/generator/src/java/android+NativeCameraView.java +++ b/modules/java/generator/src/java/android+NativeCameraView.java @@ -8,6 +8,7 @@ import org.opencv.highgui.VideoCapture; import android.content.Context; import android.util.AttributeSet; import android.util.Log; +import android.view.ViewGroup.LayoutParams; /** * This class is an implementation of a bridge between SurfaceView and native OpenCV camera. @@ -102,6 +103,11 @@ public class NativeCameraView extends CameraBridgeViewBase { mFrameWidth = (int)frameSize.width; mFrameHeight = (int)frameSize.height; + if ((getLayoutParams().width == LayoutParams.MATCH_PARENT) && (getLayoutParams().height == LayoutParams.MATCH_PARENT)) + mScale = Math.min(((float)height)/mFrameHeight, ((float)width)/mFrameWidth); + else + mScale = 0; + if (mFpsMeter != null) { mFpsMeter.setResolution(mFrameWidth, mFrameHeight); } diff --git a/samples/android/tutorial-3-cameracontrol/res/layout/tutorial3_surface_view.xml b/samples/android/tutorial-3-cameracontrol/res/layout/tutorial3_surface_view.xml index 79fef4eae4..a574905782 100644 --- a/samples/android/tutorial-3-cameracontrol/res/layout/tutorial3_surface_view.xml +++ b/samples/android/tutorial-3-cameracontrol/res/layout/tutorial3_surface_view.xml @@ -4,8 +4,8 @@ android:layout_height="match_parent" > From 0f0a4c30991e8cfe3c3f7e8b37a04bdb52223fa3 Mon Sep 17 00:00:00 2001 From: yao Date: Mon, 11 Mar 2013 17:10:58 +0800 Subject: [PATCH 04/41] add stereoBM function --- modules/ocl/include/opencv2/ocl/ocl.hpp | 34 ++ modules/ocl/src/kernels/stereobm.cl | 427 ++++++++++++++++++++++++ modules/ocl/src/stereobm.cpp | 293 ++++++++++++++++ modules/ocl/test/test_calib3d.cpp | 94 ++++++ samples/ocl/aloe-L.png | Bin 0 -> 737508 bytes samples/ocl/aloe-R.png | Bin 0 -> 739497 bytes samples/ocl/aloe-disp.png | Bin 0 -> 60396 bytes 7 files changed, 848 insertions(+) create mode 100644 modules/ocl/src/kernels/stereobm.cl create mode 100644 modules/ocl/src/stereobm.cpp create mode 100644 modules/ocl/test/test_calib3d.cpp create mode 100644 samples/ocl/aloe-L.png create mode 100644 samples/ocl/aloe-R.png create mode 100644 samples/ocl/aloe-disp.png diff --git a/modules/ocl/include/opencv2/ocl/ocl.hpp b/modules/ocl/include/opencv2/ocl/ocl.hpp index 31b61410e7..4c2d54f00d 100644 --- a/modules/ocl/include/opencv2/ocl/ocl.hpp +++ b/modules/ocl/include/opencv2/ocl/ocl.hpp @@ -1806,6 +1806,40 @@ namespace cv //! computes moments of the rasterized shape or a vector of points CV_EXPORTS Moments ocl_moments(InputArray _array, bool binaryImage); + + class CV_EXPORTS StereoBM_OCL + { + public: + enum { BASIC_PRESET = 0, PREFILTER_XSOBEL = 1 }; + + enum { DEFAULT_NDISP = 64, DEFAULT_WINSZ = 19 }; + + //! the default constructor + StereoBM_OCL(); + //! the full constructor taking the camera-specific preset, number of disparities and the SAD window size. ndisparities must be multiple of 8. + StereoBM_OCL(int preset, int ndisparities = DEFAULT_NDISP, int winSize = DEFAULT_WINSZ); + + //! the stereo correspondence operator. Finds the disparity for the specified rectified stereo pair + //! Output disparity has CV_8U type. + void operator() ( const oclMat &left, const oclMat &right, oclMat &disparity); + + //! Some heuristics that tries to estmate + // if current GPU will be faster then CPU in this algorithm. + // It queries current active device. + static bool checkIfGpuCallReasonable(); + + int preset; + int ndisp; + int winSize; + + // If avergeTexThreshold == 0 => post procesing is disabled + // If avergeTexThreshold != 0 then disparity is set 0 in each point (x,y) where for left image + // SumOfHorizontalGradiensInWindow(x, y, winSize) < (winSize * winSize) * avergeTexThreshold + // i.e. input left image is low textured. + float avergeTexThreshold; + private: + oclMat minSSD, leBuf, riBuf; + }; } } #if defined _MSC_VER && _MSC_VER >= 1200 diff --git a/modules/ocl/src/kernels/stereobm.cl b/modules/ocl/src/kernels/stereobm.cl new file mode 100644 index 0000000000..4edab86b45 --- /dev/null +++ b/modules/ocl/src/kernels/stereobm.cl @@ -0,0 +1,427 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved. +// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// @Authors +// Jia Haipeng, jiahaipeng95@gmail.com +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other oclMaterials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors as is and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#define ROWSperTHREAD 21 // the number of rows a thread will process +#define BLOCK_W 128 // the thread block width (464) +#define N_DISPARITIES 8 + +#define STEREO_MIND 0 // The minimum d range to check +#define STEREO_DISP_STEP N_DISPARITIES // the d step, must be <= 1 to avoid aliasing + +int SQ(int a) +{ + return a * a; +} + +unsigned int CalcSSD(volatile __local unsigned int *col_ssd_cache, + volatile __local unsigned int *col_ssd, int radius) +{ + unsigned int cache = 0; + unsigned int cache2 = 0; + + for(int i = 1; i <= radius; i++) + cache += col_ssd[i]; + + col_ssd_cache[0] = cache; + + barrier(CLK_LOCAL_MEM_FENCE); + + if (get_local_id(0) < BLOCK_W - radius) + cache2 = col_ssd_cache[radius]; + else + for(int i = radius + 1; i < (2 * radius + 1); i++) + cache2 += col_ssd[i]; + + return col_ssd[0] + cache + cache2; +} + +uint2 MinSSD(volatile __local unsigned int *col_ssd_cache, + volatile __local unsigned int *col_ssd, int radius) +{ + unsigned int ssd[N_DISPARITIES]; + + //See above: #define COL_SSD_SIZE (BLOCK_W + 2 * radius) + ssd[0] = CalcSSD(col_ssd_cache, col_ssd + 0 * (BLOCK_W + 2 * radius), radius); + barrier(CLK_LOCAL_MEM_FENCE); + ssd[1] = CalcSSD(col_ssd_cache, col_ssd + 1 * (BLOCK_W + 2 * radius), radius); + barrier(CLK_LOCAL_MEM_FENCE); + ssd[2] = CalcSSD(col_ssd_cache, col_ssd + 2 * (BLOCK_W + 2 * radius), radius); + barrier(CLK_LOCAL_MEM_FENCE); + ssd[3] = CalcSSD(col_ssd_cache, col_ssd + 3 * (BLOCK_W + 2 * radius), radius); + barrier(CLK_LOCAL_MEM_FENCE); + ssd[4] = CalcSSD(col_ssd_cache, col_ssd + 4 * (BLOCK_W + 2 * radius), radius); + barrier(CLK_LOCAL_MEM_FENCE); + ssd[5] = CalcSSD(col_ssd_cache, col_ssd + 5 * (BLOCK_W + 2 * radius), radius); + barrier(CLK_LOCAL_MEM_FENCE); + ssd[6] = CalcSSD(col_ssd_cache, col_ssd + 6 * (BLOCK_W + 2 * radius), radius); + barrier(CLK_LOCAL_MEM_FENCE); + ssd[7] = CalcSSD(col_ssd_cache, col_ssd + 7 * (BLOCK_W + 2 * radius), radius); + barrier(CLK_LOCAL_MEM_FENCE); + + unsigned int mssd = min(min(min(ssd[0], ssd[1]), min(ssd[4], ssd[5])), min(min(ssd[2], ssd[3]), min(ssd[6], ssd[7]))); + + int bestIdx = 0; + for (int i = 0; i < N_DISPARITIES; i++) + { + if (mssd == ssd[i]) + bestIdx = i; + } + + return (uint2)(mssd, bestIdx); +} + +void StepDown(int idx1, int idx2, __global unsigned char* imageL, + __global unsigned char* imageR, int d, volatile __local unsigned int *col_ssd, int radius) +{ + unsigned char leftPixel1; + unsigned char leftPixel2; + unsigned char rightPixel1[8]; + unsigned char rightPixel2[8]; + unsigned int diff1, diff2; + + leftPixel1 = imageL[idx1]; + leftPixel2 = imageL[idx2]; + + idx1 = idx1 - d; + idx2 = idx2 - d; + + rightPixel1[7] = imageR[idx1 - 7]; + rightPixel1[0] = imageR[idx1 - 0]; + rightPixel1[1] = imageR[idx1 - 1]; + rightPixel1[2] = imageR[idx1 - 2]; + rightPixel1[3] = imageR[idx1 - 3]; + rightPixel1[4] = imageR[idx1 - 4]; + rightPixel1[5] = imageR[idx1 - 5]; + rightPixel1[6] = imageR[idx1 - 6]; + + rightPixel2[7] = imageR[idx2 - 7]; + rightPixel2[0] = imageR[idx2 - 0]; + rightPixel2[1] = imageR[idx2 - 1]; + rightPixel2[2] = imageR[idx2 - 2]; + rightPixel2[3] = imageR[idx2 - 3]; + rightPixel2[4] = imageR[idx2 - 4]; + rightPixel2[5] = imageR[idx2 - 5]; + rightPixel2[6] = imageR[idx2 - 6]; + + //See above: #define COL_SSD_SIZE (BLOCK_W + 2 * radius) + diff1 = leftPixel1 - rightPixel1[0]; + diff2 = leftPixel2 - rightPixel2[0]; + col_ssd[0 * (BLOCK_W + 2 * radius)] += SQ(diff2) - SQ(diff1); + + diff1 = leftPixel1 - rightPixel1[1]; + diff2 = leftPixel2 - rightPixel2[1]; + col_ssd[1 * (BLOCK_W + 2 * radius)] += SQ(diff2) - SQ(diff1); + + diff1 = leftPixel1 - rightPixel1[2]; + diff2 = leftPixel2 - rightPixel2[2]; + col_ssd[2 * (BLOCK_W + 2 * radius)] += SQ(diff2) - SQ(diff1); + + diff1 = leftPixel1 - rightPixel1[3]; + diff2 = leftPixel2 - rightPixel2[3]; + col_ssd[3 * (BLOCK_W + 2 * radius)] += SQ(diff2) - SQ(diff1); + + diff1 = leftPixel1 - rightPixel1[4]; + diff2 = leftPixel2 - rightPixel2[4]; + col_ssd[4 * (BLOCK_W + 2 * radius)] += SQ(diff2) - SQ(diff1); + + diff1 = leftPixel1 - rightPixel1[5]; + diff2 = leftPixel2 - rightPixel2[5]; + col_ssd[5 * (BLOCK_W + 2 * radius)] += SQ(diff2) - SQ(diff1); + + diff1 = leftPixel1 - rightPixel1[6]; + diff2 = leftPixel2 - rightPixel2[6]; + col_ssd[6 * (BLOCK_W + 2 * radius)] += SQ(diff2) - SQ(diff1); + + diff1 = leftPixel1 - rightPixel1[7]; + diff2 = leftPixel2 - rightPixel2[7]; + col_ssd[7 * (BLOCK_W + 2 * radius)] += SQ(diff2) - SQ(diff1); +} + +void InitColSSD(int x_tex, int y_tex, int im_pitch, __global unsigned char* imageL, + __global unsigned char* imageR, int d, + volatile __local unsigned int *col_ssd, int radius) +{ + unsigned char leftPixel1; + int idx; + unsigned int diffa[] = {0, 0, 0, 0, 0, 0, 0, 0}; + + for(int i = 0; i < (2 * radius + 1); i++) + { + idx = y_tex * im_pitch + x_tex; + leftPixel1 = imageL[idx]; + idx = idx - d; + + diffa[0] += SQ(leftPixel1 - imageR[idx - 0]); + diffa[1] += SQ(leftPixel1 - imageR[idx - 1]); + diffa[2] += SQ(leftPixel1 - imageR[idx - 2]); + diffa[3] += SQ(leftPixel1 - imageR[idx - 3]); + diffa[4] += SQ(leftPixel1 - imageR[idx - 4]); + diffa[5] += SQ(leftPixel1 - imageR[idx - 5]); + diffa[6] += SQ(leftPixel1 - imageR[idx - 6]); + diffa[7] += SQ(leftPixel1 - imageR[idx - 7]); + + y_tex += 1; + } + //See above: #define COL_SSD_SIZE (BLOCK_W + 2 * radius) + col_ssd[0 * (BLOCK_W + 2 * radius)] = diffa[0]; + col_ssd[1 * (BLOCK_W + 2 * radius)] = diffa[1]; + col_ssd[2 * (BLOCK_W + 2 * radius)] = diffa[2]; + col_ssd[3 * (BLOCK_W + 2 * radius)] = diffa[3]; + col_ssd[4 * (BLOCK_W + 2 * radius)] = diffa[4]; + col_ssd[5 * (BLOCK_W + 2 * radius)] = diffa[5]; + col_ssd[6 * (BLOCK_W + 2 * radius)] = diffa[6]; + col_ssd[7 * (BLOCK_W + 2 * radius)] = diffa[7]; +} + +__kernel void stereoKernel(__global unsigned char *left, __global unsigned char *right, + __global unsigned int *cminSSDImage, int cminSSD_step, + __global unsigned char *disp, int disp_step,int cwidth, int cheight, + int img_step, int maxdisp, int radius, + __local unsigned int *col_ssd_cache) +{ + + volatile __local unsigned int *col_ssd = col_ssd_cache + BLOCK_W + get_local_id(0); + volatile __local unsigned int *col_ssd_extra = get_local_id(0) < (2 * radius) ? col_ssd + BLOCK_W : 0; + + int X = get_group_id(0) * BLOCK_W + get_local_id(0) + maxdisp + radius; + // int Y = get_group_id(1) * ROWSperTHREAD + radius; + + #define Y (get_group_id(1) * ROWSperTHREAD + radius) + + volatile __global unsigned int* minSSDImage = cminSSDImage + X + Y * cminSSD_step; + __global unsigned char* disparImage = disp + X + Y * disp_step; + + int end_row = ROWSperTHREAD < (cheight - Y) ? ROWSperTHREAD:(cheight - Y); + int y_tex; + int x_tex = X - radius; + + if (x_tex >= cwidth) + return; + + for(int d = STEREO_MIND; d < maxdisp; d += STEREO_DISP_STEP) + { + y_tex = Y - radius; + + InitColSSD(x_tex, y_tex, img_step, left, right, d, col_ssd, radius); + if (col_ssd_extra > 0) + if (x_tex + BLOCK_W < cwidth) + InitColSSD(x_tex + BLOCK_W, y_tex, img_step, left, right, d, col_ssd_extra, radius); + + barrier(CLK_LOCAL_MEM_FENCE); //before MinSSD function + + if (X < cwidth - radius && Y < cheight - radius) + { + uint2 minSSD = MinSSD(col_ssd_cache + get_local_id(0), col_ssd, radius); + if (minSSD.x < minSSDImage[0]) + { + disparImage[0] = (unsigned char)(d + minSSD.y); + minSSDImage[0] = minSSD.x; + } + } + + for(int row = 1; row < end_row; row++) + { + int idx1 = y_tex * img_step + x_tex; + int idx2 = (y_tex + (2 * radius + 1)) * img_step + x_tex; + + barrier(CLK_GLOBAL_MEM_FENCE); + barrier(CLK_LOCAL_MEM_FENCE); + + StepDown(idx1, idx2, left, right, d, col_ssd, radius); + if (col_ssd_extra > 0) + if (x_tex + BLOCK_W < cwidth) + StepDown(idx1, idx2, left + BLOCK_W, right + BLOCK_W, d, col_ssd_extra, radius); + + y_tex += 1; + + barrier(CLK_LOCAL_MEM_FENCE); + + if (X < cwidth - radius && row < cheight - radius - Y) + { + int idx = row * cminSSD_step; + uint2 minSSD = MinSSD(col_ssd_cache + get_local_id(0), col_ssd, radius); + if (minSSD.x < minSSDImage[idx]) + { + disparImage[disp_step * row] = (unsigned char)(d + minSSD.y); + minSSDImage[idx] = minSSD.x; + } + } + } // for row loop + } // for d loop +} + +////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Sobel Prefiler (signal channel)////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////// + +__kernel void prefilter_xsobel(__global unsigned char *input, __global unsigned char *output, + int rows, int cols, int prefilterCap) +{ + int x = get_global_id(0); + int y = get_global_id(1); + + if(x < cols && y < rows) + { + int cov = input[(y-1) * cols + (x-1)] * (-1) + input[(y-1) * cols + (x+1)] * (1) + + input[(y) * cols + (x-1)] * (-2) + input[(y) * cols + (x+1)] * (2) + + input[(y+1) * cols + (x-1)] * (-1) + input[(y+1) * cols + (x+1)] * (1); + + cov = min(min(max(-prefilterCap, cov), prefilterCap) + prefilterCap, 255); + output[y * cols + x] = cov & 0xFF; + } +} + + +////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////// Textureness filtering //////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////// + +float sobel(__global unsigned char *input, int x, int y, int rows, int cols) +{ + float conv = 0; + int y1 = y==0? 0 : y-1; + int x1 = x==0? 0 : x-1; + if(x < cols && y < rows) + { + conv = (float)input[(y1) * cols + (x1)] * (-1) + (float)input[(y1) * cols + (x+1)] * (1) + + (float)input[(y) * cols + (x1)] * (-2) + (float)input[(y) * cols + (x+1)] * (2) + + (float)input[(y+1) * cols + (x1)] * (-1) + (float)input[(y+1) * cols + (x+1)] * (1); + + } + return fabs(conv); +} + +float CalcSums(__local float *cols, __local float *cols_cache, int winsz) +{ + float cache = 0; + float cache2 = 0; + int winsz2 = winsz/2; + + int x = get_local_id(0); + int group_size_x = get_local_size(0); + + for(int i = 1; i <= winsz2; i++) + cache += cols[i]; + + cols_cache[0] = cache; + + barrier(CLK_LOCAL_MEM_FENCE); + + if (x < group_size_x - winsz2) + cache2 = cols_cache[winsz2]; + else + for(int i = winsz2 + 1; i < winsz; i++) + cache2 += cols[i]; + + return cols[0] + cache + cache2; +} + +#define RpT (2 * ROWSperTHREAD) // got experimentally +__kernel void textureness_kernel(__global unsigned char *disp, int disp_rows, int disp_cols, + int disp_step, __global unsigned char *input, int input_rows, + int input_cols,int winsz, float threshold, + __local float *cols_cache) +{ + int winsz2 = winsz/2; + int n_dirty_pixels = (winsz2) * 2; + + int local_id_x = get_local_id(0); + int group_size_x = get_local_size(0); + int group_id_y = get_group_id(1); + + __local float *cols = cols_cache + group_size_x + local_id_x; + __local float *cols_extra = local_id_x < n_dirty_pixels ? cols + group_size_x : 0; + + int x = get_global_id(0); + int beg_row = group_id_y * RpT; + int end_row = min(beg_row + RpT, disp_rows); + + // if (x < disp_cols) + // { + int y = beg_row; + + float sum = 0; + float sum_extra = 0; + + for(int i = y - winsz2; i <= y + winsz2; ++i) + { + sum += sobel(input, x - winsz2, i, input_rows, input_cols); + if (cols_extra) + sum_extra += sobel(input, x + group_size_x - winsz2, i, input_rows, input_cols); + } + *cols = sum; + if (cols_extra) + *cols_extra = sum_extra; + + barrier(CLK_LOCAL_MEM_FENCE); + + float sum_win = CalcSums(cols, cols_cache + local_id_x, winsz) * 255; + if (sum_win < threshold) + disp[y * disp_step + x] = 0; + + barrier(CLK_LOCAL_MEM_FENCE); + + for(int y = beg_row + 1; y < end_row; ++y) + { + sum = sum - sobel(input, x - winsz2, y - winsz2 - 1, input_rows, input_cols) + + sobel(input, x - winsz2, y + winsz2, input_rows, input_cols); + *cols = sum; + + if (cols_extra) + { + sum_extra = sum_extra - sobel(input, x + group_size_x - winsz2, y - winsz2 - 1,input_rows, input_cols) + + sobel(input, x + group_size_x - winsz2, y + winsz2, input_rows, input_cols); + *cols_extra = sum_extra; + } + + barrier(CLK_LOCAL_MEM_FENCE); + float sum_win = CalcSums(cols, cols_cache + local_id_x, winsz) * 255; + if (sum_win < threshold) + disp[y * disp_step + x] = 0; + + barrier(CLK_LOCAL_MEM_FENCE); + } + // } +} diff --git a/modules/ocl/src/stereobm.cpp b/modules/ocl/src/stereobm.cpp new file mode 100644 index 0000000000..2f24881ddd --- /dev/null +++ b/modules/ocl/src/stereobm.cpp @@ -0,0 +1,293 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved. +// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// @Authors +// Jia Haipeng, jiahaipeng95@gmail.com +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other oclMaterials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "precomp.hpp" +#include + +using namespace cv; +using namespace cv::ocl; +using namespace std; + +//////////////////////////////////////////////////////////////////////// +///////////////// stereoBM ///////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +#if !defined (HAVE_OPENCL) + +namespace cv +{ +namespace ocl +{ +cv::ocl::StereoBM_OCL::StereoBM_OCL() +{ + throw_nogpu(); +} +cv::ocl::StereoBM_OCL::StereoBM_OCL(int, int, int) +{ + throw_nogpu(); +} +bool cv::ocl::StereoBM_OCL::checkIfGpuCallReasonable() +{ + throw_nogpu(); + return false; +} +void cv::ocl::StereoBM_OCL::operator() ( const oclMat &, const oclMat &, oclMat &) +{ + throw_nogpu(); +} +} +} + +#else /* !defined (HAVE_OPENCL) */ + +namespace cv +{ +namespace ocl +{ + +///////////////////////////OpenCL kernel strings/////////////////////////// +extern const char *stereobm; + +} +} +namespace cv +{ +namespace ocl +{ +namespace stereoBM +{ +///////////////////////////////////////////////////////////////////////// +//////////////////////////prefilter_xsbel//////////////////////////////// +//////////////////////////////////////////////////////////////////////// +void prefilter_xsobel(const oclMat &input, oclMat &output, int prefilterCap) +{ + Context *clCxt = input.clCxt; + + string kernelName = "prefilter_xsobel"; + cl_kernel kernel = openCLGetKernelFromSource(clCxt, &stereobm, kernelName); + + size_t blockSize = 1; + size_t globalThreads[3] = { input.cols, input.rows, 1 }; + size_t localThreads[3] = { blockSize, blockSize, 1 }; + + openCLVerifyKernel(clCxt, kernel, localThreads); + openCLSafeCall(clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&input.data)); + openCLSafeCall(clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&output.data)); + openCLSafeCall(clSetKernelArg(kernel, 2, sizeof(cl_int), (void *)&input.rows)); + openCLSafeCall(clSetKernelArg(kernel, 3, sizeof(cl_int), (void *)&input.cols)); + openCLSafeCall(clSetKernelArg(kernel, 4, sizeof(cl_int), (void *)&prefilterCap)); + + openCLSafeCall(clEnqueueNDRangeKernel(clCxt->impl->clCmdQueue, kernel, 3, NULL, + globalThreads, localThreads, 0, NULL, NULL)); + + clFinish(clCxt->impl->clCmdQueue); + openCLSafeCall(clReleaseKernel(kernel)); + +} +////////////////////////////////////////////////////////////////////////// +//////////////////////////////common//////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +#define N_DISPARITIES 8 +#define ROWSperTHREAD 21 +#define BLOCK_W 128 +static inline int divUp(int total, int grain) +{ + return (total + grain - 1) / grain; +} +//////////////////////////////////////////////////////////////////////////// +///////////////////////////////stereoBM_GPU//////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +void stereo_bm(const oclMat &left, const oclMat &right, oclMat &disp, + int maxdisp, int winSize, oclMat &minSSD_buf) +{ + int winsz2 = winSize >> 1; + + //if(winsz2 == 0 || winsz2 >= calles_num) + //cv::ocl:error("Unsupported window size", __FILE__, __LINE__, __FUNCTION__); + + Context *clCxt = left.clCxt; + + string kernelName = "stereoKernel"; + cl_kernel kernel = openCLGetKernelFromSource(clCxt, &stereobm, kernelName); + + disp.setTo(Scalar_::all(0)); + minSSD_buf.setTo(Scalar_::all(0xFFFFFFFF)); + + size_t minssd_step = minSSD_buf.step / minSSD_buf.elemSize(); + size_t local_mem_size = (BLOCK_W + N_DISPARITIES * (BLOCK_W + 2 * winsz2)) * + sizeof(cl_uint); + //size_t blockSize = 1; + size_t localThreads[] = { BLOCK_W, 1,1}; + size_t globalThreads[] = { divUp(left.cols - maxdisp - 2 * winsz2, BLOCK_W) *BLOCK_W, + divUp(left.rows - 2 * winsz2, ROWSperTHREAD), + 1 + }; + + openCLVerifyKernel(clCxt, kernel, localThreads); + openCLSafeCall(clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&left.data)); + openCLSafeCall(clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&right.data)); + openCLSafeCall(clSetKernelArg(kernel, 2, sizeof(cl_mem), (void *)&minSSD_buf.data)); + openCLSafeCall(clSetKernelArg(kernel, 3, sizeof(cl_int), (void *)&minssd_step)); + openCLSafeCall(clSetKernelArg(kernel, 4, sizeof(cl_mem), (void *)&disp.data)); + openCLSafeCall(clSetKernelArg(kernel, 5, sizeof(cl_int), (void *)&disp.step)); + openCLSafeCall(clSetKernelArg(kernel, 6, sizeof(cl_int), (void *)&left.cols)); + openCLSafeCall(clSetKernelArg(kernel, 7, sizeof(cl_int), (void *)&left.rows)); + openCLSafeCall(clSetKernelArg(kernel, 8, sizeof(cl_int), (void *)&left.step)); + openCLSafeCall(clSetKernelArg(kernel, 9, sizeof(cl_int), (void *)&maxdisp)); + openCLSafeCall(clSetKernelArg(kernel, 10, sizeof(cl_int), (void *)&winsz2)); + openCLSafeCall(clSetKernelArg(kernel, 11, local_mem_size, (void *)NULL)); + + openCLSafeCall(clEnqueueNDRangeKernel(clCxt->impl->clCmdQueue, kernel, 2, NULL, + globalThreads, localThreads, 0, NULL, NULL)); + + + clFinish(clCxt->impl->clCmdQueue); + openCLSafeCall(clReleaseKernel(kernel)); +} +//////////////////////////////////////////////////////////////////////////// +///////////////////////////////postfilter_textureness/////////////////////// +//////////////////////////////////////////////////////////////////////////// +void postfilter_textureness(oclMat &left, int winSize, + float avergeTexThreshold, oclMat &disparity) +{ + Context *clCxt = left.clCxt; + + string kernelName = "textureness_kernel"; + cl_kernel kernel = openCLGetKernelFromSource(clCxt, &stereobm, kernelName); + + size_t blockSize = 1; + size_t localThreads[] = { BLOCK_W, blockSize ,1}; + size_t globalThreads[] = { divUp(left.cols, BLOCK_W) *BLOCK_W, + divUp(left.rows, 2 * ROWSperTHREAD), + 1 + }; + + size_t local_mem_size = (localThreads[0] + localThreads[0] + (winSize / 2) * 2) * sizeof(float); + + openCLVerifyKernel(clCxt, kernel, localThreads); + openCLSafeCall(clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&disparity.data)); + openCLSafeCall(clSetKernelArg(kernel, 1, sizeof(cl_int), (void *)&disparity.rows)); + openCLSafeCall(clSetKernelArg(kernel, 2, sizeof(cl_int), (void *)&disparity.cols)); + openCLSafeCall(clSetKernelArg(kernel, 3, sizeof(cl_int), (void *)&disparity.step)); + openCLSafeCall(clSetKernelArg(kernel, 4, sizeof(cl_mem), (void *)&left.data)); + openCLSafeCall(clSetKernelArg(kernel, 5, sizeof(cl_int), (void *)&left.rows)); + openCLSafeCall(clSetKernelArg(kernel, 6, sizeof(cl_int), (void *)&left.cols)); + openCLSafeCall(clSetKernelArg(kernel, 7, sizeof(cl_int), (void *)&winSize)); + openCLSafeCall(clSetKernelArg(kernel, 8, sizeof(cl_float), (void *)&avergeTexThreshold)); + openCLSafeCall(clSetKernelArg(kernel, 9, local_mem_size, NULL)); + openCLSafeCall(clEnqueueNDRangeKernel(clCxt->impl->clCmdQueue, kernel, 2, NULL, + globalThreads, localThreads, 0, NULL, NULL)); + + clFinish(clCxt->impl->clCmdQueue); + openCLSafeCall(clReleaseKernel(kernel)); +} +////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////operator///////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +void operator_(oclMat &minSSD, oclMat &leBuf, oclMat &riBuf, int preset, int ndisp, + int winSize, float avergeTexThreshold, const oclMat &left, + const oclMat &right, oclMat &disparity) + +{ + CV_DbgAssert(left.rows == right.rows && left.cols == right.cols); + CV_DbgAssert(left.type() == CV_8UC1); + CV_DbgAssert(right.type() == CV_8UC1); + + disparity.create(left.size(), CV_8UC1); + minSSD.create(left.size(), CV_32SC1); + + oclMat le_for_bm = left; + oclMat ri_for_bm = right; + + if (preset == cv::ocl::StereoBM_OCL::PREFILTER_XSOBEL) + { + leBuf.create( left.size(), left.type()); + riBuf.create(right.size(), right.type()); + + prefilter_xsobel( left, leBuf, 31); + prefilter_xsobel(right, riBuf, 31); + + le_for_bm = leBuf; + ri_for_bm = riBuf; + } + + stereo_bm(le_for_bm, ri_for_bm, disparity, ndisp, winSize, minSSD); + + if (avergeTexThreshold) + { + postfilter_textureness(le_for_bm, winSize, avergeTexThreshold, disparity); + } +} +} +} +} +const float defaultAvgTexThreshold = 3; + +cv::ocl::StereoBM_OCL::StereoBM_OCL() + : preset(BASIC_PRESET), ndisp(DEFAULT_NDISP), winSize(DEFAULT_WINSZ), + avergeTexThreshold(defaultAvgTexThreshold) {} + +cv::ocl::StereoBM_OCL::StereoBM_OCL(int preset_, int ndisparities_, int winSize_) + : preset(preset_), ndisp(ndisparities_), winSize(winSize_), + avergeTexThreshold(defaultAvgTexThreshold) +{ + const int max_supported_ndisp = 1 << (sizeof(unsigned char) * 8); + CV_Assert(0 < ndisp && ndisp <= max_supported_ndisp); + CV_Assert(ndisp % 8 == 0); + CV_Assert(winSize % 2 == 1); +} + +bool cv::ocl::StereoBM_OCL::checkIfGpuCallReasonable() +{ + return true; +} + +void cv::ocl::StereoBM_OCL::operator() ( const oclMat &left, const oclMat &right, + oclMat &disparity) +{ + cv::ocl::stereoBM::operator_(minSSD, leBuf, riBuf, preset, ndisp, winSize, avergeTexThreshold, left, right, disparity); +} + +#endif /* !defined (HAVE_OPENCL) */ diff --git a/modules/ocl/test/test_calib3d.cpp b/modules/ocl/test/test_calib3d.cpp new file mode 100644 index 0000000000..58dbcc2e3d --- /dev/null +++ b/modules/ocl/test/test_calib3d.cpp @@ -0,0 +1,94 @@ +/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved. +// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// @Authors + +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other oclMaterials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "precomp.hpp" +#include + +#ifdef HAVE_OPENCL + +using namespace cv; + +extern std::string workdir; +PARAM_TEST_CASE(StereoMatchBM, int, int) +{ + int n_disp; + int winSize; + + virtual void SetUp() + { + n_disp = GET_PARAM(0); + winSize = GET_PARAM(1); + } +}; + +TEST_P(StereoMatchBM, Accuracy) +{ + + Mat left_image = readImage(workdir + "../ocl/aloe-L.png", IMREAD_GRAYSCALE); + Mat right_image = readImage(workdir + "../ocl/aloe-R.png", IMREAD_GRAYSCALE); + Mat disp_gold = readImage(workdir + "../ocl/aloe-disp.png", IMREAD_GRAYSCALE); + ocl::oclMat d_left, d_right; + ocl::oclMat d_disp(left_image.size(), CV_8U); + Mat disp; + + ASSERT_FALSE(left_image.empty()); + ASSERT_FALSE(right_image.empty()); + ASSERT_FALSE(disp_gold.empty()); + d_left.upload(left_image); + d_right.upload(right_image); + + ocl::StereoBM_OCL bm(0, n_disp, winSize); + + + bm(d_left, d_right, d_disp); + d_disp.download(disp); + + EXPECT_MAT_SIMILAR(disp_gold, disp, 1e-3); +} + +INSTANTIATE_TEST_CASE_P(GPU_Calib3D, StereoMatchBM, testing::Combine(testing::Values(128), + testing::Values(19))); + +#endif // HAVE_OPENCL diff --git a/samples/ocl/aloe-L.png b/samples/ocl/aloe-L.png new file mode 100644 index 0000000000000000000000000000000000000000..47587668e25f51fd9117a98d1b38ea1ee834fdc5 GIT binary patch literal 737508 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­{!a7hRVykq_oi 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%0Avd#E$d(cVE%}_#gfU39!zyV>1}?3qJR- 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

7Z4HaX;#4@8e6FruW;z3z(2 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 |_j=GcCclE_*tIsG1VceJm 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

QLF&Mo_pFA!cyo3z0jFOfzMf9mU&s{ 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 z�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

R_A)AZ=}B{GrjcwU${s2aJG9JKncd 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%0D~!~FLK^FFIhsz3`E0y6nw*|3YFjU# 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

)%&&3LM?G@9vd}p>10pv20e9%*F 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 yNH7ZBm0W~{#iZWfcn`KpFs2 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�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 rBm*Zx@%Safn9xXTtp|&hHlo^YyTcIx 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

#TLiS%N8}td(*AXr)Sge-=lB?7Lx*T1%~sRn{3} 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

dK?p=0O(7;-!*c!UY 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[d=69 zsgIt#EyL|$*Nz#Cl`P}2!x&L#&=mq0OR}iEA=7m|&jgHMgEy?4nX`h38f%2bIFHu! zaTJ3khKPoa>~ps3izA^ z0U`v2zMmw?%gd9xR1w%7h9M=gei}xL?tHTdj&qJl2$e+T?y2nu@xfV-mJpRvl$eu9 z3dRIWr8hGz6%8t&&Qw%ql{04nB|suGr{ggt-L*XuF00a!ssaIt;O@}3BQqn55NT05 zhbE=WQ}T$`5t?UPj3sM~HQr}HQ-n|k{Ga}Z|9EwM^4aTGn^jd+tL53X7@Je#H03ne zP}!oCseO99`SJE?hjn>=-K-a7Q5ten9Jl-Z?$C`xjm63XsuvAK!Ne z{D)uv=F{_q(Ij~?M7KBF54YW$H=iw+n)Aq6oDaqV3TRG%pbA}%-n+tvK22{Q?hj+C z!s3e;FDk2KoQPnaV!PkH{ptAA4Y#^D|8(>DD>dov+pnKK+)PB_Vwr=Y#UwH$7_mJ6 z{3}z0oA+-`;!iGKtTtS@=A>(J~=Pwskj$>9z%)$GraNGO4+x`BVk537T z_32qv`MQ{y>?)EqrzAXOHGs>adU!e@gx`MorlQC>vZTn_palaT_Q!`of~$V<;&f?% z6v#Sb&CSF8x9>mtdQntXQ4oDUj(y)lW{1=iRTIK`v8)Q8c~lh=QsOC%amv%gsKys1 z8T#Sv+wb4Mb7iyKtc$`~GDYy#7OX<3-WUTCGfxAv;Qp{Pil>_kBa%|DsGKH9ebAw? zF&GI*fL1Lf=J&hZ!^D#{=neu2|X>0{rlJSO|{Qr!9vPeJxUANsmeK3%%_W)ohG^_JatT_(D za2&?{p?m12L(HRdZXDY&9TZYsgymup$MM~}AKt#dIkp-Tk^(auas`IMhO_feuHO9Z z=KM8T&%%Is_wio(^qVh!5fC_YRk)mnA;qNBPtw%QqAbQZe%NjIQ)Jb3T`g>-lhmc% zEQ@sPZod0rzw3`}ngq~TQxv`~tSgSOAL3wAyDqq}Lc*lbr{s%ZUGS?@@(qc&!#lnC z{l)p^6E&?ePs4ER5973t+KRV}#kyH+y!p(*g^n6yR%O+cSY$4wlC>@?=lmSJQelIZ zjLQlsCk0>@k$KkzjF4DaQ6wuTK;+pvuX9`(C5@?T3ulN3Nl@9$GvW~D=nWDXN2wpC zLkkvda6S~A^VGHm6^+R$A`8uLdk|0|LRCQk6=lxGSu#Wf04Nzm#geLEnqQ&9%mQQ# zh#~c%NO8z1gOUJ|F=$9ZSyfq#&g$p6*KAc4NLi7yh~WIr0s_{I3P46!G|PPJkC{c) z8JC3x#2A+~r_A%c-2j2&T!%5%hzf|>x#*_KpcxdEfPhpj0vQwlKoXuM!U!<)z|c91 zMDx6ToZ?*QIg;7BDjTl`7wbh?7BR=|b~jD=aH`F5H<>~>64Si7!@(uHZ_DUPby5|o9nf=zwg9mZpZ zL6dbet&EpdSQOqHGKlRkj8WE$rmhTuCYFARF@t~+001&ZnRQ}GsHJnu5Lhy&Nd$qR zyM0J^JD*4po71&xigD=2e#kKqGI@&@1vyP3fC@0im;roQS{LG&$CP$cWM|5vK)^A^ z9CKk!a1MkC$$MiRO~b@F7iBReo?^CUhNW1tlsP}`$F3i%D$KT708KHEW3CFntXx1G z+dh=8sC*Vh!pt0VHpW^~X8{pn(%oT<3}qQ=PmZt~;*fJycyEyaQqt{V>?S2Nsw#{M zY7BW$2WpjR&MqK;g?WLRGcdp?5>;GX;@kiAe^x)mG)T^bR>`oc2-teLIK4=!DfaEt z)1Pl2yZXh&tJh8K(a1QYyW8!<{R78gQP!6yXC>->yMK3_PCohc;@WN_xO18 z@%VD{>Q}F?&ey?H{^7fy+7Ul}{i(N;MIkcG45$D`RYk=S5z&xRm*T^rb-p-TExWGs zwjk>Ouymkt$|)|J^7#IT+kg2c{&3P<{O+qSmxa3L!?%dYb{c=$?wfl3+1WWy z<2a?du6O&V@7{h`T)t?QrA*ThyW88R63bUFPBvu-fnbWmzFlrEiq*1DLr%$&0|g>w z&0`)3lz_&V+NrBTu?Y2y;UzNt6b~^qWwQ+46Oc+)>4&KwBxRan9tO6?o}4a-@^-uL zkKM*~r{;*9GD}h&1)j38=Wmu**D;T`H@BN=ae1;>R{rVO-yX-sYQ;G{9oyi|tJQL8 ziBO%ffB>M(={R=p?(cR(2Sx$1iUz+RED!@(i)aYuE1N1JkVVNN!{g&mF;2_Hn$USy zhGI=7^xad}KXl{%Fgy;^G4mK>&zKSqs>wSC0K47c;cnZvIY*GJ%xH`aWCPmG$>k?+ z{_gzMuWYgC`#8mDjEyP2`|*c={PnLsJvsU2k6#OhFTZ^0jUt)d(0%>>{pR$%^zLzg zXvdgUmqqx+i_4nq)Q{w_2uj*TtQIk){c(%T0uVFJpbAmRidj|WK&hgL z5{a-%&M@yT<76ozfipy8GG|~WLNXw#DNlqLyIkfGy8r+n07*naR0Amj8A3AND5#7R z$7!C^Dl;j93ZM#!AplljA)=X8sR(4P{Ph!{DuGjki8BJC3aJo*39f9asq5k}02l>Q zAVm>ngBB4)7yw|FE?PrmGIM4oL=niK%ILiX098&|c*e+yvSMZc0&7f4SwM|-ESxec z;4_ItNLbK7wP<1-C1yecASkLZcXA970II7>(#pQC~}kz z(wDEVP8Pu+IJAJ&Pk9_tSrsl25*UM;-v~NX-_Ke(M&OSDT-2AIqt^x{!lfGPIcc!?<|6hSwz%g zGMs|3hUT&vMuFsv4c=N~RD^XLCsnnE42VSlz#-+B)gX9F#;7O^<0P!sT4N~=sp}{2 zd|A?z@-SvjK&qu7LQxSFdM3_Tu%)x}_$13TaW~}%Xzzb|8_ohc70C(-=YD>9wmkcE zOzr;Whcr&#JWkX3%d6L)d88cE{nPf{&+k$7(-$wU&wg>XSu_s5```bM`eXO&v$H?` z`0f61`ts$K7tN!bZq8kBKmYj6+uNVl%hOLU&(9WTug=Th9TH>~N!eLC9Qud5_QlnC zU0YRtI37P7j)y6uEnlzKi^4Ap_u=X3{bM_3xmurU*G-4?t6!fLC+A1==bs-Rk_SCm zu0H>pa<#C|f@TCjAvD%HIPUk4ciX@J;>*)u)7TH0YG0o<`Q5%x>d%_h>&F}(TG2Ur^X+t05b z?jLp!Z+)|T?AwkLkReyFGgZ?l!q4~jF^;No!U-8(UY@?+-YZ-znxY^%JzWgPyz5g_ zuU2I+Ar)01(Dvio<5PQfb!{5Vl0nrG6`@f;fLxX3Ih|1!CQ>A4&8|Hh;*`K5nX0TX zM-_0Y%cWn|Jnn}n*pD$qmT5{St8gG1bGnb?$L?uLnW~1Jr>b%5^>Ve@9(Uh;`}OPd zt6#i0gFMQVavZmZr`z_Z3QaICo0A3+m{}nXec#8#5{hcbJPw_t1F<7l+E9}z3Ef}q zI;e;UKx9NIr%AQl?|$mL{d#@flqX;-Lv9$3ZTIt(594@j<00}O5J6dy`?$?GO3Dwr zeB7nuAre>v&L9w}Q}xDgmZz^i`Eq^vi$SWteEVKg7S36@3Z-QJ;_~v%)s>Fj<@KpG z!CNywpo23$xMM$BghlC_;61rbRn~;YC^+cvpB~=dw(o8h!J`tXmLY7`YdZ9r2jcFe z3gSc=1e8!!5~@}U_}7PT>VL=xp_t$D^%JEN?M3Zeoa04e9l3;;?wl%cG=Bj6}JuqM?cx-8wYa>1HvQ@ z@Av&aX{rr)1!Ie*$y3~R)0EU(y{O8vsm8KG9)>A63Z@9fa#1U>vTznq00tkj6GbHw-+Id%cw8DJQvI1!=q!IJ?flGuLgr)ak~yUBIj=( zhHmxp>gp3rY1a>L-@P6B@so?oFJE05gOB@O(80om&GPAK|Jkdn%BFw*_S^6O(w$wu zTCFM+TGpq(`J2V@xWBo%|G)qA!BVJ;y0nG}GD~pbpMLjM(k@9h&Jx1I;pw}($7DRY z5OaRmw-<}ciuklH$EknpbIP%)s#S#|@$S&Rb0L3v`tlcVmW$fWz9bJk?Wcau{yx$#`tK}z)=HY4kL!1Iq@V<5?u-yFVPsjHU zum1LTg*QW+_g(tLQY8tfDp-A(JUE^p`5cK zAv}Y-jSwVNMg@4j^ky|46-XHkA#h5Xt+fP(CA0FZHbezgMj!!E5JWYA0w633s5%of z=LtFsGb+o8y*G-?*(y{>-Wd^S2YoyoAKK%(S$z4MFNgbw?!!H|(->QW zf}T_mKrVmzscq`p@7~3I*YAdjg&VsQ8BAd7;HMlt~N_+!rT1FDqXH>;vB#(>Gp2{;RK z%9*pO%yLU+>Bgvvh4%#W5e=$U!>stf{Ez=Vs3w+B`Nc(z6{xbR1wv!=HcZ^?%^tW)3j4=HMa4h-^2>su%1w(~nRk}dHER*n<-Q13o z7++ia+1aV2@!OjZ6FLO9smeF&^6>LFHqq6WfAi<}H-Gs4W*6C(?(}@ISQG}t7_6$w zT2F+Wk^ntCJ>9>*{V)INKZm}*d4GR;e!gCp2=OrXKiuuEF0LDg-+uq+Uci*4v!<}v z?(bPfATZV=5Mk+xg+UL9&Y0O!j^xlFbDqX-9PV@48zO6(sy=b19;b0iyK&l$X=G)= ziJ+gjJsxg{)ThkH?y%o?U9a6Bc@m3$-Zpv@0-;BHasJ8r{PRSMl=Sjs^TpL=>1-WB zVJY*d`2P|09y_vaNt&LSEwPnr_t0_lxjIF4HM_c+4e&)cB>LU>3LKIkSlv}X6|+*^ z%zJd`@Nm855@sCili)mJ5D2)hwaoti`&0}nLLWF0jDSFGbRQq?JJF*oKN=P6+xK@j zNjAQmFERxfqo8a)fBF1Bey8e=1dxHO?%FOJOb2IYI-%vwhi<)AB%|YDI!hcl5YQ^| z!by?E;M;nSh`ZYVdFg0+@$LDP8)n>K& zUw-xanGuK`vqUd3a0CeYU+c~Rn>SrMTm#p`r_qtF!t`tXK;>?f^*=ygklJx^^O3o(WsOna%~;GmnZ_L zloAjG(I6!3IRFC2;9V3%rEO1y0u+ux6Io+J3@!wv6^Zl-TLwWyj!b}>hEQI@ z;&?Vy$clhKT#(Ae)_J9n5Dbwb)pFc6&9-hsl+4=kAWxK9@Aj*zR4N%4MUmJp#t?$y zh^-5^YuuH+c`_Yj`KSm!HrqP14h#=xd6ui*$lSA?1(mV{Mx!!-1d1Gr2UT~maWN8I_85&4(8{R9)^+C(&7??*3?@aM*o+yPx~vW@p;20~LyE)kw8X?)vfo{u2RgRm^2y< zNv0K{>q1p^fl+BRi6LW1DME;mJxddUXbmaikB5Z>2Y^623iucpP$g-I(GccZ8w5ac9J?;K7#T@KEOBZm2516A5k;IRp(xxs zw<)n>{N4ZYzaOfH+u!|;OU`G-^t_15`3RzP5dQP+E*!l&dU?5gxc>Oz%eT*8{pQ;@ zhq@7oUAqG(=^Jz-5*=!!Sho^(jhvU(3NXQ7$DzFH^p1vy2 z$Y|Ja_Osz6)!0;J$D#3D1>!8zX=;q=!Skx$W`h6;kyZeRvfl1flfOAXNhB(z1laqw z_0EMp#bK<{X_juv!*aXRHklN|NtULXR=d?xS?Y8!%LhYidK`Qk_-TJIi5XgBl&-7# zX|*p~b^(>LigffoNtCtN)TQrsBiYW#8EpswP`Tjl4)s-QMz6kKoF5-{yJlCPO{Rm? z>^q;NxwZJPdOCD*HW;6bhdPGDSc*YV(7TH*F+(DYfC^D*0-%T>0NyoC zdGEuX2o&1HjEiD{L{+(MyM68UZKxwTtwLt?ILr2{oAvs7xm(@t509I=sab+SP*x`d zN}^b0Q!?mdGr? zn9y)BFaw3D7KkDqQ8);wYM%XMq_bBs8+zaE%Kdh~ zuMVyEGR*T3T%QRVr24lfqZiU?*D`aA(s|zpZka*kE0b7hBS1abICzgJ9GPPvWd$gT z1f;LOB zDx+-Uxs7?rtG938yp+fw(s;kz?>Dt?0(jvN8AVc~2dNrlmXJ#4c1`G9P#9CA zv&34h8W*;;Bhtsy(bxisxT-z;a;3L5iloD0a(1i>TOR7&&7&`?;Upc+6H!qFL<0Z; zV=)@q@eq{iozG}2X|0JQhV5p(TW_1zm#iyFy{2N4FOH_V7lZcL5e6iYuhnPz`1yL0 zCjaomcPjcQ(XkwwuIl{0?VLyy0>Vt=FfqB&8maMNQ$tTHRe0i~8 zf#51@o6uC=w@t^TQ~OYa=1>c#!FLLi2%+&@I#&mOh_I9F{M#R=NAt(!Jv#a6+4Dg{t!wW# zhnwBjq*;uTC&@UqIUyhc2h@nDVhD@z(SP|d`=@{Um%C4&Hz&`ACr8;(r>V&XN6$tG z5Se2it&E^Z03>FaaiRJ2aQE``6hqVaT5Eban}EWH?RLkoEt^GFoD60orCJ{x!${+H zd-(l_4^MSBK0cn$r&a+olRzZ(w6E5iUE8*nC|8slt(o4O%wC>MUA>=~@#ON5`{bwY%EwH-Ui#LJU5HJfG(2T!BVXs7R0*i2+e!^tEdbb^RE*GIo$A zM>ZK*lg1Fr@~L%u7rJe;iqNLkYRWE8&kg!dfBBbpU#|8JmWQ@%07NT6Ls|x!Bw8rz(u`wx8>}#BbRYv3eZY?H-15K0S`E)YM z2gk$1m-XSH+6Kixo}FFHk5<+GVY}LH?e^#QVS7kXxe(LIaQf`LjqUd4j+($u$l~~H zXeX9Iy2hc3NDvt~1__7tmk)MyWJi-?co_#WAU|{UKmR}f{pXuaveT1hkj_Jrt0K(` zo5+#G-rf@d0Auth+yr(86>=12VFY285Cfv>Q@4UhO2^1RKtv>3gn=Uw_B|aDMF4;( zKoTNw_?jDH0a3=Fun&$E8=WQja2$Q}boC*T;Py2KmrbVu5I}5VeGRT|39K<0doR%w zh;M3$+)D=y5+brN!&fV8jM9H&BQZw~K?p&MLPSCVKwv?lo?zj9B#eXvV3<7u#MmEe z(A(|4T7p4|kcdPV1X*HewtIs}C}a=<5K)g8p}r+d!W=>js5A)*Fvkce93Awi=U!xt z7(o~iNEii(5ePu~)gV$tVjvwDNf0nZQ3{EHg+wDr{AycfjzpSBkv5*C@f-yi6kBuX zy1MOBO$ee$vdo~O#`)I8$U=x&LZd9ntTm)kg-z9XB4(u&UCu|E;nU*=1cd!0RmVk& z5^0d#ZnsZQTPq}ieba&w5|12EVsJ4!CKEuh5`(>S(0A>wcP6qh=hKPggAlYPRU{cE zRcM;JscY@?d_2yLCH5@71Lu7I$X7~frLsIRiM}{L-8??rEFWH-9BbAP!zjl=o=szL zE(Bo$v6}M4=GI!B9BQ|%$||-gs#!6*n2rx^eB3R&;D+OLoI#-g)AZ zZrAH1Gs!F~MuV`@q3Wtlnawhz6=^0yA6VGMX6M@-fkvg1;XnY_C3LsPflnTSwR|IxCk%_pOai_7hD`QQKW`yXDtI-QLzb$OCZ2SwjU zX8>z-zcJ~1Q!&P;eU&9N9}dpPgB0P3Sph$rjGj$Lg)vH0)G9oGflbh7KfI(YVZxaY z0ANsSZLGlrW4GD0+j_h>PNv2Fr|-*%qLO)WI!Scxy4&r(5=CUD!@)SU973uSox^5d z?{2qHqL36cE>x+8RPy48}?k zGeiO8pb(BGM+zW%=Kx750l8a0d4xHno!kjX5a>gHdsRe-CZ=_3KwDM%NrP;dGERW!<`NoaUF4(Lk#hU5sG0 zZ99K||1c;f$44WsRws?0w(aB3e|q?kxzQ+{jMM2T$y1wXCE|Q=ZBrh0KFF)ruNZi- zSbTne`-hL8etLCkLU%HlfqTphaf1h+VB7E=MQQ$e*NtQNnq~+ zXlB`M58L&QfX^nw#ra~Kr$#Fj)`UPRMjs<*x3TS^!gFYXBs&)=GoXk<$>UfoyQ?O0(DR3-&Xz!bxi;~;AL;bR0h9FMZ;AYu^bnHxk@qDYX^6tywh3U z7(o(+93l%SlZ5E|*=Rqxg|8+B03;49!Xnrwbpe4i5g{rSLqq_HResFY4L z%3)`;wbN5I7&-5nsx(SLnlX_=0`G;rR;ZN@o&$Z|m^*cnEEm z8f%m)vQ(22hPHE?eP!}&ezX`Lo&IulQy!XcUOdl}Bu4}x?48dNkXR8#h#-iBS#FL- zgJV5Do=poPg}^>et1>i|L_qIlhwyA|1lUV`istr_S>%vVP_t~_Vo=oR6 zotmm{R-1KOdliw82buLUw$S&=tdUJRTRrLK`4d1ZWj*59RW1{hxpQ^*E)rZc?L( zm=Qj&*N>HZb#^(^xGl?d*Oe_Fk0+xV??+}JnLgCzuIVbF zF3Vw*dj&*7;&O$P%v`Sz=J@UDtLMUX+t$}#9)EoC!?zbFC}r@jAEB)3!|ke^PmWFp z`S$v%FvC#Te|i7&U~xQ~&!g`|SS!6flsC7J2GqBg=O@#l#F*&Z=qManWZzaD8>3BT zl_f+ax2x6Nwx*<*4~uDPp4NAVb{9h9qw4|m3}j8NR52RPjkfSr04f}UaMiR=ovW-) zvTS0L8KI8BH|?Qrw}*C9*4xfkq(Ld@Tq7(&y8Z6yX}w*oH=P6T0U{BhLZiuO#0-;@ z#p$zGKb~B^&GJ#zG{3z6_?uU6U!5LRhb;*Zp$B~0A6AvGV*sSw+F_PvMrn}7bx-^4 zzUw*`tqpk4fLW1<){XbU$1F_}5ry2WSDQcnd9v+{=wdP&9#7d)HOqmIvNf8 zooW;gK@fH1&Ib2N#iLMy>m-8n&UGOGkTNKdBLivyLR8Gmh(rVekpl>03^B3*MIqnE zvJsRq%2*ei^PNf4wsizbYsDP0d`O8YS2t9xly6a``TQav67v4(p(_uGu{KGA>+1cM zz1LdjMIItcj4_1xH5b-Pk06GCh^Ul8CBetw2?4Z0E=hh7g&*`jGkzEfI-C1kr>FfkguM#4zZaE)h@^Set8`wXSYE z&q7|r6}g-~t5H4Ptrp|akFU-L31Ac?1$}_~Zz75Q27^jVPp#W+`5)_dTfW67md{pR6l#cY35yHTXMrV_G z+l5%wD9(ZUxB&1#55MPamY=@9oQ%h=^^bSUwk*%*)7O{B<02=ewIYk^@U%H>4m2np z%kpu5NG21Tna#spVUic87e~`cky;T!h#|(u$Bof?HX9iYK#Bo?MU(DZTOeM5IXbO+ z4ja`je0f^e!4I-@oErbQZhpBA>%C&uDp6W7$E?Vc$*}dVT5qjZCNnyLWNN_#b`g|e zMdDf|QZxRtZQ9A=;>D|CFnV0>9_}8F2FZ^vE{+#-04nPy%T127{CvB#`}mS2j;_b92~-=xX13Fp0)P zy=^;;EM?%xd^8wL6KzD4(nXpzb^B>kc3uuuTMR5JC2Rq;V@Q-CrGz7JAmna)TQ0BC z>Cxcif|1p>i%Ag?lU!%ROr@D}U%Lt+#2}Db1Yfng2b>;<7(PAR zEnW0rswSL|i|t{3yWFW{I7#zo)3HkJs_D5V1R z9~kn8H@B;oN2k*~`~2Zk-SMke=N1Ej42`apCy?v)W_c(Z!PF#))kSLFe)rsxZPv@? zai_&ZogKY?HEehG!^cG%O+m$p@)#5WfU;y2>6zucy=c4Q3DJWtLi!^vQ9XuEB9SZ&Hmaqx#W)F_nLkx6n8hz!Q$ z##pU12(U;Dt#g%gJK@%tWIBFk>`h-v2V`Lhk16t*&X&>U^qTLI?Yoh@u1>+VkME# zW`oJ-=rUMv^~`d2m%~JD4!l(U|}zjMcZsTr!>=KBzhy5r`gSF z|9Q{m^zw(ZlW~@6#MXtUUG2N*obxd%03a+6p;~X;KV;EWpr{ zHNGBQy-NU4h%g305RDi(Dy3Pl3(TZUJ_KbbpoC5UNTGLLN3W$d8R@~uI}g%@vejfX z8V7&~UDw9WX;7dz_IlkONsWR;iWCSEf%hJIw|(q+56lA6V>l2d__s(_} zCPD;c6jBNl0kZ(`*Yq+)5oCnki~s;ifkXjh?h}flv?Wo(nlywMB1a@cA_`R`VL$*C z2_g&h2X-$&#-80wK6pSP)QCzE#y;{apoEkXz^`#P5$JDKBt%3}VlQp(U+U7sQA9X$ zWB>rI^`Y_0>xb#Z<c*Y zQA>EZgJz1u(+F)9Q?0Me$I%~YbR%^_|( zqd^(S#;H#GX*+C}Pl(Zw@~A&F}z{zadoh-IrZmRpW)ImJQ5L7W3 zo?eF4DruRR%Uvn#CNdZvWo(cLC3x1VW%FlmO7KrjSfw_Ve;(`nvy(sgbyOce?$ias=5J1BBs_8ipz_TT>3@1DOH zr`mVju4!(zn=iZasdaUTt#d{xg1D{@rH9<+uNRZ^VU{S`)phNHCiQGGnH!raV{NK5 z9_nhjEuBY1g@W5%*)*O}c?l@2sF!*5?L4-_5v>FUkW#ZlD@%`=H zhr6f8GV*9qkzQ_h_p8m-=pQ{wV8%Mx~3~ODM}j ztetBeTFOSLCPwK|`s`erDxFZgzFS8-PKzQ>^kArW)$0A{+q=hI-C>#ywAEQUOtc}T z&2ak5>ORg!rd`RGQxcAvRAOz@?d!I# zd@Oy8jH$H}8;Omf5PZ``kILrRIM1e9iMbP@ptgiz-ugl#Wi0 zpZ)Ob|Mc?P-=xEt2rD3w`0m|@VKO|P44P_(gb}z4u45M@Xa!d3Oq;@}S(-eXPLBrp zFiX0w+tp1M*eLz-2KhWMAOzQRMVeFezH5zE(RE#0194(hSMJ@u z>dBin(|}+!B7)XN5wdGyS4ww4Zj&OPo?YlP_pal*l&Wr)VI!a7ZwYQ#u}{lR_s1o2QjO)EA?nmf*ZsL?Ysx>lt@{LnWj1Cy;zKnTx`| z9mW_1`RiU*1PPHk*C8pJW0f&J1l2!)7<)Kx zkMHP%V}N~r6{Xh*3iJ|R01QD8h%}Ja5dnIHAfm9KhyjfR$Pk%BWI`gXNgIKl&WWgi z=xfISCHCyV9G^3O zx_emaG(S3CG_Cu5b+_6bluoiFRfKKpZf@3_eKQ;l5^MT7K9K@af+!3<$QpzrN8#v0 z`0}*cH|@z}cs9!OL=T6f;n6f1r#-zJqPWi4EFGO5nJn$PHaZtwXlfs#B!d(zDn%rq zkp%U171k;{d-HOTr~7?-eRX$nJo!&Qy_pn4K(#6Bcgx+jZN^2BDoRI#$?2(1tWcbe zN5}K2Z<~kvB`7;PK4Qg>yYm*?YO(Y!9JBp~gukTmugSBQ*W#$b||lQJW&f$bKIL{`}Os`J0Q^FBHYw+lSru@a*LD<>|>}kcZfP zyt`d>GRr5a=d;B`8A0|@x{tS4A0NtOd_EZuvrH6{=eBN|^3Zmji$cIe6cr*VtrVtN zvR>`R$?QLT_XcCd5lL-mm`4uYPqr%)7Sf z*{_|%I>ZnFBqkLxLI^|#b*fFSDM2JeQG`Bp(KiyE zQrNbY4{c(LG#e>91kfTZ+=kHj&{XZFYM#pKX*K@rzyA8yi$Q9QHrgOigxG|( z3q5Io5^GYOq*_bpTvx64>qFPENS>sV;k1dm(K;XJS)!D%cYc4^m4^}#DRj_A6+j8+ zd8TdFHQmGepPS`_VhXX#C#IMbN@=52j2uG*jEKS_WYYQh>&El`{zhDhBDLp_yJm&? z@vGO<*;E+sA6H*KUswkTeYt;m zKL6>>W$=8rsg$*~@1Dw<6nt|uy&Me)fQ4KLir8wcNO!e+TrL0o<0o&^lz>DQ5g_!@d*SH(#mUjLv5iNDK08Hkyv7 zZ71*k^2?7e7k~HW4F_3O)yJoG8NmsN$fB@6U7T_ox2<8c=A51y6z9x z_j)imJwLWqm36gVZCvMUl9MQHRGL^sG^rkrM_t{l?jC>p?Ke5Z(I7QxdZ^n!-z?YO zjq>cB`ssAAb6&$n59G<=#0T{HmkWq!)|Ph=4<67DR1GfAj2{L3;b|fB5tJ z_sQt=*KyyN#6 zq_wFU%m+{qfM_8Ch^$773o{(-HxItvolg>g_D}ErwcNkFcy>7&Bu7Pda(onmtDDvZ z7C}NyN~P8qtwRVB0%~7<~+NU2j;twd3*hGD#+i3?n<&`cQG$g|PLZ z_T8pw)^)pE?;gvlb5W|Mi$Q_UBz7D;G9ePOAmYGena-@TuU@|V{+l0%quK7z)vL## zRO2}t4yWUSV|z9&u&TPcEKW}}k%)wV97T&A6sAa1A9=g0n*AQJ9H7hC549u3K6cLU z;(A$Cp~Jk~o~YquFv!!y3};89*|ck#uIr*mj4`q=1(8{d8vo|o!oL&|_Q6`6Cf3L3 zx=`3`k|#-`5IBUuOb&FrUCDe#GHPA7T<&C2eE;l)PLu8KaPzR*Z?|ubC%^vo#cVXL znvMmG=+L@P|NaNJZD0T0PcNRmimQj<9U+KBrIEz27x6vm8IVCxq6jI~2B20TkHKey)y)OpIR#yM5A200D_4e8qDhlOiPuz)^&|#v>qU#mo#S!heIdffwmtv>*`y zi4ai<3XuZD5Ls9RK`9gJDcRi&mV6d>S}g8d-3ADs_ON=T)y8YsK&);Ff7*fHUJRr%AO7$$8;=%8liB@H;(fRp>vV@fMi3K7; zLGQiuJQxm|y8Y$q^MC#Aj|w1oxZfW3uC+F)I{*G|{q5O_t^*AWk%&YL@DB z=F|C$BpEZab9D%Z$aT}L5Z!E)HI-Z4zHiEM)427zEcbyZ6G%fB5g1WvAtf3R6^SOB z>f&fJd;RvO@4o+!)A8J5{Pu-Xz&^Njx!+cf31~1no-W>=y>Sg!Weh$>fe?If-e}!e z-bjrcq}yjy-~7gCqWkrF zSshU70_wm2yKi2c9BGD!_3F!VGn>v&MgtaShlXR@gdN5V6V*6SkvMp*NO~Y8M9<

>B5RpFrL@X!>B8a3E5%hk9Ac(-$XcX$IMkSVv8H~pq!|w4Bg3E@JK7$=1D@8O}LnNg*1^^V)XoU!33|}X+Ai+6J+K>@oW(EN7 zBZ(q~gor2@`}{Uaj0j2)2$ALgBkDbpWXqB?JykvAGUMj_@p!=_D@id_mq<6(foWp_ zm;f!<2!>b(761VRC6%Z`S7k#xWE1GvzISko@JQ^#ADap z?GBX-j^oLsIGN4b&Aw?{&#);ER?tQ%oRcWYcq-$?{bBX-=FV$`d2XgjG0yWW*Qrs4 z03n8Gw9jEjX7`KFzf4sUW1krH@?@cQyLI3Dz*$kGHosmyeAw+gS%@L4+sg$q z;%G5CxMT0#B%i)m=2h1{yk84qGB%@0ZjD8PBsCnRX}ZA9nz)!wi}~!Qo7;=oEFa}Q zhHX`M(dDU)A^vcG|Mlgwub;oTs;l*}-ggclJiAyfCX?@f{`jX4cP;q*uU=1zWIP(1 zL@PoO6#)AVq6^M7eeVPX5JHgk-Ti<2*I$y4*FXJydb$|RN6)6kG)vZ1v#Xm?nzvm% zbe#|=UyC08fQ z%W>iQ_Rw@fILgwyhZTUCPG{}D42SkI$uF&G+TCG)R|<4_)~DD9M-p>Qr`qQ;`&eDC z?(p)(>uEl>y8Pk#=k;ds;%r`IMnNA%CZ(f`~`}G%Jj1sE$tKWbBaWq-JdVN6>HIWPbho_ALg~ptWreB<1oJ>>zS$E;7 zI*jt-d~q)Dw5#^Jrk;#7I7R5Kgs96BV6D0mpKh zr!UUtBJ2fX1df;*Jt-3H6*H4UU?~bS%3|I}>rj>vStTUK zK%z(?hdz4GzC9#bW5D$*@d-N~r-oCCtXC2*M#S3keXZ z-t{q((nNqV6mNxz0ThuonyBXibft!|c!-1K7ZHE}hwCgy5kNvDJ#3c6hoM`IiU0%| z6bzPT`SjT4|L=ZG2vG^>DzFYQN6j(R+igCcoh{EBx2?)%bu5o*RZJ#nkrtDYQhJ!f zGlUR52Z@14<9z$nu6BnnUtAK#KFao3`xvdFw(s6QZN7Q&;?3p7c)wpCj&+C@{Ik>L z>2$WMn(N#3ebvy}crwlBg|%s7tR<}#VTb`xaR3k%oo6pZVYl79zC4|z_IUr4WQiJO zMVh=lTb?xC{qc||qyTnh#R!Rl#OnDtSHh9QYhOpML*`fBe;Vxdlu7YBm{7#)q=~>FMd`^?H=Q zIh!t**|-Z1HHM!5>9>D)x80sz&R#E1GNVBlP`fT3%lg>#q4!3K7A6#hl%*NO*mdnM zUYo=0+l{5hu#Mgcvofm4Qvmhnr+s_ehkyRv@Bi+*Z=RnnA%?`* zMUuxDw#P00@&EW=O3q5i?Q}MpWF$T~-v?2kt+t7w)F?%w5ELRu=)G?`ht?)Z;)T8I zAbK*!nxsgqMhL-+NQ~lzgMa`wO$R|nc|wZHiQE_%P8jp>_V^iHfZqd`}Y<_vVIGv5H)}T-zO5Z$w{P3_Z^Q#xi zm=J3mwGz`k@{9|SS6 zT1D;!A~>)1o6LI*AqD_U(mZ!v)2=q`eX*G3i-J-U`@Y;AV+fwej5E=MWJH-kFBw6L zP8}k%OEhUsA%-@9&Bl|W=$(Hok3Pz?ljY@P+&5*{ca3Lb%(BSZ?Xg~$qtiu4@bI*c zpaO&djK(UZjRA$OX?HO=g{rE{jyXw3S|thoE*u4d)@TjI&_6uhfBf*_etm2_^noE_YElGnuI*c&s6-j71Qmj@>3nwa z*MIf5|M74BVUnZ|`|b5%w`cSW7WA9t$!VU7_dbLm9Fgu<`{Ta1lxD`9pHK7DFo*l6 z^>Mu$<6)}ynga=P&@f>{*0;U*)$piPpRTd(Lz73%hW+f=VC{Z{FDF6ZyZSeKIS@I2e=w(U6F+U<3>yBH$pDWrh%=*4k(tIK&tu z{AJXyhNw4nMmLkm>5Es3EEU&BAF3X19veWMO_HWLuFJY?gZB|pND5G=g(feI-mKzd)n_A#ai=pIFx<7IKBA%;zDuXx!QSW6e`p=Px}w|>!@h9 z9FIr2F-nm_(sdWAvf>ye#t@lZG#VLLkpf|@;@^Dz`PkYYfBSnQ^2Oi&hLa2=D6Mu) z^RPW+qiNIDMQRdbQe(z>nkpTN z?KyndHE?#hcy{5vzrA^wC+XjO_hpf4hyhXg2=7?29imYudK|aC3V#oB#EfpHHj`ECIM`yVb75r$7C#?eX}q?QZ&1oxWV2EwTi> z?|k2O9SsYx6A-Wi&kWP|xV)QsO z7MVFzKGcpqgEf>uG=h1NcY)VU+cV@kJD-jxR%;Off7m{)zW*^TK_Zhi)3ftzI#x#3 zx9|GZVYZm6DG)`aP=wGVx)=#a=zC?;WHe_2_I_I)S7qCxHj`;SDWY)K#lH2ztdtL3 zuP`l&NuKBIx#_)VJD%j)GK&`r`r_>MSM%A~^YLt+D8{(1o4dMh7=a-rN|j-bedvXw zLJBR%4lS6>(5Og?JPk3dR|oXvly(L7N?61rVvMo(u9%)Ko_#5)jS`SCI2U~vnkIOs z07F+vXzJd7*i`Y=Y0{1<6%FTog6p50&_^a3bt4A)PaW7QVE&ejjm zc3t2Yf?^(U?nFe21PBD91dfsPaLR&+5@96~B{DNoa01Qk|MX0nI2+2xorHu@=EL6j$Sy@GZLdfGHyL>sG&6UIuxO2Fx!qciut)7jo zNucfdxH({`6gLoK^np-mO{8&EyCd0?7tfQ-RCQbLn{VD+oler|dO}bHRp)MYRaE)w zvkM)(F_b0P`TmbT-ahQh#rbr;7#lQzfQou2yItwqF3~U^XY+BEDuoD%K~yAyD3WJ3 zPg9889Ll<^Mki;c7#XA?mGN*mZtCV@dGdTdM+q@_0^kTw+vDB+uI)vELJiBsG`CpS zhxV`=L6>1?iAfO|ErCUdG;MnR*x~HWXIWu6hWp#6gz4AceR(z;Mc0F{7hG)*K z1~`88^_$=Q_~YGv_v-EQQI{Qd~_Q#zWVI5JWZOme|&h8S z{uPD}J^?g?A|U*Pg-NuUB<3VD%OV?DV>BF^X4Uj{2$@kYXVdf1Xq2UgwtlMXDljsh zkBY15)F5`zSAE^JrQ1HK{Z_YKs2gi@J1&Hy-*4K@6LTm=iPDi!5QQXiaG~pxbTnRE zwq4zBpFZARf2evmxtL#F=`1^xeYva1$3>o>jMGV)%tw=Fr}LAX-2F}S@wz~4qklS< zK$+538HEJakj)gRxNFJ}kB=W$>zjxDrs_RN7yRMa?d!1K_gZI@QBfbNhgC@?8)Z2I zuj}f=_V8HM$38@)QJPNk%xdLBzpW0Ns@_$u$Y=G@t@iEdvuD|)cz^rx{c7_lac_hd z+4S{Q@$7tbdX~?oHY<|6NU}m%n-uwKvjxw;c=aOds`hDPb*iwP~eCZ{LGc&rgYB!DVgw`*Npx21EvO^Tve zYDxgmYOP5j1YsB1NA5e<#Tbnpjf#`mUT?lu;(pNpAD!S8spyxBuz++i%gNy$@y69KByxZS6S< zL}sNhO(<6~(KsL3k5iGRY_v{JX44|Gq#2Q$rgMFhNNZs*t^-GiA)uh3716%+ z^=@0O@4DT(Zw`@Lc6EQ;h3G!+>ObyWnJ>@YetB_unI@?*y6@fH(Ial78QwoZxX zd9qorc4a@EFO|e`kr}Js-`)K5;jyeGNwYjpP$UEgNZqk{{PTO|mC14+odk{y!vYgP zso_+P$c#g;m;s6GuI;v+pDmW?JE`{QokRg)O{ftf$Dx19@@ZK)^kV@K7zQG)8uq~~ z07QgDC{Z|i<`A8SVcW?;LLYs{J_z&t{Nn2E+hcVgiGS(g*x-RVf)C#HWVA^$@4dok zbY$*1ibUZUK_UneDk6mgv>K5#A_2$%-w=YK+{+M$q7Mvy?!P3R22AGg<}V5d=CH&V z0Zj3VU%oh-PA5ZX!3SAys{QUTO6c-Q(un z$A_*L4$RR-mZta3acBC&2&xpCPqPZdq$t#Q#Kg?OVCc$jTZe2m%Tha;jCXDI^Sh7H zQ<3LZYimrAB&o$L!TBs-@2a0~A6~zGk>{3uFxqa{hr8>?%h~9^`S!C{XXk|2_uj`? ztsnMx*YoqGnT%K>Ag;>l$JKh%c3ogS1PHC#*5$*o+;*+wIM0i5YC~}Qsyeh??c&3( zdRQNqv+33OOsnXf^qq%how)k~j~aU=Vb~L^Bt3clrZ~BzVgiaXl4`r&96L#hQJ$PE zr+xH4-9CK0d)gg3=Y<8;fB7H&J0VauF&w8lRENzEAFiJcZIX?wNhC6oGTIt#j3Po5 zh8S5uw8rcEjX-j;m>@d=o!D%g{|Y&t1y z0xav}@#e4>fO(R?m`|6JY+sj8<#mW3o)*pYqPDH&qU%onBoXw|<;qh2E9>;l} zDKO#;hV%2&^UHaR<=x%&&Eu|TrN}505VAI(&8EwfBFhm>2-tVA**Ck@akFd7WAIPg z<7~QgeOuSvVsU0P?#u1t@n8}=8y5`R_|UqT*;ES_iJ9g}k(dM}x2o^zG)ubZfBXF( zKQzI-e17u9tLeqbcs5aKrnME+osU)RHoN9&bvzvE?f%dnnqR#A>}-_WeE)B|pKs1D zUSOU9!zj&WxecLjB6dDngk_eTjgqrsl#%fvY_{$FU2}VXJRChJQxtksm>~V8Tz6d6 z?pQT-WR<4l$@tW!qsSNoYefnoNQ@jh-}QYPe6N+t()nb3o{dfsP2ZM>!_EEr`}@rg z`}(f!H~V^hzgj&!tk>(hsnG@PBl{Rwgc+D=sHSQlgQQ6tl`fVSUw!?nFTed8%BQ94 z150M~#8RfjTFofE^FBrm^x5*{<*1lwJx-F`*bKGz{#bTV^ln#GbzkI3l9;CL_xsv) zE>WIfV3nc_H5U${*>&Y(TRv&6C+E+K^H(Yv1=m(x_rt1Psqy^fXXjUEd7g2^-JyQ> z{^9!O9-TX#k6)ZFe)aa{+so5eC(Enl=K7b{O8|tSZAugB{TqXL6A9y=!K*HOFx)UX{9(u=!FUtCc2@7>A-T0~6tZ_t1$Qot>-E)C*xcvR-3d)icyj%2prvXobC_hPxp^!udlKq zjT}+ws`GabYwr6mo-e)d7`Fo*y~QBW-B*~MAR#sLh7Lg38WK7>Qx@7wOs zwrOG}X_}d&525zHY+6!klIPGG`CItndj(^-MO-aS4%uJ>J}RFnk) zB1}x0nS4AdMx%5(&gYZq@@z4kPo~pR)o!nE9M@*KT2dOj*nMx(J+O?51L z?}V(PajHo`p-Hu!Bt|35rjw>`|M!3WuPvG9Z(c4=rpBm5D-meBezUD^pEgfVoBetX z-lZCH10yA`FHTP;6XuXjM&pY!vzV|V00I!DNRc{JRpa=4zMNZY1cljm{fGPA!@8~e zfw3zg_$*61U*0@?sJerXebaS-RE+0&zEGG73t|NHC; zD$yMe*JXWO_jjA)k5%_j_uYEeJgut3A%vir6-OK(N9GPLg z{^Q^Or(b^i%fy&t-9!NtyqwQo&u8=08jyW?tOGYLq=c7~krs9#Miyq2K`e79%f<^s zVo8B|eA@4h9i!?3GC*b}Rl+eKDs56@6Cm=Dlkt4{@;gi>$IbfqbhFy-fA?6+^4aq* zJ|B%ngtXZl{`BW}`|W0)(s!>e-@LeF!0~97nIyC!3KmIrb-LKB9^PL+fGsF73Sm~{ zvy(z7+^;tu9#`-0H-{#6eb|?W{A^)o)7Cl9(nV}NbPjh_f2g}6FS`Bu?vLMVqRGYO zL)rekT_1z=KE@~~^F^%oTpkn%0x}0e)-SNNT9A zl2SNWxu_g!Caw#eL6ZQC@ytJyi>ILw3*F!)HIh!V#Ps6ZqJ z&m8n{04rn=;elL*go-08A_QV)8gSLZe>r>+i3X;YfDkION@;~i(T5O%2#``B^2t1e zF#Ihdq}3-}w7|fK7DXU{NCMag?|lHl$V|wI)!ORd+`!n97?ssZn-G}+wY9>5Aeuq- z3qXjPKx-7lz$}81IdT{}!iENw6Dy@*pkOfz5GW-8LLkPvY+5>fd%NEs+bmBs#?ZUo zv+upDw%ToMs5LkNiE;RE8qa6>a<0-8Q2=6fsM{{8)GDKjQRZU2eb^qm7{sDU2o(Yv ztw!VA1^MH<_jX#0=F=DvNtMUu>3(xD8~yU_)%j$EKrDiTE_9mNLMQWFWf>r96hhjR z<+cs`w(q@96Em_J#aB&J2Hv-Il9+iunk4D8$kN0{4y)~^Jl2W~Fpnlhl4e!a=-AJw zHQb`G0yR*-nZ^62-EE@_+U7PNk7x5~rsMW;efRjds&>cDB+1G7(iZmU>c`#YX1#uQ zcYnR!e0+KeM$WGm2^m94(}#!KyT5w-;)|EhC3pZtg&{&0`Pj$%UH$RU-j>b%vD&n4 z-G|6ZNVR?2$56Yz^8rXRQxI_>Mv&Hrs&|{JExXu7=t8Kg&h2LL@cuwVDG+4WSKf6Ty-AWZ%QA9H?Wj4_+ue4x-5+`Zy85WXNbm0l0O(EW7GhhZsO5fOL7fm`@V#8WaQ-H{0#ab@}YJtJy;=;O(YFJHcS z_2J!nU%S8i_N(RCu6OH?+fvL(DQtY#1t_fj`tsDWUmp%-AA9G|W|Px|_Se_qP)+kc ztRJp-QFLyt8BfPqURXn)FJB10skLIhe%WKCXZJ`yXbP7iX6z5C=FSHf8s;-gmvz9A~5S+1YYhI6VxUK(4?(41Rf-aL?5E}9g--e(sWuBCrL79iEaDz@czFFAM6Nb zh=l+EAOJ~3K~&s4?H}$pPlw7?HPlUXJ~9Y_LJ$6B2#7!#rK~25F;V*R{KcEk zzIpxT%je58L->C6xN19~B+>Tyd~#wnv%lLP@2a+AAb>X~^NS)U2^b|HMAZAL-ZfRz zxN6g5Oa=-+854w+A`nJ)6YB~r!R=G6wNfOXe#X)CL~MRIthKKXwg1<3J9_!qi|3bv zGxhrB@oDvVaWebv)yuPS=6(3#VYPGdWWJDn7i#~_*DsCg0Hq84_dmY-;cjOqv&*yd z`6vU$AdG-@+if$J*kTG%`b0!>x@^*7(WIUOG!-(`8>RsQ?C z+g;!wC=d|T>(lc^y=ngRujtwkB0HxEwW7`kAJ7<$%u%EZ92u3ipa_8wh)6~D0Afv| zlw$m(5FX5VzHgmt6)FJn-lGVFK%~;qR2k#DhB@}Z39v$t7!e@EK!gB31`i=}h{1b8 z0$}z--BXAN2?!wu4=kiKh=kykB0vlws81#y8AL=ZjDjq}925}>XrqWeX^cc5f_xg- zBPhfed6*2x7>S5bc z^4gfI(`k{a{h_*99b@ZkU#3!P@fr{bJOl*NsFGqdK0mj`h}pTe+^)-??spaG*D(k2F`&Z}lZ(m(mJv=>-fP{@lY9iKs z*Y+K0%8kl3YOPj>@_t`-0w8j=n7lrj#~2qP2P)7a1o5|I)VtCdK!qr#>|L_h^-Qk9GpQoDOP9Cmk`a?@eSNziFF zO3yErr>CzWbU&z)xgS-0aJ{{ch_*8-ip0B)9@j zN##Z>z<^TsE(&YJNuC!b2~pbMyU3(zVoYH)3da}%b6vSm@#%a%8yATo=emcdjqMLh z-5GSk48aRB1I{n5MrY5!sx>9}dlrN9U95^_#0_=cgn}*N6T4 zo5!DOHGlK%@?@^iN0u(cwyam%UG$t;nkC6RA18?WwtKj{2fmt4GY$;~oKI(D%=PsT ze}4bN%ZoQ}U!9*%Y?e^7X+C^d=h@`V>p74orDsW@BDKC2c8C;3i0q&(s=PZKyT{Va zCzI2WZR+E(+HKehVs6Yl%M+8Oi)R<(dHekS<3Im>!A?(Z-|KUGe6{i^6CUVtu$EMwZhy+Cj6(xx_z@2l8vy1bK32=CEb$NYz_kaEV z-@bnH<;!KExrxCOAOnum{KX0V^tfTyiHt!}-?=DQq~_u2@t=PG!}8hdi}OYBty0Pd z`FMTPmDR<3@ztvr%W*PF6JIvXLrHTZV_o^S^TF68Ra&Dc@gcN#`$LC`QD%{5SJONZ zUnKf+X4Z%1Zrg6t5tsGDhr8M0j3}@;Wms!;p{u$wa2HXSQK<~cxDX)S`!iT`Qq$X-~Q^GFMd%J6Q$5XXgaQYheRW5E@tD2Q5c;tAKJ#pIM(+0Vmbgr zLA<^%5(!Q~Md2W@Dfh?TPm1FCbhb_Qw|6^+LfZrchIR`_K$RaQIe4vUqP)vOeVRpK zhlJIB#W5tQaX>#E`qAspE}lOJ4#%eXaQ%=g^AErH1uAL+?K?V@^<#PTN}oWO&$F0o z(oqCM7mT*Q`S!cZlgB@Oxc>3`e>d6u? zWi)_*NQmCrL@V946%HwE`EgBoW3B8fIuq30+9AtHHi6%inVbRvNTm5FGAkIZ5aQ8*5g#7_d?hzb>mD8>MY27r}*IyO}wG$I3r7=>h0*AY0? zNN9w#Fjubk%m^|b|k>4h$+keQ764 zYi{TJ_QEr_Q=$LzE z7DJF~SQN=}JZ8pKSvwCgdPVYlI$n;(n?wC!+ecs}a5bA;6e;^&1X=JAj`vl$-yDMP zF3;yyTkkk}>@gyEA`m4MNTcqnCWbp9i==(u$Jp7-m}KMw-fXIyUCqV#`NeEHAE!wI zK!H)O?r*OfoPYM+Vm9T_29W)sdRT2y)YWqN{N-X^WRooO)%N=T{(mMRwe#tR+mD^U zm`^jKVsJiD$(xtwPn*@v)1N**y}w#sUR|7wvvf3H&ZkqGStW$pB9QlO=xQH=pfOoO z94zTwSAEJK6`bsm=SjzJTr`K`gXYtF>-XBmv`?Ti}8X^^}l@o=jr*y`Q^N? zTWzWByFdQn-K?1W=DTmtrnwe~9NF~`fBb&){q^aquU`JcuaIPOJk)GPMR7hZ3Z&eo zg)NU&RimwY#{e&;iH$VXtFoM<=JzEiaAJ#m}tQ`GG>_<^L&&MGW&?&n8CY? z(d2wGO*M&k1PTEZ!TQ)f9=n%U=X0xK-<~a}qdeIi`>G0khr$vBV&q&&mZ)?xsr!Dt z<_`0m`jLu+5sZ!?UDQACJ2yIc^ZXScZ;$2AKfZf?dHL%vKg$&T;r8ya@ssHy#t^hF zj5*D-lhhJKkv=jj1&Yx3ZZVqv<9DNf`{#f8>CZo`?$^81rJ0Pz)5&B~Bt~01&eAbV z`?fjwzV#sW+y_Sf6sL-UEI>j;!2__U;q(=VQGg>UrL-nQW{;?b z0S;;Hf>+uYr9+HB3R#FgU10@L0xJYTVZsAW>LI z#UKc%kOUzhg3>4q0L(a`qAAI;*-4U2FYNe)L$X~z?W+U1)3b}q^HXD#)tN>NE>v~b zS00t!9V-`Nk|b?Y@5{3F4D3@K#-rtAf|#UCy7fF+O!C~guI+n2GTEDp^ToITcG0^- zc|3M4Xk9tKT`UQ8F`r$|#>BC1x?NrOO*KJyGo6J_LhOy^c6%rvk0wb~miEGRwT~_c zAyZ5C_DnJB~ z5dHtl(|asQmL+L=s(RRE#+`c*kBB6dS=kiTJu}jSkrBZH8;IZu@Mw4k2(ZL{Ff-ka z?kIJhRrNn3@m{GK|Ay(K*r@QR$P}Wcm2`_QNl)E}v-<1;8o9rw^Ff0#9u|A!26A)DE!$Ln0@7t_)D{Nv^8Uyr}MOps2hL7u`>?Gg2^ zi#y*Ntx(c9w=<_zOhlO(UW6#i`PN6s3Yttx6xr;W;C1D)V?`D?0ZR%)1t{&OcfY`! zH)ZK!jN{=XH}3uWyZ`dr)#>c?VmdyaR+)|lWjYu}P9n*tNE%#j{_x9(4&C#U)4pi| zxoP~{x4%rw(SP`>?=lRb4;~l+oyNiOz(1>sS;hp8?5MD-O?|UYjgK!UgG!r=$+V9T zPfh0q?l-&4no29*^-&};bsnqXadmOob~_28wMi)@#vqtL3xYyWN(-Pv<&3e4ntE3^ zJC0r{8V<+9>ZmAYh(siHd%v&mwBt6mKmYcZ4{?bNlj&4JkK#jVgNK?^1X|V2 zrt3XIG!k|3?B#1BXuAHFU*11EKKlD#|4PMPQo5K;dRXkcZ6YZ|l`{v$b}W6$@vhv*>j0EJE7tmZ@)JTXX0*QM2u?zIdgT zIzOMj{pHiY{Gk5*Uwk(#obNl|cLeHUI!k`q9 zVupx-haeOZASmaQa#~5~Tjr=p3n$^I6djHzrH!z#j{rbQK@2HHA>_yci~=boMRdSa zb!{yv0Viz~012~FBw8av?7QTn)+o#g0FW3Ife1qi2_(f3Bncq_0uU;rQe;*@E|VAm znT3V^ym&QABrzw_8Wl)P2iO$@!ok6W$cGR$99~F}1NM=Llp-d8&j&a#5dcCGLDbnG zYrDWGLIf;{MFT{MNkl0_hhVk>VCE2!DM|uir-+0Qgaw1J;6Xb9h^PsOFbNO}A|$}b zND2Uu%E9|>bMyB4Xi%Jv^3%bP03O!cd5R~Kv2$g=kGGHO&9?OsP-&LFY4&AqhDBCQ zO0DGKex*V`#Wn-)+ZY>W)S>kco59hGmzmQx#QoyPmdP)(;x4CyL(#MK?!-L$)Zz2qK(dT zO%e)Cr&X1bBp}kp=2cz{L{w~=@e!U}z8F`<&}vPR1Y%4f#HQ=F>s{OUm@q`p8U~d% z#JlZYQa_+rXg1pFvH(R@RZe^w#yVN^vPN^$aIxCV{DX^Tle+l zdF%ry+O>TjqIH%JX#>V08(&S2Gety)I3gf`GW}PX?V0-vtX9@p z0E|jGqC>eL*K+wnxyo_ircYq>aH><(K!YAzMXkdG2S{lOfT$D>rh{^N#_U#)PakgY zLT+BYcu|!jNoiNt^W{b{y_pTGa)STI|NXz8eeo+!+sFIs+lTphbn^Af7srEKiL`z9 z%hRF*eRX_tY|CYgoA(WfX#icAQxY1+DO`;df5g!lFSFW-Fet7o&_#~(iZ^Y^D$ z-yVJYWt0v9NZXBX@78T3H!Sqfh>FQ7tw0dfu8B{}wrNv{3@MR;<7rjost>%J?=i5T-s_>R!5UznVHNQ1t83=?{;nT zySML7Uc9(GKZY2h^xyyfhttW)zx(w!PBiyI5`sV)A{d^u13FssUpplWIaAIL15MU-q zh)OFWNCarJEYF7*$8Y}OH~;bK;*>)xF#zeri4a565GY&bfXpIMgyeu0JXn7IT&p?c zQV~GWe7k$U+Em3TLp2>1860dCfC5nx0Q9?_qndB)r%kI=HYm;M$@JZ)+h6YP8Df^F z1dtEMv*T%&IcuB&^gh13{0in^Ia{z+jqhUOo~3sN$5{iu4-NZ1S7Ny@6)@Q! zR-Hb%dhz1+T43I#8$QWgblytjY?0SWQz^Ii{T3DDP9xT%mkdYH>r4$hZLt@|e z;H=AXiHT$UtW_j}KZn%;#aI(l08U0};RHZ2aS|c*xveAsEI^8UNP&@vNEiu35CxTD zt?;1RwKmU(qo>DZiVRvM2ISzh3LN(V1dW!IDKsR^+si(pHb6{tV5}ziY18iqlV?{ity0YKVY!Hn|L*Gb z>t`3FIB~>?h|tFP{^{v)yT3X;y&P2v!8)r@#Tb}bkzQ@;x1VkwHrw8Z+{t88D(lE- zV-!eaW~I#mBaSIS@NMFvoJP>Q&3>3=$K!G`8ZqH|-

9^L(-1KCM}68U>Kr&2IBFA0JPO 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 Date: Mon, 11 Mar 2013 17:21:31 +0800 Subject: [PATCH 05/41] remove the OpenCL define --- modules/ocl/src/stereobm.cpp | 34 ++-------------------------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/modules/ocl/src/stereobm.cpp b/modules/ocl/src/stereobm.cpp index 2f24881ddd..39a22eebb4 100644 --- a/modules/ocl/src/stereobm.cpp +++ b/modules/ocl/src/stereobm.cpp @@ -12,10 +12,12 @@ // // Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved. // Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. +// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved. // Third party copyrights are property of their respective owners. // // @Authors // Jia Haipeng, jiahaipeng95@gmail.com +// Xiaopeng Fu, xiaopeng@multicorewareinc.com // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: @@ -50,37 +52,6 @@ using namespace cv; using namespace cv::ocl; using namespace std; -//////////////////////////////////////////////////////////////////////// -///////////////// stereoBM ///////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// - -#if !defined (HAVE_OPENCL) - -namespace cv -{ -namespace ocl -{ -cv::ocl::StereoBM_OCL::StereoBM_OCL() -{ - throw_nogpu(); -} -cv::ocl::StereoBM_OCL::StereoBM_OCL(int, int, int) -{ - throw_nogpu(); -} -bool cv::ocl::StereoBM_OCL::checkIfGpuCallReasonable() -{ - throw_nogpu(); - return false; -} -void cv::ocl::StereoBM_OCL::operator() ( const oclMat &, const oclMat &, oclMat &) -{ - throw_nogpu(); -} -} -} - -#else /* !defined (HAVE_OPENCL) */ namespace cv { @@ -290,4 +261,3 @@ void cv::ocl::StereoBM_OCL::operator() ( const oclMat &left, const oclMat &right cv::ocl::stereoBM::operator_(minSSD, leBuf, riBuf, preset, ndisp, winSize, avergeTexThreshold, left, right, disparity); } -#endif /* !defined (HAVE_OPENCL) */ From 34998b60343e2c024818dbc094211d5bba01111d Mon Sep 17 00:00:00 2001 From: peng xiao Date: Mon, 11 Mar 2013 18:35:30 +0800 Subject: [PATCH 06/41] Add ocl::SURF accurate test. The test cases are ported from gpu module (masked version is still missing). Key point direction definition is synchronized with cv::SURF. nonfree module dependency is added into ocl module's cmake file. --- modules/ocl/CMakeLists.txt | 2 +- modules/ocl/src/kernels/nonfree_surf.cl | 22 ++- modules/ocl/src/surf.cpp | 54 +++++- modules/ocl/test/precomp.hpp | 2 +- modules/ocl/test/test_surf.cpp | 227 ++++++++++++++++++++++++ 5 files changed, 298 insertions(+), 9 deletions(-) create mode 100644 modules/ocl/test/test_surf.cpp diff --git a/modules/ocl/CMakeLists.txt b/modules/ocl/CMakeLists.txt index d0e254d3a2..a9ec2f4a0a 100644 --- a/modules/ocl/CMakeLists.txt +++ b/modules/ocl/CMakeLists.txt @@ -4,7 +4,7 @@ if(NOT HAVE_OPENCL) endif() set(the_description "OpenCL-accelerated Computer Vision") -ocv_add_module(ocl opencv_core opencv_imgproc opencv_features2d opencv_objdetect opencv_video) +ocv_add_module(ocl opencv_core opencv_imgproc opencv_features2d opencv_objdetect opencv_video opencv_nonfree) ocv_module_include_directories() diff --git a/modules/ocl/src/kernels/nonfree_surf.cl b/modules/ocl/src/kernels/nonfree_surf.cl index 69f64795e9..8cffe3d93a 100644 --- a/modules/ocl/src/kernels/nonfree_surf.cl +++ b/modules/ocl/src/kernels/nonfree_surf.cl @@ -78,7 +78,12 @@ uchar read_imgTex(IMAGE_INT8 img, sampler_t sam, float2 coord, int rows, int col // dynamically change the precision used for floating type -#if defined DOUBLE_SUPPORT +#if defined (DOUBLE_SUPPORT) +#ifdef cl_khr_fp64 +#pragma OPENCL EXTENSION cl_khr_fp64:enable +#elif defined (cl_amd_fp64) +#pragma OPENCL EXTENSION cl_amd_fp64:enable +#endif #define F double #else #define F float @@ -892,9 +897,9 @@ __kernel kp_dir += 2.0f * CV_PI_F; kp_dir *= 180.0f / CV_PI_F; - //kp_dir = 360.0f - kp_dir; - //if (fabs(kp_dir - 360.f) < FLT_EPSILON) - // kp_dir = 0.f; + kp_dir = 360.0f - kp_dir; + if (fabs(kp_dir - 360.f) < FLT_EPSILON) + kp_dir = 0.f; featureDir[get_group_id(0)] = kp_dir; } @@ -913,7 +918,7 @@ __kernel if(get_global_id(0) <= nFeatures) { - featureDir[get_global_id(0)] = 90.0f; + featureDir[get_global_id(0)] = 270.0f; } } @@ -1011,7 +1016,12 @@ void calc_dx_dy( const float centerX = featureX[get_group_id(0)]; const float centerY = featureY[get_group_id(0)]; const float size = featureSize[get_group_id(0)]; - float descriptor_dir = featureDir[get_group_id(0)] * (float)(CV_PI_F / 180.0f); + float descriptor_dir = 360.0f - featureDir[get_group_id(0)]; + if(fabs(descriptor_dir - 360.0f) < FLT_EPSILON) + { + descriptor_dir = 0.0f; + } + descriptor_dir *= (float)(CV_PI_F / 180.0f); /* The sampling intervals and wavelet sized for selecting an orientation and building the keypoint descriptor are defined relative to 's' */ diff --git a/modules/ocl/src/surf.cpp b/modules/ocl/src/surf.cpp index e2ac21b972..3a9c00dd94 100644 --- a/modules/ocl/src/surf.cpp +++ b/modules/ocl/src/surf.cpp @@ -51,6 +51,57 @@ using namespace cv; using namespace cv::ocl; using namespace std; +#if !defined (HAVE_OPENCL) +cv::ocl::SURF_OCL::SURF_OCL() +{ + throw_nogpu(); +} +cv::ocl::SURF_OCL::SURF_OCL(double, int, int, bool, float, bool) +{ + throw_nogpu(); +} +int cv::ocl::SURF_OCL::descriptorSize() const +{ + throw_nogpu(); + return 0; +} +void cv::ocl::SURF_OCL::uploadKeypoints(const vector &, oclMat &) +{ + throw_nogpu(); +} +void cv::ocl::SURF_OCL::downloadKeypoints(const oclMat &, vector &) +{ + throw_nogpu(); +} +void cv::ocl::SURF_OCL::downloadDescriptors(const oclMat &, vector &) +{ + throw_nogpu(); +} +void cv::ocl::SURF_OCL::operator()(const oclMat &, const oclMat &, oclMat &) +{ + throw_nogpu(); +} +void cv::ocl::SURF_OCL::operator()(const oclMat &, const oclMat &, oclMat &, oclMat &, bool) +{ + throw_nogpu(); +} +void cv::ocl::SURF_OCL::operator()(const oclMat &, const oclMat &, vector &) +{ + throw_nogpu(); +} +void cv::ocl::SURF_OCL::operator()(const oclMat &, const oclMat &, vector &, oclMat &, bool) +{ + throw_nogpu(); +} +void cv::ocl::SURF_OCL::operator()(const oclMat &, const oclMat &, vector &, vector &, bool) +{ + throw_nogpu(); +} +void cv::ocl::SURF_OCL::releaseMemory() +{ + throw_nogpu(); +} +#else /* !defined (HAVE_OPENCL) */ namespace cv { namespace ocl @@ -623,7 +674,7 @@ void SURF_OCL_Invoker::icvSetUpright_gpu(const oclMat &keypoints, int nFeatures) args.push_back( make_pair( sizeof(cl_int), (void *)&nFeatures)); size_t localThreads[3] = {256, 1, 1}; - size_t globalThreads[3] = {nFeatures, 1, 1}; + size_t globalThreads[3] = {saturate_cast(nFeatures), 1, 1}; openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); } @@ -726,3 +777,4 @@ void SURF_OCL_Invoker::compute_descriptors_gpu(const oclMat &descriptors, const } } +#endif // /* !defined (HAVE_OPENCL) */ diff --git a/modules/ocl/test/precomp.hpp b/modules/ocl/test/precomp.hpp index c630871014..e8c1aaa1b9 100644 --- a/modules/ocl/test/precomp.hpp +++ b/modules/ocl/test/precomp.hpp @@ -70,7 +70,7 @@ #include "opencv2/ts/ts.hpp" #include "opencv2/ts/ts_perf.hpp" #include "opencv2/ocl/ocl.hpp" -//#include "opencv2/nonfree/nonfree.hpp" +#include "opencv2/nonfree/nonfree.hpp" #include "utility.hpp" #include "interpolation.hpp" diff --git a/modules/ocl/test/test_surf.cpp b/modules/ocl/test/test_surf.cpp new file mode 100644 index 0000000000..c4cf60fcbc --- /dev/null +++ b/modules/ocl/test/test_surf.cpp @@ -0,0 +1,227 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved. +// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// @Authors +// Peng Xiao, pengxiao@multicorewareinc.com +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other oclMaterials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors as is and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + + +#include "precomp.hpp" +#ifdef HAVE_OPENCL + +extern std::string workdir; + +using namespace std; + +static bool keyPointsEquals(const cv::KeyPoint& p1, const cv::KeyPoint& p2) +{ + const double maxPtDif = 1.0; + const double maxSizeDif = 1.0; + const double maxAngleDif = 2.0; + const double maxResponseDif = 0.1; + + double dist = cv::norm(p1.pt - p2.pt); + + if (dist < maxPtDif && + fabs(p1.size - p2.size) < maxSizeDif && + abs(p1.angle - p2.angle) < maxAngleDif && + abs(p1.response - p2.response) < maxResponseDif && + p1.octave == p2.octave && + p1.class_id == p2.class_id) + { + return true; + } + + return false; +} + + +struct KeyPointLess : std::binary_function +{ + bool operator()(const cv::KeyPoint& kp1, const cv::KeyPoint& kp2) const + { + return kp1.pt.y < kp2.pt.y || (kp1.pt.y == kp2.pt.y && kp1.pt.x < kp2.pt.x); + } +}; + + +#define ASSERT_KEYPOINTS_EQ(gold, actual) EXPECT_PRED_FORMAT2(assertKeyPointsEquals, gold, actual); + +static int getMatchedPointsCount(std::vector& gold, std::vector& actual) +{ + std::sort(actual.begin(), actual.end(), KeyPointLess()); + std::sort(gold.begin(), gold.end(), KeyPointLess()); + + int validCount = 0; + + for (size_t i = 0; i < gold.size(); ++i) + { + const cv::KeyPoint& p1 = gold[i]; + const cv::KeyPoint& p2 = actual[i]; + + if (keyPointsEquals(p1, p2)) + ++validCount; + } + + return validCount; +} + +static int getMatchedPointsCount(const std::vector& keypoints1, const std::vector& keypoints2, const std::vector& matches) +{ + int validCount = 0; + + for (size_t i = 0; i < matches.size(); ++i) + { + const cv::DMatch& m = matches[i]; + + const cv::KeyPoint& p1 = keypoints1[m.queryIdx]; + const cv::KeyPoint& p2 = keypoints2[m.trainIdx]; + + if (keyPointsEquals(p1, p2)) + ++validCount; + } + + return validCount; +} + +IMPLEMENT_PARAM_CLASS(SURF_HessianThreshold, double) +IMPLEMENT_PARAM_CLASS(SURF_Octaves, int) +IMPLEMENT_PARAM_CLASS(SURF_OctaveLayers, int) +IMPLEMENT_PARAM_CLASS(SURF_Extended, bool) +IMPLEMENT_PARAM_CLASS(SURF_Upright, bool) + +PARAM_TEST_CASE(SURF, SURF_HessianThreshold, SURF_Octaves, SURF_OctaveLayers, SURF_Extended, SURF_Upright) +{ + double hessianThreshold; + int nOctaves; + int nOctaveLayers; + bool extended; + bool upright; + + virtual void SetUp() + { + hessianThreshold = GET_PARAM(0); + nOctaves = GET_PARAM(1); + nOctaveLayers = GET_PARAM(2); + extended = GET_PARAM(3); + upright = GET_PARAM(4); + } +}; +TEST_P(SURF, Detector) +{ + cv::Mat image = readImage(workdir + "fruits.jpg", cv::IMREAD_GRAYSCALE); + ASSERT_FALSE(image.empty()); + + cv::ocl::SURF_OCL surf; + surf.hessianThreshold = static_cast(hessianThreshold); + surf.nOctaves = nOctaves; + surf.nOctaveLayers = nOctaveLayers; + surf.extended = extended; + surf.upright = upright; + surf.keypointsRatio = 0.05f; + + std::vector keypoints; + surf(cv::ocl::oclMat(image), cv::ocl::oclMat(), keypoints); + + cv::SURF surf_gold; + surf_gold.hessianThreshold = hessianThreshold; + surf_gold.nOctaves = nOctaves; + surf_gold.nOctaveLayers = nOctaveLayers; + surf_gold.extended = extended; + surf_gold.upright = upright; + + std::vector keypoints_gold; + surf_gold(image, cv::noArray(), keypoints_gold); + + ASSERT_EQ(keypoints_gold.size(), keypoints.size()); + int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints); + double matchedRatio = static_cast(matchedCount) / keypoints_gold.size(); + + EXPECT_GT(matchedRatio, 0.95); +} + +TEST_P(SURF, Descriptor) +{ + cv::Mat image = readImage(workdir + "fruits.jpg", cv::IMREAD_GRAYSCALE); + ASSERT_FALSE(image.empty()); + + cv::ocl::SURF_OCL surf; + surf.hessianThreshold = static_cast(hessianThreshold); + surf.nOctaves = nOctaves; + surf.nOctaveLayers = nOctaveLayers; + surf.extended = extended; + surf.upright = upright; + surf.keypointsRatio = 0.05f; + + cv::SURF surf_gold; + surf_gold.hessianThreshold = hessianThreshold; + surf_gold.nOctaves = nOctaves; + surf_gold.nOctaveLayers = nOctaveLayers; + surf_gold.extended = extended; + surf_gold.upright = upright; + + std::vector keypoints; + surf_gold(image, cv::noArray(), keypoints); + + cv::ocl::oclMat descriptors; + surf(cv::ocl::oclMat(image), cv::ocl::oclMat(), keypoints, descriptors, true); + + cv::Mat descriptors_gold; + surf_gold(image, cv::noArray(), keypoints, descriptors_gold, true); + + cv::BFMatcher matcher(cv::NORM_L2); + std::vector matches; + matcher.match(descriptors_gold, cv::Mat(descriptors), matches); + + int matchedCount = getMatchedPointsCount(keypoints, keypoints, matches); + double matchedRatio = static_cast(matchedCount) / keypoints.size(); + + EXPECT_GT(matchedRatio, 0.35); +} + +INSTANTIATE_TEST_CASE_P(OCL_Features2D, SURF, testing::Combine( + testing::Values(/*SURF_HessianThreshold(100.0), */SURF_HessianThreshold(500.0), SURF_HessianThreshold(1000.0)), + testing::Values(SURF_Octaves(3), SURF_Octaves(4)), + testing::Values(SURF_OctaveLayers(2), SURF_OctaveLayers(3)), + testing::Values(SURF_Extended(false), SURF_Extended(true)), + testing::Values(SURF_Upright(false), SURF_Upright(true)))); + +#endif From 4ddf634c3049125ae323027e4b8b10351603c7ea Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Mon, 11 Mar 2013 15:41:50 +0400 Subject: [PATCH 07/41] gpu : implement Bayer* -> Gray color conversion --- modules/gpu/perf/perf_imgproc.cpp | 7 +- modules/gpu/src/color.cpp | 45 +++++- modules/gpu/src/cuda/debayer.cu | 221 ++++++++++++++++++------------ modules/gpu/test/test_color.cpp | 64 +++++++++ 4 files changed, 248 insertions(+), 89 deletions(-) diff --git a/modules/gpu/perf/perf_imgproc.cpp b/modules/gpu/perf/perf_imgproc.cpp index be6eb4877c..ab445dc87c 100644 --- a/modules/gpu/perf/perf_imgproc.cpp +++ b/modules/gpu/perf/perf_imgproc.cpp @@ -1341,7 +1341,12 @@ PERF_TEST_P(Sz_Depth_Code, ImgProc_CvtColorBayer, Values(CvtColorInfo(1, 3, cv::COLOR_BayerBG2BGR), CvtColorInfo(1, 3, cv::COLOR_BayerGB2BGR), CvtColorInfo(1, 3, cv::COLOR_BayerRG2BGR), - CvtColorInfo(1, 3, cv::COLOR_BayerGR2BGR)))) + CvtColorInfo(1, 3, cv::COLOR_BayerGR2BGR), + + CvtColorInfo(1, 1, cv::COLOR_BayerBG2GRAY), + CvtColorInfo(1, 1, cv::COLOR_BayerGB2GRAY), + CvtColorInfo(1, 1, cv::COLOR_BayerRG2GRAY), + CvtColorInfo(1, 1, cv::COLOR_BayerGR2GRAY)))) { const cv::Size size = GET_PARAM(0); const int depth = GET_PARAM(1); diff --git a/modules/gpu/src/color.cpp b/modules/gpu/src/color.cpp index 05d4609001..09986e8c33 100644 --- a/modules/gpu/src/color.cpp +++ b/modules/gpu/src/color.cpp @@ -1640,6 +1640,43 @@ namespace { bayer_to_bgr(src, dst, dcn, true, true, stream); } + void bayer_to_gray(const GpuMat& src, GpuMat& dst, bool blue_last, bool start_with_green, Stream& stream) + { + typedef void (*func_t)(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); + static const func_t funcs[3] = + { + Bayer2BGR_8u_gpu<1>, + 0, + Bayer2BGR_16u_gpu<1>, + }; + + CV_Assert(src.type() == CV_8UC1 || src.type() == CV_16UC1); + CV_Assert(src.rows > 2 && src.cols > 2); + + dst.create(src.size(), CV_MAKETYPE(src.depth(), 1)); + + funcs[src.depth()](src, dst, blue_last, start_with_green, StreamAccessor::getStream(stream)); + } + + void bayerBG_to_gray(const GpuMat& src, GpuMat& dst, int /*dcn*/, Stream& stream) + { + bayer_to_gray(src, dst, false, false, stream); + } + + void bayerGB_to_gray(const GpuMat& src, GpuMat& dst, int /*dcn*/, Stream& stream) + { + bayer_to_gray(src, dst, false, true, stream); + } + + void bayerRG_to_gray(const GpuMat& src, GpuMat& dst, int /*dcn*/, Stream& stream) + { + bayer_to_gray(src, dst, true, false, stream); + } + + void bayerGR_to_gray(const GpuMat& src, GpuMat& dst, int /*dcn*/, Stream& stream) + { + bayer_to_gray(src, dst, true, true, stream); + } } void cv::gpu::cvtColor(const GpuMat& src, GpuMat& dst, int code, int dcn, Stream& stream) @@ -1756,10 +1793,10 @@ void cv::gpu::cvtColor(const GpuMat& src, GpuMat& dst, int code, int dcn, Stream yuv_to_bgr, // CV_YUV2BGR = 84 yuv_to_rgb, // CV_YUV2RGB = 85 - 0, // CV_BayerBG2GRAY = 86 - 0, // CV_BayerGB2GRAY = 87 - 0, // CV_BayerRG2GRAY = 88 - 0, // CV_BayerGR2GRAY = 89 + bayerBG_to_gray, // CV_BayerBG2GRAY = 86 + bayerGB_to_gray, // CV_BayerGB2GRAY = 87 + bayerRG_to_gray, // CV_BayerRG2GRAY = 88 + bayerGR_to_gray, // CV_BayerGR2GRAY = 89 //YUV 4:2:0 formats family 0, // CV_YUV2RGB_NV12 = 90, diff --git a/modules/gpu/src/cuda/debayer.cu b/modules/gpu/src/cuda/debayer.cu index 57322ed81f..fc43726291 100644 --- a/modules/gpu/src/cuda/debayer.cu +++ b/modules/gpu/src/cuda/debayer.cu @@ -42,42 +42,37 @@ #if !defined CUDA_DISABLER -#include -#include -#include -#include +#include "opencv2/gpu/device/common.hpp" +#include "opencv2/gpu/device/vec_traits.hpp" +#include "opencv2/gpu/device/vec_math.hpp" +#include "opencv2/gpu/device/limits.hpp" +#include "opencv2/gpu/device/color.hpp" -namespace cv { namespace gpu { - namespace device - { - template - __global__ void Bayer2BGR_8u(const PtrStepb src, PtrStepSz dst, const bool blue_last, const bool start_with_green) - { - const int s_x = blockIdx.x * blockDim.x + threadIdx.x; - int s_y = blockIdx.y * blockDim.y + threadIdx.y; - - if (s_y >= dst.rows || (s_x << 2) >= dst.cols) - return; +namespace cv { namespace gpu { namespace device +{ + template struct Bayer2BGR; - s_y = ::min(::max(s_y, 1), dst.rows - 2); + template <> struct Bayer2BGR + { + uchar3 res0; + uchar3 res1; + uchar3 res2; + uchar3 res3; + __device__ void apply(const PtrStepSzb& src, int s_x, int s_y, bool blue_last, bool start_with_green) + { uchar4 patch[3][3]; patch[0][1] = ((const uchar4*) src.ptr(s_y - 1))[s_x]; patch[0][0] = ((const uchar4*) src.ptr(s_y - 1))[::max(s_x - 1, 0)]; - patch[0][2] = ((const uchar4*) src.ptr(s_y - 1))[::min(s_x + 1, ((dst.cols + 3) >> 2) - 1)]; + patch[0][2] = ((const uchar4*) src.ptr(s_y - 1))[::min(s_x + 1, ((src.cols + 3) >> 2) - 1)]; patch[1][1] = ((const uchar4*) src.ptr(s_y))[s_x]; patch[1][0] = ((const uchar4*) src.ptr(s_y))[::max(s_x - 1, 0)]; - patch[1][2] = ((const uchar4*) src.ptr(s_y))[::min(s_x + 1, ((dst.cols + 3) >> 2) - 1)]; + patch[1][2] = ((const uchar4*) src.ptr(s_y))[::min(s_x + 1, ((src.cols + 3) >> 2) - 1)]; patch[2][1] = ((const uchar4*) src.ptr(s_y + 1))[s_x]; patch[2][0] = ((const uchar4*) src.ptr(s_y + 1))[::max(s_x - 1, 0)]; - patch[2][2] = ((const uchar4*) src.ptr(s_y + 1))[::min(s_x + 1, ((dst.cols + 3) >> 2) - 1)]; - - D res0 = VecTraits::all(numeric_limits::max()); - D res1 = VecTraits::all(numeric_limits::max()); - D res2 = VecTraits::all(numeric_limits::max()); - D res3 = VecTraits::all(numeric_limits::max()); + patch[2][2] = ((const uchar4*) src.ptr(s_y + 1))[::min(s_x + 1, ((src.cols + 3) >> 2) - 1)]; if ((s_y & 1) ^ start_with_green) { @@ -181,45 +176,69 @@ namespace cv { namespace gpu { res3.z = t7; } } + } + }; + + template __device__ __forceinline__ D toDst(const uchar3& pix); + template <> __device__ __forceinline__ uchar toDst(const uchar3& pix) + { + typename bgr_to_gray_traits::functor_type f = bgr_to_gray_traits::create_functor(); + return f(pix); + } + template <> __device__ __forceinline__ uchar3 toDst(const uchar3& pix) + { + return pix; + } + template <> __device__ __forceinline__ uchar4 toDst(const uchar3& pix) + { + return make_uchar4(pix.x, pix.y, pix.z, 255); + } + + template + __global__ void Bayer2BGR_8u(const PtrStepSzb src, PtrStep dst, const bool blue_last, const bool start_with_green) + { + const int s_x = blockIdx.x * blockDim.x + threadIdx.x; + int s_y = blockIdx.y * blockDim.y + threadIdx.y; - const int d_x = (blockIdx.x * blockDim.x + threadIdx.x) << 2; - const int d_y = blockIdx.y * blockDim.y + threadIdx.y; + if (s_y >= src.rows || (s_x << 2) >= src.cols) + return; - dst(d_y, d_x) = res0; - if (d_x + 1 < dst.cols) - dst(d_y, d_x + 1) = res1; - if (d_x + 2 < dst.cols) - dst(d_y, d_x + 2) = res2; - if (d_x + 3 < dst.cols) - dst(d_y, d_x + 3) = res3; - } + s_y = ::min(::max(s_y, 1), src.rows - 2); - template - __global__ void Bayer2BGR_16u(const PtrStepb src, PtrStepSz dst, const bool blue_last, const bool start_with_green) - { - const int s_x = blockIdx.x * blockDim.x + threadIdx.x; - int s_y = blockIdx.y * blockDim.y + threadIdx.y; + Bayer2BGR bayer; + bayer.apply(src, s_x, s_y, blue_last, start_with_green); - if (s_y >= dst.rows || (s_x << 1) >= dst.cols) - return; + const int d_x = (blockIdx.x * blockDim.x + threadIdx.x) << 2; + const int d_y = blockIdx.y * blockDim.y + threadIdx.y; - s_y = ::min(::max(s_y, 1), dst.rows - 2); + dst(d_y, d_x) = toDst(bayer.res0); + if (d_x + 1 < src.cols) + dst(d_y, d_x + 1) = toDst(bayer.res1); + if (d_x + 2 < src.cols) + dst(d_y, d_x + 2) = toDst(bayer.res2); + if (d_x + 3 < src.cols) + dst(d_y, d_x + 3) = toDst(bayer.res3); + } + + template <> struct Bayer2BGR + { + ushort3 res0; + ushort3 res1; + __device__ void apply(const PtrStepSzb& src, int s_x, int s_y, bool blue_last, bool start_with_green) + { ushort2 patch[3][3]; patch[0][1] = ((const ushort2*) src.ptr(s_y - 1))[s_x]; patch[0][0] = ((const ushort2*) src.ptr(s_y - 1))[::max(s_x - 1, 0)]; - patch[0][2] = ((const ushort2*) src.ptr(s_y - 1))[::min(s_x + 1, ((dst.cols + 1) >> 1) - 1)]; + patch[0][2] = ((const ushort2*) src.ptr(s_y - 1))[::min(s_x + 1, ((src.cols + 1) >> 1) - 1)]; patch[1][1] = ((const ushort2*) src.ptr(s_y))[s_x]; patch[1][0] = ((const ushort2*) src.ptr(s_y))[::max(s_x - 1, 0)]; - patch[1][2] = ((const ushort2*) src.ptr(s_y))[::min(s_x + 1, ((dst.cols + 1) >> 1) - 1)]; + patch[1][2] = ((const ushort2*) src.ptr(s_y))[::min(s_x + 1, ((src.cols + 1) >> 1) - 1)]; patch[2][1] = ((const ushort2*) src.ptr(s_y + 1))[s_x]; patch[2][0] = ((const ushort2*) src.ptr(s_y + 1))[::max(s_x - 1, 0)]; - patch[2][2] = ((const ushort2*) src.ptr(s_y + 1))[::min(s_x + 1, ((dst.cols + 1) >> 1) - 1)]; - - D res0 = VecTraits::all(numeric_limits::max()); - D res1 = VecTraits::all(numeric_limits::max()); + patch[2][2] = ((const ushort2*) src.ptr(s_y + 1))[::min(s_x + 1, ((src.cols + 1) >> 1) - 1)]; if ((s_y & 1) ^ start_with_green) { @@ -279,53 +298,87 @@ namespace cv { namespace gpu { res1.z = t3; } } + } + }; - const int d_x = (blockIdx.x * blockDim.x + threadIdx.x) << 1; - const int d_y = blockIdx.y * blockDim.y + threadIdx.y; + template __device__ __forceinline__ D toDst(const ushort3& pix); + template <> __device__ __forceinline__ ushort toDst(const ushort3& pix) + { + typename bgr_to_gray_traits::functor_type f = bgr_to_gray_traits::create_functor(); + return f(pix); + } + template <> __device__ __forceinline__ ushort3 toDst(const ushort3& pix) + { + return pix; + } + template <> __device__ __forceinline__ ushort4 toDst(const ushort3& pix) + { + return make_ushort4(pix.x, pix.y, pix.z, numeric_limits::max()); + } - dst(d_y, d_x) = res0; - if (d_x + 1 < dst.cols) - dst(d_y, d_x + 1) = res1; - } + template + __global__ void Bayer2BGR_16u(const PtrStepSzb src, PtrStep dst, const bool blue_last, const bool start_with_green) + { + const int s_x = blockIdx.x * blockDim.x + threadIdx.x; + int s_y = blockIdx.y * blockDim.y + threadIdx.y; - template - void Bayer2BGR_8u_gpu(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream) - { - typedef typename TypeVec::vec_type dst_t; + if (s_y >= src.rows || (s_x << 1) >= src.cols) + return; - const dim3 block(32, 8); - const dim3 grid(divUp(dst.cols, 4 * block.x), divUp(dst.rows, block.y)); + s_y = ::min(::max(s_y, 1), src.rows - 2); - cudaSafeCall( cudaFuncSetCacheConfig(Bayer2BGR_8u, cudaFuncCachePreferL1) ); + Bayer2BGR bayer; + bayer.apply(src, s_x, s_y, blue_last, start_with_green); - Bayer2BGR_8u<<>>(src, (PtrStepSz)dst, blue_last, start_with_green); - cudaSafeCall( cudaGetLastError() ); + const int d_x = (blockIdx.x * blockDim.x + threadIdx.x) << 1; + const int d_y = blockIdx.y * blockDim.y + threadIdx.y; - if (stream == 0) - cudaSafeCall( cudaDeviceSynchronize() ); - } - template - void Bayer2BGR_16u_gpu(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream) - { - typedef typename TypeVec::vec_type dst_t; + dst(d_y, d_x) = toDst(bayer.res0); + if (d_x + 1 < src.cols) + dst(d_y, d_x + 1) = toDst(bayer.res1); + } - const dim3 block(32, 8); - const dim3 grid(divUp(dst.cols, 2 * block.x), divUp(dst.rows, block.y)); + template + void Bayer2BGR_8u_gpu(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream) + { + typedef typename TypeVec::vec_type dst_t; - cudaSafeCall( cudaFuncSetCacheConfig(Bayer2BGR_16u, cudaFuncCachePreferL1) ); + const dim3 block(32, 8); + const dim3 grid(divUp(src.cols, 4 * block.x), divUp(src.rows, block.y)); - Bayer2BGR_16u<<>>(src, (PtrStepSz)dst, blue_last, start_with_green); - cudaSafeCall( cudaGetLastError() ); + cudaSafeCall( cudaFuncSetCacheConfig(Bayer2BGR_8u, cudaFuncCachePreferL1) ); - if (stream == 0) - cudaSafeCall( cudaDeviceSynchronize() ); - } + Bayer2BGR_8u<<>>(src, (PtrStepSz)dst, blue_last, start_with_green); + cudaSafeCall( cudaGetLastError() ); - template void Bayer2BGR_8u_gpu<3>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); - template void Bayer2BGR_8u_gpu<4>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); - template void Bayer2BGR_16u_gpu<3>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); - template void Bayer2BGR_16u_gpu<4>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); + if (stream == 0) + cudaSafeCall( cudaDeviceSynchronize() ); } -}} -#endif /* CUDA_DISABLER */ \ No newline at end of file + template + void Bayer2BGR_16u_gpu(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream) + { + typedef typename TypeVec::vec_type dst_t; + + const dim3 block(32, 8); + const dim3 grid(divUp(src.cols, 2 * block.x), divUp(src.rows, block.y)); + + cudaSafeCall( cudaFuncSetCacheConfig(Bayer2BGR_16u, cudaFuncCachePreferL1) ); + + Bayer2BGR_16u<<>>(src, (PtrStepSz)dst, blue_last, start_with_green); + cudaSafeCall( cudaGetLastError() ); + + if (stream == 0) + cudaSafeCall( cudaDeviceSynchronize() ); + } + + template void Bayer2BGR_8u_gpu<1>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); + template void Bayer2BGR_8u_gpu<3>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); + template void Bayer2BGR_8u_gpu<4>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); + + template void Bayer2BGR_16u_gpu<1>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); + template void Bayer2BGR_16u_gpu<3>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); + template void Bayer2BGR_16u_gpu<4>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); +}}} + +#endif /* CUDA_DISABLER */ diff --git a/modules/gpu/test/test_color.cpp b/modules/gpu/test/test_color.cpp index 5aee14d495..81831af8c5 100644 --- a/modules/gpu/test/test_color.cpp +++ b/modules/gpu/test/test_color.cpp @@ -2218,6 +2218,70 @@ GPU_TEST_P(CvtColor, BayerGR2BGR4) EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst3(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 0); } +GPU_TEST_P(CvtColor, BayerBG2Gray) +{ + if ((depth != CV_8U && depth != CV_16U) || useRoi) + return; + + cv::Mat src = randomMat(size, depth); + + cv::gpu::GpuMat dst; + cv::gpu::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerBG2GRAY); + + cv::Mat dst_gold; + cv::cvtColor(src, dst_gold, cv::COLOR_BayerBG2GRAY); + + EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 2); +} + +GPU_TEST_P(CvtColor, BayerGB2Gray) +{ + if ((depth != CV_8U && depth != CV_16U) || useRoi) + return; + + cv::Mat src = randomMat(size, depth); + + cv::gpu::GpuMat dst; + cv::gpu::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerGB2GRAY); + + cv::Mat dst_gold; + cv::cvtColor(src, dst_gold, cv::COLOR_BayerGB2GRAY); + + EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 2); +} + +GPU_TEST_P(CvtColor, BayerRG2Gray) +{ + if ((depth != CV_8U && depth != CV_16U) || useRoi) + return; + + cv::Mat src = randomMat(size, depth); + + cv::gpu::GpuMat dst; + cv::gpu::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerRG2GRAY); + + cv::Mat dst_gold; + cv::cvtColor(src, dst_gold, cv::COLOR_BayerRG2GRAY); + + EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 2); +} + +GPU_TEST_P(CvtColor, BayerGR2Gray) +{ + if ((depth != CV_8U && depth != CV_16U) || useRoi) + return; + + cv::Mat src = randomMat(size, depth); + + cv::gpu::GpuMat dst; + cv::gpu::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerGR2GRAY); + + cv::Mat dst_gold; + cv::cvtColor(src, dst_gold, cv::COLOR_BayerGR2GRAY); + + EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 2); +} + INSTANTIATE_TEST_CASE_P(GPU_ImgProc, CvtColor, testing::Combine( ALL_DEVICES, DIFFERENT_SIZES, From f8985bb7fc84bd682ff8900c04120d7c4285b120 Mon Sep 17 00:00:00 2001 From: yao Date: Tue, 12 Mar 2013 08:55:50 +0800 Subject: [PATCH 08/41] fix warnings on Linux --- modules/ocl/src/stereobm.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/ocl/src/stereobm.cpp b/modules/ocl/src/stereobm.cpp index 39a22eebb4..57e14f93d1 100644 --- a/modules/ocl/src/stereobm.cpp +++ b/modules/ocl/src/stereobm.cpp @@ -72,7 +72,7 @@ namespace stereoBM ///////////////////////////////////////////////////////////////////////// //////////////////////////prefilter_xsbel//////////////////////////////// //////////////////////////////////////////////////////////////////////// -void prefilter_xsobel(const oclMat &input, oclMat &output, int prefilterCap) +static void prefilter_xsobel(const oclMat &input, oclMat &output, int prefilterCap) { Context *clCxt = input.clCxt; @@ -110,7 +110,7 @@ static inline int divUp(int total, int grain) //////////////////////////////////////////////////////////////////////////// ///////////////////////////////stereoBM_GPU//////////////////////////////// //////////////////////////////////////////////////////////////////////////// -void stereo_bm(const oclMat &left, const oclMat &right, oclMat &disp, +static void stereo_bm(const oclMat &left, const oclMat &right, oclMat &disp, int maxdisp, int winSize, oclMat &minSSD_buf) { int winsz2 = winSize >> 1; @@ -160,7 +160,7 @@ void stereo_bm(const oclMat &left, const oclMat &right, oclMat &disp, //////////////////////////////////////////////////////////////////////////// ///////////////////////////////postfilter_textureness/////////////////////// //////////////////////////////////////////////////////////////////////////// -void postfilter_textureness(oclMat &left, int winSize, +static void postfilter_textureness(oclMat &left, int winSize, float avergeTexThreshold, oclMat &disparity) { Context *clCxt = left.clCxt; @@ -197,7 +197,7 @@ void postfilter_textureness(oclMat &left, int winSize, ////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////operator///////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -void operator_(oclMat &minSSD, oclMat &leBuf, oclMat &riBuf, int preset, int ndisp, +static void operator_(oclMat &minSSD, oclMat &leBuf, oclMat &riBuf, int preset, int ndisp, int winSize, float avergeTexThreshold, const oclMat &left, const oclMat &right, oclMat &disparity) From 3a565e001e71755fada5e52565fc2003fac53bb9 Mon Sep 17 00:00:00 2001 From: peng xiao Date: Tue, 12 Mar 2013 09:10:15 +0800 Subject: [PATCH 09/41] Remove unnecessary HAVE_OPENCL macro block. --- modules/ocl/src/surf.cpp | 55 +--------------------------------------- 1 file changed, 1 insertion(+), 54 deletions(-) diff --git a/modules/ocl/src/surf.cpp b/modules/ocl/src/surf.cpp index 3a9c00dd94..9d1372bbe0 100644 --- a/modules/ocl/src/surf.cpp +++ b/modules/ocl/src/surf.cpp @@ -51,57 +51,6 @@ using namespace cv; using namespace cv::ocl; using namespace std; -#if !defined (HAVE_OPENCL) -cv::ocl::SURF_OCL::SURF_OCL() -{ - throw_nogpu(); -} -cv::ocl::SURF_OCL::SURF_OCL(double, int, int, bool, float, bool) -{ - throw_nogpu(); -} -int cv::ocl::SURF_OCL::descriptorSize() const -{ - throw_nogpu(); - return 0; -} -void cv::ocl::SURF_OCL::uploadKeypoints(const vector &, oclMat &) -{ - throw_nogpu(); -} -void cv::ocl::SURF_OCL::downloadKeypoints(const oclMat &, vector &) -{ - throw_nogpu(); -} -void cv::ocl::SURF_OCL::downloadDescriptors(const oclMat &, vector &) -{ - throw_nogpu(); -} -void cv::ocl::SURF_OCL::operator()(const oclMat &, const oclMat &, oclMat &) -{ - throw_nogpu(); -} -void cv::ocl::SURF_OCL::operator()(const oclMat &, const oclMat &, oclMat &, oclMat &, bool) -{ - throw_nogpu(); -} -void cv::ocl::SURF_OCL::operator()(const oclMat &, const oclMat &, vector &) -{ - throw_nogpu(); -} -void cv::ocl::SURF_OCL::operator()(const oclMat &, const oclMat &, vector &, oclMat &, bool) -{ - throw_nogpu(); -} -void cv::ocl::SURF_OCL::operator()(const oclMat &, const oclMat &, vector &, vector &, bool) -{ - throw_nogpu(); -} -void cv::ocl::SURF_OCL::releaseMemory() -{ - throw_nogpu(); -} -#else /* !defined (HAVE_OPENCL) */ namespace cv { namespace ocl @@ -211,7 +160,7 @@ public: if (use_mask) { - throw std::exception(); + CV_Error(CV_StsBadFunc, "Masked SURF detector is not implemented yet"); //!FIXME // temp fix for missing min overload //oclMat temp(mask.size(), mask.type()); @@ -776,5 +725,3 @@ void SURF_OCL_Invoker::compute_descriptors_gpu(const oclMat &descriptors, const openCLExecuteKernelSURF(clCxt, &nonfree_surf, kernelName, globalThreads, localThreads, args, -1, -1); } } - -#endif // /* !defined (HAVE_OPENCL) */ From 084385cf38f84e2014ca7daa907274f365cd2925 Mon Sep 17 00:00:00 2001 From: yao Date: Tue, 12 Mar 2013 16:45:43 +0800 Subject: [PATCH 10/41] Fix a bug in ocl::Erode/Dilate, simplify the host logic --- modules/ocl/src/filtering.cpp | 18 ++++++++---------- modules/ocl/src/kernels/filtering_morph.cl | 6 +----- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/modules/ocl/src/filtering.cpp b/modules/ocl/src/filtering.cpp index 6697c953fd..e229fab053 100644 --- a/modules/ocl/src/filtering.cpp +++ b/modules/ocl/src/filtering.cpp @@ -195,7 +195,7 @@ public: namespace { -typedef void (*GPUMorfFilter_t)(const oclMat & , oclMat & , oclMat & , Size &, const Point, bool rectKernel, bool usrROI); +typedef void (*GPUMorfFilter_t)(const oclMat & , oclMat & , oclMat & , Size &, const Point, bool rectKernel); class MorphFilter_GPU : public BaseFilter_GPU { @@ -205,7 +205,7 @@ public: virtual void operator()(const oclMat &src, oclMat &dst) { - func(src, dst, kernel, ksize, anchor, rectKernel, false) ; + func(src, dst, kernel, ksize, anchor, rectKernel) ; } oclMat kernel; @@ -220,7 +220,7 @@ public: **Note that the kernel need to be further refined. */ static void GPUErode(const oclMat &src, oclMat &dst, oclMat &mat_kernel, - Size &ksize, const Point anchor, bool rectKernel, bool useROI) + Size &ksize, const Point anchor, bool rectKernel) { //Normalize the result by default //float alpha = ksize.height * ksize.width; @@ -276,11 +276,10 @@ static void GPUErode(const oclMat &src, oclMat &dst, oclMat &mat_kernel, } char compile_option[128]; - sprintf(compile_option, "-D RADIUSX=%d -D RADIUSY=%d -D LSIZE0=%d -D LSIZE1=%d -D ERODE %s %s %s", + sprintf(compile_option, "-D RADIUSX=%d -D RADIUSY=%d -D LSIZE0=%d -D LSIZE1=%d -D ERODE %s %s", anchor.x, anchor.y, (int)localThreads[0], (int)localThreads[1], - rectKernel?"-D RECTKERNEL":"", - useROI?"-D USEROI":"", - s); + rectKernel?"-D RECTKERNEL":"", + s); vector< pair > args; args.push_back(make_pair(sizeof(cl_mem), (void *)&src.data)); args.push_back(make_pair(sizeof(cl_mem), (void *)&dst.data)); @@ -300,7 +299,7 @@ static void GPUErode(const oclMat &src, oclMat &dst, oclMat &mat_kernel, //! data type supported: CV_8UC1, CV_8UC4, CV_32FC1, CV_32FC4 static void GPUDilate(const oclMat &src, oclMat &dst, oclMat &mat_kernel, - Size &ksize, const Point anchor, bool rectKernel, bool useROI) + Size &ksize, const Point anchor, bool rectKernel) { //Normalize the result by default //float alpha = ksize.height * ksize.width; @@ -357,10 +356,9 @@ static void GPUDilate(const oclMat &src, oclMat &dst, oclMat &mat_kernel, } char compile_option[128]; - sprintf(compile_option, "-D RADIUSX=%d -D RADIUSY=%d -D LSIZE0=%d -D LSIZE1=%d -D DILATE %s %s %s", + sprintf(compile_option, "-D RADIUSX=%d -D RADIUSY=%d -D LSIZE0=%d -D LSIZE1=%d -D DILATE %s %s", anchor.x, anchor.y, (int)localThreads[0], (int)localThreads[1], rectKernel?"-D RECTKERNEL":"", - useROI?"-D USEROI":"", s); vector< pair > args; args.push_back(make_pair(sizeof(cl_mem), (void *)&src.data)); diff --git a/modules/ocl/src/kernels/filtering_morph.cl b/modules/ocl/src/kernels/filtering_morph.cl index f60d76a8b7..49640008f4 100644 --- a/modules/ocl/src/kernels/filtering_morph.cl +++ b/modules/ocl/src/kernels/filtering_morph.cl @@ -120,8 +120,7 @@ __kernel void morph_C1_D0(__global const uchar * restrict src, int gidy = get_global_id(1); int out_addr = mad24(gidy,dst_step_in_pixel,gidx+dst_offset_in_pixel); -#ifdef USEROI - if(gidx+3 Date: Wed, 13 Mar 2013 14:54:06 +0400 Subject: [PATCH 11/41] implemented Malvar, He, and Cutler Bayer Demosaicing on gpu --- modules/gpu/include/opencv2/gpu/gpu.hpp | 20 +++ modules/gpu/perf/perf_imgproc.cpp | 44 ++++++ modules/gpu/src/color.cpp | 81 ++++++++++-- modules/gpu/src/cuda/debayer.cu | 160 ++++++++++++++++++++++ modules/gpu/test/test_color.cpp | 169 ++++++++++++++++++++++++ 5 files changed, 466 insertions(+), 8 deletions(-) diff --git a/modules/gpu/include/opencv2/gpu/gpu.hpp b/modules/gpu/include/opencv2/gpu/gpu.hpp index a9481b2812..802954c71f 100644 --- a/modules/gpu/include/opencv2/gpu/gpu.hpp +++ b/modules/gpu/include/opencv2/gpu/gpu.hpp @@ -627,6 +627,26 @@ CV_EXPORTS void reprojectImageTo3D(const GpuMat& disp, GpuMat& xyzw, const Mat& //! converts image from one color space to another CV_EXPORTS void cvtColor(const GpuMat& src, GpuMat& dst, int code, int dcn = 0, Stream& stream = Stream::Null()); +enum +{ + // Bayer Demosaicing (Malvar, He, and Cutler) + COLOR_BayerBG2BGR_MHT = 256, + COLOR_BayerGB2BGR_MHT = 257, + COLOR_BayerRG2BGR_MHT = 258, + COLOR_BayerGR2BGR_MHT = 259, + + COLOR_BayerBG2RGB_MHT = COLOR_BayerRG2BGR_MHT, + COLOR_BayerGB2RGB_MHT = COLOR_BayerGR2BGR_MHT, + COLOR_BayerRG2RGB_MHT = COLOR_BayerBG2BGR_MHT, + COLOR_BayerGR2RGB_MHT = COLOR_BayerGB2BGR_MHT, + + COLOR_BayerBG2GRAY_MHT = 260, + COLOR_BayerGB2GRAY_MHT = 261, + COLOR_BayerRG2GRAY_MHT = 262, + COLOR_BayerGR2GRAY_MHT = 263 +}; +CV_EXPORTS void demosaicing(const GpuMat& src, GpuMat& dst, int code, int dcn = -1, Stream& stream = Stream::Null()); + //! swap channels //! dstOrder - Integer array describing how channel values are permutated. The n-th entry //! of the array contains the number of the channel that is stored in the n-th channel of diff --git a/modules/gpu/perf/perf_imgproc.cpp b/modules/gpu/perf/perf_imgproc.cpp index ab445dc87c..d1a87968d0 100644 --- a/modules/gpu/perf/perf_imgproc.cpp +++ b/modules/gpu/perf/perf_imgproc.cpp @@ -1374,6 +1374,50 @@ PERF_TEST_P(Sz_Depth_Code, ImgProc_CvtColorBayer, } } +CV_ENUM(DemosaicingCode, + cv::COLOR_BayerBG2BGR, cv::COLOR_BayerGB2BGR, cv::COLOR_BayerRG2BGR, cv::COLOR_BayerGR2BGR, + cv::COLOR_BayerBG2GRAY, cv::COLOR_BayerGB2GRAY, cv::COLOR_BayerRG2GRAY, cv::COLOR_BayerGR2GRAY, + cv::gpu::COLOR_BayerBG2BGR_MHT, cv::gpu::COLOR_BayerGB2BGR_MHT, cv::gpu::COLOR_BayerRG2BGR_MHT, cv::gpu::COLOR_BayerGR2BGR_MHT, + cv::gpu::COLOR_BayerBG2GRAY_MHT, cv::gpu::COLOR_BayerGB2GRAY_MHT, cv::gpu::COLOR_BayerRG2GRAY_MHT, cv::gpu::COLOR_BayerGR2GRAY_MHT) + +DEF_PARAM_TEST(Sz_Code, cv::Size, DemosaicingCode); + +PERF_TEST_P(Sz_Code, ImgProc_Demosaicing, + Combine(GPU_TYPICAL_MAT_SIZES, + ValuesIn(DemosaicingCode::all()))) +{ + const cv::Size size = GET_PARAM(0); + const int code = GET_PARAM(1); + + cv::Mat src(size, CV_8UC1); + declare.in(src, WARMUP_RNG); + + if (PERF_RUN_GPU()) + { + const cv::gpu::GpuMat d_src(src); + cv::gpu::GpuMat dst; + + TEST_CYCLE() cv::gpu::demosaicing(d_src, dst, code); + + GPU_SANITY_CHECK(dst); + } + else + { + if (code >= cv::COLOR_COLORCVT_MAX) + { + FAIL_NO_CPU(); + } + else + { + cv::Mat dst; + + TEST_CYCLE() cv::cvtColor(src, dst, code); + + CPU_SANITY_CHECK(dst); + } + } +} + ////////////////////////////////////////////////////////////////////// // SwapChannels diff --git a/modules/gpu/src/color.cpp b/modules/gpu/src/color.cpp index 09986e8c33..76793d5200 100644 --- a/modules/gpu/src/color.cpp +++ b/modules/gpu/src/color.cpp @@ -48,6 +48,7 @@ using namespace cv::gpu; #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) void cv::gpu::cvtColor(const GpuMat&, GpuMat&, int, int, Stream&) { throw_nogpu(); } +void cv::gpu::demosaicing(const GpuMat&, GpuMat&, int, int, Stream&) { throw_nogpu(); } void cv::gpu::swapChannels(GpuMat&, const int[], Stream&) { throw_nogpu(); } void cv::gpu::gammaCorrection(const GpuMat&, GpuMat&, bool, Stream&) { throw_nogpu(); } @@ -62,6 +63,9 @@ namespace cv { namespace gpu { void Bayer2BGR_8u_gpu(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); template void Bayer2BGR_16u_gpu(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); + + template + void MHCdemosaic(PtrStepSzb src, int2 sourceOffset, PtrStepSzb dst, int2 firstRed, cudaStream_t stream); } }} @@ -1620,26 +1624,23 @@ namespace funcs[src.depth()][dcn - 1](src, dst, blue_last, start_with_green, StreamAccessor::getStream(stream)); } - void bayerBG_to_bgr(const GpuMat& src, GpuMat& dst, int dcn, Stream& stream) { bayer_to_bgr(src, dst, dcn, false, false, stream); } - void bayerGB_to_bgr(const GpuMat& src, GpuMat& dst, int dcn, Stream& stream) { bayer_to_bgr(src, dst, dcn, false, true, stream); } - void bayerRG_to_bgr(const GpuMat& src, GpuMat& dst, int dcn, Stream& stream) { bayer_to_bgr(src, dst, dcn, true, false, stream); } - void bayerGR_to_bgr(const GpuMat& src, GpuMat& dst, int dcn, Stream& stream) { bayer_to_bgr(src, dst, dcn, true, true, stream); } + void bayer_to_gray(const GpuMat& src, GpuMat& dst, bool blue_last, bool start_with_green, Stream& stream) { typedef void (*func_t)(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); @@ -1657,22 +1658,18 @@ namespace funcs[src.depth()](src, dst, blue_last, start_with_green, StreamAccessor::getStream(stream)); } - void bayerBG_to_gray(const GpuMat& src, GpuMat& dst, int /*dcn*/, Stream& stream) { bayer_to_gray(src, dst, false, false, stream); } - void bayerGB_to_gray(const GpuMat& src, GpuMat& dst, int /*dcn*/, Stream& stream) { bayer_to_gray(src, dst, false, true, stream); } - void bayerRG_to_gray(const GpuMat& src, GpuMat& dst, int /*dcn*/, Stream& stream) { bayer_to_gray(src, dst, true, false, stream); } - void bayerGR_to_gray(const GpuMat& src, GpuMat& dst, int /*dcn*/, Stream& stream) { bayer_to_gray(src, dst, true, true, stream); @@ -1862,6 +1859,74 @@ void cv::gpu::cvtColor(const GpuMat& src, GpuMat& dst, int code, int dcn, Stream func(src, dst, dcn, stream); } +void cv::gpu::demosaicing(const GpuMat& src, GpuMat& dst, int code, int dcn, Stream& stream) +{ + const int depth = src.depth(); + + CV_Assert( src.channels() == 1 ); + + switch (code) + { + case CV_BayerBG2GRAY: case CV_BayerGB2GRAY: case CV_BayerRG2GRAY: case CV_BayerGR2GRAY: + bayer_to_gray(src, dst, code == CV_BayerBG2GRAY || code == CV_BayerGB2GRAY, code == CV_BayerGB2GRAY || code == CV_BayerGR2GRAY, stream); + break; + + case CV_BayerBG2BGR: case CV_BayerGB2BGR: case CV_BayerRG2BGR: case CV_BayerGR2BGR: + bayer_to_bgr(src, dst, dcn, code == CV_BayerBG2BGR || code == CV_BayerGB2BGR, code == CV_BayerGB2BGR || code == CV_BayerGR2BGR, stream); + break; + + case COLOR_BayerBG2BGR_MHT: case COLOR_BayerGB2BGR_MHT: case COLOR_BayerRG2BGR_MHT: case COLOR_BayerGR2BGR_MHT: + { + if (dcn <= 0) + dcn = 3; + + CV_Assert( depth == CV_8U ); + CV_Assert( dcn == 3 || dcn == 4 ); + + dst.create(src.size(), CV_MAKETYPE(depth, dcn)); + dst.setTo(Scalar::all(0)); + + Size wholeSize; + Point ofs; + src.locateROI(wholeSize, ofs); + PtrStepSzb srcWhole(wholeSize.height, wholeSize.width, src.datastart, src.step); + + const int2 firstRed = make_int2(code == COLOR_BayerRG2BGR_MHT || code == COLOR_BayerGB2BGR_MHT ? 0 : 1, + code == COLOR_BayerRG2BGR_MHT || code == COLOR_BayerGR2BGR_MHT ? 0 : 1); + + if (dcn == 3) + device::MHCdemosaic<3>(srcWhole, make_int2(ofs.x, ofs.y), dst, firstRed, StreamAccessor::getStream(stream)); + else + device::MHCdemosaic<4>(srcWhole, make_int2(ofs.x, ofs.y), dst, firstRed, StreamAccessor::getStream(stream)); + + break; + } + + case COLOR_BayerBG2GRAY_MHT: case COLOR_BayerGB2GRAY_MHT: case COLOR_BayerRG2GRAY_MHT: case COLOR_BayerGR2GRAY_MHT: + { + CV_Assert( depth == CV_8U ); + + dst.create(src.size(), CV_MAKETYPE(depth, 1)); + dst.setTo(Scalar::all(0)); + + Size wholeSize; + Point ofs; + src.locateROI(wholeSize, ofs); + PtrStepSzb srcWhole(wholeSize.height, wholeSize.width, src.datastart, src.step); + + const int2 firstRed = make_int2(code == COLOR_BayerRG2BGR_MHT || code == COLOR_BayerGB2BGR_MHT ? 0 : 1, + code == COLOR_BayerRG2BGR_MHT || code == COLOR_BayerGR2BGR_MHT ? 0 : 1); + + device::MHCdemosaic<1>(srcWhole, make_int2(ofs.x, ofs.y), dst, firstRed, StreamAccessor::getStream(stream)); + + break; + } + + default: + CV_Error( CV_StsBadFlag, "Unknown / unsupported color conversion code" ); + } +} + void cv::gpu::swapChannels(GpuMat& image, const int dstOrder[4], Stream& s) { CV_Assert(image.type() == CV_8UC4); diff --git a/modules/gpu/src/cuda/debayer.cu b/modules/gpu/src/cuda/debayer.cu index fc43726291..1d2f18e7a8 100644 --- a/modules/gpu/src/cuda/debayer.cu +++ b/modules/gpu/src/cuda/debayer.cu @@ -47,6 +47,7 @@ #include "opencv2/gpu/device/vec_math.hpp" #include "opencv2/gpu/device/limits.hpp" #include "opencv2/gpu/device/color.hpp" +#include "opencv2/gpu/device/saturate_cast.hpp" namespace cv { namespace gpu { namespace device { @@ -379,6 +380,165 @@ namespace cv { namespace gpu { namespace device template void Bayer2BGR_16u_gpu<1>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); template void Bayer2BGR_16u_gpu<3>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); template void Bayer2BGR_16u_gpu<4>(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream); + + ////////////////////////////////////////////////////////////// + // Bayer Demosaicing (Malvar, He, and Cutler) + // + // by Morgan McGuire, Williams College + // http://graphics.cs.williams.edu/papers/BayerJGT09/#shaders + // + // ported to CUDA + + texture sourceTex(false, cudaFilterModePoint, cudaAddressModeClamp); + + template + __global__ void MHCdemosaic(PtrStepSz dst, const int2 sourceOffset, const int2 firstRed) + { + const float kAx = -1.0f / 8.0f, kAy = -1.5f / 8.0f, kAz = 0.5f / 8.0f /*kAw = -1.0f / 8.0f*/; + const float kBx = 2.0f / 8.0f, /*kBy = 0.0f / 8.0f,*/ /*kBz = 0.0f / 8.0f,*/ kBw = 4.0f / 8.0f ; + const float kCx = 4.0f / 8.0f, kCy = 6.0f / 8.0f, kCz = 5.0f / 8.0f /*kCw = 5.0f / 8.0f*/; + const float /*kDx = 0.0f / 8.0f,*/ kDy = 2.0f / 8.0f, kDz = -1.0f / 8.0f /*kDw = -1.0f / 8.0f*/; + const float kEx = -1.0f / 8.0f, kEy = -1.5f / 8.0f, /*kEz = -1.0f / 8.0f,*/ kEw = 0.5f / 8.0f ; + const float kFx = 2.0f / 8.0f, /*kFy = 0.0f / 8.0f,*/ kFz = 4.0f / 8.0f /*kFw = 0.0f / 8.0f*/; + + const int x = blockIdx.x * blockDim.x + threadIdx.x; + const int y = blockIdx.y * blockDim.y + threadIdx.y; + + if (x == 0 || x >= dst.cols - 1 || y == 0 || y >= dst.rows - 1) + return; + + int2 center; + center.x = x + sourceOffset.x; + center.y = y + sourceOffset.y; + + int4 xCoord; + xCoord.x = center.x - 2; + xCoord.y = center.x - 1; + xCoord.z = center.x + 1; + xCoord.w = center.x + 2; + + int4 yCoord; + yCoord.x = center.y - 2; + yCoord.y = center.y - 1; + yCoord.z = center.y + 1; + yCoord.w = center.y + 2; + + float C = tex2D(sourceTex, center.x, center.y); // ( 0, 0) + + float4 Dvec; + Dvec.x = tex2D(sourceTex, xCoord.y, yCoord.y); // (-1,-1) + Dvec.y = tex2D(sourceTex, xCoord.y, yCoord.z); // (-1, 1) + Dvec.z = tex2D(sourceTex, xCoord.z, yCoord.y); // ( 1,-1) + Dvec.w = tex2D(sourceTex, xCoord.z, yCoord.z); // ( 1, 1) + + float4 value; + value.x = tex2D(sourceTex, center.x, yCoord.x); // ( 0,-2) A0 + value.y = tex2D(sourceTex, center.x, yCoord.y); // ( 0,-1) B0 + value.z = tex2D(sourceTex, xCoord.x, center.y); // (-2, 0) E0 + value.w = tex2D(sourceTex, xCoord.y, center.y); // (-1, 0) F0 + + // (A0 + A1), (B0 + B1), (E0 + E1), (F0 + F1) + value.x += tex2D(sourceTex, center.x, yCoord.w); // ( 0, 2) A1 + value.y += tex2D(sourceTex, center.x, yCoord.z); // ( 0, 1) B1 + value.z += tex2D(sourceTex, xCoord.w, center.y); // ( 2, 0) E1 + value.w += tex2D(sourceTex, xCoord.z, center.y); // ( 1, 0) F1 + + float4 PATTERN; + PATTERN.x = kCx * C; + PATTERN.y = kCy * C; + PATTERN.z = kCz * C; + PATTERN.w = PATTERN.z; + + float D = Dvec.x + Dvec.y + Dvec.z + Dvec.w; + + // There are five filter patterns (identity, cross, checker, + // theta, phi). Precompute the terms from all of them and then + // use swizzles to assign to color channels. + // + // Channel Matches + // x cross (e.g., EE G) + // y checker (e.g., EE B) + // z theta (e.g., EO R) + // w phi (e.g., EO B) + + #define A value.x // A0 + A1 + #define B value.y // B0 + B1 + #define E value.z // E0 + E1 + #define F value.w // F0 + F1 + + float3 temp; + + // PATTERN.yzw += (kD.yz * D).xyy; + temp.x = kDy * D; + temp.y = kDz * D; + PATTERN.y += temp.x; + PATTERN.z += temp.y; + PATTERN.w += temp.y; + + // PATTERN += (kA.xyz * A).xyzx; + temp.x = kAx * A; + temp.y = kAy * A; + temp.z = kAz * A; + PATTERN.x += temp.x; + PATTERN.y += temp.y; + PATTERN.z += temp.z; + PATTERN.w += temp.x; + + // PATTERN += (kE.xyw * E).xyxz; + temp.x = kEx * E; + temp.y = kEy * E; + temp.z = kEw * E; + PATTERN.x += temp.x; + PATTERN.y += temp.y; + PATTERN.z += temp.x; + PATTERN.w += temp.z; + + // PATTERN.xw += kB.xw * B; + PATTERN.x += kBx * B; + PATTERN.w += kBw * B; + + // PATTERN.xz += kF.xz * F; + PATTERN.x += kFx * F; + PATTERN.z += kFz * F; + + // Determine which of four types of pixels we are on. + int2 alternate; + alternate.x = (x + firstRed.x) % 2; + alternate.y = (y + firstRed.y) % 2; + + // in BGR sequence; + uchar3 pixelColor = + (alternate.y == 0) ? + ((alternate.x == 0) ? + make_uchar3(saturate_cast(PATTERN.y), saturate_cast(PATTERN.x), saturate_cast(C)) : + make_uchar3(saturate_cast(PATTERN.w), saturate_cast(C), saturate_cast(PATTERN.z))) : + ((alternate.x == 0) ? + make_uchar3(saturate_cast(PATTERN.z), saturate_cast(C), saturate_cast(PATTERN.w)) : + make_uchar3(saturate_cast(C), saturate_cast(PATTERN.x), saturate_cast(PATTERN.y))); + + dst(y, x) = toDst(pixelColor); + } + + template + void MHCdemosaic(PtrStepSzb src, int2 sourceOffset, PtrStepSzb dst, int2 firstRed, cudaStream_t stream) + { + typedef typename TypeVec::vec_type dst_t; + + const dim3 block(32, 8); + const dim3 grid(divUp(src.cols, block.x), divUp(src.rows, block.y)); + + bindTexture(&sourceTex, src); + + MHCdemosaic<<>>((PtrStepSz)dst, sourceOffset, firstRed); + cudaSafeCall( cudaGetLastError() ); + + if (stream == 0) + cudaSafeCall( cudaDeviceSynchronize() ); + } + + template void MHCdemosaic<1>(PtrStepSzb src, int2 sourceOffset, PtrStepSzb dst, int2 firstRed, cudaStream_t stream); + template void MHCdemosaic<3>(PtrStepSzb src, int2 sourceOffset, PtrStepSzb dst, int2 firstRed, cudaStream_t stream); + template void MHCdemosaic<4>(PtrStepSzb src, int2 sourceOffset, PtrStepSzb dst, int2 firstRed, cudaStream_t stream); }}} #endif /* CUDA_DISABLER */ diff --git a/modules/gpu/test/test_color.cpp b/modules/gpu/test/test_color.cpp index 81831af8c5..3657107d93 100644 --- a/modules/gpu/test/test_color.cpp +++ b/modules/gpu/test/test_color.cpp @@ -2288,6 +2288,175 @@ INSTANTIATE_TEST_CASE_P(GPU_ImgProc, CvtColor, testing::Combine( testing::Values(MatDepth(CV_8U), MatDepth(CV_16U), MatDepth(CV_32F)), WHOLE_SUBMAT)); +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Demosaicing + +struct Demosaicing : testing::TestWithParam +{ + cv::gpu::DeviceInfo devInfo; + + virtual void SetUp() + { + devInfo = GetParam(); + + cv::gpu::setDevice(devInfo.deviceID()); + } + + static void mosaic(const cv::Mat_& src, cv::Mat_& dst, cv::Point firstRed) + { + dst.create(src.size()); + + for (int y = 0; y < src.rows; ++y) + { + for (int x = 0; x < src.cols; ++x) + { + cv::Vec3b pix = src(y, x); + + cv::Point alternate; + alternate.x = (x + firstRed.x) % 2; + alternate.y = (y + firstRed.y) % 2; + + if (alternate.y == 0) + { + if (alternate.x == 0) + { + // RG + // GB + dst(y, x) = pix[2]; + } + else + { + // GR + // BG + dst(y, x) = pix[1]; + } + } + else + { + if (alternate.x == 0) + { + // GB + // RG + dst(y, x) = pix[1]; + } + else + { + // BG + // GR + dst(y, x) = pix[0]; + } + } + } + } + } +}; + +GPU_TEST_P(Demosaicing, BayerBG2BGR) +{ + cv::Mat img = readImage("stereobm/aloe-L.png"); + + cv::Mat_ src; + mosaic(img, src, cv::Point(1, 1)); + + cv::gpu::GpuMat dst; + cv::gpu::demosaicing(loadMat(src), dst, cv::COLOR_BayerBG2BGR); + + EXPECT_MAT_SIMILAR(img, dst, 2e-2); +} + +GPU_TEST_P(Demosaicing, BayerGB2BGR) +{ + cv::Mat img = readImage("stereobm/aloe-L.png"); + + cv::Mat_ src; + mosaic(img, src, cv::Point(0, 1)); + + cv::gpu::GpuMat dst; + cv::gpu::demosaicing(loadMat(src), dst, cv::COLOR_BayerGB2BGR); + + EXPECT_MAT_SIMILAR(img, dst, 2e-2); +} + +GPU_TEST_P(Demosaicing, BayerRG2BGR) +{ + cv::Mat img = readImage("stereobm/aloe-L.png"); + + cv::Mat_ src; + mosaic(img, src, cv::Point(0, 0)); + + cv::gpu::GpuMat dst; + cv::gpu::demosaicing(loadMat(src), dst, cv::COLOR_BayerRG2BGR); + + EXPECT_MAT_SIMILAR(img, dst, 2e-2); +} + +GPU_TEST_P(Demosaicing, BayerGR2BGR) +{ + cv::Mat img = readImage("stereobm/aloe-L.png"); + + cv::Mat_ src; + mosaic(img, src, cv::Point(1, 0)); + + cv::gpu::GpuMat dst; + cv::gpu::demosaicing(loadMat(src), dst, cv::COLOR_BayerGR2BGR); + + EXPECT_MAT_SIMILAR(img, dst, 2e-2); +} + +GPU_TEST_P(Demosaicing, BayerBG2BGR_MHT) +{ + cv::Mat img = readImage("stereobm/aloe-L.png"); + + cv::Mat_ src; + mosaic(img, src, cv::Point(1, 1)); + + cv::gpu::GpuMat dst; + cv::gpu::demosaicing(loadMat(src), dst, cv::gpu::COLOR_BayerBG2BGR_MHT); + + EXPECT_MAT_SIMILAR(img, dst, 5e-3); +} + +GPU_TEST_P(Demosaicing, BayerGB2BGR_MHT) +{ + cv::Mat img = readImage("stereobm/aloe-L.png"); + + cv::Mat_ src; + mosaic(img, src, cv::Point(0, 1)); + + cv::gpu::GpuMat dst; + cv::gpu::demosaicing(loadMat(src), dst, cv::gpu::COLOR_BayerGB2BGR_MHT); + + EXPECT_MAT_SIMILAR(img, dst, 5e-3); +} + +GPU_TEST_P(Demosaicing, BayerRG2BGR_MHT) +{ + cv::Mat img = readImage("stereobm/aloe-L.png"); + + cv::Mat_ src; + mosaic(img, src, cv::Point(0, 0)); + + cv::gpu::GpuMat dst; + cv::gpu::demosaicing(loadMat(src), dst, cv::gpu::COLOR_BayerRG2BGR_MHT); + + EXPECT_MAT_SIMILAR(img, dst, 5e-3); +} + +GPU_TEST_P(Demosaicing, BayerGR2BGR_MHT) +{ + cv::Mat img = readImage("stereobm/aloe-L.png"); + + cv::Mat_ src; + mosaic(img, src, cv::Point(1, 0)); + + cv::gpu::GpuMat dst; + cv::gpu::demosaicing(loadMat(src), dst, cv::gpu::COLOR_BayerGR2BGR_MHT); + + EXPECT_MAT_SIMILAR(img, dst, 5e-3); +} + +INSTANTIATE_TEST_CASE_P(GPU_ImgProc, Demosaicing, ALL_DEVICES); + /////////////////////////////////////////////////////////////////////////////////////////////////////// // swapChannels From 2bf3104ee515e4f70afd3e29921b6d3edfbe2195 Mon Sep 17 00:00:00 2001 From: Anatoly Baksheev Date: Sun, 17 Mar 2013 18:43:55 +0400 Subject: [PATCH 12/41] bugfix in sample to support LBP classifier. To merge to master also. --- samples/gpu/cascadeclassifier.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/samples/gpu/cascadeclassifier.cpp b/samples/gpu/cascadeclassifier.cpp index 412183f107..dee9d16c72 100644 --- a/samples/gpu/cascadeclassifier.cpp +++ b/samples/gpu/cascadeclassifier.cpp @@ -216,7 +216,7 @@ int main(int argc, const char *argv[]) if (useGPU) { - cascade_gpu.visualizeInPlace = true; + //cascade_gpu.visualizeInPlace = true; cascade_gpu.findLargestObject = findLargestObject; detections_num = cascade_gpu.detectMultiScale(resized_gpu, facesBuf_gpu, 1.2, @@ -245,6 +245,11 @@ int main(int argc, const char *argv[]) if (useGPU) { resized_gpu.download(resized_cpu); + + for (int i = 0; i < detections_num; ++i) + { + rectangle(resized_cpu, faces_downloaded.ptr()[i], Scalar(255)); + } } tm.stop(); From e153f0631c2d212fbf8eb98ae7e038d5656a7861 Mon Sep 17 00:00:00 2001 From: Daniil Osokin Date: Thu, 14 Mar 2013 21:19:08 +0400 Subject: [PATCH 13/41] Added missing enums for cvtColor RGB to YUV420p --- .../imgproc/include/opencv2/imgproc/imgproc.hpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/modules/imgproc/include/opencv2/imgproc/imgproc.hpp b/modules/imgproc/include/opencv2/imgproc/imgproc.hpp index caa2d55b5c..5d6633087e 100644 --- a/modules/imgproc/include/opencv2/imgproc/imgproc.hpp +++ b/modules/imgproc/include/opencv2/imgproc/imgproc.hpp @@ -1050,7 +1050,21 @@ enum COLOR_RGBA2mRGBA = 125, COLOR_mRGBA2RGBA = 126, - COLOR_COLORCVT_MAX = 127 + COLOR_RGB2YUV_I420 = 127, + COLOR_BGR2YUV_I420 = 128, + COLOR_RGB2YUV_IYUV = COLOR_RGB2YUV_I420, + COLOR_BGR2YUV_IYUV = COLOR_BGR2YUV_I420, + + COLOR_RGBA2YUV_I420 = 129, + COLOR_BGRA2YUV_I420 = 130, + COLOR_RGBA2YUV_IYUV = COLOR_RGBA2YUV_I420, + COLOR_BGRA2YUV_IYUV = COLOR_BGRA2YUV_I420, + COLOR_RGB2YUV_YV12 = 131, + COLOR_BGR2YUV_YV12 = 132, + COLOR_RGBA2YUV_YV12 = 133, + COLOR_BGRA2YUV_YV12 = 134, + + COLOR_COLORCVT_MAX = 135 }; From 436d9bbcbb15220bd1305125d0d0f79ae95aa28f Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Mon, 4 Mar 2013 14:49:33 +0400 Subject: [PATCH 14/41] Base for Native Activity example added. --- cmake/OpenCVDetectAndroidSDK.cmake | 10 + samples/android/CMakeLists.txt | 4 + .../native-activity/AndroidManifest.xml | 28 +++ .../android/native-activity/jni/Android.mk | 12 + .../native-activity/jni/Application.mk | 2 + .../android/native-activity/jni/native.cpp | 222 ++++++++++++++++++ .../native-activity/res/drawable/icon.png | Bin 0 -> 1997 bytes .../native-activity/res/values/strings.xml | 4 + 8 files changed, 282 insertions(+) create mode 100644 samples/android/native-activity/AndroidManifest.xml create mode 100644 samples/android/native-activity/jni/Android.mk create mode 100644 samples/android/native-activity/jni/Application.mk create mode 100644 samples/android/native-activity/jni/native.cpp create mode 100644 samples/android/native-activity/res/drawable/icon.png create mode 100644 samples/android/native-activity/res/values/strings.xml diff --git a/cmake/OpenCVDetectAndroidSDK.cmake b/cmake/OpenCVDetectAndroidSDK.cmake index 0e0240ca86..b125561d4a 100644 --- a/cmake/OpenCVDetectAndroidSDK.cmake +++ b/cmake/OpenCVDetectAndroidSDK.cmake @@ -264,13 +264,23 @@ macro(add_android_project target path) ocv_list_filterout(android_proj_jni_files "\\\\.svn") if(android_proj_jni_files AND EXISTS ${path}/jni/Android.mk AND NOT DEFINED JNI_LIB_NAME) + # find local module name in Android.mk file to build native lib file(STRINGS "${path}/jni/Android.mk" JNI_LIB_NAME REGEX "LOCAL_MODULE[ ]*:=[ ]*.*" ) string(REGEX REPLACE "LOCAL_MODULE[ ]*:=[ ]*([a-zA-Z_][a-zA-Z_0-9]*)[ ]*" "\\1" JNI_LIB_NAME "${JNI_LIB_NAME}") + # find using of native app glue to determine native activity + file(STRINGS "${path}/jni/Android.mk" NATIVE_APP_GLUE REGEX ".*(call import-module,android/native_app_glue)" ) + if(JNI_LIB_NAME) ocv_include_modules_recurse(${android_proj_NATIVE_DEPS}) ocv_include_directories("${path}/jni") + if (NATIVE_APP_GLUE) + include_directories(${ANDROID_NDK}/sources/android/native_app_glue) + list(APPEND android_proj_jni_files ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c) + set(android_proj_NATIVE_DEPS ${android_proj_NATIVE_DEPS} android) + endif() + add_library(${JNI_LIB_NAME} MODULE ${android_proj_jni_files}) target_link_libraries(${JNI_LIB_NAME} ${OPENCV_LINKER_LIBS} ${android_proj_NATIVE_DEPS}) diff --git a/samples/android/CMakeLists.txt b/samples/android/CMakeLists.txt index a0794cb972..9d7b0cbf0f 100644 --- a/samples/android/CMakeLists.txt +++ b/samples/android/CMakeLists.txt @@ -11,6 +11,10 @@ add_subdirectory(face-detection) add_subdirectory(image-manipulations) add_subdirectory(color-blob-detection) +if (ANDROID_NATIVE_API_LEVEL GREATER 8) + add_subdirectory(native-activity) +endif() + add_subdirectory(tutorial-1-camerapreview) add_subdirectory(tutorial-2-mixedprocessing) add_subdirectory(tutorial-3-cameracontrol) diff --git a/samples/android/native-activity/AndroidManifest.xml b/samples/android/native-activity/AndroidManifest.xml new file mode 100644 index 0000000000..e7b1f1217d --- /dev/null +++ b/samples/android/native-activity/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/android/native-activity/jni/Android.mk b/samples/android/native-activity/jni/Android.mk new file mode 100644 index 0000000000..6b1564aa90 --- /dev/null +++ b/samples/android/native-activity/jni/Android.mk @@ -0,0 +1,12 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := native_activity +LOCAL_SRC_FILES := native.cpp +LOCAL_LDLIBS := -lm -llog -landroid +LOCAL_STATIC_LIBRARIES := android_native_app_glue + +include $(BUILD_SHARED_LIBRARY) + +$(call import-module,android/native_app_glue) diff --git a/samples/android/native-activity/jni/Application.mk b/samples/android/native-activity/jni/Application.mk new file mode 100644 index 0000000000..a89e12df19 --- /dev/null +++ b/samples/android/native-activity/jni/Application.mk @@ -0,0 +1,2 @@ +APP_ABI := armeabi-v7a +APP_PLATFORM := android-9 diff --git a/samples/android/native-activity/jni/native.cpp b/samples/android/native-activity/jni/native.cpp new file mode 100644 index 0000000000..494ad66bbe --- /dev/null +++ b/samples/android/native-activity/jni/native.cpp @@ -0,0 +1,222 @@ +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#define LOG_TAG "OCV:libnative_activity" +#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) +#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) +#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__) +#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) + +struct Engine +{ + android_app* app; + cv::Ptr capture; +}; + +cv::Size calcOptimalResolution(const char* supported, int width, int height) +{ + int frameWidth = 0; + int frameHeight = 0; + + size_t prev_idx = 0; + size_t idx = 0; + float minDiff = FLT_MAX; + + do + { + int tmp_width; + int tmp_height; + + prev_idx = idx; + while ((supported[idx] != '\0') && (supported[idx] != ',')) + idx++; + + sscanf(&supported[prev_idx], "%dx%d", &tmp_width, &tmp_height); + + int w_diff = width - tmp_width; + int h_diff = height - tmp_height; + if ((h_diff >= 0) && (w_diff >= 0)) + { + if ((h_diff <= minDiff) && (tmp_height <= 720)) + { + frameWidth = tmp_width; + frameHeight = tmp_height; + minDiff = h_diff; + } + } + + idx++; // to skip coma symbol + + } while(supported[idx-1] != '\0'); + + return cv::Size(frameWidth, frameHeight); +} + +static void engine_draw_frame(Engine* engine, const cv::Mat& frame) +{ + if (engine->app->window == NULL) + { + return; // No window. + } + + ANativeWindow_Buffer buffer; + if (ANativeWindow_lock(engine->app->window, &buffer, NULL) < 0) + { + LOGW("Unable to lock window buffer"); + return; + } + + void* pixels = buffer.bits; + + for (int yy = 0; yy < std::min(frame.rows, buffer.height); yy++) + { + unsigned char* line = (unsigned char*)pixels; + memcpy(line, frame.ptr(yy), + std::min(frame.cols, buffer.width)*4*sizeof(unsigned char)); + // go to next line + pixels = (int32_t*)pixels + buffer.stride; + } + ANativeWindow_unlockAndPost(engine->app->window); +} + +static void engine_handle_cmd(android_app* app, int32_t cmd) +{ + Engine* engine = (Engine*)app->userData; + switch (cmd) + { + case APP_CMD_INIT_WINDOW: + if (app->window != NULL) + { + LOGI("APP_CMD_INIT_WINDOW"); + + engine->capture = new cv::VideoCapture(0); + + union {double prop; const char* name;} u; + u.prop = engine->capture->get(CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING); + + cv::Size resolution; + if (u.name) + resolution = calcOptimalResolution(u.name, + ANativeWindow_getWidth(app->window), + ANativeWindow_getHeight(app->window)); + else + { + LOGE("Cannot get supported camera resolutions"); + resolution = cv::Size(ANativeWindow_getWidth(app->window), + ANativeWindow_getHeight(app->window)); + } + + if ((resolution.width != 0) && (resolution.height != 0)) + { + engine->capture->set(CV_CAP_PROP_FRAME_WIDTH, resolution.width); + engine->capture->set(CV_CAP_PROP_FRAME_HEIGHT, resolution.height); + } + + if (ANativeWindow_setBuffersGeometry(app->window, resolution.width, + resolution.height, WINDOW_FORMAT_RGBA_8888) < 0) + { + LOGE("Cannot set pixel format!"); + return; + } + + LOGI("Camera initialized at resoution %dx%d", resolution.width, resolution.height); + } + break; + case APP_CMD_TERM_WINDOW: + LOGI("APP_CMD_TERM_WINDOW"); + + engine->capture->release(); + break; + } +} + +void android_main(android_app* app) +{ + Engine engine; + + // Make sure glue isn't stripped. + app_dummy(); + + memset(&engine, 0, sizeof(engine)); + app->userData = &engine; + app->onAppCmd = engine_handle_cmd; + engine.app = app; + + float fps = 0; + cv::Mat drawingFrame; + bool firstFrame = true; + std::queue timeQueue; + + // loop waiting for stuff to do. + while (1) + { + // Read all pending events. + int ident; + int events; + android_poll_source* source; + + // Process system events + while ((ident=ALooper_pollAll(0, NULL, &events, (void**)&source)) >= 0) + { + // Process this event. + if (source != NULL) + { + source->process(app, source); + } + + // Check if we are exiting. + if (app->destroyRequested != 0) + { + LOGI("Engine thread destroy requested!"); + return; + } + } + + int64 then; + int64 now = cv::getTickCount(); + timeQueue.push(now); + + // Capture frame from camera and draw it + if (!engine.capture.empty()) + { + if (engine.capture->grab()) + { + engine.capture->retrieve(drawingFrame, CV_CAP_ANDROID_COLOR_FRAME_RGBA); +// if (firstFrame) +// { +// firstFrame = false; +// engine.capture->set(CV_CAP_PROP_AUTOGRAB, 1); +// } + } + char buffer[256]; + sprintf(buffer, "Display performance: %dx%d @ %.3f", drawingFrame.cols, drawingFrame.rows, fps); + cv::putText(drawingFrame, std::string(buffer), cv::Point(8,64), cv::FONT_HERSHEY_COMPLEX_SMALL, 1, cv::Scalar(0,255,0,255)); + engine_draw_frame(&engine, drawingFrame); + } + + if (timeQueue.size() >= 2) + then = timeQueue.front(); + else + then = 0; + + if (timeQueue.size() >= 25) + timeQueue.pop(); + + fps = 1.f*timeQueue.size()*(float)cv::getTickFrequency()/(float)(now-then); + } +} diff --git a/samples/android/native-activity/res/drawable/icon.png b/samples/android/native-activity/res/drawable/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..630454927b592eb585c21527c430fc739c7970a6 GIT binary patch literal 1997 zcmV;;2Qv7HP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L04^f{04^f|c%?sf00007bV*G`2iyk& z2s4Z(uWcvB1k+?B|HcZ5+p(*;Q^&-8AtzSnVCK7?)^Xiwf0*7z0ZN;t#z9i`sgtpqdV3hDNF*c2bKc!qcQaX zUny)Tz}^_l!dPca%!U9i64N>!i~1_h=?F58~*Mqs?aUag-wNp3eJ zaArHlobMV1PMO^yg*noOAUz|E0i{}8`nIiHOW|~F4mjoR_GH_vZVKN?bHNdXe;To> zxdyn_TnD>62p5lGlR~e9qrf7C+ui6sX@;J1@Mx>Yo=qMBRs~*)bDAoXUZYSHTab?f z_PACCXF@bcF}lW`X>mi~9D%@SGZ2{F%CTpbhLf>?v)%*vE3D~)z{*wz=t^t3pfEGA zffL(4AU5DX%yUkKoB_Jb(8oFW!NI-`j{z#&Z&^_sT-34vIXFYp`=GEPgYAu)4n9D4 z%K`*+8v7m2z|O!Kz|Xto?PB|!;VL`0G=ur`jDlQ$D=+i6dSt)j#Si?i#3rh3ZDkkx z+9TWVDcFEP;8fsZmts4LZyQ^=NS&&oMq^DBPd9*r!p~~YrdwMdQuxcK)CgcvlC7iQ z6m}XDL=_ke!d;S<2IvOy5aI>4B-sk!6i-qAqn6i#qR%}BH;aqaE~#zv6|u2ViZHn? z1hW8E8rkz`nyn$2WU0dhK4^p<)W{{jH|2^S^#FZ&jV&V)7;HC58VOgls*{S?bCuB! zgJG~P)&TrE+Oa9jPq^~G`MQI^ISDar1?}7f7D?&qi-Zc{Oivqep0%xlm22B7?$lt? zRDoZ$&ZSsjO2nE0ft%CR$aVrKp5WRX7^zue>Cw3+QGx=M@MFBYs{CEWmLZ zN*9hpz)s*B96QRjjj`Qi_;Vb>Z73h0DK9}$-axr}l%1BFSp9)x9Ky;`(^n%*$`F!V zkY*oPaAK+6&unXUeSit`5c;F3iU&9)kOVILi%-C3#za9jc>jUr;Wvs~#jZ#FaZ!2fi34Sb1N@BsFCj&@J zs;eb(o@Ffe=D?d6qPKGdXKQjn9~5j94Pu>ge`)`61V~3frX{l7>dTEi%6<8;N9K*(u}%^bWomltk*Vp@k|^lo)yA?qH}(jBlCHBo51XA|gNf(* zoeh<>k{r9Y4)pw$!k7FX&+PyB(?mq~(*^;K7{UQF&X#s!ILS zHX&7zhmyZ|_z=x$C7sRWW=r7+&daHU&gPWWQt)uC*X>tEFZ6J;H6WaAcCCQRo2VjP z>v8^kmJJ*U_eqdHY-p9+xixW&Umgf^mpLS>_nMj zvaJlD2pv8o7#@|SuT=D$XZ)5=GJyZFvEPhNoO#NE^Nc>q2{?8F#Z+({^MQk9zw9zH z=)VjA4HzfT(Fq(eDSwVGl!7_^3!$70OgHG7MYIxpx7Q{~Cgnag|7WoceAizs@IKwlGBBq*Ioi0qby4ylKkgqvR5BcLR&Vy39?8 + + OCV Native Activity + From dc2bca07720392c9a62026bbd5cd5d5a605f6a2d Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Thu, 7 Mar 2013 15:13:30 +0400 Subject: [PATCH 15/41] Initialization with Manager instead static link added. --- .../native-activity/AndroidManifest.xml | 21 +++++---- .../android/native-activity/jni/Android.mk | 2 + .../NativeActivity/CvNativeActivity.java | 44 +++++++++++++++++++ 3 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 samples/android/native-activity/src/org/opencv/samples/NativeActivity/CvNativeActivity.java diff --git a/samples/android/native-activity/AndroidManifest.xml b/samples/android/native-activity/AndroidManifest.xml index e7b1f1217d..369bc75027 100644 --- a/samples/android/native-activity/AndroidManifest.xml +++ b/samples/android/native-activity/AndroidManifest.xml @@ -1,28 +1,33 @@ + android:debuggable="true"> + + + + + + + - - - - - + - + diff --git a/samples/android/native-activity/jni/Android.mk b/samples/android/native-activity/jni/Android.mk index 6b1564aa90..720d38b40d 100644 --- a/samples/android/native-activity/jni/Android.mk +++ b/samples/android/native-activity/jni/Android.mk @@ -2,6 +2,8 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) +include ../../sdk/native/jni/OpenCV.mk + LOCAL_MODULE := native_activity LOCAL_SRC_FILES := native.cpp LOCAL_LDLIBS := -lm -llog -landroid diff --git a/samples/android/native-activity/src/org/opencv/samples/NativeActivity/CvNativeActivity.java b/samples/android/native-activity/src/org/opencv/samples/NativeActivity/CvNativeActivity.java new file mode 100644 index 0000000000..d8e437533e --- /dev/null +++ b/samples/android/native-activity/src/org/opencv/samples/NativeActivity/CvNativeActivity.java @@ -0,0 +1,44 @@ +package org.opencv.samples.NativeActivity; + +import org.opencv.android.BaseLoaderCallback; +import org.opencv.android.LoaderCallbackInterface; +import org.opencv.android.OpenCVLoader; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; + +public class CvNativeActivity extends Activity { + private static final String TAG = "OCVSample::Activity"; + + private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { + @Override + public void onManagerConnected(int status) { + switch (status) { + case LoaderCallbackInterface.SUCCESS: + { + Log.i(TAG, "OpenCV loaded successfully"); + System.loadLibrary("native_activity"); + Intent intent = new Intent(CvNativeActivity.this, android.app.NativeActivity.class); + CvNativeActivity.this.startActivity(intent); + } break; + default: + { + super.onManagerConnected(status); + } break; + } + } + }; + + public CvNativeActivity() { + Log.i(TAG, "Instantiated new " + this.getClass()); + } + + @Override + public void onResume() + { + super.onResume(); + OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback); + } +} \ No newline at end of file From fca1f006d833d966803341296522de0506127622 Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Mon, 18 Mar 2013 12:12:17 +0400 Subject: [PATCH 16/41] Tegra4 support added. --- .../jni/BinderComponent/HardwareDetector.cpp | 15 +++---------- .../jni/BinderComponent/HardwareDetector.h | 1 + .../jni/BinderComponent/TegraDetector.cpp | 8 +++++++ .../NativeService/CommonPackageManager.cpp | 5 +++-- .../engine/jni/NativeService/PackageInfo.cpp | 9 ++++++++ .../engine/jni/NativeService/PackageInfo.h | 3 +-- .../engine/jni/Tests/OpenCVEngineTest.cpp | 18 +++++++++++++++ .../engine/jni/Tests/PackageInfoTest.cpp | 22 +++++++++++++++++++ .../engine/jni/Tests/PackageManagmentTest.cpp | 16 ++++++++++++++ .../org/opencv/engine/HardwareDetector.java | 2 ++ .../engine/manager/ManagerActivity.java | 10 ++++++--- 11 files changed, 90 insertions(+), 19 deletions(-) diff --git a/android/service/engine/jni/BinderComponent/HardwareDetector.cpp b/android/service/engine/jni/BinderComponent/HardwareDetector.cpp index b5e0fa6001..eab49ac5f3 100644 --- a/android/service/engine/jni/BinderComponent/HardwareDetector.cpp +++ b/android/service/engine/jni/BinderComponent/HardwareDetector.cpp @@ -163,22 +163,13 @@ int DetectKnownPlatforms() { int tegra_status = DetectTegra(); - if (3 == tegra_status) + // All Tegra platforms since Tegra3 + if (2 < tegra_status) { - return PLATFORM_TEGRA3; + return PLATFORM_TEGRA + tegra_status - 1; } else { return PLATFORM_UNKNOWN; } - - // NOTE: Uncomment when all Tegras will be supported - /*if (tegra_status > 0) - * { - * return PLATFORM_TEGRA + tegra_status - 1; - } - else - { - return PLATFORM_UNKNOWN; - }*/ } \ No newline at end of file diff --git a/android/service/engine/jni/BinderComponent/HardwareDetector.h b/android/service/engine/jni/BinderComponent/HardwareDetector.h index e049db9c5f..135684418b 100644 --- a/android/service/engine/jni/BinderComponent/HardwareDetector.h +++ b/android/service/engine/jni/BinderComponent/HardwareDetector.h @@ -27,6 +27,7 @@ #define PLATFORM_TEGRA 1L #define PLATFORM_TEGRA2 2L #define PLATFORM_TEGRA3 3L +#define PLATFORM_TEGRA4 4L int DetectKnownPlatforms(); int GetProcessorCount(); diff --git a/android/service/engine/jni/BinderComponent/TegraDetector.cpp b/android/service/engine/jni/BinderComponent/TegraDetector.cpp index f7db1fa85d..3933efe499 100644 --- a/android/service/engine/jni/BinderComponent/TegraDetector.cpp +++ b/android/service/engine/jni/BinderComponent/TegraDetector.cpp @@ -7,6 +7,7 @@ #define KERNEL_CONFIG_TEGRA_MAGIC "CONFIG_ARCH_TEGRA=y" #define KERNEL_CONFIG_TEGRA2_MAGIC "CONFIG_ARCH_TEGRA_2x_SOC=y" #define KERNEL_CONFIG_TEGRA3_MAGIC "CONFIG_ARCH_TEGRA_3x_SOC=y" +#define KERNEL_CONFIG_TEGRA4_MAGIC "CONFIG_ARCH_TEGRA_11x_SOC=y" #define MAX_DATA_LEN 4096 int DetectTegra() @@ -19,9 +20,11 @@ int DetectTegra() const char *tegra_config = KERNEL_CONFIG_TEGRA_MAGIC; const char *tegra2_config = KERNEL_CONFIG_TEGRA2_MAGIC; const char *tegra3_config = KERNEL_CONFIG_TEGRA3_MAGIC; + const char *tegra4_config = KERNEL_CONFIG_TEGRA4_MAGIC; int len = strlen(tegra_config); int len2 = strlen(tegra2_config); int len3 = strlen(tegra3_config); + int len4 = strlen(tegra4_config); while (0 != gzgets(kernelConfig, tmpbuf, KERNEL_CONFIG_MAX_LINE_WIDTH)) { if (0 == strncmp(tmpbuf, tegra_config, len)) @@ -41,6 +44,11 @@ int DetectTegra() break; } + if (0 == strncmp(tmpbuf, tegra4_config, len4)) + { + result = 4; + break; + } } gzclose(kernelConfig); } diff --git a/android/service/engine/jni/NativeService/CommonPackageManager.cpp b/android/service/engine/jni/NativeService/CommonPackageManager.cpp index dbcd8ff689..eaa03d4d82 100644 --- a/android/service/engine/jni/NativeService/CommonPackageManager.cpp +++ b/android/service/engine/jni/NativeService/CommonPackageManager.cpp @@ -197,6 +197,7 @@ std::vector > CommonPackageManager::InitArmRating() result.push_back(std::pair(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON)); result.push_back(std::pair(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv3d16 | FEATURES_HAS_NEON)); result.push_back(std::pair(PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON)); + result.push_back(std::pair(PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON)); return result; } @@ -218,8 +219,8 @@ std::vector > CommonPackageManager::InitMipsRating() } const std::vector > CommonPackageManager::ArchRatings[] = { - CommonPackageManager::InitArmRating(), - CommonPackageManager::InitIntelRating(), + CommonPackageManager::InitArmRating(), + CommonPackageManager::InitIntelRating(), CommonPackageManager::InitMipsRating() }; diff --git a/android/service/engine/jni/NativeService/PackageInfo.cpp b/android/service/engine/jni/NativeService/PackageInfo.cpp index 2eb8230739..2f8dde043a 100644 --- a/android/service/engine/jni/NativeService/PackageInfo.cpp +++ b/android/service/engine/jni/NativeService/PackageInfo.cpp @@ -18,6 +18,7 @@ map PackageInfo::InitPlatformNameMap() result[PLATFORM_TEGRA] = PLATFORM_TEGRA_NAME; result[PLATFORM_TEGRA2] = PLATFORM_TEGRA2_NAME; result[PLATFORM_TEGRA3] = PLATFORM_TEGRA3_NAME; + result[PLATFORM_TEGRA4] = PLATFORM_TEGRA4_NAME; return result; } @@ -186,6 +187,10 @@ inline int SplitPlatfrom(const vector& features) { result = PLATFORM_TEGRA3; } + else if (PLATFORM_TEGRA4_NAME == tmp) + { + result = PLATFORM_TEGRA4; + } } else { @@ -425,6 +430,10 @@ InstallPath(install_path) { CpuID = ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON; } break; + case PLATFORM_TEGRA4: + { + CpuID = ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON; + } break; } } else diff --git a/android/service/engine/jni/NativeService/PackageInfo.h b/android/service/engine/jni/NativeService/PackageInfo.h index b86ef7a92e..2ce561e2f3 100644 --- a/android/service/engine/jni/NativeService/PackageInfo.h +++ b/android/service/engine/jni/NativeService/PackageInfo.h @@ -12,7 +12,6 @@ #define ARCH_ARMv7_NAME "armv7a" #define ARCH_ARMv8_NAME "armv8" - #define FEATURES_HAS_VFPv3d16_NAME "vfpv3d16" #define FEATURES_HAS_VFPv3_NAME "vfpv3" #define FEATURES_HAS_NEON_NAME "neon" @@ -25,7 +24,7 @@ #define PLATFORM_TEGRA_NAME "tegra" #define PLATFORM_TEGRA2_NAME "tegra2" #define PLATFORM_TEGRA3_NAME "tegra3" - +#define PLATFORM_TEGRA4_NAME "tegra4" class PackageInfo { diff --git a/android/service/engine/jni/Tests/OpenCVEngineTest.cpp b/android/service/engine/jni/Tests/OpenCVEngineTest.cpp index 4e390386fe..ce5159f818 100644 --- a/android/service/engine/jni/Tests/OpenCVEngineTest.cpp +++ b/android/service/engine/jni/Tests/OpenCVEngineTest.cpp @@ -201,6 +201,24 @@ TEST(OpenCVEngineTest, GetPathForCompatiblePackage2) #endif } +TEST(OpenCVEngineTest, GetPathForCompatiblePackage3) +{ + sp Engine = InitConnect(); + Starter.PackageManager->InstalledPackages.clear(); + Starter.PackageManager->InstallVersion(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON); + EXPECT_FALSE(NULL == Engine.get()); + String16 result = Engine->GetLibPathByVersion(String16("2.4")); + #ifdef __SUPPORT_TEGRA3 + EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra4/lib", String8(result).string()); + #else + #ifdef __SUPPORT_ARMEABI_V7A_FEATURES + EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", String8(result).string()); + #else + EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", String8(result).string()); + #endif + #endif +} + TEST(OpenCVEngineTest, InstallAndGetVersion) { sp Engine = InitConnect(); diff --git a/android/service/engine/jni/Tests/PackageInfoTest.cpp b/android/service/engine/jni/Tests/PackageInfoTest.cpp index 6bc84856ce..6cbb069431 100644 --- a/android/service/engine/jni/Tests/PackageInfoTest.cpp +++ b/android/service/engine/jni/Tests/PackageInfoTest.cpp @@ -85,6 +85,21 @@ TEST(PackageInfo, FullNameTegra3) #endif } +TEST(PackageInfo, FullNameTegra4) +{ + PackageInfo info(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_NEON); + string name = info.GetFullName(); + #ifdef __SUPPORT_TEGRA3 + EXPECT_STREQ("org.opencv.lib_v24_tegra4", name.c_str()); + #else + #ifdef __SUPPORT_ARMEABI_V7A_FEATURES + EXPECT_STREQ("org.opencv.lib_v24_armv7a_neon", name.c_str()); + #else + EXPECT_STREQ("org.opencv.lib_v24_armv7a", name.c_str()); + #endif + #endif +} + TEST(PackageInfo, FullNameX86SSE2) { PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2); @@ -148,6 +163,13 @@ TEST(PackageInfo, Tegra3FromFullName) EXPECT_EQ(PLATFORM_TEGRA3, info.GetPlatform()); } +TEST(PackageInfo, Tegra4FromFullName) +{ + PackageInfo info("org.opencv.lib_v24_tegra4", "/data/data/org.opencv.lib_v24_tegra4"); + EXPECT_EQ(2040000, info.GetVersion()); + EXPECT_EQ(PLATFORM_TEGRA4, info.GetPlatform()); +} + #ifdef __SUPPORT_MIPS TEST(PackageInfo, MipsFromFullName) { diff --git a/android/service/engine/jni/Tests/PackageManagmentTest.cpp b/android/service/engine/jni/Tests/PackageManagmentTest.cpp index f9ccb74844..e21dcf7604 100644 --- a/android/service/engine/jni/Tests/PackageManagmentTest.cpp +++ b/android/service/engine/jni/Tests/PackageManagmentTest.cpp @@ -102,6 +102,22 @@ TEST(PackageManager, GetPackagePathForTegra3) #endif } +TEST(PackageManager, GetPackagePathForTegra4) +{ + PackageManagerStub pm; + EXPECT_TRUE(pm.InstallVersion(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON)); + string path = pm.GetPackagePathByVersion(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON); + #ifdef __SUPPORT_TEGRA3 + EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra4/lib", path.c_str()); + #else + #ifdef __SUPPORT_ARMEABI_V7A_FEATURES + EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", path.c_str()); + #else + EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", path.c_str()); + #endif + #endif +} + #ifdef __SUPPORT_MIPS TEST(PackageManager, GetPackagePathForMips) { diff --git a/android/service/engine/src/org/opencv/engine/HardwareDetector.java b/android/service/engine/src/org/opencv/engine/HardwareDetector.java index 7e2a6135f9..67320865af 100644 --- a/android/service/engine/src/org/opencv/engine/HardwareDetector.java +++ b/android/service/engine/src/org/opencv/engine/HardwareDetector.java @@ -33,6 +33,8 @@ public class HardwareDetector public static final int PLATFORM_TEGRA = 1; public static final int PLATFORM_TEGRA2 = 2; public static final int PLATFORM_TEGRA3 = 3; + public static final int PLATFORM_TEGRA4 = 4; + public static final int PLATFORM_UNKNOWN = 0; diff --git a/android/service/engine/src/org/opencv/engine/manager/ManagerActivity.java b/android/service/engine/src/org/opencv/engine/manager/ManagerActivity.java index fad2797727..5213d91495 100644 --- a/android/service/engine/src/org/opencv/engine/manager/ManagerActivity.java +++ b/android/service/engine/src/org/opencv/engine/manager/ManagerActivity.java @@ -83,10 +83,14 @@ public class ManagerActivity extends Activity { HardwarePlatformView.setText("Tegra 2"); } - else + else if (HardwareDetector.PLATFORM_TEGRA3 == Platfrom) { HardwarePlatformView.setText("Tegra 3"); } + else + { + HardwarePlatformView.setText("Tegra 4"); + } } else { @@ -367,10 +371,10 @@ public class ManagerActivity extends Activity temp.put("Version", NormalizeVersion(OpenCVersion, VersionName)); // HACK: OpenCV Manager for Armv7-a Neon already has Tegra3 optimizations // that is enabled on proper hardware - if (HardwareDetector.DetectKnownPlatforms() == HardwareDetector.PLATFORM_TEGRA3 && + if (HardwareDetector.DetectKnownPlatforms() >= HardwareDetector.PLATFORM_TEGRA3 && HardwareName.equals("armv7a neon ") && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { - temp.put("Hardware", "Tegra 3"); + temp.put("Hardware", "Tegra"); if (Tags == null) { Tags = "optimized"; From abc9ef68094d6d1b8118565b01f2dea79f47e170 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Fri, 15 Mar 2013 14:09:10 +0400 Subject: [PATCH 17/41] moved utility functions from gpu_perf_test and gpu_test to ts module --- modules/gpu/perf/perf_calib3d.cpp | 1 + modules/gpu/perf/perf_denoising.cpp | 1 + modules/gpu/perf/perf_features2d.cpp | 100 +---- modules/gpu/perf/perf_filters.cpp | 1 + modules/gpu/perf/perf_labeling.cpp | 1 + modules/gpu/perf/perf_main.cpp | 67 +-- modules/gpu/perf/perf_matop.cpp | 1 + modules/gpu/perf/perf_objdetect.cpp | 1 + modules/gpu/perf/perf_precomp.hpp | 4 +- modules/gpu/perf/utility.cpp | 184 -------- modules/gpu/perf/utility.hpp | 63 --- modules/gpu/perf4au/main.cpp | 56 +-- modules/gpu/test/main.cpp | 66 --- modules/gpu/test/test_bgfg.cpp | 2 + modules/gpu/test/test_calib3d.cpp | 2 + modules/gpu/test/test_color.cpp | 2 + modules/gpu/test/test_copy_make_border.cpp | 2 + modules/gpu/test/test_core.cpp | 2 + modules/gpu/test/test_denoising.cpp | 2 + modules/gpu/test/test_features2d.cpp | 301 +------------ modules/gpu/test/test_filters.cpp | 2 + modules/gpu/test/test_gpumat.cpp | 2 + modules/gpu/test/test_hough.cpp | 2 + modules/gpu/test/test_imgproc.cpp | 2 + modules/gpu/test/test_objdetect.cpp | 2 + modules/gpu/test/test_opengl.cpp | 2 + modules/gpu/test/test_optflow.cpp | 2 + modules/gpu/test/test_precomp.hpp | 8 +- modules/gpu/test/test_pyramids.cpp | 2 + modules/gpu/test/test_remap.cpp | 2 + modules/gpu/test/test_resize.cpp | 2 + modules/gpu/test/test_stream.cpp | 2 + modules/gpu/test/test_threshold.cpp | 2 + modules/gpu/test/test_warp_affine.cpp | 2 + modules/gpu/test/test_warp_perspective.cpp | 2 + modules/gpu/test/utility.cpp | 407 ----------------- modules/gpu/test/utility.hpp | 332 -------------- modules/superres/perf/perf_main.cpp | 4 +- modules/superres/perf/perf_precomp.hpp | 1 + modules/superres/perf/perf_superres.cpp | 12 - modules/ts/CMakeLists.txt | 4 + modules/ts/include/opencv2/ts/gpu_perf.hpp | 68 +++ modules/ts/include/opencv2/ts/gpu_test.hpp | 307 +++++++++++++ modules/ts/src/gpu_perf.cpp | 313 ++++++++++++++ modules/ts/src/gpu_test.cpp | 479 +++++++++++++++++++++ 45 files changed, 1232 insertions(+), 1590 deletions(-) delete mode 100644 modules/gpu/perf/utility.cpp delete mode 100644 modules/gpu/perf/utility.hpp delete mode 100644 modules/gpu/test/utility.cpp delete mode 100644 modules/gpu/test/utility.hpp create mode 100644 modules/ts/include/opencv2/ts/gpu_perf.hpp create mode 100644 modules/ts/include/opencv2/ts/gpu_test.hpp create mode 100644 modules/ts/src/gpu_perf.cpp create mode 100644 modules/ts/src/gpu_test.cpp diff --git a/modules/gpu/perf/perf_calib3d.cpp b/modules/gpu/perf/perf_calib3d.cpp index b174d9a12e..3631236feb 100644 --- a/modules/gpu/perf/perf_calib3d.cpp +++ b/modules/gpu/perf/perf_calib3d.cpp @@ -2,6 +2,7 @@ using namespace std; using namespace testing; +using namespace perf; ////////////////////////////////////////////////////////////////////// // StereoBM diff --git a/modules/gpu/perf/perf_denoising.cpp b/modules/gpu/perf/perf_denoising.cpp index 6f03994bd9..e4ce9f3c38 100644 --- a/modules/gpu/perf/perf_denoising.cpp +++ b/modules/gpu/perf/perf_denoising.cpp @@ -2,6 +2,7 @@ using namespace std; using namespace testing; +using namespace perf; #define GPU_DENOISING_IMAGE_SIZES testing::Values(perf::szVGA, perf::sz720p) diff --git a/modules/gpu/perf/perf_features2d.cpp b/modules/gpu/perf/perf_features2d.cpp index 480f582383..c6b1f598a4 100644 --- a/modules/gpu/perf/perf_features2d.cpp +++ b/modules/gpu/perf/perf_features2d.cpp @@ -2,105 +2,7 @@ using namespace std; using namespace testing; - -struct KeypointIdxCompare -{ - std::vector* keypoints; - - explicit KeypointIdxCompare(std::vector* _keypoints) : keypoints(_keypoints) {} - - bool operator ()(size_t i1, size_t i2) const - { - cv::KeyPoint kp1 = (*keypoints)[i1]; - cv::KeyPoint kp2 = (*keypoints)[i2]; - if (kp1.pt.x != kp2.pt.x) - return kp1.pt.x < kp2.pt.x; - if (kp1.pt.y != kp2.pt.y) - return kp1.pt.y < kp2.pt.y; - if (kp1.response != kp2.response) - return kp1.response < kp2.response; - return kp1.octave < kp2.octave; - } -}; - -static void sortKeyPoints(std::vector& keypoints, cv::InputOutputArray _descriptors = cv::noArray()) -{ - std::vector indexies(keypoints.size()); - for (size_t i = 0; i < indexies.size(); ++i) - indexies[i] = i; - - std::sort(indexies.begin(), indexies.end(), KeypointIdxCompare(&keypoints)); - - std::vector new_keypoints; - cv::Mat new_descriptors; - - new_keypoints.resize(keypoints.size()); - - cv::Mat descriptors; - if (_descriptors.needed()) - { - descriptors = _descriptors.getMat(); - new_descriptors.create(descriptors.size(), descriptors.type()); - } - - for (size_t i = 0; i < indexies.size(); ++i) - { - size_t new_idx = indexies[i]; - new_keypoints[i] = keypoints[new_idx]; - if (!new_descriptors.empty()) - descriptors.row((int) new_idx).copyTo(new_descriptors.row((int) i)); - } - - keypoints.swap(new_keypoints); - if (_descriptors.needed()) - new_descriptors.copyTo(_descriptors); -} - -////////////////////////////////////////////////////////////////////// -// SURF - -DEF_PARAM_TEST_1(Image, string); - -PERF_TEST_P(Image, Features2D_SURF, - Values("gpu/perf/aloe.png")) -{ - declare.time(50.0); - - const cv::Mat img = readImage(GetParam(), cv::IMREAD_GRAYSCALE); - ASSERT_FALSE(img.empty()); - - if (PERF_RUN_GPU()) - { - cv::gpu::SURF_GPU d_surf; - - const cv::gpu::GpuMat d_img(img); - cv::gpu::GpuMat d_keypoints, d_descriptors; - - TEST_CYCLE() d_surf(d_img, cv::gpu::GpuMat(), d_keypoints, d_descriptors); - - std::vector gpu_keypoints; - d_surf.downloadKeypoints(d_keypoints, gpu_keypoints); - - cv::Mat gpu_descriptors(d_descriptors); - - sortKeyPoints(gpu_keypoints, gpu_descriptors); - - SANITY_CHECK_KEYPOINTS(gpu_keypoints); - SANITY_CHECK(gpu_descriptors, 1e-3); - } - else - { - cv::SURF surf; - - std::vector cpu_keypoints; - cv::Mat cpu_descriptors; - - TEST_CYCLE() surf(img, cv::noArray(), cpu_keypoints, cpu_descriptors); - - SANITY_CHECK_KEYPOINTS(cpu_keypoints); - SANITY_CHECK(cpu_descriptors); - } -} +using namespace perf; ////////////////////////////////////////////////////////////////////// // FAST diff --git a/modules/gpu/perf/perf_filters.cpp b/modules/gpu/perf/perf_filters.cpp index 3516954a6c..a343d10570 100644 --- a/modules/gpu/perf/perf_filters.cpp +++ b/modules/gpu/perf/perf_filters.cpp @@ -2,6 +2,7 @@ using namespace std; using namespace testing; +using namespace perf; ////////////////////////////////////////////////////////////////////// // Blur diff --git a/modules/gpu/perf/perf_labeling.cpp b/modules/gpu/perf/perf_labeling.cpp index f3ad12c949..cbc9ff0a2f 100644 --- a/modules/gpu/perf/perf_labeling.cpp +++ b/modules/gpu/perf/perf_labeling.cpp @@ -2,6 +2,7 @@ using namespace std; using namespace testing; +using namespace perf; DEF_PARAM_TEST_1(Image, string); diff --git a/modules/gpu/perf/perf_main.cpp b/modules/gpu/perf/perf_main.cpp index 312b744482..07c1b519cc 100644 --- a/modules/gpu/perf/perf_main.cpp +++ b/modules/gpu/perf/perf_main.cpp @@ -1,70 +1,5 @@ #include "perf_precomp.hpp" -static void printOsInfo() -{ -#if defined _WIN32 -# if defined _WIN64 - printf("[----------]\n[ GPU INFO ] \tRun on OS Windows x64.\n[----------]\n"), fflush(stdout); -# else - printf("[----------]\n[ GPU INFO ] \tRun on OS Windows x32.\n[----------]\n"), fflush(stdout); -# endif -#elif defined linux -# if defined _LP64 - printf("[----------]\n[ GPU INFO ] \tRun on OS Linux x64.\n[----------]\n"), fflush(stdout); -# else - printf("[----------]\n[ GPU INFO ] \tRun on OS Linux x32.\n[----------]\n"), fflush(stdout); -# endif -#elif defined __APPLE__ -# if defined _LP64 - printf("[----------]\n[ GPU INFO ] \tRun on OS Apple x64.\n[----------]\n"), fflush(stdout); -# else - printf("[----------]\n[ GPU INFO ] \tRun on OS Apple x32.\n[----------]\n"), fflush(stdout); -# endif -#endif - -} - -static void printCudaInfo() -{ - printOsInfo(); -#ifndef HAVE_CUDA - printf("[----------]\n[ GPU INFO ] \tOpenCV was built without CUDA support.\n[----------]\n"), fflush(stdout); -#else - int driver; - cudaDriverGetVersion(&driver); - - printf("[----------]\n"), fflush(stdout); - printf("[ GPU INFO ] \tCUDA Driver version: %d.\n", driver), fflush(stdout); - printf("[ GPU INFO ] \tCUDA Runtime version: %d.\n", CUDART_VERSION), fflush(stdout); - printf("[----------]\n"), fflush(stdout); - - printf("[----------]\n"), fflush(stdout); - printf("[ GPU INFO ] \tGPU module was compiled for the following GPU archs.\n"), fflush(stdout); - printf("[ BIN ] \t%s.\n", CUDA_ARCH_BIN), fflush(stdout); - printf("[ PTX ] \t%s.\n", CUDA_ARCH_PTX), fflush(stdout); - printf("[----------]\n"), fflush(stdout); - - printf("[----------]\n"), fflush(stdout); - int deviceCount = cv::gpu::getCudaEnabledDeviceCount(); - printf("[ GPU INFO ] \tCUDA device count:: %d.\n", deviceCount), fflush(stdout); - printf("[----------]\n"), fflush(stdout); - - for (int i = 0; i < deviceCount; ++i) - { - cv::gpu::DeviceInfo info(i); - - printf("[----------]\n"), fflush(stdout); - printf("[ DEVICE ] \t# %d %s.\n", i, info.name().c_str()), fflush(stdout); - printf("[ ] \tCompute capability: %d.%d\n", (int)info.majorVersion(), (int)info.minorVersion()), fflush(stdout); - printf("[ ] \tMulti Processor Count: %d\n", info.multiProcessorCount()), fflush(stdout); - printf("[ ] \tTotal memory: %d Mb\n", static_cast(static_cast(info.totalMemory() / 1024.0) / 1024.0)), fflush(stdout); - printf("[ ] \tFree memory: %d Mb\n", static_cast(static_cast(info.freeMemory() / 1024.0) / 1024.0)), fflush(stdout); - if (!info.isCompatible()) - printf("[ GPU INFO ] \tThis device is NOT compatible with current GPU module build\n"); - printf("[----------]\n"), fflush(stdout); - } - -#endif -} +using namespace perf; CV_PERF_TEST_MAIN(gpu, printCudaInfo()) diff --git a/modules/gpu/perf/perf_matop.cpp b/modules/gpu/perf/perf_matop.cpp index 1696e3a7eb..f2803f0f2c 100644 --- a/modules/gpu/perf/perf_matop.cpp +++ b/modules/gpu/perf/perf_matop.cpp @@ -2,6 +2,7 @@ using namespace std; using namespace testing; +using namespace perf; ////////////////////////////////////////////////////////////////////// // SetTo diff --git a/modules/gpu/perf/perf_objdetect.cpp b/modules/gpu/perf/perf_objdetect.cpp index 969ac10762..51c8695d1f 100644 --- a/modules/gpu/perf/perf_objdetect.cpp +++ b/modules/gpu/perf/perf_objdetect.cpp @@ -2,6 +2,7 @@ using namespace std; using namespace testing; +using namespace perf; /////////////////////////////////////////////////////////////// // HOG diff --git a/modules/gpu/perf/perf_precomp.hpp b/modules/gpu/perf/perf_precomp.hpp index 4dca93c442..c1edaf4642 100644 --- a/modules/gpu/perf/perf_precomp.hpp +++ b/modules/gpu/perf/perf_precomp.hpp @@ -20,6 +20,7 @@ #include "opencv2/ts/ts.hpp" #include "opencv2/ts/ts_perf.hpp" +#include "opencv2/ts/gpu_perf.hpp" #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" @@ -27,12 +28,9 @@ #include "opencv2/calib3d/calib3d.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/video/video.hpp" -#include "opencv2/nonfree/nonfree.hpp" #include "opencv2/legacy/legacy.hpp" #include "opencv2/photo/photo.hpp" -#include "utility.hpp" - #ifdef GTEST_CREATE_SHARED_LIBRARY #error no modules except ts should have GTEST_CREATE_SHARED_LIBRARY defined #endif diff --git a/modules/gpu/perf/utility.cpp b/modules/gpu/perf/utility.cpp deleted file mode 100644 index 16c61e0c7d..0000000000 --- a/modules/gpu/perf/utility.cpp +++ /dev/null @@ -1,184 +0,0 @@ -#include "perf_precomp.hpp" - -using namespace std; -using namespace cv; - -Mat readImage(const string& fileName, int flags) -{ - return imread(perf::TestBase::getDataPath(fileName), flags); -} - -void PrintTo(const CvtColorInfo& info, ostream* os) -{ - static const char* str[] = - { - "BGR2BGRA", - "BGRA2BGR", - "BGR2RGBA", - "RGBA2BGR", - "BGR2RGB", - "BGRA2RGBA", - - "BGR2GRAY", - "RGB2GRAY", - "GRAY2BGR", - "GRAY2BGRA", - "BGRA2GRAY", - "RGBA2GRAY", - - "BGR2BGR565", - "RGB2BGR565", - "BGR5652BGR", - "BGR5652RGB", - "BGRA2BGR565", - "RGBA2BGR565", - "BGR5652BGRA", - "BGR5652RGBA", - - "GRAY2BGR565", - "BGR5652GRAY", - - "BGR2BGR555", - "RGB2BGR555", - "BGR5552BGR", - "BGR5552RGB", - "BGRA2BGR555", - "RGBA2BGR555", - "BGR5552BGRA", - "BGR5552RGBA", - - "GRAY2BGR555", - "BGR5552GRAY", - - "BGR2XYZ", - "RGB2XYZ", - "XYZ2BGR", - "XYZ2RGB", - - "BGR2YCrCb", - "RGB2YCrCb", - "YCrCb2BGR", - "YCrCb2RGB", - - "BGR2HSV", - "RGB2HSV", - - "", - "", - - "BGR2Lab", - "RGB2Lab", - - "BayerBG2BGR", - "BayerGB2BGR", - "BayerRG2BGR", - "BayerGR2BGR", - - "BGR2Luv", - "RGB2Luv", - - "BGR2HLS", - "RGB2HLS", - - "HSV2BGR", - "HSV2RGB", - - "Lab2BGR", - "Lab2RGB", - "Luv2BGR", - "Luv2RGB", - - "HLS2BGR", - "HLS2RGB", - - "BayerBG2BGR_VNG", - "BayerGB2BGR_VNG", - "BayerRG2BGR_VNG", - "BayerGR2BGR_VNG", - - "BGR2HSV_FULL", - "RGB2HSV_FULL", - "BGR2HLS_FULL", - "RGB2HLS_FULL", - - "HSV2BGR_FULL", - "HSV2RGB_FULL", - "HLS2BGR_FULL", - "HLS2RGB_FULL", - - "LBGR2Lab", - "LRGB2Lab", - "LBGR2Luv", - "LRGB2Luv", - - "Lab2LBGR", - "Lab2LRGB", - "Luv2LBGR", - "Luv2LRGB", - - "BGR2YUV", - "RGB2YUV", - "YUV2BGR", - "YUV2RGB", - - "BayerBG2GRAY", - "BayerGB2GRAY", - "BayerRG2GRAY", - "BayerGR2GRAY", - - //YUV 4:2:0 formats family - "YUV2RGB_NV12", - "YUV2BGR_NV12", - "YUV2RGB_NV21", - "YUV2BGR_NV21", - - "YUV2RGBA_NV12", - "YUV2BGRA_NV12", - "YUV2RGBA_NV21", - "YUV2BGRA_NV21", - - "YUV2RGB_YV12", - "YUV2BGR_YV12", - "YUV2RGB_IYUV", - "YUV2BGR_IYUV", - - "YUV2RGBA_YV12", - "YUV2BGRA_YV12", - "YUV2RGBA_IYUV", - "YUV2BGRA_IYUV", - - "YUV2GRAY_420", - - //YUV 4:2:2 formats family - "YUV2RGB_UYVY", - "YUV2BGR_UYVY", - "YUV2RGB_VYUY", - "YUV2BGR_VYUY", - - "YUV2RGBA_UYVY", - "YUV2BGRA_UYVY", - "YUV2RGBA_VYUY", - "YUV2BGRA_VYUY", - - "YUV2RGB_YUY2", - "YUV2BGR_YUY2", - "YUV2RGB_YVYU", - "YUV2BGR_YVYU", - - "YUV2RGBA_YUY2", - "YUV2BGRA_YUY2", - "YUV2RGBA_YVYU", - "YUV2BGRA_YVYU", - - "YUV2GRAY_UYVY", - "YUV2GRAY_YUY2", - - // alpha premultiplication - "RGBA2mRGBA", - "mRGBA2RGBA", - - "COLORCVT_MAX" - }; - - *os << str[info.code]; -} diff --git a/modules/gpu/perf/utility.hpp b/modules/gpu/perf/utility.hpp deleted file mode 100644 index cff4cdd77d..0000000000 --- a/modules/gpu/perf/utility.hpp +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef __OPENCV_PERF_GPU_UTILITY_HPP__ -#define __OPENCV_PERF_GPU_UTILITY_HPP__ - -#include "opencv2/core/core.hpp" -#include "opencv2/imgproc/imgproc.hpp" -#include "opencv2/ts/ts_perf.hpp" - -cv::Mat readImage(const std::string& fileName, int flags = cv::IMREAD_COLOR); - -using perf::MatType; -using perf::MatDepth; - -CV_ENUM(BorderMode, cv::BORDER_REFLECT101, cv::BORDER_REPLICATE, cv::BORDER_CONSTANT, cv::BORDER_REFLECT, cv::BORDER_WRAP) -#define ALL_BORDER_MODES testing::ValuesIn(BorderMode::all()) - -CV_ENUM(Interpolation, cv::INTER_NEAREST, cv::INTER_LINEAR, cv::INTER_CUBIC, cv::INTER_AREA) -#define ALL_INTERPOLATIONS testing::ValuesIn(Interpolation::all()) - -CV_ENUM(NormType, cv::NORM_INF, cv::NORM_L1, cv::NORM_L2, cv::NORM_HAMMING, cv::NORM_MINMAX) - -enum { Gray = 1, TwoChannel = 2, BGR = 3, BGRA = 4 }; -CV_ENUM(MatCn, Gray, TwoChannel, BGR, BGRA) -#define GPU_CHANNELS_1_3_4 testing::Values(MatCn(Gray), MatCn(BGR), MatCn(BGRA)) -#define GPU_CHANNELS_1_3 testing::Values(MatCn(Gray), MatCn(BGR)) - -struct CvtColorInfo -{ - int scn; - int dcn; - int code; - - CvtColorInfo() {} - explicit CvtColorInfo(int scn_, int dcn_, int code_) : scn(scn_), dcn(dcn_), code(code_) {} -}; -void PrintTo(const CvtColorInfo& info, std::ostream* os); - -#define GET_PARAM(k) std::tr1::get< k >(GetParam()) - -#define DEF_PARAM_TEST(name, ...) typedef ::perf::TestBaseWithParam< std::tr1::tuple< __VA_ARGS__ > > name -#define DEF_PARAM_TEST_1(name, param_type) typedef ::perf::TestBaseWithParam< param_type > name - -DEF_PARAM_TEST_1(Sz, cv::Size); -typedef perf::Size_MatType Sz_Type; -DEF_PARAM_TEST(Sz_Depth, cv::Size, MatDepth); -DEF_PARAM_TEST(Sz_Depth_Cn, cv::Size, MatDepth, MatCn); - -#define GPU_TYPICAL_MAT_SIZES testing::Values(perf::sz720p, perf::szSXGA, perf::sz1080p) - -#define FAIL_NO_CPU() FAIL() << "No such CPU implementation analogy" - -#define GPU_SANITY_CHECK(mat, ...) \ - do{ \ - cv::Mat gpu_##mat(mat); \ - SANITY_CHECK(gpu_##mat, ## __VA_ARGS__); \ - } while(0) - -#define CPU_SANITY_CHECK(mat, ...) \ - do{ \ - cv::Mat cpu_##mat(mat); \ - SANITY_CHECK(cpu_##mat, ## __VA_ARGS__); \ - } while(0) - -#endif // __OPENCV_PERF_GPU_UTILITY_HPP__ diff --git a/modules/gpu/perf4au/main.cpp b/modules/gpu/perf4au/main.cpp index 80d97ea806..f13349ecdd 100644 --- a/modules/gpu/perf4au/main.cpp +++ b/modules/gpu/perf4au/main.cpp @@ -9,69 +9,19 @@ #include "opencv2/legacy/legacy.hpp" #include "opencv2/ts/ts.hpp" #include "opencv2/ts/ts_perf.hpp" - -static void printOsInfo() -{ -#if defined _WIN32 -# if defined _WIN64 - printf("[----------]\n[ GPU INFO ] \tRun on OS Windows x64.\n[----------]\n"); fflush(stdout); -# else - printf("[----------]\n[ GPU INFO ] \tRun on OS Windows x32.\n[----------]\n"); fflush(stdout); -# endif -#elif defined linux -# if defined _LP64 - printf("[----------]\n[ GPU INFO ] \tRun on OS Linux x64.\n[----------]\n"); fflush(stdout); -# else - printf("[----------]\n[ GPU INFO ] \tRun on OS Linux x32.\n[----------]\n"); fflush(stdout); -# endif -#elif defined __APPLE__ -# if defined _LP64 - printf("[----------]\n[ GPU INFO ] \tRun on OS Apple x64.\n[----------]\n"); fflush(stdout); -# else - printf("[----------]\n[ GPU INFO ] \tRun on OS Apple x32.\n[----------]\n"); fflush(stdout); -# endif -#endif -} - -static void printCudaInfo() -{ - const int deviceCount = cv::gpu::getCudaEnabledDeviceCount(); - - printf("[----------]\n"); fflush(stdout); - printf("[ GPU INFO ] \tCUDA device count:: %d.\n", deviceCount); fflush(stdout); - printf("[----------]\n"); fflush(stdout); - - for (int i = 0; i < deviceCount; ++i) - { - cv::gpu::DeviceInfo info(i); - - printf("[----------]\n"); fflush(stdout); - printf("[ DEVICE ] \t# %d %s.\n", i, info.name().c_str()); fflush(stdout); - printf("[ ] \tCompute capability: %d.%d\n", info.majorVersion(), info.minorVersion()); fflush(stdout); - printf("[ ] \tMulti Processor Count: %d\n", info.multiProcessorCount()); fflush(stdout); - printf("[ ] \tTotal memory: %d Mb\n", static_cast(static_cast(info.totalMemory() / 1024.0) / 1024.0)); fflush(stdout); - printf("[ ] \tFree memory: %d Mb\n", static_cast(static_cast(info.freeMemory() / 1024.0) / 1024.0)); fflush(stdout); - if (!info.isCompatible()) - printf("[ GPU INFO ] \tThis device is NOT compatible with current GPU module build\n"); - printf("[----------]\n"); fflush(stdout); - } -} +#include "opencv2/ts/gpu_perf.hpp" int main(int argc, char* argv[]) { - printOsInfo(); - printCudaInfo(); + perf::printCudaInfo(); - perf::Regression::Init("nv_perf_test"); + perf::Regression::Init("gpu_perf4au"); perf::TestBase::Init(argc, argv); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } -#define DEF_PARAM_TEST(name, ...) typedef ::perf::TestBaseWithParam< std::tr1::tuple< __VA_ARGS__ > > name -#define DEF_PARAM_TEST_1(name, param_type) typedef ::perf::TestBaseWithParam< param_type > name - ////////////////////////////////////////////////////////// // HoughLinesP diff --git a/modules/gpu/test/main.cpp b/modules/gpu/test/main.cpp index 63f891a19a..fbd24c50d8 100644 --- a/modules/gpu/test/main.cpp +++ b/modules/gpu/test/main.cpp @@ -49,71 +49,6 @@ using namespace cv::gpu; using namespace cvtest; using namespace testing; -void printOsInfo() -{ -#if defined _WIN32 -# if defined _WIN64 - cout << "OS: Windows x64 \n" << endl; -# else - cout << "OS: Windows x32 \n" << endl; -# endif -#elif defined linux -# if defined _LP64 - cout << "OS: Linux x64 \n" << endl; -# else - cout << "OS: Linux x32 \n" << endl; -# endif -#elif defined __APPLE__ -# if defined _LP64 - cout << "OS: Apple x64 \n" << endl; -# else - cout << "OS: Apple x32 \n" << endl; -# endif -#endif -} - -void printCudaInfo() -{ -#if !defined HAVE_CUDA || defined(CUDA_DISABLER) - cout << "OpenCV was built without CUDA support \n" << endl; -#else - int driver; - cudaDriverGetVersion(&driver); - - cout << "CUDA Driver version: " << driver << '\n'; - cout << "CUDA Runtime version: " << CUDART_VERSION << '\n'; - - cout << endl; - - cout << "GPU module was compiled for the following GPU archs:" << endl; - cout << " BIN: " << CUDA_ARCH_BIN << '\n'; - cout << " PTX: " << CUDA_ARCH_PTX << '\n'; - - cout << endl; - - int deviceCount = getCudaEnabledDeviceCount(); - cout << "CUDA device count: " << deviceCount << '\n'; - - cout << endl; - - for (int i = 0; i < deviceCount; ++i) - { - DeviceInfo info(i); - - cout << "Device [" << i << "] \n"; - cout << "\t Name: " << info.name() << '\n'; - cout << "\t Compute capability: " << info.majorVersion() << '.' << info.minorVersion()<< '\n'; - cout << "\t Multi Processor Count: " << info.multiProcessorCount() << '\n'; - cout << "\t Total memory: " << static_cast(static_cast(info.totalMemory() / 1024.0) / 1024.0) << " Mb \n"; - cout << "\t Free memory: " << static_cast(static_cast(info.freeMemory() / 1024.0) / 1024.0) << " Mb \n"; - if (!info.isCompatible()) - cout << "\t !!! This device is NOT compatible with current GPU module build \n"; - - cout << endl; - } -#endif -} - int main(int argc, char** argv) { try @@ -133,7 +68,6 @@ int main(int argc, char** argv) return 0; } - printOsInfo(); printCudaInfo(); if (cmd.get("info")) diff --git a/modules/gpu/test/test_bgfg.cpp b/modules/gpu/test/test_bgfg.cpp index ebf0a88afa..aea6eb7189 100644 --- a/modules/gpu/test/test_bgfg.cpp +++ b/modules/gpu/test/test_bgfg.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + ////////////////////////////////////////////////////// // FGDStatModel diff --git a/modules/gpu/test/test_calib3d.cpp b/modules/gpu/test/test_calib3d.cpp index 318de8d898..5a83662e6e 100644 --- a/modules/gpu/test/test_calib3d.cpp +++ b/modules/gpu/test/test_calib3d.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + ////////////////////////////////////////////////////////////////////////// // StereoBM diff --git a/modules/gpu/test/test_color.cpp b/modules/gpu/test/test_color.cpp index 3657107d93..112a749c61 100644 --- a/modules/gpu/test/test_color.cpp +++ b/modules/gpu/test/test_color.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + /////////////////////////////////////////////////////////////////////////////////////////////////////// // cvtColor diff --git a/modules/gpu/test/test_copy_make_border.cpp b/modules/gpu/test/test_copy_make_border.cpp index 0b59fe2d8a..99c565b38a 100644 --- a/modules/gpu/test/test_copy_make_border.cpp +++ b/modules/gpu/test/test_copy_make_border.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + namespace { IMPLEMENT_PARAM_CLASS(Border, int) diff --git a/modules/gpu/test/test_core.cpp b/modules/gpu/test/test_core.cpp index affc30610a..af86efc8ba 100644 --- a/modules/gpu/test/test_core.cpp +++ b/modules/gpu/test/test_core.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + //////////////////////////////////////////////////////////////////////////////// // Merge diff --git a/modules/gpu/test/test_denoising.cpp b/modules/gpu/test/test_denoising.cpp index fe0c548c71..df84817f84 100644 --- a/modules/gpu/test/test_denoising.cpp +++ b/modules/gpu/test/test_denoising.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + //////////////////////////////////////////////////////// // BilateralFilter diff --git a/modules/gpu/test/test_features2d.cpp b/modules/gpu/test/test_features2d.cpp index 3879ac0534..01741d8c6f 100644 --- a/modules/gpu/test/test_features2d.cpp +++ b/modules/gpu/test/test_features2d.cpp @@ -43,306 +43,7 @@ #ifdef HAVE_CUDA -namespace -{ - bool keyPointsEquals(const cv::KeyPoint& p1, const cv::KeyPoint& p2) - { - const double maxPtDif = 1.0; - const double maxSizeDif = 1.0; - const double maxAngleDif = 2.0; - const double maxResponseDif = 0.1; - - double dist = cv::norm(p1.pt - p2.pt); - - if (dist < maxPtDif && - fabs(p1.size - p2.size) < maxSizeDif && - abs(p1.angle - p2.angle) < maxAngleDif && - abs(p1.response - p2.response) < maxResponseDif && - p1.octave == p2.octave && - p1.class_id == p2.class_id) - { - return true; - } - - return false; - } - - struct KeyPointLess : std::binary_function - { - bool operator()(const cv::KeyPoint& kp1, const cv::KeyPoint& kp2) const - { - return kp1.pt.y < kp2.pt.y || (kp1.pt.y == kp2.pt.y && kp1.pt.x < kp2.pt.x); - } - }; - - testing::AssertionResult assertKeyPointsEquals(const char* gold_expr, const char* actual_expr, std::vector& gold, std::vector& actual) - { - if (gold.size() != actual.size()) - { - return testing::AssertionFailure() << "KeyPoints size mistmach\n" - << "\"" << gold_expr << "\" : " << gold.size() << "\n" - << "\"" << actual_expr << "\" : " << actual.size(); - } - - std::sort(actual.begin(), actual.end(), KeyPointLess()); - std::sort(gold.begin(), gold.end(), KeyPointLess()); - - for (size_t i = 0; i < gold.size(); ++i) - { - const cv::KeyPoint& p1 = gold[i]; - const cv::KeyPoint& p2 = actual[i]; - - if (!keyPointsEquals(p1, p2)) - { - return testing::AssertionFailure() << "KeyPoints differ at " << i << "\n" - << "\"" << gold_expr << "\" vs \"" << actual_expr << "\" : \n" - << "pt : " << testing::PrintToString(p1.pt) << " vs " << testing::PrintToString(p2.pt) << "\n" - << "size : " << p1.size << " vs " << p2.size << "\n" - << "angle : " << p1.angle << " vs " << p2.angle << "\n" - << "response : " << p1.response << " vs " << p2.response << "\n" - << "octave : " << p1.octave << " vs " << p2.octave << "\n" - << "class_id : " << p1.class_id << " vs " << p2.class_id; - } - } - - return ::testing::AssertionSuccess(); - } - - #define ASSERT_KEYPOINTS_EQ(gold, actual) EXPECT_PRED_FORMAT2(assertKeyPointsEquals, gold, actual); - - int getMatchedPointsCount(std::vector& gold, std::vector& actual) - { - std::sort(actual.begin(), actual.end(), KeyPointLess()); - std::sort(gold.begin(), gold.end(), KeyPointLess()); - - int validCount = 0; - - for (size_t i = 0; i < gold.size(); ++i) - { - const cv::KeyPoint& p1 = gold[i]; - const cv::KeyPoint& p2 = actual[i]; - - if (keyPointsEquals(p1, p2)) - ++validCount; - } - - return validCount; - } - - int getMatchedPointsCount(const std::vector& keypoints1, const std::vector& keypoints2, const std::vector& matches) - { - int validCount = 0; - - for (size_t i = 0; i < matches.size(); ++i) - { - const cv::DMatch& m = matches[i]; - - const cv::KeyPoint& p1 = keypoints1[m.queryIdx]; - const cv::KeyPoint& p2 = keypoints2[m.trainIdx]; - - if (keyPointsEquals(p1, p2)) - ++validCount; - } - - return validCount; - } -} - -///////////////////////////////////////////////////////////////////////////////////////////////// -// SURF - -namespace -{ - IMPLEMENT_PARAM_CLASS(SURF_HessianThreshold, double) - IMPLEMENT_PARAM_CLASS(SURF_Octaves, int) - IMPLEMENT_PARAM_CLASS(SURF_OctaveLayers, int) - IMPLEMENT_PARAM_CLASS(SURF_Extended, bool) - IMPLEMENT_PARAM_CLASS(SURF_Upright, bool) -} - -PARAM_TEST_CASE(SURF, cv::gpu::DeviceInfo, SURF_HessianThreshold, SURF_Octaves, SURF_OctaveLayers, SURF_Extended, SURF_Upright) -{ - cv::gpu::DeviceInfo devInfo; - double hessianThreshold; - int nOctaves; - int nOctaveLayers; - bool extended; - bool upright; - - virtual void SetUp() - { - devInfo = GET_PARAM(0); - hessianThreshold = GET_PARAM(1); - nOctaves = GET_PARAM(2); - nOctaveLayers = GET_PARAM(3); - extended = GET_PARAM(4); - upright = GET_PARAM(5); - - cv::gpu::setDevice(devInfo.deviceID()); - } -}; - -GPU_TEST_P(SURF, Detector) -{ - cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); - ASSERT_FALSE(image.empty()); - - cv::gpu::SURF_GPU surf; - surf.hessianThreshold = hessianThreshold; - surf.nOctaves = nOctaves; - surf.nOctaveLayers = nOctaveLayers; - surf.extended = extended; - surf.upright = upright; - surf.keypointsRatio = 0.05f; - - if (!supportFeature(devInfo, cv::gpu::GLOBAL_ATOMICS)) - { - try - { - std::vector keypoints; - surf(loadMat(image), cv::gpu::GpuMat(), keypoints); - } - catch (const cv::Exception& e) - { - ASSERT_EQ(CV_StsNotImplemented, e.code); - } - } - else - { - std::vector keypoints; - surf(loadMat(image), cv::gpu::GpuMat(), keypoints); - - cv::SURF surf_gold; - surf_gold.hessianThreshold = hessianThreshold; - surf_gold.nOctaves = nOctaves; - surf_gold.nOctaveLayers = nOctaveLayers; - surf_gold.extended = extended; - surf_gold.upright = upright; - - std::vector keypoints_gold; - surf_gold(image, cv::noArray(), keypoints_gold); - - ASSERT_EQ(keypoints_gold.size(), keypoints.size()); - int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints); - double matchedRatio = static_cast(matchedCount) / keypoints_gold.size(); - - EXPECT_GT(matchedRatio, 0.95); - } -} - -GPU_TEST_P(SURF, Detector_Masked) -{ - cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); - ASSERT_FALSE(image.empty()); - - cv::Mat mask(image.size(), CV_8UC1, cv::Scalar::all(1)); - mask(cv::Range(0, image.rows / 2), cv::Range(0, image.cols / 2)).setTo(cv::Scalar::all(0)); - - cv::gpu::SURF_GPU surf; - surf.hessianThreshold = hessianThreshold; - surf.nOctaves = nOctaves; - surf.nOctaveLayers = nOctaveLayers; - surf.extended = extended; - surf.upright = upright; - surf.keypointsRatio = 0.05f; - - if (!supportFeature(devInfo, cv::gpu::GLOBAL_ATOMICS)) - { - try - { - std::vector keypoints; - surf(loadMat(image), loadMat(mask), keypoints); - } - catch (const cv::Exception& e) - { - ASSERT_EQ(CV_StsNotImplemented, e.code); - } - } - else - { - std::vector keypoints; - surf(loadMat(image), loadMat(mask), keypoints); - - cv::SURF surf_gold; - surf_gold.hessianThreshold = hessianThreshold; - surf_gold.nOctaves = nOctaves; - surf_gold.nOctaveLayers = nOctaveLayers; - surf_gold.extended = extended; - surf_gold.upright = upright; - - std::vector keypoints_gold; - surf_gold(image, mask, keypoints_gold); - - ASSERT_EQ(keypoints_gold.size(), keypoints.size()); - int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints); - double matchedRatio = static_cast(matchedCount) / keypoints_gold.size(); - - EXPECT_GT(matchedRatio, 0.95); - } -} - -GPU_TEST_P(SURF, Descriptor) -{ - cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); - ASSERT_FALSE(image.empty()); - - cv::gpu::SURF_GPU surf; - surf.hessianThreshold = hessianThreshold; - surf.nOctaves = nOctaves; - surf.nOctaveLayers = nOctaveLayers; - surf.extended = extended; - surf.upright = upright; - surf.keypointsRatio = 0.05f; - - cv::SURF surf_gold; - surf_gold.hessianThreshold = hessianThreshold; - surf_gold.nOctaves = nOctaves; - surf_gold.nOctaveLayers = nOctaveLayers; - surf_gold.extended = extended; - surf_gold.upright = upright; - - if (!supportFeature(devInfo, cv::gpu::GLOBAL_ATOMICS)) - { - try - { - std::vector keypoints; - cv::gpu::GpuMat descriptors; - surf(loadMat(image), cv::gpu::GpuMat(), keypoints, descriptors); - } - catch (const cv::Exception& e) - { - ASSERT_EQ(CV_StsNotImplemented, e.code); - } - } - else - { - std::vector keypoints; - surf_gold(image, cv::noArray(), keypoints); - - cv::gpu::GpuMat descriptors; - surf(loadMat(image), cv::gpu::GpuMat(), keypoints, descriptors, true); - - cv::Mat descriptors_gold; - surf_gold(image, cv::noArray(), keypoints, descriptors_gold, true); - - cv::BFMatcher matcher(cv::NORM_L2); - std::vector matches; - matcher.match(descriptors_gold, cv::Mat(descriptors), matches); - - int matchedCount = getMatchedPointsCount(keypoints, keypoints, matches); - double matchedRatio = static_cast(matchedCount) / keypoints.size(); - - EXPECT_GT(matchedRatio, 0.6); - } -} - -INSTANTIATE_TEST_CASE_P(GPU_Features2D, SURF, testing::Combine( - ALL_DEVICES, - testing::Values(SURF_HessianThreshold(100.0), SURF_HessianThreshold(500.0), SURF_HessianThreshold(1000.0)), - testing::Values(SURF_Octaves(3), SURF_Octaves(4)), - testing::Values(SURF_OctaveLayers(2), SURF_OctaveLayers(3)), - testing::Values(SURF_Extended(false), SURF_Extended(true)), - testing::Values(SURF_Upright(false), SURF_Upright(true)))); +using namespace cvtest; ///////////////////////////////////////////////////////////////////////////////////////////////// // FAST diff --git a/modules/gpu/test/test_filters.cpp b/modules/gpu/test/test_filters.cpp index f6ae4067aa..b854da07ae 100644 --- a/modules/gpu/test/test_filters.cpp +++ b/modules/gpu/test/test_filters.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + namespace { IMPLEMENT_PARAM_CLASS(KSize, cv::Size) diff --git a/modules/gpu/test/test_gpumat.cpp b/modules/gpu/test/test_gpumat.cpp index 9ece87caa3..a5c38da4f4 100644 --- a/modules/gpu/test/test_gpumat.cpp +++ b/modules/gpu/test/test_gpumat.cpp @@ -44,6 +44,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + //////////////////////////////////////////////////////////////////////////////// // SetTo diff --git a/modules/gpu/test/test_hough.cpp b/modules/gpu/test/test_hough.cpp index b348331a10..e4d5ad6cf5 100644 --- a/modules/gpu/test/test_hough.cpp +++ b/modules/gpu/test/test_hough.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + /////////////////////////////////////////////////////////////////////////////////////////////////////// // HoughLines diff --git a/modules/gpu/test/test_imgproc.cpp b/modules/gpu/test/test_imgproc.cpp index 41a94299bf..ca64edf178 100644 --- a/modules/gpu/test/test_imgproc.cpp +++ b/modules/gpu/test/test_imgproc.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + /////////////////////////////////////////////////////////////////////////////////////////////////////// // Integral diff --git a/modules/gpu/test/test_objdetect.cpp b/modules/gpu/test/test_objdetect.cpp index fd610d9b50..cc66d6a313 100644 --- a/modules/gpu/test/test_objdetect.cpp +++ b/modules/gpu/test/test_objdetect.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + //#define DUMP struct HOG : testing::TestWithParam, cv::gpu::HOGDescriptor diff --git a/modules/gpu/test/test_opengl.cpp b/modules/gpu/test/test_opengl.cpp index 626851e30e..c6aa945ac9 100644 --- a/modules/gpu/test/test_opengl.cpp +++ b/modules/gpu/test/test_opengl.cpp @@ -43,6 +43,8 @@ #if defined(HAVE_CUDA) && defined(HAVE_OPENGL) +using namespace cvtest; + ///////////////////////////////////////////// // Buffer diff --git a/modules/gpu/test/test_optflow.cpp b/modules/gpu/test/test_optflow.cpp index a97516f6d1..ee60a432f4 100644 --- a/modules/gpu/test/test_optflow.cpp +++ b/modules/gpu/test/test_optflow.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + ////////////////////////////////////////////////////// // BroxOpticalFlow diff --git a/modules/gpu/test/test_precomp.hpp b/modules/gpu/test/test_precomp.hpp index e7ade6aed7..9be9863ca8 100644 --- a/modules/gpu/test/test_precomp.hpp +++ b/modules/gpu/test/test_precomp.hpp @@ -69,19 +69,19 @@ #include #include + #include "opencv2/ts/ts.hpp" + #include "opencv2/ts/ts_perf.hpp" + #include "opencv2/ts/gpu_test.hpp" + #include "opencv2/core/core.hpp" #include "opencv2/core/opengl_interop.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/calib3d/calib3d.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/video/video.hpp" - #include "opencv2/ts/ts.hpp" - #include "opencv2/ts/ts_perf.hpp" #include "opencv2/gpu/gpu.hpp" - #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/legacy/legacy.hpp" - #include "utility.hpp" #include "interpolation.hpp" #include "main_test_nvidia.h" #endif diff --git a/modules/gpu/test/test_pyramids.cpp b/modules/gpu/test/test_pyramids.cpp index c3d56b63a0..43665966ec 100644 --- a/modules/gpu/test/test_pyramids.cpp +++ b/modules/gpu/test/test_pyramids.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + //////////////////////////////////////////////////////// // pyrDown diff --git a/modules/gpu/test/test_remap.cpp b/modules/gpu/test/test_remap.cpp index a815ed0e0d..13c8a59b7b 100644 --- a/modules/gpu/test/test_remap.cpp +++ b/modules/gpu/test/test_remap.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + /////////////////////////////////////////////////////////////////// // Gold implementation diff --git a/modules/gpu/test/test_resize.cpp b/modules/gpu/test/test_resize.cpp index a34da54fdb..729dcc3208 100644 --- a/modules/gpu/test/test_resize.cpp +++ b/modules/gpu/test/test_resize.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + /////////////////////////////////////////////////////////////////// // Gold implementation diff --git a/modules/gpu/test/test_stream.cpp b/modules/gpu/test/test_stream.cpp index 4adac41292..1ac8ae8bd4 100644 --- a/modules/gpu/test/test_stream.cpp +++ b/modules/gpu/test/test_stream.cpp @@ -44,6 +44,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + #if CUDA_VERSION >= 5000 struct Async : testing::TestWithParam diff --git a/modules/gpu/test/test_threshold.cpp b/modules/gpu/test/test_threshold.cpp index 43e651ad81..e56975e873 100644 --- a/modules/gpu/test/test_threshold.cpp +++ b/modules/gpu/test/test_threshold.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + CV_ENUM(ThreshOp, cv::THRESH_BINARY, cv::THRESH_BINARY_INV, cv::THRESH_TRUNC, cv::THRESH_TOZERO, cv::THRESH_TOZERO_INV) #define ALL_THRESH_OPS testing::Values(ThreshOp(cv::THRESH_BINARY), ThreshOp(cv::THRESH_BINARY_INV), ThreshOp(cv::THRESH_TRUNC), ThreshOp(cv::THRESH_TOZERO), ThreshOp(cv::THRESH_TOZERO_INV)) diff --git a/modules/gpu/test/test_warp_affine.cpp b/modules/gpu/test/test_warp_affine.cpp index fe3a1353b1..892c5b7c62 100644 --- a/modules/gpu/test/test_warp_affine.cpp +++ b/modules/gpu/test/test_warp_affine.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + namespace { cv::Mat createTransfomMatrix(cv::Size srcSize, double angle) diff --git a/modules/gpu/test/test_warp_perspective.cpp b/modules/gpu/test/test_warp_perspective.cpp index dd2054a049..d421d94fc2 100644 --- a/modules/gpu/test/test_warp_perspective.cpp +++ b/modules/gpu/test/test_warp_perspective.cpp @@ -43,6 +43,8 @@ #ifdef HAVE_CUDA +using namespace cvtest; + namespace { cv::Mat createTransfomMatrix(cv::Size srcSize, double angle) diff --git a/modules/gpu/test/utility.cpp b/modules/gpu/test/utility.cpp deleted file mode 100644 index 88f7963242..0000000000 --- a/modules/gpu/test/utility.cpp +++ /dev/null @@ -1,407 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "test_precomp.hpp" - -#ifdef HAVE_CUDA - -using namespace std; -using namespace cv; -using namespace cv::gpu; -using namespace cvtest; -using namespace testing; -using namespace testing::internal; - -////////////////////////////////////////////////////////////////////// -// random generators - -int randomInt(int minVal, int maxVal) -{ - RNG& rng = TS::ptr()->get_rng(); - return rng.uniform(minVal, maxVal); -} - -double randomDouble(double minVal, double maxVal) -{ - RNG& rng = TS::ptr()->get_rng(); - return rng.uniform(minVal, maxVal); -} - -Size randomSize(int minVal, int maxVal) -{ - return Size(randomInt(minVal, maxVal), randomInt(minVal, maxVal)); -} - -Scalar randomScalar(double minVal, double maxVal) -{ - return Scalar(randomDouble(minVal, maxVal), randomDouble(minVal, maxVal), randomDouble(minVal, maxVal), randomDouble(minVal, maxVal)); -} - -Mat randomMat(Size size, int type, double minVal, double maxVal) -{ - return randomMat(TS::ptr()->get_rng(), size, type, minVal, maxVal, false); -} - -////////////////////////////////////////////////////////////////////// -// GpuMat create - -GpuMat createMat(Size size, int type, bool useRoi) -{ - Size size0 = size; - - if (useRoi) - { - size0.width += randomInt(5, 15); - size0.height += randomInt(5, 15); - } - - GpuMat d_m(size0, type); - - if (size0 != size) - d_m = d_m(Rect((size0.width - size.width) / 2, (size0.height - size.height) / 2, size.width, size.height)); - - return d_m; -} - -GpuMat loadMat(const Mat& m, bool useRoi) -{ - GpuMat d_m = createMat(m.size(), m.type(), useRoi); - d_m.upload(m); - return d_m; -} - -////////////////////////////////////////////////////////////////////// -// Image load - -Mat readImage(const std::string& fileName, int flags) -{ - return imread(TS::ptr()->get_data_path() + fileName, flags); -} - -Mat readImageType(const std::string& fname, int type) -{ - Mat src = readImage(fname, CV_MAT_CN(type) == 1 ? IMREAD_GRAYSCALE : IMREAD_COLOR); - if (CV_MAT_CN(type) == 4) - { - Mat temp; - cvtColor(src, temp, COLOR_BGR2BGRA); - swap(src, temp); - } - src.convertTo(src, CV_MAT_DEPTH(type), CV_MAT_DEPTH(type) == CV_32F ? 1.0 / 255.0 : 1.0); - return src; -} - -////////////////////////////////////////////////////////////////////// -// Gpu devices - -bool supportFeature(const DeviceInfo& info, FeatureSet feature) -{ - return TargetArchs::builtWith(feature) && info.supports(feature); -} - -DeviceManager& DeviceManager::instance() -{ - static DeviceManager obj; - return obj; -} - -void DeviceManager::load(int i) -{ - devices_.clear(); - devices_.reserve(1); - - std::ostringstream msg; - - if (i < 0 || i >= getCudaEnabledDeviceCount()) - { - msg << "Incorrect device number - " << i; - throw runtime_error(msg.str()); - } - - DeviceInfo info(i); - - if (!info.isCompatible()) - { - msg << "Device " << i << " [" << info.name() << "] is NOT compatible with current GPU module build"; - throw runtime_error(msg.str()); - } - - devices_.push_back(info); -} - -void DeviceManager::loadAll() -{ - int deviceCount = getCudaEnabledDeviceCount(); - - devices_.clear(); - devices_.reserve(deviceCount); - - for (int i = 0; i < deviceCount; ++i) - { - DeviceInfo info(i); - if (info.isCompatible()) - { - devices_.push_back(info); - } - } -} - -////////////////////////////////////////////////////////////////////// -// Additional assertion - -namespace -{ - template std::string printMatValImpl(const Mat& m, Point p) - { - const int cn = m.channels(); - - std::ostringstream ostr; - ostr << "("; - - p.x /= cn; - - ostr << static_cast(m.at(p.y, p.x * cn)); - for (int c = 1; c < m.channels(); ++c) - { - ostr << ", " << static_cast(m.at(p.y, p.x * cn + c)); - } - ostr << ")"; - - return ostr.str(); - } - - std::string printMatVal(const Mat& m, Point p) - { - typedef std::string (*func_t)(const Mat& m, Point p); - - static const func_t funcs[] = - { - printMatValImpl, printMatValImpl, printMatValImpl, printMatValImpl, - printMatValImpl, printMatValImpl, printMatValImpl - }; - - return funcs[m.depth()](m, p); - } -} - -void minMaxLocGold(const Mat& src, double* minVal_, double* maxVal_, Point* minLoc_, Point* maxLoc_, const Mat& mask) -{ - if (src.depth() != CV_8S) - { - minMaxLoc(src, minVal_, maxVal_, minLoc_, maxLoc_, mask); - return; - } - - // OpenCV's minMaxLoc doesn't support CV_8S type - double minVal = numeric_limits::max(); - Point minLoc(-1, -1); - - double maxVal = -numeric_limits::max(); - Point maxLoc(-1, -1); - - for (int y = 0; y < src.rows; ++y) - { - const schar* src_row = src.ptr(y); - const uchar* mask_row = mask.empty() ? 0 : mask.ptr(y); - - for (int x = 0; x < src.cols; ++x) - { - if (!mask_row || mask_row[x]) - { - schar val = src_row[x]; - - if (val < minVal) - { - minVal = val; - minLoc = cv::Point(x, y); - } - - if (val > maxVal) - { - maxVal = val; - maxLoc = cv::Point(x, y); - } - } - } - } - - if (minVal_) *minVal_ = minVal; - if (maxVal_) *maxVal_ = maxVal; - - if (minLoc_) *minLoc_ = minLoc; - if (maxLoc_) *maxLoc_ = maxLoc; -} - -Mat getMat(InputArray arr) -{ - if (arr.kind() == _InputArray::GPU_MAT) - { - Mat m; - arr.getGpuMat().download(m); - return m; - } - - return arr.getMat(); -} - -AssertionResult assertMatNear(const char* expr1, const char* expr2, const char* eps_expr, InputArray m1_, InputArray m2_, double eps) -{ - Mat m1 = getMat(m1_); - Mat m2 = getMat(m2_); - - if (m1.size() != m2.size()) - { - return AssertionFailure() << "Matrices \"" << expr1 << "\" and \"" << expr2 << "\" have different sizes : \"" - << expr1 << "\" [" << PrintToString(m1.size()) << "] vs \"" - << expr2 << "\" [" << PrintToString(m2.size()) << "]"; - } - - if (m1.type() != m2.type()) - { - return AssertionFailure() << "Matrices \"" << expr1 << "\" and \"" << expr2 << "\" have different types : \"" - << expr1 << "\" [" << PrintToString(MatType(m1.type())) << "] vs \"" - << expr2 << "\" [" << PrintToString(MatType(m2.type())) << "]"; - } - - Mat diff; - absdiff(m1.reshape(1), m2.reshape(1), diff); - - double maxVal = 0.0; - Point maxLoc; - minMaxLocGold(diff, 0, &maxVal, 0, &maxLoc); - - if (maxVal > eps) - { - return AssertionFailure() << "The max difference between matrices \"" << expr1 << "\" and \"" << expr2 - << "\" is " << maxVal << " at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ")" - << ", which exceeds \"" << eps_expr << "\", where \"" - << expr1 << "\" at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ") evaluates to " << printMatVal(m1, maxLoc) << ", \"" - << expr2 << "\" at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ") evaluates to " << printMatVal(m2, maxLoc) << ", \"" - << eps_expr << "\" evaluates to " << eps; - } - - return AssertionSuccess(); -} - -double checkSimilarity(InputArray m1, InputArray m2) -{ - Mat diff; - matchTemplate(getMat(m1), getMat(m2), diff, CV_TM_CCORR_NORMED); - return std::abs(diff.at(0, 0) - 1.f); -} - -////////////////////////////////////////////////////////////////////// -// Helper structs for value-parameterized tests - -vector types(int depth_start, int depth_end, int cn_start, int cn_end) -{ - vector v; - - v.reserve((depth_end - depth_start + 1) * (cn_end - cn_start + 1)); - - for (int depth = depth_start; depth <= depth_end; ++depth) - { - for (int cn = cn_start; cn <= cn_end; ++cn) - { - v.push_back(MatType(CV_MAKE_TYPE(depth, cn))); - } - } - - return v; -} - -const vector& all_types() -{ - static vector v = types(CV_8U, CV_64F, 1, 4); - - return v; -} - -void cv::gpu::PrintTo(const DeviceInfo& info, ostream* os) -{ - (*os) << info.name(); -} - -void PrintTo(const UseRoi& useRoi, std::ostream* os) -{ - if (useRoi) - (*os) << "sub matrix"; - else - (*os) << "whole matrix"; -} - -void PrintTo(const Inverse& inverse, std::ostream* os) -{ - if (inverse) - (*os) << "inverse"; - else - (*os) << "direct"; -} - -////////////////////////////////////////////////////////////////////// -// Other - -void dumpImage(const std::string& fileName, const Mat& image) -{ - imwrite(TS::ptr()->get_data_path() + fileName, image); -} - -void showDiff(InputArray gold_, InputArray actual_, double eps) -{ - Mat gold = getMat(gold_); - Mat actual = getMat(actual_); - - Mat diff; - absdiff(gold, actual, diff); - threshold(diff, diff, eps, 255.0, cv::THRESH_BINARY); - - namedWindow("gold", WINDOW_NORMAL); - namedWindow("actual", WINDOW_NORMAL); - namedWindow("diff", WINDOW_NORMAL); - - imshow("gold", gold); - imshow("actual", actual); - imshow("diff", diff); - - waitKey(); -} - -#endif // HAVE_CUDA diff --git a/modules/gpu/test/utility.hpp b/modules/gpu/test/utility.hpp deleted file mode 100644 index 674e9a17ee..0000000000 --- a/modules/gpu/test/utility.hpp +++ /dev/null @@ -1,332 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_GPU_TEST_UTILITY_HPP__ -#define __OPENCV_GPU_TEST_UTILITY_HPP__ - -#include "opencv2/core/core.hpp" -#include "opencv2/core/gpumat.hpp" -#include "opencv2/highgui/highgui.hpp" -#include "opencv2/ts/ts.hpp" -#include "opencv2/ts/ts_perf.hpp" - -////////////////////////////////////////////////////////////////////// -// random generators - -int randomInt(int minVal, int maxVal); -double randomDouble(double minVal, double maxVal); -cv::Size randomSize(int minVal, int maxVal); -cv::Scalar randomScalar(double minVal, double maxVal); -cv::Mat randomMat(cv::Size size, int type, double minVal = 0.0, double maxVal = 255.0); - -////////////////////////////////////////////////////////////////////// -// GpuMat create - -cv::gpu::GpuMat createMat(cv::Size size, int type, bool useRoi = false); -cv::gpu::GpuMat loadMat(const cv::Mat& m, bool useRoi = false); - -////////////////////////////////////////////////////////////////////// -// Image load - -//! read image from testdata folder -cv::Mat readImage(const std::string& fileName, int flags = cv::IMREAD_COLOR); - -//! read image from testdata folder and convert it to specified type -cv::Mat readImageType(const std::string& fname, int type); - -////////////////////////////////////////////////////////////////////// -// Gpu devices - -//! return true if device supports specified feature and gpu module was built with support the feature. -bool supportFeature(const cv::gpu::DeviceInfo& info, cv::gpu::FeatureSet feature); - -class DeviceManager -{ -public: - static DeviceManager& instance(); - - void load(int i); - void loadAll(); - - const std::vector& values() const { return devices_; } - -private: - std::vector devices_; -}; - -#define ALL_DEVICES testing::ValuesIn(DeviceManager::instance().values()) - -////////////////////////////////////////////////////////////////////// -// Additional assertion - -void minMaxLocGold(const cv::Mat& src, double* minVal_, double* maxVal_ = 0, cv::Point* minLoc_ = 0, cv::Point* maxLoc_ = 0, const cv::Mat& mask = cv::Mat()); - -cv::Mat getMat(cv::InputArray arr); - -testing::AssertionResult assertMatNear(const char* expr1, const char* expr2, const char* eps_expr, cv::InputArray m1, cv::InputArray m2, double eps); - -#define EXPECT_MAT_NEAR(m1, m2, eps) EXPECT_PRED_FORMAT3(assertMatNear, m1, m2, eps) -#define ASSERT_MAT_NEAR(m1, m2, eps) ASSERT_PRED_FORMAT3(assertMatNear, m1, m2, eps) - -#define EXPECT_SCALAR_NEAR(s1, s2, eps) \ - { \ - EXPECT_NEAR(s1[0], s2[0], eps); \ - EXPECT_NEAR(s1[1], s2[1], eps); \ - EXPECT_NEAR(s1[2], s2[2], eps); \ - EXPECT_NEAR(s1[3], s2[3], eps); \ - } -#define ASSERT_SCALAR_NEAR(s1, s2, eps) \ - { \ - ASSERT_NEAR(s1[0], s2[0], eps); \ - ASSERT_NEAR(s1[1], s2[1], eps); \ - ASSERT_NEAR(s1[2], s2[2], eps); \ - ASSERT_NEAR(s1[3], s2[3], eps); \ - } - -#define EXPECT_POINT2_NEAR(p1, p2, eps) \ - { \ - EXPECT_NEAR(p1.x, p2.x, eps); \ - EXPECT_NEAR(p1.y, p2.y, eps); \ - } -#define ASSERT_POINT2_NEAR(p1, p2, eps) \ - { \ - ASSERT_NEAR(p1.x, p2.x, eps); \ - ASSERT_NEAR(p1.y, p2.y, eps); \ - } - -#define EXPECT_POINT3_NEAR(p1, p2, eps) \ - { \ - EXPECT_NEAR(p1.x, p2.x, eps); \ - EXPECT_NEAR(p1.y, p2.y, eps); \ - EXPECT_NEAR(p1.z, p2.z, eps); \ - } -#define ASSERT_POINT3_NEAR(p1, p2, eps) \ - { \ - ASSERT_NEAR(p1.x, p2.x, eps); \ - ASSERT_NEAR(p1.y, p2.y, eps); \ - ASSERT_NEAR(p1.z, p2.z, eps); \ - } - -double checkSimilarity(cv::InputArray m1, cv::InputArray m2); - -#define EXPECT_MAT_SIMILAR(mat1, mat2, eps) \ - { \ - ASSERT_EQ(mat1.type(), mat2.type()); \ - ASSERT_EQ(mat1.size(), mat2.size()); \ - EXPECT_LE(checkSimilarity(mat1, mat2), eps); \ - } -#define ASSERT_MAT_SIMILAR(mat1, mat2, eps) \ - { \ - ASSERT_EQ(mat1.type(), mat2.type()); \ - ASSERT_EQ(mat1.size(), mat2.size()); \ - ASSERT_LE(checkSimilarity(mat1, mat2), eps); \ - } - -////////////////////////////////////////////////////////////////////// -// Helper structs for value-parameterized tests - -#define GPU_TEST_P(test_case_name, test_name) \ - class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ - : public test_case_name { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ - virtual void TestBody(); \ - private: \ - void UnsafeTestBody(); \ - static int AddToRegistry() { \ - ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ - GetTestCasePatternHolder(\ - #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ - #test_case_name, \ - #test_name, \ - new ::testing::internal::TestMetaFactory< \ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ - return 0; \ - } \ - static int gtest_registering_dummy_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_(\ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ - }; \ - int GTEST_TEST_CLASS_NAME_(test_case_name, \ - test_name)::gtest_registering_dummy_ = \ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ - void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() \ - { \ - try \ - { \ - UnsafeTestBody(); \ - } \ - catch (...) \ - { \ - cv::gpu::resetDevice(); \ - throw; \ - } \ - } \ - void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::UnsafeTestBody() - -#define PARAM_TEST_CASE(name, ...) struct name : testing::TestWithParam< std::tr1::tuple< __VA_ARGS__ > > -#define GET_PARAM(k) std::tr1::get< k >(GetParam()) - -namespace cv { namespace gpu -{ - void PrintTo(const DeviceInfo& info, std::ostream* os); -}} - -#define DIFFERENT_SIZES testing::Values(cv::Size(128, 128), cv::Size(113, 113)) - -// Depth - -using perf::MatDepth; - -#define ALL_DEPTH testing::Values(MatDepth(CV_8U), MatDepth(CV_8S), MatDepth(CV_16U), MatDepth(CV_16S), MatDepth(CV_32S), MatDepth(CV_32F), MatDepth(CV_64F)) - -#define DEPTH_PAIRS testing::Values(std::make_pair(MatDepth(CV_8U), MatDepth(CV_8U)), \ - std::make_pair(MatDepth(CV_8U), MatDepth(CV_16U)), \ - std::make_pair(MatDepth(CV_8U), MatDepth(CV_16S)), \ - std::make_pair(MatDepth(CV_8U), MatDepth(CV_32S)), \ - std::make_pair(MatDepth(CV_8U), MatDepth(CV_32F)), \ - std::make_pair(MatDepth(CV_8U), MatDepth(CV_64F)), \ - \ - std::make_pair(MatDepth(CV_16U), MatDepth(CV_16U)), \ - std::make_pair(MatDepth(CV_16U), MatDepth(CV_32S)), \ - std::make_pair(MatDepth(CV_16U), MatDepth(CV_32F)), \ - std::make_pair(MatDepth(CV_16U), MatDepth(CV_64F)), \ - \ - std::make_pair(MatDepth(CV_16S), MatDepth(CV_16S)), \ - std::make_pair(MatDepth(CV_16S), MatDepth(CV_32S)), \ - std::make_pair(MatDepth(CV_16S), MatDepth(CV_32F)), \ - std::make_pair(MatDepth(CV_16S), MatDepth(CV_64F)), \ - \ - std::make_pair(MatDepth(CV_32S), MatDepth(CV_32S)), \ - std::make_pair(MatDepth(CV_32S), MatDepth(CV_32F)), \ - std::make_pair(MatDepth(CV_32S), MatDepth(CV_64F)), \ - \ - std::make_pair(MatDepth(CV_32F), MatDepth(CV_32F)), \ - std::make_pair(MatDepth(CV_32F), MatDepth(CV_64F)), \ - \ - std::make_pair(MatDepth(CV_64F), MatDepth(CV_64F))) - -// Type - -using perf::MatType; - -//! return vector with types from specified range. -std::vector types(int depth_start, int depth_end, int cn_start, int cn_end); - -//! return vector with all types (depth: CV_8U-CV_64F, channels: 1-4). -const std::vector& all_types(); - -#define ALL_TYPES testing::ValuesIn(all_types()) -#define TYPES(depth_start, depth_end, cn_start, cn_end) testing::ValuesIn(types(depth_start, depth_end, cn_start, cn_end)) - -// ROI - -class UseRoi -{ -public: - inline UseRoi(bool val = false) : val_(val) {} - - inline operator bool() const { return val_; } - -private: - bool val_; -}; - -void PrintTo(const UseRoi& useRoi, std::ostream* os); - -#define WHOLE_SUBMAT testing::Values(UseRoi(false), UseRoi(true)) - -// Direct/Inverse - -class Inverse -{ -public: - inline Inverse(bool val = false) : val_(val) {} - - inline operator bool() const { return val_; } - -private: - bool val_; -}; - -void PrintTo(const Inverse& useRoi, std::ostream* os); - -#define DIRECT_INVERSE testing::Values(Inverse(false), Inverse(true)) - -// Param class - -#define IMPLEMENT_PARAM_CLASS(name, type) \ - class name \ - { \ - public: \ - name ( type arg = type ()) : val_(arg) {} \ - operator type () const {return val_;} \ - private: \ - type val_; \ - }; \ - inline void PrintTo( name param, std::ostream* os) \ - { \ - *os << #name << "(" << testing::PrintToString(static_cast< type >(param)) << ")"; \ - } - -IMPLEMENT_PARAM_CLASS(Channels, int) - -#define ALL_CHANNELS testing::Values(Channels(1), Channels(2), Channels(3), Channels(4)) -#define IMAGE_CHANNELS testing::Values(Channels(1), Channels(3), Channels(4)) - -// Flags and enums - -CV_ENUM(NormCode, cv::NORM_INF, cv::NORM_L1, cv::NORM_L2, cv::NORM_TYPE_MASK, cv::NORM_RELATIVE, cv::NORM_MINMAX) - -CV_ENUM(Interpolation, cv::INTER_NEAREST, cv::INTER_LINEAR, cv::INTER_CUBIC, cv::INTER_AREA) - -CV_ENUM(BorderType, cv::BORDER_REFLECT101, cv::BORDER_REPLICATE, cv::BORDER_CONSTANT, cv::BORDER_REFLECT, cv::BORDER_WRAP) -#define ALL_BORDER_TYPES testing::Values(BorderType(cv::BORDER_REFLECT101), BorderType(cv::BORDER_REPLICATE), BorderType(cv::BORDER_CONSTANT), BorderType(cv::BORDER_REFLECT), BorderType(cv::BORDER_WRAP)) - -CV_FLAGS(WarpFlags, cv::INTER_NEAREST, cv::INTER_LINEAR, cv::INTER_CUBIC, cv::WARP_INVERSE_MAP) - -////////////////////////////////////////////////////////////////////// -// Other - -void dumpImage(const std::string& fileName, const cv::Mat& image); -void showDiff(cv::InputArray gold, cv::InputArray actual, double eps); - -#endif // __OPENCV_GPU_TEST_UTILITY_HPP__ diff --git a/modules/superres/perf/perf_main.cpp b/modules/superres/perf/perf_main.cpp index 230df8190d..80575d89f0 100644 --- a/modules/superres/perf/perf_main.cpp +++ b/modules/superres/perf/perf_main.cpp @@ -1,3 +1,5 @@ #include "perf_precomp.hpp" -CV_PERF_TEST_MAIN(superres) +using namespace perf; + +CV_PERF_TEST_MAIN(superres, printCudaInfo()) diff --git a/modules/superres/perf/perf_precomp.hpp b/modules/superres/perf/perf_precomp.hpp index 732dd1118f..8232a26edb 100644 --- a/modules/superres/perf/perf_precomp.hpp +++ b/modules/superres/perf/perf_precomp.hpp @@ -16,6 +16,7 @@ #include "opencv2/core/core.hpp" #include "opencv2/core/gpumat.hpp" #include "opencv2/ts/ts_perf.hpp" +#include "opencv2/ts/gpu_perf.hpp" #include "opencv2/superres/superres.hpp" #include "opencv2/superres/optical_flow.hpp" diff --git a/modules/superres/perf/perf_superres.cpp b/modules/superres/perf/perf_superres.cpp index a0fa8e58d2..eec01a7853 100644 --- a/modules/superres/perf/perf_superres.cpp +++ b/modules/superres/perf/perf_superres.cpp @@ -8,18 +8,6 @@ using namespace cv; using namespace cv::superres; using namespace cv::gpu; -#define GPU_SANITY_CHECK(mat, ...) \ - do{ \ - Mat gpu_##mat(mat); \ - SANITY_CHECK(gpu_##mat, ## __VA_ARGS__); \ - } while(0) - -#define CPU_SANITY_CHECK(mat, ...) \ - do{ \ - Mat cpu_##mat(mat); \ - SANITY_CHECK(cpu_##mat, ## __VA_ARGS__); \ - } while(0) - namespace { class OneFrameSource_CPU : public FrameSource diff --git a/modules/ts/CMakeLists.txt b/modules/ts/CMakeLists.txt index 455ef876bd..df4aeda19b 100644 --- a/modules/ts/CMakeLists.txt +++ b/modules/ts/CMakeLists.txt @@ -10,6 +10,10 @@ endif() set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE) +if(HAVE_CUDA) + ocv_include_directories(${CUDA_INCLUDE_DIRS}) +endif() + ocv_add_module(ts opencv_core opencv_features2d) ocv_glob_module_sources() diff --git a/modules/ts/include/opencv2/ts/gpu_perf.hpp b/modules/ts/include/opencv2/ts/gpu_perf.hpp new file mode 100644 index 0000000000..9fcf85db9a --- /dev/null +++ b/modules/ts/include/opencv2/ts/gpu_perf.hpp @@ -0,0 +1,68 @@ +#ifndef __OPENCV_GPU_PERF_UTILITY_HPP__ +#define __OPENCV_GPU_PERF_UTILITY_HPP__ + +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include "opencv2/ts/ts_perf.hpp" + +namespace perf +{ + CV_ENUM(BorderMode, cv::BORDER_REFLECT101, cv::BORDER_REPLICATE, cv::BORDER_CONSTANT, cv::BORDER_REFLECT, cv::BORDER_WRAP) + #define ALL_BORDER_MODES testing::ValuesIn(BorderMode::all()) + + CV_ENUM(Interpolation, cv::INTER_NEAREST, cv::INTER_LINEAR, cv::INTER_CUBIC, cv::INTER_AREA) + #define ALL_INTERPOLATIONS testing::ValuesIn(Interpolation::all()) + + CV_ENUM(NormType, cv::NORM_INF, cv::NORM_L1, cv::NORM_L2, cv::NORM_HAMMING, cv::NORM_MINMAX) + + enum { Gray = 1, TwoChannel = 2, BGR = 3, BGRA = 4 }; + CV_ENUM(MatCn, Gray, TwoChannel, BGR, BGRA) + #define GPU_CHANNELS_1_3_4 testing::Values(MatCn(Gray), MatCn(BGR), MatCn(BGRA)) + #define GPU_CHANNELS_1_3 testing::Values(MatCn(Gray), MatCn(BGR)) + + #define GET_PARAM(k) std::tr1::get< k >(GetParam()) + + #define DEF_PARAM_TEST(name, ...) typedef ::perf::TestBaseWithParam< std::tr1::tuple< __VA_ARGS__ > > name + #define DEF_PARAM_TEST_1(name, param_type) typedef ::perf::TestBaseWithParam< param_type > name + + DEF_PARAM_TEST_1(Sz, cv::Size); + typedef perf::Size_MatType Sz_Type; + DEF_PARAM_TEST(Sz_Depth, cv::Size, perf::MatDepth); + DEF_PARAM_TEST(Sz_Depth_Cn, cv::Size, perf::MatDepth, MatCn); + + #define GPU_TYPICAL_MAT_SIZES testing::Values(perf::sz720p, perf::szSXGA, perf::sz1080p) + + #define FAIL_NO_CPU() FAIL() << "No such CPU implementation analogy" + + #define GPU_SANITY_CHECK(mat, ...) \ + do{ \ + cv::Mat gpu_##mat(mat); \ + SANITY_CHECK(gpu_##mat, ## __VA_ARGS__); \ + } while(0) + + #define CPU_SANITY_CHECK(mat, ...) \ + do{ \ + cv::Mat cpu_##mat(mat); \ + SANITY_CHECK(cpu_##mat, ## __VA_ARGS__); \ + } while(0) + + CV_EXPORTS cv::Mat readImage(const std::string& fileName, int flags = cv::IMREAD_COLOR); + + struct CvtColorInfo + { + int scn; + int dcn; + int code; + + CvtColorInfo() {} + explicit CvtColorInfo(int scn_, int dcn_, int code_) : scn(scn_), dcn(dcn_), code(code_) {} + }; + CV_EXPORTS void PrintTo(const CvtColorInfo& info, std::ostream* os); + + CV_EXPORTS void printCudaInfo(); + + CV_EXPORTS void sortKeyPoints(std::vector& keypoints, cv::InputOutputArray _descriptors = cv::noArray()); +} + +#endif // __OPENCV_GPU_PERF_UTILITY_HPP__ diff --git a/modules/ts/include/opencv2/ts/gpu_test.hpp b/modules/ts/include/opencv2/ts/gpu_test.hpp new file mode 100644 index 0000000000..4743c3d585 --- /dev/null +++ b/modules/ts/include/opencv2/ts/gpu_test.hpp @@ -0,0 +1,307 @@ +#ifndef __OPENCV_GPU_TEST_UTILITY_HPP__ +#define __OPENCV_GPU_TEST_UTILITY_HPP__ + +#include "opencv2/core/core.hpp" +#include "opencv2/core/gpumat.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include "opencv2/ts/ts.hpp" +#include "opencv2/ts/ts_perf.hpp" + +namespace cvtest +{ + ////////////////////////////////////////////////////////////////////// + // random generators + + CV_EXPORTS int randomInt(int minVal, int maxVal); + CV_EXPORTS double randomDouble(double minVal, double maxVal); + CV_EXPORTS cv::Size randomSize(int minVal, int maxVal); + CV_EXPORTS cv::Scalar randomScalar(double minVal, double maxVal); + CV_EXPORTS cv::Mat randomMat(cv::Size size, int type, double minVal = 0.0, double maxVal = 255.0); + + ////////////////////////////////////////////////////////////////////// + // GpuMat create + + CV_EXPORTS cv::gpu::GpuMat createMat(cv::Size size, int type, bool useRoi = false); + CV_EXPORTS cv::gpu::GpuMat loadMat(const cv::Mat& m, bool useRoi = false); + + ////////////////////////////////////////////////////////////////////// + // Image load + + //! read image from testdata folder + CV_EXPORTS cv::Mat readImage(const std::string& fileName, int flags = cv::IMREAD_COLOR); + + //! read image from testdata folder and convert it to specified type + CV_EXPORTS cv::Mat readImageType(const std::string& fname, int type); + + ////////////////////////////////////////////////////////////////////// + // Gpu devices + + //! return true if device supports specified feature and gpu module was built with support the feature. + CV_EXPORTS bool supportFeature(const cv::gpu::DeviceInfo& info, cv::gpu::FeatureSet feature); + + class CV_EXPORTS DeviceManager + { + public: + static DeviceManager& instance(); + + void load(int i); + void loadAll(); + + const std::vector& values() const { return devices_; } + + private: + std::vector devices_; + }; + + #define ALL_DEVICES testing::ValuesIn(cvtest::DeviceManager::instance().values()) + + ////////////////////////////////////////////////////////////////////// + // Additional assertion + + CV_EXPORTS void minMaxLocGold(const cv::Mat& src, double* minVal_, double* maxVal_ = 0, cv::Point* minLoc_ = 0, cv::Point* maxLoc_ = 0, const cv::Mat& mask = cv::Mat()); + + CV_EXPORTS cv::Mat getMat(cv::InputArray arr); + + CV_EXPORTS testing::AssertionResult assertMatNear(const char* expr1, const char* expr2, const char* eps_expr, cv::InputArray m1, cv::InputArray m2, double eps); + + #define EXPECT_MAT_NEAR(m1, m2, eps) EXPECT_PRED_FORMAT3(cvtest::assertMatNear, m1, m2, eps) + #define ASSERT_MAT_NEAR(m1, m2, eps) ASSERT_PRED_FORMAT3(cvtest::assertMatNear, m1, m2, eps) + + #define EXPECT_SCALAR_NEAR(s1, s2, eps) \ + { \ + EXPECT_NEAR(s1[0], s2[0], eps); \ + EXPECT_NEAR(s1[1], s2[1], eps); \ + EXPECT_NEAR(s1[2], s2[2], eps); \ + EXPECT_NEAR(s1[3], s2[3], eps); \ + } + #define ASSERT_SCALAR_NEAR(s1, s2, eps) \ + { \ + ASSERT_NEAR(s1[0], s2[0], eps); \ + ASSERT_NEAR(s1[1], s2[1], eps); \ + ASSERT_NEAR(s1[2], s2[2], eps); \ + ASSERT_NEAR(s1[3], s2[3], eps); \ + } + + #define EXPECT_POINT2_NEAR(p1, p2, eps) \ + { \ + EXPECT_NEAR(p1.x, p2.x, eps); \ + EXPECT_NEAR(p1.y, p2.y, eps); \ + } + #define ASSERT_POINT2_NEAR(p1, p2, eps) \ + { \ + ASSERT_NEAR(p1.x, p2.x, eps); \ + ASSERT_NEAR(p1.y, p2.y, eps); \ + } + + #define EXPECT_POINT3_NEAR(p1, p2, eps) \ + { \ + EXPECT_NEAR(p1.x, p2.x, eps); \ + EXPECT_NEAR(p1.y, p2.y, eps); \ + EXPECT_NEAR(p1.z, p2.z, eps); \ + } + #define ASSERT_POINT3_NEAR(p1, p2, eps) \ + { \ + ASSERT_NEAR(p1.x, p2.x, eps); \ + ASSERT_NEAR(p1.y, p2.y, eps); \ + ASSERT_NEAR(p1.z, p2.z, eps); \ + } + + CV_EXPORTS double checkSimilarity(cv::InputArray m1, cv::InputArray m2); + + #define EXPECT_MAT_SIMILAR(mat1, mat2, eps) \ + { \ + ASSERT_EQ(mat1.type(), mat2.type()); \ + ASSERT_EQ(mat1.size(), mat2.size()); \ + EXPECT_LE(checkSimilarity(mat1, mat2), eps); \ + } + #define ASSERT_MAT_SIMILAR(mat1, mat2, eps) \ + { \ + ASSERT_EQ(mat1.type(), mat2.type()); \ + ASSERT_EQ(mat1.size(), mat2.size()); \ + ASSERT_LE(checkSimilarity(mat1, mat2), eps); \ + } + + ////////////////////////////////////////////////////////////////////// + // Helper structs for value-parameterized tests + + #define GPU_TEST_P(test_case_name, test_name) \ + class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ + : public test_case_name { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ + virtual void TestBody(); \ + private: \ + void UnsafeTestBody(); \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ + GetTestCasePatternHolder(\ + #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ + #test_case_name, \ + #test_name, \ + new ::testing::internal::TestMetaFactory< \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ + return 0; \ + } \ + static int gtest_registering_dummy_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_(\ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ + }; \ + int GTEST_TEST_CLASS_NAME_(test_case_name, \ + test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ + void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() \ + { \ + try \ + { \ + UnsafeTestBody(); \ + } \ + catch (...) \ + { \ + cv::gpu::resetDevice(); \ + throw; \ + } \ + } \ + void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::UnsafeTestBody() + + #define PARAM_TEST_CASE(name, ...) struct name : testing::TestWithParam< std::tr1::tuple< __VA_ARGS__ > > + #define GET_PARAM(k) std::tr1::get< k >(GetParam()) + + #define DIFFERENT_SIZES testing::Values(cv::Size(128, 128), cv::Size(113, 113)) + + // Depth + + using perf::MatDepth; + + #define ALL_DEPTH testing::Values(MatDepth(CV_8U), MatDepth(CV_8S), MatDepth(CV_16U), MatDepth(CV_16S), MatDepth(CV_32S), MatDepth(CV_32F), MatDepth(CV_64F)) + + #define DEPTH_PAIRS testing::Values(std::make_pair(MatDepth(CV_8U), MatDepth(CV_8U)), \ + std::make_pair(MatDepth(CV_8U), MatDepth(CV_16U)), \ + std::make_pair(MatDepth(CV_8U), MatDepth(CV_16S)), \ + std::make_pair(MatDepth(CV_8U), MatDepth(CV_32S)), \ + std::make_pair(MatDepth(CV_8U), MatDepth(CV_32F)), \ + std::make_pair(MatDepth(CV_8U), MatDepth(CV_64F)), \ + \ + std::make_pair(MatDepth(CV_16U), MatDepth(CV_16U)), \ + std::make_pair(MatDepth(CV_16U), MatDepth(CV_32S)), \ + std::make_pair(MatDepth(CV_16U), MatDepth(CV_32F)), \ + std::make_pair(MatDepth(CV_16U), MatDepth(CV_64F)), \ + \ + std::make_pair(MatDepth(CV_16S), MatDepth(CV_16S)), \ + std::make_pair(MatDepth(CV_16S), MatDepth(CV_32S)), \ + std::make_pair(MatDepth(CV_16S), MatDepth(CV_32F)), \ + std::make_pair(MatDepth(CV_16S), MatDepth(CV_64F)), \ + \ + std::make_pair(MatDepth(CV_32S), MatDepth(CV_32S)), \ + std::make_pair(MatDepth(CV_32S), MatDepth(CV_32F)), \ + std::make_pair(MatDepth(CV_32S), MatDepth(CV_64F)), \ + \ + std::make_pair(MatDepth(CV_32F), MatDepth(CV_32F)), \ + std::make_pair(MatDepth(CV_32F), MatDepth(CV_64F)), \ + \ + std::make_pair(MatDepth(CV_64F), MatDepth(CV_64F))) + + // Type + + using perf::MatType; + + //! return vector with types from specified range. + CV_EXPORTS std::vector types(int depth_start, int depth_end, int cn_start, int cn_end); + + //! return vector with all types (depth: CV_8U-CV_64F, channels: 1-4). + CV_EXPORTS const std::vector& all_types(); + + #define ALL_TYPES testing::ValuesIn(all_types()) + #define TYPES(depth_start, depth_end, cn_start, cn_end) testing::ValuesIn(types(depth_start, depth_end, cn_start, cn_end)) + + // ROI + + class UseRoi + { + public: + inline UseRoi(bool val = false) : val_(val) {} + + inline operator bool() const { return val_; } + + private: + bool val_; + }; + + CV_EXPORTS void PrintTo(const UseRoi& useRoi, std::ostream* os); + + #define WHOLE_SUBMAT testing::Values(UseRoi(false), UseRoi(true)) + + // Direct/Inverse + + class Inverse + { + public: + inline Inverse(bool val = false) : val_(val) {} + + inline operator bool() const { return val_; } + + private: + bool val_; + }; + + CV_EXPORTS void PrintTo(const Inverse& useRoi, std::ostream* os); + + #define DIRECT_INVERSE testing::Values(Inverse(false), Inverse(true)) + + // Param class + + #define IMPLEMENT_PARAM_CLASS(name, type) \ + class name \ + { \ + public: \ + name ( type arg = type ()) : val_(arg) {} \ + operator type () const {return val_;} \ + private: \ + type val_; \ + }; \ + inline void PrintTo( name param, std::ostream* os) \ + { \ + *os << #name << "(" << testing::PrintToString(static_cast< type >(param)) << ")"; \ + } + + IMPLEMENT_PARAM_CLASS(Channels, int) + + #define ALL_CHANNELS testing::Values(Channels(1), Channels(2), Channels(3), Channels(4)) + #define IMAGE_CHANNELS testing::Values(Channels(1), Channels(3), Channels(4)) + + // Flags and enums + + CV_ENUM(NormCode, cv::NORM_INF, cv::NORM_L1, cv::NORM_L2, cv::NORM_TYPE_MASK, cv::NORM_RELATIVE, cv::NORM_MINMAX) + + CV_ENUM(Interpolation, cv::INTER_NEAREST, cv::INTER_LINEAR, cv::INTER_CUBIC, cv::INTER_AREA) + + CV_ENUM(BorderType, cv::BORDER_REFLECT101, cv::BORDER_REPLICATE, cv::BORDER_CONSTANT, cv::BORDER_REFLECT, cv::BORDER_WRAP) + #define ALL_BORDER_TYPES testing::Values(BorderType(cv::BORDER_REFLECT101), BorderType(cv::BORDER_REPLICATE), BorderType(cv::BORDER_CONSTANT), BorderType(cv::BORDER_REFLECT), BorderType(cv::BORDER_WRAP)) + + CV_FLAGS(WarpFlags, cv::INTER_NEAREST, cv::INTER_LINEAR, cv::INTER_CUBIC, cv::WARP_INVERSE_MAP) + + ////////////////////////////////////////////////////////////////////// + // Features2D + + CV_EXPORTS testing::AssertionResult assertKeyPointsEquals(const char* gold_expr, const char* actual_expr, std::vector& gold, std::vector& actual); + + #define ASSERT_KEYPOINTS_EQ(gold, actual) EXPECT_PRED_FORMAT2(assertKeyPointsEquals, gold, actual) + + CV_EXPORTS int getMatchedPointsCount(std::vector& gold, std::vector& actual); + CV_EXPORTS int getMatchedPointsCount(const std::vector& keypoints1, const std::vector& keypoints2, const std::vector& matches); + + ////////////////////////////////////////////////////////////////////// + // Other + + CV_EXPORTS void dumpImage(const std::string& fileName, const cv::Mat& image); + CV_EXPORTS void showDiff(cv::InputArray gold, cv::InputArray actual, double eps); + + CV_EXPORTS void printCudaInfo(); +} + +namespace cv { namespace gpu +{ + CV_EXPORTS void PrintTo(const DeviceInfo& info, std::ostream* os); +}} + +#endif // __OPENCV_GPU_TEST_UTILITY_HPP__ diff --git a/modules/ts/src/gpu_perf.cpp b/modules/ts/src/gpu_perf.cpp new file mode 100644 index 0000000000..a81dd13385 --- /dev/null +++ b/modules/ts/src/gpu_perf.cpp @@ -0,0 +1,313 @@ +#include "opencv2/ts/gpu_perf.hpp" +#include "opencv2/core/gpumat.hpp" + +#include "cvconfig.h" + +#ifdef HAVE_CUDA + #include +#endif + +using namespace cv; + +namespace perf +{ + Mat readImage(const string& fileName, int flags) + { + return imread(perf::TestBase::getDataPath(fileName), flags); + } + + void PrintTo(const CvtColorInfo& info, std::ostream* os) + { + static const char* str[] = + { + "BGR2BGRA", + "BGRA2BGR", + "BGR2RGBA", + "RGBA2BGR", + "BGR2RGB", + "BGRA2RGBA", + + "BGR2GRAY", + "RGB2GRAY", + "GRAY2BGR", + "GRAY2BGRA", + "BGRA2GRAY", + "RGBA2GRAY", + + "BGR2BGR565", + "RGB2BGR565", + "BGR5652BGR", + "BGR5652RGB", + "BGRA2BGR565", + "RGBA2BGR565", + "BGR5652BGRA", + "BGR5652RGBA", + + "GRAY2BGR565", + "BGR5652GRAY", + + "BGR2BGR555", + "RGB2BGR555", + "BGR5552BGR", + "BGR5552RGB", + "BGRA2BGR555", + "RGBA2BGR555", + "BGR5552BGRA", + "BGR5552RGBA", + + "GRAY2BGR555", + "BGR5552GRAY", + + "BGR2XYZ", + "RGB2XYZ", + "XYZ2BGR", + "XYZ2RGB", + + "BGR2YCrCb", + "RGB2YCrCb", + "YCrCb2BGR", + "YCrCb2RGB", + + "BGR2HSV", + "RGB2HSV", + + "", + "", + + "BGR2Lab", + "RGB2Lab", + + "BayerBG2BGR", + "BayerGB2BGR", + "BayerRG2BGR", + "BayerGR2BGR", + + "BGR2Luv", + "RGB2Luv", + + "BGR2HLS", + "RGB2HLS", + + "HSV2BGR", + "HSV2RGB", + + "Lab2BGR", + "Lab2RGB", + "Luv2BGR", + "Luv2RGB", + + "HLS2BGR", + "HLS2RGB", + + "BayerBG2BGR_VNG", + "BayerGB2BGR_VNG", + "BayerRG2BGR_VNG", + "BayerGR2BGR_VNG", + + "BGR2HSV_FULL", + "RGB2HSV_FULL", + "BGR2HLS_FULL", + "RGB2HLS_FULL", + + "HSV2BGR_FULL", + "HSV2RGB_FULL", + "HLS2BGR_FULL", + "HLS2RGB_FULL", + + "LBGR2Lab", + "LRGB2Lab", + "LBGR2Luv", + "LRGB2Luv", + + "Lab2LBGR", + "Lab2LRGB", + "Luv2LBGR", + "Luv2LRGB", + + "BGR2YUV", + "RGB2YUV", + "YUV2BGR", + "YUV2RGB", + + "BayerBG2GRAY", + "BayerGB2GRAY", + "BayerRG2GRAY", + "BayerGR2GRAY", + + //YUV 4:2:0 formats family + "YUV2RGB_NV12", + "YUV2BGR_NV12", + "YUV2RGB_NV21", + "YUV2BGR_NV21", + + "YUV2RGBA_NV12", + "YUV2BGRA_NV12", + "YUV2RGBA_NV21", + "YUV2BGRA_NV21", + + "YUV2RGB_YV12", + "YUV2BGR_YV12", + "YUV2RGB_IYUV", + "YUV2BGR_IYUV", + + "YUV2RGBA_YV12", + "YUV2BGRA_YV12", + "YUV2RGBA_IYUV", + "YUV2BGRA_IYUV", + + "YUV2GRAY_420", + + //YUV 4:2:2 formats family + "YUV2RGB_UYVY", + "YUV2BGR_UYVY", + "YUV2RGB_VYUY", + "YUV2BGR_VYUY", + + "YUV2RGBA_UYVY", + "YUV2BGRA_UYVY", + "YUV2RGBA_VYUY", + "YUV2BGRA_VYUY", + + "YUV2RGB_YUY2", + "YUV2BGR_YUY2", + "YUV2RGB_YVYU", + "YUV2BGR_YVYU", + + "YUV2RGBA_YUY2", + "YUV2BGRA_YUY2", + "YUV2RGBA_YVYU", + "YUV2BGRA_YVYU", + + "YUV2GRAY_UYVY", + "YUV2GRAY_YUY2", + + // alpha premultiplication + "RGBA2mRGBA", + "mRGBA2RGBA", + + "COLORCVT_MAX" + }; + + *os << str[info.code]; + } + + static void printOsInfo() + { + #if defined _WIN32 + # if defined _WIN64 + printf("[----------]\n[ GPU INFO ] \tRun on OS Windows x64.\n[----------]\n"), fflush(stdout); + # else + printf("[----------]\n[ GPU INFO ] \tRun on OS Windows x32.\n[----------]\n"), fflush(stdout); + # endif + #elif defined linux + # if defined _LP64 + printf("[----------]\n[ GPU INFO ] \tRun on OS Linux x64.\n[----------]\n"), fflush(stdout); + # else + printf("[----------]\n[ GPU INFO ] \tRun on OS Linux x32.\n[----------]\n"), fflush(stdout); + # endif + #elif defined __APPLE__ + # if defined _LP64 + printf("[----------]\n[ GPU INFO ] \tRun on OS Apple x64.\n[----------]\n"), fflush(stdout); + # else + printf("[----------]\n[ GPU INFO ] \tRun on OS Apple x32.\n[----------]\n"), fflush(stdout); + # endif + #endif + + } + + void printCudaInfo() + { + printOsInfo(); + #ifndef HAVE_CUDA + printf("[----------]\n[ GPU INFO ] \tOpenCV was built without CUDA support.\n[----------]\n"), fflush(stdout); + #else + int driver; + cudaDriverGetVersion(&driver); + + printf("[----------]\n"), fflush(stdout); + printf("[ GPU INFO ] \tCUDA Driver version: %d.\n", driver), fflush(stdout); + printf("[ GPU INFO ] \tCUDA Runtime version: %d.\n", CUDART_VERSION), fflush(stdout); + printf("[----------]\n"), fflush(stdout); + + printf("[----------]\n"), fflush(stdout); + printf("[ GPU INFO ] \tGPU module was compiled for the following GPU archs.\n"), fflush(stdout); + printf("[ BIN ] \t%s.\n", CUDA_ARCH_BIN), fflush(stdout); + printf("[ PTX ] \t%s.\n", CUDA_ARCH_PTX), fflush(stdout); + printf("[----------]\n"), fflush(stdout); + + printf("[----------]\n"), fflush(stdout); + int deviceCount = cv::gpu::getCudaEnabledDeviceCount(); + printf("[ GPU INFO ] \tCUDA device count:: %d.\n", deviceCount), fflush(stdout); + printf("[----------]\n"), fflush(stdout); + + for (int i = 0; i < deviceCount; ++i) + { + cv::gpu::DeviceInfo info(i); + + printf("[----------]\n"), fflush(stdout); + printf("[ DEVICE ] \t# %d %s.\n", i, info.name().c_str()), fflush(stdout); + printf("[ ] \tCompute capability: %d.%d\n", (int)info.majorVersion(), (int)info.minorVersion()), fflush(stdout); + printf("[ ] \tMulti Processor Count: %d\n", info.multiProcessorCount()), fflush(stdout); + printf("[ ] \tTotal memory: %d Mb\n", static_cast(static_cast(info.totalMemory() / 1024.0) / 1024.0)), fflush(stdout); + printf("[ ] \tFree memory: %d Mb\n", static_cast(static_cast(info.freeMemory() / 1024.0) / 1024.0)), fflush(stdout); + if (!info.isCompatible()) + printf("[ GPU INFO ] \tThis device is NOT compatible with current GPU module build\n"); + printf("[----------]\n"), fflush(stdout); + } + + #endif + } + + struct KeypointIdxCompare + { + std::vector* keypoints; + + explicit KeypointIdxCompare(std::vector* _keypoints) : keypoints(_keypoints) {} + + bool operator ()(size_t i1, size_t i2) const + { + cv::KeyPoint kp1 = (*keypoints)[i1]; + cv::KeyPoint kp2 = (*keypoints)[i2]; + if (kp1.pt.x != kp2.pt.x) + return kp1.pt.x < kp2.pt.x; + if (kp1.pt.y != kp2.pt.y) + return kp1.pt.y < kp2.pt.y; + if (kp1.response != kp2.response) + return kp1.response < kp2.response; + return kp1.octave < kp2.octave; + } + }; + + void sortKeyPoints(std::vector& keypoints, cv::InputOutputArray _descriptors) + { + std::vector indexies(keypoints.size()); + for (size_t i = 0; i < indexies.size(); ++i) + indexies[i] = i; + + std::sort(indexies.begin(), indexies.end(), KeypointIdxCompare(&keypoints)); + + std::vector new_keypoints; + cv::Mat new_descriptors; + + new_keypoints.resize(keypoints.size()); + + cv::Mat descriptors; + if (_descriptors.needed()) + { + descriptors = _descriptors.getMat(); + new_descriptors.create(descriptors.size(), descriptors.type()); + } + + for (size_t i = 0; i < indexies.size(); ++i) + { + size_t new_idx = indexies[i]; + new_keypoints[i] = keypoints[new_idx]; + if (!new_descriptors.empty()) + descriptors.row((int) new_idx).copyTo(new_descriptors.row((int) i)); + } + + keypoints.swap(new_keypoints); + if (_descriptors.needed()) + new_descriptors.copyTo(_descriptors); + } +} diff --git a/modules/ts/src/gpu_test.cpp b/modules/ts/src/gpu_test.cpp new file mode 100644 index 0000000000..2ac9467b44 --- /dev/null +++ b/modules/ts/src/gpu_test.cpp @@ -0,0 +1,479 @@ +#include "opencv2/ts/gpu_test.hpp" +#include + +using namespace cv; +using namespace cv::gpu; +using namespace cvtest; +using namespace testing; +using namespace testing::internal; + +namespace perf +{ + CV_EXPORTS void printCudaInfo(); +} + +namespace cvtest +{ + ////////////////////////////////////////////////////////////////////// + // random generators + + int randomInt(int minVal, int maxVal) + { + RNG& rng = TS::ptr()->get_rng(); + return rng.uniform(minVal, maxVal); + } + + double randomDouble(double minVal, double maxVal) + { + RNG& rng = TS::ptr()->get_rng(); + return rng.uniform(minVal, maxVal); + } + + Size randomSize(int minVal, int maxVal) + { + return Size(randomInt(minVal, maxVal), randomInt(minVal, maxVal)); + } + + Scalar randomScalar(double minVal, double maxVal) + { + return Scalar(randomDouble(minVal, maxVal), randomDouble(minVal, maxVal), randomDouble(minVal, maxVal), randomDouble(minVal, maxVal)); + } + + Mat randomMat(Size size, int type, double minVal, double maxVal) + { + return randomMat(TS::ptr()->get_rng(), size, type, minVal, maxVal, false); + } + + ////////////////////////////////////////////////////////////////////// + // GpuMat create + + GpuMat createMat(Size size, int type, bool useRoi) + { + Size size0 = size; + + if (useRoi) + { + size0.width += randomInt(5, 15); + size0.height += randomInt(5, 15); + } + + GpuMat d_m(size0, type); + + if (size0 != size) + d_m = d_m(Rect((size0.width - size.width) / 2, (size0.height - size.height) / 2, size.width, size.height)); + + return d_m; + } + + GpuMat loadMat(const Mat& m, bool useRoi) + { + GpuMat d_m = createMat(m.size(), m.type(), useRoi); + d_m.upload(m); + return d_m; + } + + ////////////////////////////////////////////////////////////////////// + // Image load + + Mat readImage(const std::string& fileName, int flags) + { + return imread(TS::ptr()->get_data_path() + fileName, flags); + } + + Mat readImageType(const std::string& fname, int type) + { + Mat src = readImage(fname, CV_MAT_CN(type) == 1 ? IMREAD_GRAYSCALE : IMREAD_COLOR); + if (CV_MAT_CN(type) == 4) + { + Mat temp; + cvtColor(src, temp, COLOR_BGR2BGRA); + swap(src, temp); + } + src.convertTo(src, CV_MAT_DEPTH(type), CV_MAT_DEPTH(type) == CV_32F ? 1.0 / 255.0 : 1.0); + return src; + } + + ////////////////////////////////////////////////////////////////////// + // Gpu devices + + bool supportFeature(const DeviceInfo& info, FeatureSet feature) + { + return TargetArchs::builtWith(feature) && info.supports(feature); + } + + DeviceManager& DeviceManager::instance() + { + static DeviceManager obj; + return obj; + } + + void DeviceManager::load(int i) + { + devices_.clear(); + devices_.reserve(1); + + std::ostringstream msg; + + if (i < 0 || i >= getCudaEnabledDeviceCount()) + { + msg << "Incorrect device number - " << i; + throw std::runtime_error(msg.str()); + } + + DeviceInfo info(i); + + if (!info.isCompatible()) + { + msg << "Device " << i << " [" << info.name() << "] is NOT compatible with current GPU module build"; + throw std::runtime_error(msg.str()); + } + + devices_.push_back(info); + } + + void DeviceManager::loadAll() + { + int deviceCount = getCudaEnabledDeviceCount(); + + devices_.clear(); + devices_.reserve(deviceCount); + + for (int i = 0; i < deviceCount; ++i) + { + DeviceInfo info(i); + if (info.isCompatible()) + { + devices_.push_back(info); + } + } + } + + ////////////////////////////////////////////////////////////////////// + // Additional assertion + + namespace + { + template std::string printMatValImpl(const Mat& m, Point p) + { + const int cn = m.channels(); + + std::ostringstream ostr; + ostr << "("; + + p.x /= cn; + + ostr << static_cast(m.at(p.y, p.x * cn)); + for (int c = 1; c < m.channels(); ++c) + { + ostr << ", " << static_cast(m.at(p.y, p.x * cn + c)); + } + ostr << ")"; + + return ostr.str(); + } + + std::string printMatVal(const Mat& m, Point p) + { + typedef std::string (*func_t)(const Mat& m, Point p); + + static const func_t funcs[] = + { + printMatValImpl, printMatValImpl, printMatValImpl, printMatValImpl, + printMatValImpl, printMatValImpl, printMatValImpl + }; + + return funcs[m.depth()](m, p); + } + } + + void minMaxLocGold(const Mat& src, double* minVal_, double* maxVal_, Point* minLoc_, Point* maxLoc_, const Mat& mask) + { + if (src.depth() != CV_8S) + { + minMaxLoc(src, minVal_, maxVal_, minLoc_, maxLoc_, mask); + return; + } + + // OpenCV's minMaxLoc doesn't support CV_8S type + double minVal = std::numeric_limits::max(); + Point minLoc(-1, -1); + + double maxVal = -std::numeric_limits::max(); + Point maxLoc(-1, -1); + + for (int y = 0; y < src.rows; ++y) + { + const schar* src_row = src.ptr(y); + const uchar* mask_row = mask.empty() ? 0 : mask.ptr(y); + + for (int x = 0; x < src.cols; ++x) + { + if (!mask_row || mask_row[x]) + { + schar val = src_row[x]; + + if (val < minVal) + { + minVal = val; + minLoc = cv::Point(x, y); + } + + if (val > maxVal) + { + maxVal = val; + maxLoc = cv::Point(x, y); + } + } + } + } + + if (minVal_) *minVal_ = minVal; + if (maxVal_) *maxVal_ = maxVal; + + if (minLoc_) *minLoc_ = minLoc; + if (maxLoc_) *maxLoc_ = maxLoc; + } + + Mat getMat(InputArray arr) + { + if (arr.kind() == _InputArray::GPU_MAT) + { + Mat m; + arr.getGpuMat().download(m); + return m; + } + + return arr.getMat(); + } + + AssertionResult assertMatNear(const char* expr1, const char* expr2, const char* eps_expr, InputArray m1_, InputArray m2_, double eps) + { + Mat m1 = getMat(m1_); + Mat m2 = getMat(m2_); + + if (m1.size() != m2.size()) + { + return AssertionFailure() << "Matrices \"" << expr1 << "\" and \"" << expr2 << "\" have different sizes : \"" + << expr1 << "\" [" << PrintToString(m1.size()) << "] vs \"" + << expr2 << "\" [" << PrintToString(m2.size()) << "]"; + } + + if (m1.type() != m2.type()) + { + return AssertionFailure() << "Matrices \"" << expr1 << "\" and \"" << expr2 << "\" have different types : \"" + << expr1 << "\" [" << PrintToString(MatType(m1.type())) << "] vs \"" + << expr2 << "\" [" << PrintToString(MatType(m2.type())) << "]"; + } + + Mat diff; + absdiff(m1.reshape(1), m2.reshape(1), diff); + + double maxVal = 0.0; + Point maxLoc; + minMaxLocGold(diff, 0, &maxVal, 0, &maxLoc); + + if (maxVal > eps) + { + return AssertionFailure() << "The max difference between matrices \"" << expr1 << "\" and \"" << expr2 + << "\" is " << maxVal << " at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ")" + << ", which exceeds \"" << eps_expr << "\", where \"" + << expr1 << "\" at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ") evaluates to " << printMatVal(m1, maxLoc) << ", \"" + << expr2 << "\" at (" << maxLoc.y << ", " << maxLoc.x / m1.channels() << ") evaluates to " << printMatVal(m2, maxLoc) << ", \"" + << eps_expr << "\" evaluates to " << eps; + } + + return AssertionSuccess(); + } + + double checkSimilarity(InputArray m1, InputArray m2) + { + Mat diff; + matchTemplate(getMat(m1), getMat(m2), diff, CV_TM_CCORR_NORMED); + return std::abs(diff.at(0, 0) - 1.f); + } + + ////////////////////////////////////////////////////////////////////// + // Helper structs for value-parameterized tests + + vector types(int depth_start, int depth_end, int cn_start, int cn_end) + { + vector v; + + v.reserve((depth_end - depth_start + 1) * (cn_end - cn_start + 1)); + + for (int depth = depth_start; depth <= depth_end; ++depth) + { + for (int cn = cn_start; cn <= cn_end; ++cn) + { + v.push_back(MatType(CV_MAKE_TYPE(depth, cn))); + } + } + + return v; + } + + const vector& all_types() + { + static vector v = types(CV_8U, CV_64F, 1, 4); + + return v; + } + + void PrintTo(const UseRoi& useRoi, std::ostream* os) + { + if (useRoi) + (*os) << "sub matrix"; + else + (*os) << "whole matrix"; + } + + void PrintTo(const Inverse& inverse, std::ostream* os) + { + if (inverse) + (*os) << "inverse"; + else + (*os) << "direct"; + } + + ////////////////////////////////////////////////////////////////////// + // Other + + void dumpImage(const std::string& fileName, const Mat& image) + { + imwrite(TS::ptr()->get_data_path() + fileName, image); + } + + void showDiff(InputArray gold_, InputArray actual_, double eps) + { + Mat gold = getMat(gold_); + Mat actual = getMat(actual_); + + Mat diff; + absdiff(gold, actual, diff); + threshold(diff, diff, eps, 255.0, cv::THRESH_BINARY); + + namedWindow("gold", WINDOW_NORMAL); + namedWindow("actual", WINDOW_NORMAL); + namedWindow("diff", WINDOW_NORMAL); + + imshow("gold", gold); + imshow("actual", actual); + imshow("diff", diff); + + waitKey(); + } + + namespace + { + bool keyPointsEquals(const cv::KeyPoint& p1, const cv::KeyPoint& p2) + { + const double maxPtDif = 1.0; + const double maxSizeDif = 1.0; + const double maxAngleDif = 2.0; + const double maxResponseDif = 0.1; + + double dist = cv::norm(p1.pt - p2.pt); + + if (dist < maxPtDif && + fabs(p1.size - p2.size) < maxSizeDif && + abs(p1.angle - p2.angle) < maxAngleDif && + abs(p1.response - p2.response) < maxResponseDif && + p1.octave == p2.octave && + p1.class_id == p2.class_id) + { + return true; + } + + return false; + } + + struct KeyPointLess : std::binary_function + { + bool operator()(const cv::KeyPoint& kp1, const cv::KeyPoint& kp2) const + { + return kp1.pt.y < kp2.pt.y || (kp1.pt.y == kp2.pt.y && kp1.pt.x < kp2.pt.x); + } + }; + } + + testing::AssertionResult assertKeyPointsEquals(const char* gold_expr, const char* actual_expr, std::vector& gold, std::vector& actual) + { + if (gold.size() != actual.size()) + { + return testing::AssertionFailure() << "KeyPoints size mistmach\n" + << "\"" << gold_expr << "\" : " << gold.size() << "\n" + << "\"" << actual_expr << "\" : " << actual.size(); + } + + std::sort(actual.begin(), actual.end(), KeyPointLess()); + std::sort(gold.begin(), gold.end(), KeyPointLess()); + + for (size_t i = 0; i < gold.size(); ++i) + { + const cv::KeyPoint& p1 = gold[i]; + const cv::KeyPoint& p2 = actual[i]; + + if (!keyPointsEquals(p1, p2)) + { + return testing::AssertionFailure() << "KeyPoints differ at " << i << "\n" + << "\"" << gold_expr << "\" vs \"" << actual_expr << "\" : \n" + << "pt : " << testing::PrintToString(p1.pt) << " vs " << testing::PrintToString(p2.pt) << "\n" + << "size : " << p1.size << " vs " << p2.size << "\n" + << "angle : " << p1.angle << " vs " << p2.angle << "\n" + << "response : " << p1.response << " vs " << p2.response << "\n" + << "octave : " << p1.octave << " vs " << p2.octave << "\n" + << "class_id : " << p1.class_id << " vs " << p2.class_id; + } + } + + return ::testing::AssertionSuccess(); + } + + int getMatchedPointsCount(std::vector& gold, std::vector& actual) + { + std::sort(actual.begin(), actual.end(), KeyPointLess()); + std::sort(gold.begin(), gold.end(), KeyPointLess()); + + int validCount = 0; + + for (size_t i = 0; i < gold.size(); ++i) + { + const cv::KeyPoint& p1 = gold[i]; + const cv::KeyPoint& p2 = actual[i]; + + if (keyPointsEquals(p1, p2)) + ++validCount; + } + + return validCount; + } + + int getMatchedPointsCount(const std::vector& keypoints1, const std::vector& keypoints2, const std::vector& matches) + { + int validCount = 0; + + for (size_t i = 0; i < matches.size(); ++i) + { + const cv::DMatch& m = matches[i]; + + const cv::KeyPoint& p1 = keypoints1[m.queryIdx]; + const cv::KeyPoint& p2 = keypoints2[m.trainIdx]; + + if (keyPointsEquals(p1, p2)) + ++validCount; + } + + return validCount; + } + + void printCudaInfo() + { + perf::printCudaInfo(); + } +} + + +void cv::gpu::PrintTo(const DeviceInfo& info, std::ostream* os) +{ + (*os) << info.name(); +} From fd7bf0b76634396e14596ab4e82fb95eeb99811e Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Fri, 15 Mar 2013 14:09:39 +0400 Subject: [PATCH 18/41] moved SURF_GPU and VIBE to gpunonfree module --- modules/gpu/CMakeLists.txt | 2 +- .../doc/feature_detection_and_description.rst | 103 ------- modules/gpu/doc/video.rst | 71 ----- modules/gpu/include/opencv2/gpu/gpu.hpp | 111 ------- modules/gpu/perf/perf_video.cpp | 65 ---- modules/gpu/test/test_bgfg.cpp | 41 --- modules/gpunonfree/CMakeLists.txt | 31 ++ .../doc/feature_detection_and_description.rst | 107 +++++++ modules/gpunonfree/doc/gpunonfree.rst | 9 + modules/gpunonfree/doc/video.rst | 79 +++++ .../include/opencv2/gpunonfree/gpunonfree.hpp | 167 ++++++++++ modules/gpunonfree/perf/perf_gpunonfree.cpp | 118 ++++++++ modules/gpunonfree/perf/perf_main.cpp | 5 + modules/gpunonfree/perf/perf_precomp.cpp | 1 + modules/gpunonfree/perf/perf_precomp.hpp | 31 ++ modules/{gpu => gpunonfree}/src/cuda/surf.cu | 30 ++ .../src/cuda/vibe.cu} | 14 +- modules/gpunonfree/src/precomp.cpp | 45 +++ modules/gpunonfree/src/precomp.hpp | 71 +++++ modules/{gpu => gpunonfree}/src/surf.cpp | 0 .../bgfg_vibe.cpp => gpunonfree/src/vibe.cpp} | 0 modules/gpunonfree/test/test_gpunonfree.cpp | 286 ++++++++++++++++++ modules/gpunonfree/test/test_main.cpp | 119 ++++++++ modules/gpunonfree/test/test_precomp.cpp | 42 +++ modules/gpunonfree/test/test_precomp.hpp | 69 +++++ modules/stitching/CMakeLists.txt | 2 +- .../opencv2/stitching/detail/matchers.hpp | 6 +- modules/stitching/src/matchers.cpp | 2 +- modules/stitching/src/precomp.hpp | 3 + modules/stitching/src/stitcher.cpp | 2 +- samples/cpp/CMakeLists.txt | 11 +- samples/cpp/stitching_detailed.cpp | 2 +- samples/gpu/CMakeLists.txt | 9 +- samples/gpu/bgfg_segm.cpp | 37 ++- samples/gpu/driver_api_stereo_multi.cpp | 3 - samples/gpu/performance/CMakeLists.txt | 8 + samples/gpu/performance/tests.cpp | 10 +- samples/gpu/stereo_multi.cpp | 3 - samples/gpu/surf_keypoint_matcher.cpp | 15 + 39 files changed, 1317 insertions(+), 413 deletions(-) create mode 100644 modules/gpunonfree/CMakeLists.txt create mode 100644 modules/gpunonfree/doc/feature_detection_and_description.rst create mode 100644 modules/gpunonfree/doc/gpunonfree.rst create mode 100644 modules/gpunonfree/doc/video.rst create mode 100644 modules/gpunonfree/include/opencv2/gpunonfree/gpunonfree.hpp create mode 100644 modules/gpunonfree/perf/perf_gpunonfree.cpp create mode 100644 modules/gpunonfree/perf/perf_main.cpp create mode 100644 modules/gpunonfree/perf/perf_precomp.cpp create mode 100644 modules/gpunonfree/perf/perf_precomp.hpp rename modules/{gpu => gpunonfree}/src/cuda/surf.cu (96%) rename modules/{gpu/src/cuda/bgfg_vibe.cu => gpunonfree/src/cuda/vibe.cu} (95%) create mode 100644 modules/gpunonfree/src/precomp.cpp create mode 100644 modules/gpunonfree/src/precomp.hpp rename modules/{gpu => gpunonfree}/src/surf.cpp (100%) rename modules/{gpu/src/bgfg_vibe.cpp => gpunonfree/src/vibe.cpp} (100%) create mode 100644 modules/gpunonfree/test/test_gpunonfree.cpp create mode 100644 modules/gpunonfree/test/test_main.cpp create mode 100644 modules/gpunonfree/test/test_precomp.cpp create mode 100644 modules/gpunonfree/test/test_precomp.hpp diff --git a/modules/gpu/CMakeLists.txt b/modules/gpu/CMakeLists.txt index 26bf624c66..05b65f2413 100644 --- a/modules/gpu/CMakeLists.txt +++ b/modules/gpu/CMakeLists.txt @@ -3,7 +3,7 @@ if(ANDROID OR IOS) endif() set(the_description "GPU-accelerated Computer Vision") -ocv_add_module(gpu opencv_imgproc opencv_calib3d opencv_objdetect opencv_video opencv_nonfree opencv_photo opencv_legacy) +ocv_add_module(gpu opencv_imgproc opencv_calib3d opencv_objdetect opencv_video opencv_photo opencv_legacy) ocv_module_include_directories("${CMAKE_CURRENT_SOURCE_DIR}/src/cuda") diff --git a/modules/gpu/doc/feature_detection_and_description.rst b/modules/gpu/doc/feature_detection_and_description.rst index ec75248040..191b0ada0f 100644 --- a/modules/gpu/doc/feature_detection_and_description.rst +++ b/modules/gpu/doc/feature_detection_and_description.rst @@ -5,109 +5,6 @@ Feature Detection and Description -gpu::SURF_GPU -------------- -.. ocv:class:: gpu::SURF_GPU - -Class used for extracting Speeded Up Robust Features (SURF) from an image. :: - - class SURF_GPU - { - public: - enum KeypointLayout - { - X_ROW = 0, - Y_ROW, - LAPLACIAN_ROW, - OCTAVE_ROW, - SIZE_ROW, - ANGLE_ROW, - HESSIAN_ROW, - ROWS_COUNT - }; - - //! the default constructor - SURF_GPU(); - //! the full constructor taking all the necessary parameters - explicit SURF_GPU(double _hessianThreshold, int _nOctaves=4, - int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f); - - //! returns the descriptor size in float's (64 or 128) - int descriptorSize() const; - - //! upload host keypoints to device memory - void uploadKeypoints(const vector& keypoints, - GpuMat& keypointsGPU); - //! download keypoints from device to host memory - void downloadKeypoints(const GpuMat& keypointsGPU, - vector& keypoints); - - //! download descriptors from device to host memory - void downloadDescriptors(const GpuMat& descriptorsGPU, - vector& descriptors); - - void operator()(const GpuMat& img, const GpuMat& mask, - GpuMat& keypoints); - - void operator()(const GpuMat& img, const GpuMat& mask, - GpuMat& keypoints, GpuMat& descriptors, - bool useProvidedKeypoints = false, - bool calcOrientation = true); - - void operator()(const GpuMat& img, const GpuMat& mask, - std::vector& keypoints); - - void operator()(const GpuMat& img, const GpuMat& mask, - std::vector& keypoints, GpuMat& descriptors, - bool useProvidedKeypoints = false, - bool calcOrientation = true); - - void operator()(const GpuMat& img, const GpuMat& mask, - std::vector& keypoints, - std::vector& descriptors, - bool useProvidedKeypoints = false, - bool calcOrientation = true); - - void releaseMemory(); - - // SURF parameters - double hessianThreshold; - int nOctaves; - int nOctaveLayers; - bool extended; - bool upright; - - //! max keypoints = keypointsRatio * img.size().area() - float keypointsRatio; - - GpuMat sum, mask1, maskSum, intBuffer; - - GpuMat det, trace; - - GpuMat maxPosBuffer; - }; - - -The class ``SURF_GPU`` implements Speeded Up Robust Features descriptor. There is a fast multi-scale Hessian keypoint detector that can be used to find the keypoints (which is the default option). But the descriptors can also be computed for the user-specified keypoints. Only 8-bit grayscale images are supported. - -The class ``SURF_GPU`` can store results in the GPU and CPU memory. It provides functions to convert results between CPU and GPU version ( ``uploadKeypoints``, ``downloadKeypoints``, ``downloadDescriptors`` ). The format of CPU results is the same as ``SURF`` results. GPU results are stored in ``GpuMat``. The ``keypoints`` matrix is :math:`\texttt{nFeatures} \times 7` matrix with the ``CV_32FC1`` type. - -* ``keypoints.ptr(X_ROW)[i]`` contains x coordinate of the i-th feature. -* ``keypoints.ptr(Y_ROW)[i]`` contains y coordinate of the i-th feature. -* ``keypoints.ptr(LAPLACIAN_ROW)[i]`` contains the laplacian sign of the i-th feature. -* ``keypoints.ptr(OCTAVE_ROW)[i]`` contains the octave of the i-th feature. -* ``keypoints.ptr(SIZE_ROW)[i]`` contains the size of the i-th feature. -* ``keypoints.ptr(ANGLE_ROW)[i]`` contain orientation of the i-th feature. -* ``keypoints.ptr(HESSIAN_ROW)[i]`` contains the response of the i-th feature. - -The ``descriptors`` matrix is :math:`\texttt{nFeatures} \times \texttt{descriptorSize}` matrix with the ``CV_32FC1`` type. - -The class ``SURF_GPU`` uses some buffers and provides access to it. All buffers can be safely released between function calls. - -.. seealso:: :ocv:class:`SURF` - - - gpu::FAST_GPU ------------- .. ocv:class:: gpu::FAST_GPU diff --git a/modules/gpu/doc/video.rst b/modules/gpu/doc/video.rst index fc5b1fb6cb..284bb17fa9 100644 --- a/modules/gpu/doc/video.rst +++ b/modules/gpu/doc/video.rst @@ -579,76 +579,6 @@ Releases all inner buffer's memory. -gpu::VIBE_GPU -------------- -.. ocv:class:: gpu::VIBE_GPU - -Class used for background/foreground segmentation. :: - - class VIBE_GPU - { - public: - explicit VIBE_GPU(unsigned long rngSeed = 1234567); - - void initialize(const GpuMat& firstFrame, Stream& stream = Stream::Null()); - - void operator()(const GpuMat& frame, GpuMat& fgmask, Stream& stream = Stream::Null()); - - void release(); - - ... - }; - -The class discriminates between foreground and background pixels by building and maintaining a model of the background. Any pixel which does not fit this model is then deemed to be foreground. The class implements algorithm described in [VIBE2011]_. - - - -gpu::VIBE_GPU::VIBE_GPU ------------------------ -The constructor. - -.. ocv:function:: gpu::VIBE_GPU::VIBE_GPU(unsigned long rngSeed = 1234567) - - :param rngSeed: Value used to initiate a random sequence. - -Default constructor sets all parameters to default values. - - - -gpu::VIBE_GPU::initialize -------------------------- -Initialize background model and allocates all inner buffers. - -.. ocv:function:: void gpu::VIBE_GPU::initialize(const GpuMat& firstFrame, Stream& stream = Stream::Null()) - - :param firstFrame: First frame from video sequence. - - :param stream: Stream for the asynchronous version. - - - -gpu::VIBE_GPU::operator() -------------------------- -Updates the background model and returns the foreground mask - -.. ocv:function:: void gpu::VIBE_GPU::operator()(const GpuMat& frame, GpuMat& fgmask, Stream& stream = Stream::Null()) - - :param frame: Next video frame. - - :param fgmask: The output foreground mask as an 8-bit binary image. - - :param stream: Stream for the asynchronous version. - - - -gpu::VIBE_GPU::release ----------------------- -Releases all inner buffer's memory. - -.. ocv:function:: void gpu::VIBE_GPU::release() - - - gpu::GMG_GPU ------------ .. ocv:class:: gpu::GMG_GPU @@ -1209,5 +1139,4 @@ Parse next video frame. Implementation must call this method after new frame was .. [MOG2001] P. KadewTraKuPong and R. Bowden. *An improved adaptive background mixture model for real-time tracking with shadow detection*. Proc. 2nd European Workshop on Advanced Video-Based Surveillance Systems, 2001 .. [MOG2004] Z. Zivkovic. *Improved adaptive Gausian mixture model for background subtraction*. International Conference Pattern Recognition, UK, August, 2004 .. [ShadowDetect2003] Prati, Mikic, Trivedi and Cucchiarra. *Detecting Moving Shadows...*. IEEE PAMI, 2003 -.. [VIBE2011] O. Barnich and M. Van D Roogenbroeck. *ViBe: A universal background subtraction algorithm for video sequences*. IEEE Transactions on Image Processing, 20(6) :1709-1724, June 2011 .. [GMG2012] A. Godbehere, A. Matsukawa and K. Goldberg. *Visual Tracking of Human Visitors under Variable-Lighting Conditions for a Responsive Audio Art Installation*. American Control Conference, Montreal, June 2012 diff --git a/modules/gpu/include/opencv2/gpu/gpu.hpp b/modules/gpu/include/opencv2/gpu/gpu.hpp index 802954c71f..bb74d1a52d 100644 --- a/modules/gpu/include/opencv2/gpu/gpu.hpp +++ b/modules/gpu/include/opencv2/gpu/gpu.hpp @@ -1557,82 +1557,6 @@ private: friend class CascadeClassifier_GPU_LBP; }; -////////////////////////////////// SURF ////////////////////////////////////////// - -class CV_EXPORTS SURF_GPU -{ -public: - enum KeypointLayout - { - X_ROW = 0, - Y_ROW, - LAPLACIAN_ROW, - OCTAVE_ROW, - SIZE_ROW, - ANGLE_ROW, - HESSIAN_ROW, - ROWS_COUNT - }; - - //! the default constructor - SURF_GPU(); - //! the full constructor taking all the necessary parameters - explicit SURF_GPU(double _hessianThreshold, int _nOctaves=4, - int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f, bool _upright = false); - - //! returns the descriptor size in float's (64 or 128) - int descriptorSize() const; - - //! upload host keypoints to device memory - void uploadKeypoints(const vector& keypoints, GpuMat& keypointsGPU); - //! download keypoints from device to host memory - void downloadKeypoints(const GpuMat& keypointsGPU, vector& keypoints); - - //! download descriptors from device to host memory - void downloadDescriptors(const GpuMat& descriptorsGPU, vector& descriptors); - - //! finds the keypoints using fast hessian detector used in SURF - //! supports CV_8UC1 images - //! keypoints will have nFeature cols and 6 rows - //! keypoints.ptr(X_ROW)[i] will contain x coordinate of i'th feature - //! keypoints.ptr(Y_ROW)[i] will contain y coordinate of i'th feature - //! keypoints.ptr(LAPLACIAN_ROW)[i] will contain laplacian sign of i'th feature - //! keypoints.ptr(OCTAVE_ROW)[i] will contain octave of i'th feature - //! keypoints.ptr(SIZE_ROW)[i] will contain size of i'th feature - //! keypoints.ptr(ANGLE_ROW)[i] will contain orientation of i'th feature - //! keypoints.ptr(HESSIAN_ROW)[i] will contain response of i'th feature - void operator()(const GpuMat& img, const GpuMat& mask, GpuMat& keypoints); - //! finds the keypoints and computes their descriptors. - //! Optionally it can compute descriptors for the user-provided keypoints and recompute keypoints direction - void operator()(const GpuMat& img, const GpuMat& mask, GpuMat& keypoints, GpuMat& descriptors, - bool useProvidedKeypoints = false); - - void operator()(const GpuMat& img, const GpuMat& mask, std::vector& keypoints); - void operator()(const GpuMat& img, const GpuMat& mask, std::vector& keypoints, GpuMat& descriptors, - bool useProvidedKeypoints = false); - - void operator()(const GpuMat& img, const GpuMat& mask, std::vector& keypoints, std::vector& descriptors, - bool useProvidedKeypoints = false); - - void releaseMemory(); - - // SURF parameters - double hessianThreshold; - int nOctaves; - int nOctaveLayers; - bool extended; - bool upright; - - //! max keypoints = min(keypointsRatio * img.size().area(), 65535) - float keypointsRatio; - - GpuMat sum, mask1, maskSum, intBuffer; - - GpuMat det, trace; - - GpuMat maxPosBuffer; -}; - ////////////////////////////////// FAST ////////////////////////////////////////// class CV_EXPORTS FAST_GPU @@ -2307,41 +2231,6 @@ private: GpuMat bgmodelUsedModes_; //keep track of number of modes per pixel }; -/*! - * The class implements the following algorithm: - * "ViBe: A universal background subtraction algorithm for video sequences" - * O. Barnich and M. Van D Roogenbroeck - * IEEE Transactions on Image Processing, 20(6) :1709-1724, June 2011 - */ -class CV_EXPORTS VIBE_GPU -{ -public: - //! the default constructor - explicit VIBE_GPU(unsigned long rngSeed = 1234567); - - //! re-initiaization method - void initialize(const GpuMat& firstFrame, Stream& stream = Stream::Null()); - - //! the update operator - void operator()(const GpuMat& frame, GpuMat& fgmask, Stream& stream = Stream::Null()); - - //! releases all inner buffers - void release(); - - int nbSamples; // number of samples per pixel - int reqMatches; // #_min - int radius; // R - int subsamplingFactor; // amount of random subsampling - -private: - Size frameSize_; - - unsigned long rngSeed_; - GpuMat randStates_; - - GpuMat samples_; -}; - /** * Background Subtractor module. Takes a series of images and returns a sequence of mask (8UC1) * images of the same size, where 255 indicates Foreground and 0 represents Background. diff --git a/modules/gpu/perf/perf_video.cpp b/modules/gpu/perf/perf_video.cpp index 61c2687ca9..e9b38ed5e7 100644 --- a/modules/gpu/perf/perf_video.cpp +++ b/modules/gpu/perf/perf_video.cpp @@ -818,71 +818,6 @@ PERF_TEST_P(Video_Cn, Video_MOG2GetBackgroundImage, } } -////////////////////////////////////////////////////// -// VIBE - -PERF_TEST_P(Video_Cn, Video_VIBE, - Combine(Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi"), - GPU_CHANNELS_1_3_4)) -{ - const string inputFile = perf::TestBase::getDataPath(GET_PARAM(0)); - const int cn = GET_PARAM(1); - - cv::VideoCapture cap(inputFile); - ASSERT_TRUE(cap.isOpened()); - - cv::Mat frame; - cap >> frame; - ASSERT_FALSE(frame.empty()); - - if (cn != 3) - { - cv::Mat temp; - if (cn == 1) - cv::cvtColor(frame, temp, cv::COLOR_BGR2GRAY); - else - cv::cvtColor(frame, temp, cv::COLOR_BGR2BGRA); - cv::swap(temp, frame); - } - - if (PERF_RUN_GPU()) - { - cv::gpu::GpuMat d_frame(frame); - cv::gpu::VIBE_GPU vibe; - cv::gpu::GpuMat foreground; - - vibe(d_frame, foreground); - - for (int i = 0; i < 10; ++i) - { - cap >> frame; - ASSERT_FALSE(frame.empty()); - - if (cn != 3) - { - cv::Mat temp; - if (cn == 1) - cv::cvtColor(frame, temp, cv::COLOR_BGR2GRAY); - else - cv::cvtColor(frame, temp, cv::COLOR_BGR2BGRA); - cv::swap(temp, frame); - } - - d_frame.upload(frame); - - startTimer(); next(); - vibe(d_frame, foreground); - stopTimer(); - } - - GPU_SANITY_CHECK(foreground); - } - else - { - FAIL_NO_CPU(); - } -} - ////////////////////////////////////////////////////// // GMG diff --git a/modules/gpu/test/test_bgfg.cpp b/modules/gpu/test/test_bgfg.cpp index aea6eb7189..253ded26c6 100644 --- a/modules/gpu/test/test_bgfg.cpp +++ b/modules/gpu/test/test_bgfg.cpp @@ -322,47 +322,6 @@ INSTANTIATE_TEST_CASE_P(GPU_Video, MOG2, testing::Combine( testing::Values(DetectShadow(true), DetectShadow(false)), WHOLE_SUBMAT)); -////////////////////////////////////////////////////// -// VIBE - -PARAM_TEST_CASE(VIBE, cv::gpu::DeviceInfo, cv::Size, MatType, UseRoi) -{ -}; - -GPU_TEST_P(VIBE, Accuracy) -{ - const cv::gpu::DeviceInfo devInfo = GET_PARAM(0); - cv::gpu::setDevice(devInfo.deviceID()); - const cv::Size size = GET_PARAM(1); - const int type = GET_PARAM(2); - const bool useRoi = GET_PARAM(3); - - const cv::Mat fullfg(size, CV_8UC1, cv::Scalar::all(255)); - - cv::Mat frame = randomMat(size, type, 0.0, 100); - cv::gpu::GpuMat d_frame = loadMat(frame, useRoi); - - cv::gpu::VIBE_GPU vibe; - cv::gpu::GpuMat d_fgmask = createMat(size, CV_8UC1, useRoi); - vibe.initialize(d_frame); - - for (int i = 0; i < 20; ++i) - vibe(d_frame, d_fgmask); - - frame = randomMat(size, type, 160, 255); - d_frame = loadMat(frame, useRoi); - vibe(d_frame, d_fgmask); - - // now fgmask should be entirely foreground - ASSERT_MAT_NEAR(fullfg, d_fgmask, 0); -} - -INSTANTIATE_TEST_CASE_P(GPU_Video, VIBE, testing::Combine( - ALL_DEVICES, - DIFFERENT_SIZES, - testing::Values(MatType(CV_8UC1), MatType(CV_8UC3), MatType(CV_8UC4)), - WHOLE_SUBMAT)); - ////////////////////////////////////////////////////// // GMG diff --git a/modules/gpunonfree/CMakeLists.txt b/modules/gpunonfree/CMakeLists.txt new file mode 100644 index 0000000000..a975a61a43 --- /dev/null +++ b/modules/gpunonfree/CMakeLists.txt @@ -0,0 +1,31 @@ +if(ANDROID OR IOS) + ocv_module_disable(gpunonfree) +endif() + +set(the_description "GPU-accelerated Computer Vision (non free)") +ocv_add_module(gpunonfree opencv_gpu opencv_nonfree) +ocv_module_include_directories() + +if(HAVE_CUDA) + ocv_source_group("Src\\Cuda" GLOB "src/cuda/*.cu") + ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include" ${CUDA_INCLUDE_DIRS}) + ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef) + + file(GLOB lib_cuda "src/cuda/*.cu") + ocv_cuda_compile(cuda_objs ${lib_cuda}) + + set(cuda_link_libs ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) +else() + set(lib_cuda "") + set(cuda_objs "") + set(cuda_link_libs "") +endif() + +ocv_glob_module_sources(SOURCES ${lib_cuda} ${cuda_objs}) + +ocv_create_module(${cuda_link_libs}) +ocv_add_precompiled_headers(${the_module}) + +ocv_add_accuracy_tests() +ocv_add_perf_tests() + diff --git a/modules/gpunonfree/doc/feature_detection_and_description.rst b/modules/gpunonfree/doc/feature_detection_and_description.rst new file mode 100644 index 0000000000..9cec66f539 --- /dev/null +++ b/modules/gpunonfree/doc/feature_detection_and_description.rst @@ -0,0 +1,107 @@ +Feature Detection and Description +================================= + +.. highlight:: cpp + + + +gpu::SURF_GPU +------------- +.. ocv:class:: gpu::SURF_GPU + +Class used for extracting Speeded Up Robust Features (SURF) from an image. :: + + class SURF_GPU + { + public: + enum KeypointLayout + { + X_ROW = 0, + Y_ROW, + LAPLACIAN_ROW, + OCTAVE_ROW, + SIZE_ROW, + ANGLE_ROW, + HESSIAN_ROW, + ROWS_COUNT + }; + + //! the default constructor + SURF_GPU(); + //! the full constructor taking all the necessary parameters + explicit SURF_GPU(double _hessianThreshold, int _nOctaves=4, + int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f); + + //! returns the descriptor size in float's (64 or 128) + int descriptorSize() const; + + //! upload host keypoints to device memory + void uploadKeypoints(const vector& keypoints, + GpuMat& keypointsGPU); + //! download keypoints from device to host memory + void downloadKeypoints(const GpuMat& keypointsGPU, + vector& keypoints); + + //! download descriptors from device to host memory + void downloadDescriptors(const GpuMat& descriptorsGPU, + vector& descriptors); + + void operator()(const GpuMat& img, const GpuMat& mask, + GpuMat& keypoints); + + void operator()(const GpuMat& img, const GpuMat& mask, + GpuMat& keypoints, GpuMat& descriptors, + bool useProvidedKeypoints = false, + bool calcOrientation = true); + + void operator()(const GpuMat& img, const GpuMat& mask, + std::vector& keypoints); + + void operator()(const GpuMat& img, const GpuMat& mask, + std::vector& keypoints, GpuMat& descriptors, + bool useProvidedKeypoints = false, + bool calcOrientation = true); + + void operator()(const GpuMat& img, const GpuMat& mask, + std::vector& keypoints, + std::vector& descriptors, + bool useProvidedKeypoints = false, + bool calcOrientation = true); + + void releaseMemory(); + + // SURF parameters + double hessianThreshold; + int nOctaves; + int nOctaveLayers; + bool extended; + bool upright; + + //! max keypoints = keypointsRatio * img.size().area() + float keypointsRatio; + + GpuMat sum, mask1, maskSum, intBuffer; + + GpuMat det, trace; + + GpuMat maxPosBuffer; + }; + + +The class ``SURF_GPU`` implements Speeded Up Robust Features descriptor. There is a fast multi-scale Hessian keypoint detector that can be used to find the keypoints (which is the default option). But the descriptors can also be computed for the user-specified keypoints. Only 8-bit grayscale images are supported. + +The class ``SURF_GPU`` can store results in the GPU and CPU memory. It provides functions to convert results between CPU and GPU version ( ``uploadKeypoints``, ``downloadKeypoints``, ``downloadDescriptors`` ). The format of CPU results is the same as ``SURF`` results. GPU results are stored in ``GpuMat``. The ``keypoints`` matrix is :math:`\texttt{nFeatures} \times 7` matrix with the ``CV_32FC1`` type. + +* ``keypoints.ptr(X_ROW)[i]`` contains x coordinate of the i-th feature. +* ``keypoints.ptr(Y_ROW)[i]`` contains y coordinate of the i-th feature. +* ``keypoints.ptr(LAPLACIAN_ROW)[i]`` contains the laplacian sign of the i-th feature. +* ``keypoints.ptr(OCTAVE_ROW)[i]`` contains the octave of the i-th feature. +* ``keypoints.ptr(SIZE_ROW)[i]`` contains the size of the i-th feature. +* ``keypoints.ptr(ANGLE_ROW)[i]`` contain orientation of the i-th feature. +* ``keypoints.ptr(HESSIAN_ROW)[i]`` contains the response of the i-th feature. + +The ``descriptors`` matrix is :math:`\texttt{nFeatures} \times \texttt{descriptorSize}` matrix with the ``CV_32FC1`` type. + +The class ``SURF_GPU`` uses some buffers and provides access to it. All buffers can be safely released between function calls. + +.. seealso:: :ocv:class:`SURF` diff --git a/modules/gpunonfree/doc/gpunonfree.rst b/modules/gpunonfree/doc/gpunonfree.rst new file mode 100644 index 0000000000..4c2b71fe26 --- /dev/null +++ b/modules/gpunonfree/doc/gpunonfree.rst @@ -0,0 +1,9 @@ +****************************************************** +gpunonfree. GPU-accelerated Computer Vision (non free) +****************************************************** + +.. toctree:: + :maxdepth: 1 + + feature_detection_and_description + video diff --git a/modules/gpunonfree/doc/video.rst b/modules/gpunonfree/doc/video.rst new file mode 100644 index 0000000000..4fdfacc07d --- /dev/null +++ b/modules/gpunonfree/doc/video.rst @@ -0,0 +1,79 @@ +Video Analysis +============== + +.. highlight:: cpp + + + +gpu::VIBE_GPU +------------- +.. ocv:class:: gpu::VIBE_GPU + +Class used for background/foreground segmentation. :: + + class VIBE_GPU + { + public: + explicit VIBE_GPU(unsigned long rngSeed = 1234567); + + void initialize(const GpuMat& firstFrame, Stream& stream = Stream::Null()); + + void operator()(const GpuMat& frame, GpuMat& fgmask, Stream& stream = Stream::Null()); + + void release(); + + ... + }; + +The class discriminates between foreground and background pixels by building and maintaining a model of the background. Any pixel which does not fit this model is then deemed to be foreground. The class implements algorithm described in [VIBE2011]_. + + + +gpu::VIBE_GPU::VIBE_GPU +----------------------- +The constructor. + +.. ocv:function:: gpu::VIBE_GPU::VIBE_GPU(unsigned long rngSeed = 1234567) + + :param rngSeed: Value used to initiate a random sequence. + +Default constructor sets all parameters to default values. + + + +gpu::VIBE_GPU::initialize +------------------------- +Initialize background model and allocates all inner buffers. + +.. ocv:function:: void gpu::VIBE_GPU::initialize(const GpuMat& firstFrame, Stream& stream = Stream::Null()) + + :param firstFrame: First frame from video sequence. + + :param stream: Stream for the asynchronous version. + + + +gpu::VIBE_GPU::operator() +------------------------- +Updates the background model and returns the foreground mask + +.. ocv:function:: void gpu::VIBE_GPU::operator()(const GpuMat& frame, GpuMat& fgmask, Stream& stream = Stream::Null()) + + :param frame: Next video frame. + + :param fgmask: The output foreground mask as an 8-bit binary image. + + :param stream: Stream for the asynchronous version. + + + +gpu::VIBE_GPU::release +---------------------- +Releases all inner buffer's memory. + +.. ocv:function:: void gpu::VIBE_GPU::release() + + + + +.. [VIBE2011] O. Barnich and M. Van D Roogenbroeck. *ViBe: A universal background subtraction algorithm for video sequences*. IEEE Transactions on Image Processing, 20(6) :1709-1724, June 2011 diff --git a/modules/gpunonfree/include/opencv2/gpunonfree/gpunonfree.hpp b/modules/gpunonfree/include/opencv2/gpunonfree/gpunonfree.hpp new file mode 100644 index 0000000000..40d9cfd2bc --- /dev/null +++ b/modules/gpunonfree/include/opencv2/gpunonfree/gpunonfree.hpp @@ -0,0 +1,167 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other GpuMaterials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifndef __OPENCV_GPUNONFREE_HPP__ +#define __OPENCV_GPUNONFREE_HPP__ + +#ifndef SKIP_INCLUDES +#include +#endif + +#include "opencv2/gpu/gpu.hpp" + +namespace cv { namespace gpu { + +class CV_EXPORTS SURF_GPU +{ +public: + enum KeypointLayout + { + X_ROW = 0, + Y_ROW, + LAPLACIAN_ROW, + OCTAVE_ROW, + SIZE_ROW, + ANGLE_ROW, + HESSIAN_ROW, + ROWS_COUNT + }; + + //! the default constructor + SURF_GPU(); + //! the full constructor taking all the necessary parameters + explicit SURF_GPU(double _hessianThreshold, int _nOctaves=4, + int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f, bool _upright = false); + + //! returns the descriptor size in float's (64 or 128) + int descriptorSize() const; + + //! upload host keypoints to device memory + void uploadKeypoints(const std::vector& keypoints, GpuMat& keypointsGPU); + //! download keypoints from device to host memory + void downloadKeypoints(const GpuMat& keypointsGPU, std::vector& keypoints); + + //! download descriptors from device to host memory + void downloadDescriptors(const GpuMat& descriptorsGPU, std::vector& descriptors); + + //! finds the keypoints using fast hessian detector used in SURF + //! supports CV_8UC1 images + //! keypoints will have nFeature cols and 6 rows + //! keypoints.ptr(X_ROW)[i] will contain x coordinate of i'th feature + //! keypoints.ptr(Y_ROW)[i] will contain y coordinate of i'th feature + //! keypoints.ptr(LAPLACIAN_ROW)[i] will contain laplacian sign of i'th feature + //! keypoints.ptr(OCTAVE_ROW)[i] will contain octave of i'th feature + //! keypoints.ptr(SIZE_ROW)[i] will contain size of i'th feature + //! keypoints.ptr(ANGLE_ROW)[i] will contain orientation of i'th feature + //! keypoints.ptr(HESSIAN_ROW)[i] will contain response of i'th feature + void operator()(const GpuMat& img, const GpuMat& mask, GpuMat& keypoints); + //! finds the keypoints and computes their descriptors. + //! Optionally it can compute descriptors for the user-provided keypoints and recompute keypoints direction + void operator()(const GpuMat& img, const GpuMat& mask, GpuMat& keypoints, GpuMat& descriptors, + bool useProvidedKeypoints = false); + + void operator()(const GpuMat& img, const GpuMat& mask, std::vector& keypoints); + void operator()(const GpuMat& img, const GpuMat& mask, std::vector& keypoints, GpuMat& descriptors, + bool useProvidedKeypoints = false); + + void operator()(const GpuMat& img, const GpuMat& mask, std::vector& keypoints, std::vector& descriptors, + bool useProvidedKeypoints = false); + + void releaseMemory(); + + // SURF parameters + double hessianThreshold; + int nOctaves; + int nOctaveLayers; + bool extended; + bool upright; + + //! max keypoints = min(keypointsRatio * img.size().area(), 65535) + float keypointsRatio; + + GpuMat sum, mask1, maskSum, intBuffer; + + GpuMat det, trace; + + GpuMat maxPosBuffer; +}; + +/*! + * The class implements the following algorithm: + * "ViBe: A universal background subtraction algorithm for video sequences" + * O. Barnich and M. Van D Roogenbroeck + * IEEE Transactions on Image Processing, 20(6) :1709-1724, June 2011 + */ +class CV_EXPORTS VIBE_GPU +{ +public: + //! the default constructor + explicit VIBE_GPU(unsigned long rngSeed = 1234567); + + //! re-initiaization method + void initialize(const GpuMat& firstFrame, Stream& stream = Stream::Null()); + + //! the update operator + void operator()(const GpuMat& frame, GpuMat& fgmask, Stream& stream = Stream::Null()); + + //! releases all inner buffers + void release(); + + int nbSamples; // number of samples per pixel + int reqMatches; // #_min + int radius; // R + int subsamplingFactor; // amount of random subsampling + +private: + Size frameSize_; + + unsigned long rngSeed_; + GpuMat randStates_; + + GpuMat samples_; +}; + +} // namespace gpu + +} // namespace cv + +#endif /* __OPENCV_GPUNONFREE_HPP__ */ diff --git a/modules/gpunonfree/perf/perf_gpunonfree.cpp b/modules/gpunonfree/perf/perf_gpunonfree.cpp new file mode 100644 index 0000000000..4a27b77258 --- /dev/null +++ b/modules/gpunonfree/perf/perf_gpunonfree.cpp @@ -0,0 +1,118 @@ +#include "perf_precomp.hpp" + +using namespace std; +using namespace testing; +using namespace perf; + +////////////////////////////////////////////////////////////////////// +// SURF + +DEF_PARAM_TEST_1(Image, string); + +PERF_TEST_P(Image, Features2D_SURF, + Values("gpu/perf/aloe.png")) +{ + declare.time(50.0); + + const cv::Mat img = readImage(GetParam(), cv::IMREAD_GRAYSCALE); + ASSERT_FALSE(img.empty()); + + if (PERF_RUN_GPU()) + { + cv::gpu::SURF_GPU d_surf; + + const cv::gpu::GpuMat d_img(img); + cv::gpu::GpuMat d_keypoints, d_descriptors; + + TEST_CYCLE() d_surf(d_img, cv::gpu::GpuMat(), d_keypoints, d_descriptors); + + std::vector gpu_keypoints; + d_surf.downloadKeypoints(d_keypoints, gpu_keypoints); + + cv::Mat gpu_descriptors(d_descriptors); + + sortKeyPoints(gpu_keypoints, gpu_descriptors); + + SANITY_CHECK_KEYPOINTS(gpu_keypoints); + SANITY_CHECK(gpu_descriptors, 1e-3); + } + else + { + cv::SURF surf; + + std::vector cpu_keypoints; + cv::Mat cpu_descriptors; + + TEST_CYCLE() surf(img, cv::noArray(), cpu_keypoints, cpu_descriptors); + + SANITY_CHECK_KEYPOINTS(cpu_keypoints); + SANITY_CHECK(cpu_descriptors); + } +} + +////////////////////////////////////////////////////// +// VIBE + +DEF_PARAM_TEST(Video_Cn, string, int); + +PERF_TEST_P(Video_Cn, Video_VIBE, + Combine(Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi"), + GPU_CHANNELS_1_3_4)) +{ + const string inputFile = perf::TestBase::getDataPath(GET_PARAM(0)); + const int cn = GET_PARAM(1); + + cv::VideoCapture cap(inputFile); + ASSERT_TRUE(cap.isOpened()); + + cv::Mat frame; + cap >> frame; + ASSERT_FALSE(frame.empty()); + + if (cn != 3) + { + cv::Mat temp; + if (cn == 1) + cv::cvtColor(frame, temp, cv::COLOR_BGR2GRAY); + else + cv::cvtColor(frame, temp, cv::COLOR_BGR2BGRA); + cv::swap(temp, frame); + } + + if (PERF_RUN_GPU()) + { + cv::gpu::GpuMat d_frame(frame); + cv::gpu::VIBE_GPU vibe; + cv::gpu::GpuMat foreground; + + vibe(d_frame, foreground); + + for (int i = 0; i < 10; ++i) + { + cap >> frame; + ASSERT_FALSE(frame.empty()); + + if (cn != 3) + { + cv::Mat temp; + if (cn == 1) + cv::cvtColor(frame, temp, cv::COLOR_BGR2GRAY); + else + cv::cvtColor(frame, temp, cv::COLOR_BGR2BGRA); + cv::swap(temp, frame); + } + + d_frame.upload(frame); + + startTimer(); next(); + vibe(d_frame, foreground); + stopTimer(); + } + + GPU_SANITY_CHECK(foreground); + } + else + { + FAIL_NO_CPU(); + } +} diff --git a/modules/gpunonfree/perf/perf_main.cpp b/modules/gpunonfree/perf/perf_main.cpp new file mode 100644 index 0000000000..75e3ca651b --- /dev/null +++ b/modules/gpunonfree/perf/perf_main.cpp @@ -0,0 +1,5 @@ +#include "perf_precomp.hpp" + +using namespace perf; + +CV_PERF_TEST_MAIN(gpunonfree, printCudaInfo()) diff --git a/modules/gpunonfree/perf/perf_precomp.cpp b/modules/gpunonfree/perf/perf_precomp.cpp new file mode 100644 index 0000000000..8552ac3d42 --- /dev/null +++ b/modules/gpunonfree/perf/perf_precomp.cpp @@ -0,0 +1 @@ +#include "perf_precomp.hpp" diff --git a/modules/gpunonfree/perf/perf_precomp.hpp b/modules/gpunonfree/perf/perf_precomp.hpp new file mode 100644 index 0000000000..410eaecfdf --- /dev/null +++ b/modules/gpunonfree/perf/perf_precomp.hpp @@ -0,0 +1,31 @@ +#ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wmissing-declarations" +# if defined __clang__ || defined __APPLE__ +# pragma GCC diagnostic ignored "-Wmissing-prototypes" +# pragma GCC diagnostic ignored "-Wextra" +# endif +#endif + +#ifndef __OPENCV_PERF_PRECOMP_HPP__ +#define __OPENCV_PERF_PRECOMP_HPP__ + +#include +#include + +#include "cvconfig.h" + +#include "opencv2/ts/ts.hpp" +#include "opencv2/ts/ts_perf.hpp" +#include "opencv2/ts/gpu_perf.hpp" + +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/gpu/gpu.hpp" +#include "opencv2/gpunonfree/gpunonfree.hpp" +#include "opencv2/nonfree/nonfree.hpp" + +#ifdef GTEST_CREATE_SHARED_LIBRARY +#error no modules except ts should have GTEST_CREATE_SHARED_LIBRARY defined +#endif + +#endif diff --git a/modules/gpu/src/cuda/surf.cu b/modules/gpunonfree/src/cuda/surf.cu similarity index 96% rename from modules/gpu/src/cuda/surf.cu rename to modules/gpunonfree/src/cuda/surf.cu index 5dc2c82104..b82e2c3863 100644 --- a/modules/gpu/src/cuda/surf.cu +++ b/modules/gpunonfree/src/cuda/surf.cu @@ -55,6 +55,33 @@ #include "opencv2/gpu/device/functional.hpp" #include "opencv2/gpu/device/filters.hpp" +namespace cv { namespace gpu { namespace device +{ + namespace surf + { + void loadGlobalConstants(int maxCandidates, int maxFeatures, int img_rows, int img_cols, int nOctaveLayers, float hessianThreshold); + void loadOctaveConstants(int octave, int layer_rows, int layer_cols); + + void bindImgTex(PtrStepSzb img); + size_t bindSumTex(PtrStepSz sum); + size_t bindMaskSumTex(PtrStepSz maskSum); + + void icvCalcLayerDetAndTrace_gpu(const PtrStepf& det, const PtrStepf& trace, int img_rows, int img_cols, + int octave, int nOctaveLayer); + + void icvFindMaximaInLayer_gpu(const PtrStepf& det, const PtrStepf& trace, int4* maxPosBuffer, unsigned int* maxCounter, + int img_rows, int img_cols, int octave, bool use_mask, int nLayers); + + void icvInterpolateKeypoint_gpu(const PtrStepf& det, const int4* maxPosBuffer, unsigned int maxCounter, + float* featureX, float* featureY, int* featureLaplacian, int* featureOctave, float* featureSize, float* featureHessian, + unsigned int* featureCounter); + + void icvCalcOrientation_gpu(const float* featureX, const float* featureY, const float* featureSize, float* featureDir, int nFeatures); + + void compute_descriptors_gpu(PtrStepSz descriptors, const float* featureX, const float* featureY, const float* featureSize, const float* featureDir, int nFeatures); + } +}}} + namespace cv { namespace gpu { namespace device { namespace surf @@ -717,6 +744,9 @@ namespace cv { namespace gpu { namespace device int height; }; + __device__ void calc_dx_dy(const float* featureX, const float* featureY, const float* featureSize, const float* featureDir, + float& dx, float& dy); + __device__ void calc_dx_dy(const float* featureX, const float* featureY, const float* featureSize, const float* featureDir, float& dx, float& dy) { diff --git a/modules/gpu/src/cuda/bgfg_vibe.cu b/modules/gpunonfree/src/cuda/vibe.cu similarity index 95% rename from modules/gpu/src/cuda/bgfg_vibe.cu rename to modules/gpunonfree/src/cuda/vibe.cu index 72ea7f0ae7..ff489eeab9 100644 --- a/modules/gpu/src/cuda/bgfg_vibe.cu +++ b/modules/gpunonfree/src/cuda/vibe.cu @@ -44,6 +44,18 @@ #include "opencv2/gpu/device/common.hpp" +namespace cv { namespace gpu { namespace device +{ + namespace vibe + { + void loadConstants(int nbSamples, int reqMatches, int radius, int subsamplingFactor); + + void init_gpu(PtrStepSzb frame, int cn, PtrStepSzb samples, PtrStepSz randStates, cudaStream_t stream); + + void update_gpu(PtrStepSzb frame, int cn, PtrStepSzb fgmask, PtrStepSzb samples, PtrStepSz randStates, cudaStream_t stream); + } +}}} + namespace cv { namespace gpu { namespace device { namespace vibe @@ -255,4 +267,4 @@ namespace cv { namespace gpu { namespace device }}} -#endif /* CUDA_DISABLER */ \ No newline at end of file +#endif /* CUDA_DISABLER */ diff --git a/modules/gpunonfree/src/precomp.cpp b/modules/gpunonfree/src/precomp.cpp new file mode 100644 index 0000000000..75eb6935d0 --- /dev/null +++ b/modules/gpunonfree/src/precomp.cpp @@ -0,0 +1,45 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// Intel License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000, Intel Corporation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of Intel Corporation may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "precomp.hpp" + +/* End of file. */ + diff --git a/modules/gpunonfree/src/precomp.hpp b/modules/gpunonfree/src/precomp.hpp new file mode 100644 index 0000000000..59a5a2cdec --- /dev/null +++ b/modules/gpunonfree/src/precomp.hpp @@ -0,0 +1,71 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifndef __OPENCV_PRECOMP_H__ +#define __OPENCV_PRECOMP_H__ + +#if defined _MSC_VER && _MSC_VER >= 1200 + #pragma warning( disable: 4251 4710 4711 4514 4996 ) +#endif + +#ifdef HAVE_CVCONFIG_H + #include "cvconfig.h" +#endif + +#include + +#include "opencv2/gpu/gpu.hpp" +#include "opencv2/gpunonfree/gpunonfree.hpp" + +#ifdef HAVE_CUDA + #include "opencv2/gpu/stream_accessor.hpp" + #include "opencv2/gpu/device/common.hpp" + + static inline void throw_nogpu() { CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); } + +#else /* defined(HAVE_CUDA) */ + + static inline void throw_nogpu() { CV_Error(CV_GpuNotSupported, "The library is compiled without GPU support"); } + +#endif /* defined(HAVE_CUDA) */ + +#endif /* __OPENCV_PRECOMP_H__ */ diff --git a/modules/gpu/src/surf.cpp b/modules/gpunonfree/src/surf.cpp similarity index 100% rename from modules/gpu/src/surf.cpp rename to modules/gpunonfree/src/surf.cpp diff --git a/modules/gpu/src/bgfg_vibe.cpp b/modules/gpunonfree/src/vibe.cpp similarity index 100% rename from modules/gpu/src/bgfg_vibe.cpp rename to modules/gpunonfree/src/vibe.cpp diff --git a/modules/gpunonfree/test/test_gpunonfree.cpp b/modules/gpunonfree/test/test_gpunonfree.cpp new file mode 100644 index 0000000000..2d4e179e19 --- /dev/null +++ b/modules/gpunonfree/test/test_gpunonfree.cpp @@ -0,0 +1,286 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// Intel License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000, Intel Corporation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of Intel Corporation may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "test_precomp.hpp" + +#ifdef HAVE_CUDA + +using namespace cvtest; + +///////////////////////////////////////////////////////////////////////////////////////////////// +// SURF + +namespace +{ + IMPLEMENT_PARAM_CLASS(SURF_HessianThreshold, double) + IMPLEMENT_PARAM_CLASS(SURF_Octaves, int) + IMPLEMENT_PARAM_CLASS(SURF_OctaveLayers, int) + IMPLEMENT_PARAM_CLASS(SURF_Extended, bool) + IMPLEMENT_PARAM_CLASS(SURF_Upright, bool) +} + +PARAM_TEST_CASE(SURF, cv::gpu::DeviceInfo, SURF_HessianThreshold, SURF_Octaves, SURF_OctaveLayers, SURF_Extended, SURF_Upright) +{ + cv::gpu::DeviceInfo devInfo; + double hessianThreshold; + int nOctaves; + int nOctaveLayers; + bool extended; + bool upright; + + virtual void SetUp() + { + devInfo = GET_PARAM(0); + hessianThreshold = GET_PARAM(1); + nOctaves = GET_PARAM(2); + nOctaveLayers = GET_PARAM(3); + extended = GET_PARAM(4); + upright = GET_PARAM(5); + + cv::gpu::setDevice(devInfo.deviceID()); + } +}; + +GPU_TEST_P(SURF, Detector) +{ + cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); + ASSERT_FALSE(image.empty()); + + cv::gpu::SURF_GPU surf; + surf.hessianThreshold = hessianThreshold; + surf.nOctaves = nOctaves; + surf.nOctaveLayers = nOctaveLayers; + surf.extended = extended; + surf.upright = upright; + surf.keypointsRatio = 0.05f; + + if (!supportFeature(devInfo, cv::gpu::GLOBAL_ATOMICS)) + { + try + { + std::vector keypoints; + surf(loadMat(image), cv::gpu::GpuMat(), keypoints); + } + catch (const cv::Exception& e) + { + ASSERT_EQ(CV_StsNotImplemented, e.code); + } + } + else + { + std::vector keypoints; + surf(loadMat(image), cv::gpu::GpuMat(), keypoints); + + cv::SURF surf_gold; + surf_gold.hessianThreshold = hessianThreshold; + surf_gold.nOctaves = nOctaves; + surf_gold.nOctaveLayers = nOctaveLayers; + surf_gold.extended = extended; + surf_gold.upright = upright; + + std::vector keypoints_gold; + surf_gold(image, cv::noArray(), keypoints_gold); + + ASSERT_EQ(keypoints_gold.size(), keypoints.size()); + int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints); + double matchedRatio = static_cast(matchedCount) / keypoints_gold.size(); + + EXPECT_GT(matchedRatio, 0.95); + } +} + +GPU_TEST_P(SURF, Detector_Masked) +{ + cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); + ASSERT_FALSE(image.empty()); + + cv::Mat mask(image.size(), CV_8UC1, cv::Scalar::all(1)); + mask(cv::Range(0, image.rows / 2), cv::Range(0, image.cols / 2)).setTo(cv::Scalar::all(0)); + + cv::gpu::SURF_GPU surf; + surf.hessianThreshold = hessianThreshold; + surf.nOctaves = nOctaves; + surf.nOctaveLayers = nOctaveLayers; + surf.extended = extended; + surf.upright = upright; + surf.keypointsRatio = 0.05f; + + if (!supportFeature(devInfo, cv::gpu::GLOBAL_ATOMICS)) + { + try + { + std::vector keypoints; + surf(loadMat(image), loadMat(mask), keypoints); + } + catch (const cv::Exception& e) + { + ASSERT_EQ(CV_StsNotImplemented, e.code); + } + } + else + { + std::vector keypoints; + surf(loadMat(image), loadMat(mask), keypoints); + + cv::SURF surf_gold; + surf_gold.hessianThreshold = hessianThreshold; + surf_gold.nOctaves = nOctaves; + surf_gold.nOctaveLayers = nOctaveLayers; + surf_gold.extended = extended; + surf_gold.upright = upright; + + std::vector keypoints_gold; + surf_gold(image, mask, keypoints_gold); + + ASSERT_EQ(keypoints_gold.size(), keypoints.size()); + int matchedCount = getMatchedPointsCount(keypoints_gold, keypoints); + double matchedRatio = static_cast(matchedCount) / keypoints_gold.size(); + + EXPECT_GT(matchedRatio, 0.95); + } +} + +GPU_TEST_P(SURF, Descriptor) +{ + cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); + ASSERT_FALSE(image.empty()); + + cv::gpu::SURF_GPU surf; + surf.hessianThreshold = hessianThreshold; + surf.nOctaves = nOctaves; + surf.nOctaveLayers = nOctaveLayers; + surf.extended = extended; + surf.upright = upright; + surf.keypointsRatio = 0.05f; + + cv::SURF surf_gold; + surf_gold.hessianThreshold = hessianThreshold; + surf_gold.nOctaves = nOctaves; + surf_gold.nOctaveLayers = nOctaveLayers; + surf_gold.extended = extended; + surf_gold.upright = upright; + + if (!supportFeature(devInfo, cv::gpu::GLOBAL_ATOMICS)) + { + try + { + std::vector keypoints; + cv::gpu::GpuMat descriptors; + surf(loadMat(image), cv::gpu::GpuMat(), keypoints, descriptors); + } + catch (const cv::Exception& e) + { + ASSERT_EQ(CV_StsNotImplemented, e.code); + } + } + else + { + std::vector keypoints; + surf_gold(image, cv::noArray(), keypoints); + + cv::gpu::GpuMat descriptors; + surf(loadMat(image), cv::gpu::GpuMat(), keypoints, descriptors, true); + + cv::Mat descriptors_gold; + surf_gold(image, cv::noArray(), keypoints, descriptors_gold, true); + + cv::BFMatcher matcher(cv::NORM_L2); + std::vector matches; + matcher.match(descriptors_gold, cv::Mat(descriptors), matches); + + int matchedCount = getMatchedPointsCount(keypoints, keypoints, matches); + double matchedRatio = static_cast(matchedCount) / keypoints.size(); + + EXPECT_GT(matchedRatio, 0.6); + } +} + +INSTANTIATE_TEST_CASE_P(GPU_Features2D, SURF, testing::Combine( + ALL_DEVICES, + testing::Values(SURF_HessianThreshold(100.0), SURF_HessianThreshold(500.0), SURF_HessianThreshold(1000.0)), + testing::Values(SURF_Octaves(3), SURF_Octaves(4)), + testing::Values(SURF_OctaveLayers(2), SURF_OctaveLayers(3)), + testing::Values(SURF_Extended(false), SURF_Extended(true)), + testing::Values(SURF_Upright(false), SURF_Upright(true)))); + +////////////////////////////////////////////////////// +// VIBE + +PARAM_TEST_CASE(VIBE, cv::gpu::DeviceInfo, cv::Size, MatType, UseRoi) +{ +}; + +GPU_TEST_P(VIBE, Accuracy) +{ + const cv::gpu::DeviceInfo devInfo = GET_PARAM(0); + cv::gpu::setDevice(devInfo.deviceID()); + const cv::Size size = GET_PARAM(1); + const int type = GET_PARAM(2); + const bool useRoi = GET_PARAM(3); + + const cv::Mat fullfg(size, CV_8UC1, cv::Scalar::all(255)); + + cv::Mat frame = randomMat(size, type, 0.0, 100); + cv::gpu::GpuMat d_frame = loadMat(frame, useRoi); + + cv::gpu::VIBE_GPU vibe; + cv::gpu::GpuMat d_fgmask = createMat(size, CV_8UC1, useRoi); + vibe.initialize(d_frame); + + for (int i = 0; i < 20; ++i) + vibe(d_frame, d_fgmask); + + frame = randomMat(size, type, 160, 255); + d_frame = loadMat(frame, useRoi); + vibe(d_frame, d_fgmask); + + // now fgmask should be entirely foreground + ASSERT_MAT_NEAR(fullfg, d_fgmask, 0); +} + +INSTANTIATE_TEST_CASE_P(GPU_Video, VIBE, testing::Combine( + ALL_DEVICES, + DIFFERENT_SIZES, + testing::Values(MatType(CV_8UC1), MatType(CV_8UC3), MatType(CV_8UC4)), + WHOLE_SUBMAT)); + +#endif // HAVE_CUDA + diff --git a/modules/gpunonfree/test/test_main.cpp b/modules/gpunonfree/test/test_main.cpp new file mode 100644 index 0000000000..4c15ff95e9 --- /dev/null +++ b/modules/gpunonfree/test/test_main.cpp @@ -0,0 +1,119 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// Intel License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000, Intel Corporation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of Intel Corporation may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "test_precomp.hpp" + +#ifdef HAVE_CUDA + +using namespace std; +using namespace cv; +using namespace cv::gpu; +using namespace cvtest; +using namespace testing; + +int main(int argc, char** argv) +{ + try + { + const char* keys = + "{ h | help ? | false | Print help}" + "{ i | info | false | Print information about system and exit }" + "{ d | device | -1 | Device on which tests will be executed (-1 means all devices) }" + ; + + CommandLineParser cmd(argc, (const char**)argv, keys); + + if (cmd.get("help")) + { + cmd.printParams(); + return 0; + } + + printCudaInfo(); + + if (cmd.get("info")) + { + return 0; + } + + int device = cmd.get("device"); + if (device < 0) + { + DeviceManager::instance().loadAll(); + + cout << "Run tests on all supported devices \n" << endl; + } + else + { + DeviceManager::instance().load(device); + + DeviceInfo info(device); + cout << "Run tests on device " << device << " [" << info.name() << "] \n" << endl; + } + + TS::ptr()->init("gpu"); + InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); + } + catch (const exception& e) + { + cerr << e.what() << endl; + return -1; + } + catch (...) + { + cerr << "Unknown error" << endl; + return -1; + } + + return 0; +} + +#else // HAVE_CUDA + +int main() +{ + std::cerr << "OpenCV was built without CUDA support" << std::endl; + return 0; +} + +#endif // HAVE_CUDA diff --git a/modules/gpunonfree/test/test_precomp.cpp b/modules/gpunonfree/test/test_precomp.cpp new file mode 100644 index 0000000000..8121ae405b --- /dev/null +++ b/modules/gpunonfree/test/test_precomp.cpp @@ -0,0 +1,42 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// Intel License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000, Intel Corporation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of Intel Corporation may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "test_precomp.hpp" diff --git a/modules/gpunonfree/test/test_precomp.hpp b/modules/gpunonfree/test/test_precomp.hpp new file mode 100644 index 0000000000..5030a0d391 --- /dev/null +++ b/modules/gpunonfree/test/test_precomp.hpp @@ -0,0 +1,69 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// Intel License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000, Intel Corporation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of Intel Corporation may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wmissing-declarations" +# if defined __clang__ || defined __APPLE__ +# pragma GCC diagnostic ignored "-Wmissing-prototypes" +# pragma GCC diagnostic ignored "-Wextra" +# endif +#endif + +#ifndef __OPENCV_TEST_PRECOMP_HPP__ +#define __OPENCV_TEST_PRECOMP_HPP__ + +#include "cvconfig.h" + +#include + +#ifdef HAVE_CUDA + #include "opencv2/ts/ts.hpp" + #include "opencv2/ts/ts_perf.hpp" + #include "opencv2/ts/gpu_test.hpp" + + #include "opencv2/core/core.hpp" + #include "opencv2/highgui/highgui.hpp" + #include "opencv2/gpu/gpu.hpp" + #include "opencv2/gpunonfree/gpunonfree.hpp" + #include "opencv2/nonfree/nonfree.hpp" +#endif + +#endif diff --git a/modules/stitching/CMakeLists.txt b/modules/stitching/CMakeLists.txt index 5d48bd378f..b310a8eb65 100644 --- a/modules/stitching/CMakeLists.txt +++ b/modules/stitching/CMakeLists.txt @@ -1,3 +1,3 @@ set(the_description "Images stitching") -ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect OPTIONAL opencv_gpu opencv_nonfree) +ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect OPTIONAL opencv_gpu opencv_gpunonfree opencv_nonfree) diff --git a/modules/stitching/include/opencv2/stitching/detail/matchers.hpp b/modules/stitching/include/opencv2/stitching/detail/matchers.hpp index f9a53ef432..9332d94660 100644 --- a/modules/stitching/include/opencv2/stitching/detail/matchers.hpp +++ b/modules/stitching/include/opencv2/stitching/detail/matchers.hpp @@ -47,8 +47,8 @@ #include "opencv2/features2d/features2d.hpp" #include "opencv2/opencv_modules.hpp" -#ifdef HAVE_OPENCV_GPU -#include "opencv2/gpu/gpu.hpp" +#ifdef HAVE_OPENCV_GPUNONFREE +#include "opencv2/gpunonfree/gpunonfree.hpp" #endif namespace cv { @@ -103,7 +103,7 @@ private: }; -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUNONFREE class CV_EXPORTS SurfFeaturesFinderGpu : public FeaturesFinder { public: diff --git a/modules/stitching/src/matchers.cpp b/modules/stitching/src/matchers.cpp index dc6b5fa4db..07845d2770 100644 --- a/modules/stitching/src/matchers.cpp +++ b/modules/stitching/src/matchers.cpp @@ -429,7 +429,7 @@ void OrbFeaturesFinder::find(const Mat &image, ImageFeatures &features) } } -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUNONFREE SurfFeaturesFinderGpu::SurfFeaturesFinderGpu(double hess_thresh, int num_octaves, int num_layers, int num_octaves_descr, int num_layers_descr) { diff --git a/modules/stitching/src/precomp.hpp b/modules/stitching/src/precomp.hpp index 80eb1868e1..0aade9faa3 100644 --- a/modules/stitching/src/precomp.hpp +++ b/modules/stitching/src/precomp.hpp @@ -73,6 +73,9 @@ #ifdef HAVE_OPENCV_GPU # include "opencv2/gpu/gpu.hpp" #endif +#ifdef HAVE_OPENCV_GPUNONFREE +# include "opencv2/gpunonfree/gpunonfree.hpp" +#endif #include "../../imgproc/src/gcgraph.hpp" diff --git a/modules/stitching/src/stitcher.cpp b/modules/stitching/src/stitcher.cpp index 2b9573b483..2a2fe0f6b1 100644 --- a/modules/stitching/src/stitcher.cpp +++ b/modules/stitching/src/stitcher.cpp @@ -61,7 +61,7 @@ Stitcher Stitcher::createDefault(bool try_use_gpu) #ifdef HAVE_OPENCV_GPU if (try_use_gpu && gpu::getCudaEnabledDeviceCount() > 0) { -#ifdef HAVE_OPENCV_NONFREE +#ifdef HAVE_OPENCV_GPUNONFREE stitcher.setFeaturesFinder(new detail::SurfFeaturesFinderGpu()); #else stitcher.setFeaturesFinder(new detail::OrbFeaturesFinder()); diff --git a/samples/cpp/CMakeLists.txt b/samples/cpp/CMakeLists.txt index 2004857f1d..3f42f43973 100644 --- a/samples/cpp/CMakeLists.txt +++ b/samples/cpp/CMakeLists.txt @@ -16,10 +16,14 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) ocv_include_directories("${OpenCV_SOURCE_DIR}/include")#for opencv.hpp ocv_include_modules(${OPENCV_CPP_SAMPLES_REQUIRED_DEPS}) - if (HAVE_opencv_gpu) + if(HAVE_opencv_gpu) ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include") endif() + if(HAVE_opencv_gpunonfree) + ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpunonfree/include") + endif() + if(CMAKE_COMPILER_IS_GNUCXX AND NOT ENABLE_NOISY_WARNINGS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function") endif() @@ -41,9 +45,12 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) add_executable(${the_target} ${srcs}) target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} ${OPENCV_CPP_SAMPLES_REQUIRED_DEPS}) - if (HAVE_opencv_gpu) + if(HAVE_opencv_gpu) target_link_libraries(${the_target} opencv_gpu) endif() + if(HAVE_opencv_gpunonfree) + target_link_libraries(${the_target} opencv_gpunonfree) + endif() set_target_properties(${the_target} PROPERTIES OUTPUT_NAME "cpp-${sample_kind}-${name}" diff --git a/samples/cpp/stitching_detailed.cpp b/samples/cpp/stitching_detailed.cpp index 73d139e41b..fe4ad8779e 100644 --- a/samples/cpp/stitching_detailed.cpp +++ b/samples/cpp/stitching_detailed.cpp @@ -355,7 +355,7 @@ int main(int argc, char* argv[]) Ptr finder; if (features_type == "surf") { -#ifdef HAVE_OPENCV_GPU +#ifdef HAVE_OPENCV_GPUNONFREE if (try_gpu && gpu::getCudaEnabledDeviceCount() > 0) finder = new SurfFeaturesFinderGpu(); else diff --git a/samples/gpu/CMakeLists.txt b/samples/gpu/CMakeLists.txt index 9fd19e28c4..f68d2cd439 100644 --- a/samples/gpu/CMakeLists.txt +++ b/samples/gpu/CMakeLists.txt @@ -1,7 +1,7 @@ SET(OPENCV_GPU_SAMPLES_REQUIRED_DEPS opencv_core opencv_flann opencv_imgproc opencv_highgui opencv_ml opencv_video opencv_objdetect opencv_features2d opencv_calib3d opencv_legacy opencv_contrib opencv_gpu - opencv_nonfree opencv_superres) + opencv_superres) ocv_check_dependencies(${OPENCV_GPU_SAMPLES_REQUIRED_DEPS}) @@ -17,6 +17,10 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) "${OpenCV_SOURCE_DIR}/modules/gpu/src/nvidia/core" ) + if(HAVE_opencv_gpunonfree) + ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpunonfree/include") + endif() + if(HAVE_CUDA) ocv_include_directories(${CUDA_INCLUDE_DIRS}) endif() @@ -33,6 +37,9 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) add_executable(${the_target} ${srcs}) target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} ${OPENCV_GPU_SAMPLES_REQUIRED_DEPS}) + if(HAVE_opencv_gpunonfree) + target_link_libraries(${the_target} opencv_gpunonfree) + endif() set_target_properties(${the_target} PROPERTIES OUTPUT_NAME "${project}-example-${name}" diff --git a/samples/gpu/bgfg_segm.cpp b/samples/gpu/bgfg_segm.cpp index 4e4c52096c..ff538f805f 100644 --- a/samples/gpu/bgfg_segm.cpp +++ b/samples/gpu/bgfg_segm.cpp @@ -1,10 +1,15 @@ #include #include +#include "opencv2/opencv_modules.hpp" #include "opencv2/core/core.hpp" #include "opencv2/gpu/gpu.hpp" #include "opencv2/highgui/highgui.hpp" +#ifdef HAVE_OPENCV_GPUNONFREE +#include "opencv2/gpunonfree/gpunonfree.hpp" +#endif + using namespace std; using namespace cv; using namespace cv::gpu; @@ -14,7 +19,9 @@ enum Method FGD_STAT, MOG, MOG2, +#ifdef HAVE_OPENCV_GPUNONFREE VIBE, +#endif GMG }; @@ -38,13 +45,25 @@ int main(int argc, const char** argv) string file = cmd.get("file"); string method = cmd.get("method"); - if (method != "fgd" && method != "mog" && method != "mog2" && method != "vibe" && method != "gmg") + if (method != "fgd" + && method != "mog" + && method != "mog2" + #ifdef HAVE_OPENCV_GPUNONFREE + && method != "vibe" + #endif + && method != "gmg") { cerr << "Incorrect method" << endl; return -1; } - Method m = method == "fgd" ? FGD_STAT : method == "mog" ? MOG : method == "mog2" ? MOG2 : method == "vibe" ? VIBE : GMG; + Method m = method == "fgd" ? FGD_STAT : + method == "mog" ? MOG : + method == "mog2" ? MOG2 : + #ifdef HAVE_OPENCV_GPUNONFREE + method == "vibe" ? VIBE : + #endif + GMG; VideoCapture cap; @@ -67,7 +86,9 @@ int main(int argc, const char** argv) FGDStatModel fgd_stat; MOG_GPU mog; MOG2_GPU mog2; +#ifdef HAVE_OPENCV_GPUNONFREE VIBE_GPU vibe; +#endif GMG_GPU gmg; gmg.numInitializationFrames = 40; @@ -93,9 +114,11 @@ int main(int argc, const char** argv) mog2(d_frame, d_fgmask); break; +#ifdef HAVE_OPENCV_GPUNONFREE case VIBE: vibe.initialize(d_frame); break; +#endif case GMG: gmg.initialize(d_frame.size()); @@ -105,8 +128,14 @@ int main(int argc, const char** argv) namedWindow("image", WINDOW_NORMAL); namedWindow("foreground mask", WINDOW_NORMAL); namedWindow("foreground image", WINDOW_NORMAL); - if (m != VIBE && m != GMG) + if (m != GMG + #ifdef HAVE_OPENCV_GPUNONFREE + && m != VIBE + #endif + ) + { namedWindow("mean background image", WINDOW_NORMAL); + } for(;;) { @@ -136,9 +165,11 @@ int main(int argc, const char** argv) mog2.getBackgroundImage(d_bgimg); break; +#ifdef HAVE_OPENCV_GPUNONFREE case VIBE: vibe(d_frame, d_fgmask); break; +#endif case GMG: gmg(d_frame, d_fgmask); diff --git a/samples/gpu/driver_api_stereo_multi.cpp b/samples/gpu/driver_api_stereo_multi.cpp index b8f99e810f..10c3974771 100644 --- a/samples/gpu/driver_api_stereo_multi.cpp +++ b/samples/gpu/driver_api_stereo_multi.cpp @@ -73,9 +73,6 @@ GpuMat d_right[2]; StereoBM_GPU* bm[2]; GpuMat d_result[2]; -// CPU result -Mat result; - static void printHelp() { std::cout << "Usage: driver_api_stereo_multi_gpu --left --right \n"; diff --git a/samples/gpu/performance/CMakeLists.txt b/samples/gpu/performance/CMakeLists.txt index 3b3d6e4415..2e8677d617 100644 --- a/samples/gpu/performance/CMakeLists.txt +++ b/samples/gpu/performance/CMakeLists.txt @@ -3,9 +3,17 @@ set(the_target "example_gpu_performance") file(GLOB sources "performance/*.cpp") file(GLOB headers "performance/*.h") +if(HAVE_opencv_nonfree) + ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/nonfree/include") +endif() + add_executable(${the_target} ${sources} ${headers}) target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} ${OPENCV_GPU_SAMPLES_REQUIRED_DEPS}) +if(HAVE_opencv_gpunonfree) + target_link_libraries(${the_target} opencv_gpunonfree opencv_nonfree) +endif() + set_target_properties(${the_target} PROPERTIES OUTPUT_NAME "performance_gpu" PROJECT_LABEL "(EXAMPLE_GPU) performance") diff --git a/samples/gpu/performance/tests.cpp b/samples/gpu/performance/tests.cpp index b35102d861..3c77d59e88 100644 --- a/samples/gpu/performance/tests.cpp +++ b/samples/gpu/performance/tests.cpp @@ -4,10 +4,15 @@ #include "opencv2/calib3d/calib3d.hpp" #include "opencv2/video/video.hpp" #include "opencv2/gpu/gpu.hpp" -#include "opencv2/nonfree/nonfree.hpp" #include "opencv2/legacy/legacy.hpp" #include "performance.h" +#include "opencv2/opencv_modules.hpp" +#ifdef HAVE_OPENCV_GPUNONFREE +#include "opencv2/gpunonfree/gpunonfree.hpp" +#include "opencv2/nonfree/nonfree.hpp" +#endif + using namespace std; using namespace cv; @@ -266,6 +271,7 @@ TEST(meanShift) } } +#ifdef HAVE_OPENCV_GPUNONFREE TEST(SURF) { @@ -294,6 +300,8 @@ TEST(SURF) GPU_OFF; } +#endif + TEST(FAST) { diff --git a/samples/gpu/stereo_multi.cpp b/samples/gpu/stereo_multi.cpp index d424bf90b4..cf42043bbe 100644 --- a/samples/gpu/stereo_multi.cpp +++ b/samples/gpu/stereo_multi.cpp @@ -44,9 +44,6 @@ GpuMat d_right[2]; StereoBM_GPU* bm[2]; GpuMat d_result[2]; -// CPU result -Mat result; - static void printHelp() { std::cout << "Usage: stereo_multi_gpu --left --right \n"; diff --git a/samples/gpu/surf_keypoint_matcher.cpp b/samples/gpu/surf_keypoint_matcher.cpp index 617cda52bd..914867b9ec 100644 --- a/samples/gpu/surf_keypoint_matcher.cpp +++ b/samples/gpu/surf_keypoint_matcher.cpp @@ -1,9 +1,14 @@ #include +#include "opencv2/opencv_modules.hpp" + +#ifdef HAVE_OPENCV_GPUNONFREE + #include "opencv2/core/core.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/gpu/gpu.hpp" +#include "opencv2/gpunonfree/gpunonfree.hpp" using namespace std; using namespace cv; @@ -81,3 +86,13 @@ int main(int argc, char* argv[]) return 0; } + +#else + +int main() +{ + std::cerr << "OpenCV was built without gpunonfree module" << std::endl; + return 0; +} + +#endif From 3b065e38be520686e7942c1f14545cde0458eff9 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Fri, 15 Mar 2013 17:58:18 +0400 Subject: [PATCH 19/41] fixed warnings --- modules/ts/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/ts/CMakeLists.txt b/modules/ts/CMakeLists.txt index df4aeda19b..1eaeb39336 100644 --- a/modules/ts/CMakeLists.txt +++ b/modules/ts/CMakeLists.txt @@ -14,6 +14,8 @@ if(HAVE_CUDA) ocv_include_directories(${CUDA_INCLUDE_DIRS}) endif() +ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef) + ocv_add_module(ts opencv_core opencv_features2d) ocv_glob_module_sources() From 0a65f2f4afd4ed7cab594575663bec58d24ca332 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Mon, 18 Mar 2013 16:14:37 +0400 Subject: [PATCH 20/41] merged gpunonfree and nonfree module --- modules/gpunonfree/CMakeLists.txt | 31 ----- .../doc/feature_detection_and_description.rst | 107 ---------------- modules/gpunonfree/doc/gpunonfree.rst | 9 -- modules/gpunonfree/perf/perf_main.cpp | 5 - modules/gpunonfree/perf/perf_precomp.cpp | 1 - modules/gpunonfree/perf/perf_precomp.hpp | 31 ----- modules/gpunonfree/src/precomp.cpp | 45 ------- modules/gpunonfree/src/precomp.hpp | 71 ----------- modules/gpunonfree/test/test_main.cpp | 119 ------------------ modules/gpunonfree/test/test_precomp.cpp | 42 ------- modules/gpunonfree/test/test_precomp.hpp | 69 ---------- modules/nonfree/CMakeLists.txt | 26 +++- .../doc/background_subtraction.rst} | 4 +- modules/nonfree/doc/feature_detection.rst | 103 +++++++++++++++ modules/nonfree/doc/nonfree.rst | 1 + .../include/opencv2/nonfree/gpu.hpp} | 14 ++- .../perf/perf_gpu.cpp} | 8 +- modules/nonfree/perf/perf_main.cpp | 2 +- modules/nonfree/perf/perf_precomp.hpp | 8 ++ .../{gpunonfree => nonfree}/src/cuda/surf.cu | 0 .../{gpunonfree => nonfree}/src/cuda/vibe.cu | 0 modules/nonfree/src/precomp.hpp | 15 +++ .../src/surf.cpp => nonfree/src/surf_gpu.cpp} | 11 +- .../src/vibe.cpp => nonfree/src/vibe_gpu.cpp} | 4 + .../test/test_gpu.cpp} | 11 +- modules/nonfree/test/test_main.cpp | 70 +++++++++++ modules/nonfree/test/test_precomp.hpp | 11 +- modules/stitching/CMakeLists.txt | 2 +- .../opencv2/stitching/detail/matchers.hpp | 7 +- modules/stitching/src/matchers.cpp | 2 +- modules/stitching/src/precomp.hpp | 9 +- modules/stitching/src/stitcher.cpp | 2 +- modules/superres/src/btv_l1_gpu.cpp | 2 +- samples/cpp/CMakeLists.txt | 7 -- samples/cpp/stitching_detailed.cpp | 2 +- samples/gpu/CMakeLists.txt | 8 +- samples/gpu/bgfg_segm.cpp | 18 +-- samples/gpu/performance/CMakeLists.txt | 4 +- samples/gpu/performance/tests.cpp | 6 +- samples/gpu/surf_keypoint_matcher.cpp | 6 +- 40 files changed, 300 insertions(+), 593 deletions(-) delete mode 100644 modules/gpunonfree/CMakeLists.txt delete mode 100644 modules/gpunonfree/doc/feature_detection_and_description.rst delete mode 100644 modules/gpunonfree/doc/gpunonfree.rst delete mode 100644 modules/gpunonfree/perf/perf_main.cpp delete mode 100644 modules/gpunonfree/perf/perf_precomp.cpp delete mode 100644 modules/gpunonfree/perf/perf_precomp.hpp delete mode 100644 modules/gpunonfree/src/precomp.cpp delete mode 100644 modules/gpunonfree/src/precomp.hpp delete mode 100644 modules/gpunonfree/test/test_main.cpp delete mode 100644 modules/gpunonfree/test/test_precomp.cpp delete mode 100644 modules/gpunonfree/test/test_precomp.hpp rename modules/{gpunonfree/doc/video.rst => nonfree/doc/background_subtraction.rst} (97%) rename modules/{gpunonfree/include/opencv2/gpunonfree/gpunonfree.hpp => nonfree/include/opencv2/nonfree/gpu.hpp} (96%) rename modules/{gpunonfree/perf/perf_gpunonfree.cpp => nonfree/perf/perf_gpu.cpp} (95%) rename modules/{gpunonfree => nonfree}/src/cuda/surf.cu (100%) rename modules/{gpunonfree => nonfree}/src/cuda/vibe.cu (100%) rename modules/{gpunonfree/src/surf.cpp => nonfree/src/surf_gpu.cpp} (99%) rename modules/{gpunonfree/src/vibe.cpp => nonfree/src/vibe_gpu.cpp} (98%) rename modules/{gpunonfree/test/test_gpunonfree.cpp => nonfree/test/test_gpu.cpp} (96%) diff --git a/modules/gpunonfree/CMakeLists.txt b/modules/gpunonfree/CMakeLists.txt deleted file mode 100644 index a975a61a43..0000000000 --- a/modules/gpunonfree/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -if(ANDROID OR IOS) - ocv_module_disable(gpunonfree) -endif() - -set(the_description "GPU-accelerated Computer Vision (non free)") -ocv_add_module(gpunonfree opencv_gpu opencv_nonfree) -ocv_module_include_directories() - -if(HAVE_CUDA) - ocv_source_group("Src\\Cuda" GLOB "src/cuda/*.cu") - ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include" ${CUDA_INCLUDE_DIRS}) - ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef) - - file(GLOB lib_cuda "src/cuda/*.cu") - ocv_cuda_compile(cuda_objs ${lib_cuda}) - - set(cuda_link_libs ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) -else() - set(lib_cuda "") - set(cuda_objs "") - set(cuda_link_libs "") -endif() - -ocv_glob_module_sources(SOURCES ${lib_cuda} ${cuda_objs}) - -ocv_create_module(${cuda_link_libs}) -ocv_add_precompiled_headers(${the_module}) - -ocv_add_accuracy_tests() -ocv_add_perf_tests() - diff --git a/modules/gpunonfree/doc/feature_detection_and_description.rst b/modules/gpunonfree/doc/feature_detection_and_description.rst deleted file mode 100644 index 9cec66f539..0000000000 --- a/modules/gpunonfree/doc/feature_detection_and_description.rst +++ /dev/null @@ -1,107 +0,0 @@ -Feature Detection and Description -================================= - -.. highlight:: cpp - - - -gpu::SURF_GPU -------------- -.. ocv:class:: gpu::SURF_GPU - -Class used for extracting Speeded Up Robust Features (SURF) from an image. :: - - class SURF_GPU - { - public: - enum KeypointLayout - { - X_ROW = 0, - Y_ROW, - LAPLACIAN_ROW, - OCTAVE_ROW, - SIZE_ROW, - ANGLE_ROW, - HESSIAN_ROW, - ROWS_COUNT - }; - - //! the default constructor - SURF_GPU(); - //! the full constructor taking all the necessary parameters - explicit SURF_GPU(double _hessianThreshold, int _nOctaves=4, - int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f); - - //! returns the descriptor size in float's (64 or 128) - int descriptorSize() const; - - //! upload host keypoints to device memory - void uploadKeypoints(const vector& keypoints, - GpuMat& keypointsGPU); - //! download keypoints from device to host memory - void downloadKeypoints(const GpuMat& keypointsGPU, - vector& keypoints); - - //! download descriptors from device to host memory - void downloadDescriptors(const GpuMat& descriptorsGPU, - vector& descriptors); - - void operator()(const GpuMat& img, const GpuMat& mask, - GpuMat& keypoints); - - void operator()(const GpuMat& img, const GpuMat& mask, - GpuMat& keypoints, GpuMat& descriptors, - bool useProvidedKeypoints = false, - bool calcOrientation = true); - - void operator()(const GpuMat& img, const GpuMat& mask, - std::vector& keypoints); - - void operator()(const GpuMat& img, const GpuMat& mask, - std::vector& keypoints, GpuMat& descriptors, - bool useProvidedKeypoints = false, - bool calcOrientation = true); - - void operator()(const GpuMat& img, const GpuMat& mask, - std::vector& keypoints, - std::vector& descriptors, - bool useProvidedKeypoints = false, - bool calcOrientation = true); - - void releaseMemory(); - - // SURF parameters - double hessianThreshold; - int nOctaves; - int nOctaveLayers; - bool extended; - bool upright; - - //! max keypoints = keypointsRatio * img.size().area() - float keypointsRatio; - - GpuMat sum, mask1, maskSum, intBuffer; - - GpuMat det, trace; - - GpuMat maxPosBuffer; - }; - - -The class ``SURF_GPU`` implements Speeded Up Robust Features descriptor. There is a fast multi-scale Hessian keypoint detector that can be used to find the keypoints (which is the default option). But the descriptors can also be computed for the user-specified keypoints. Only 8-bit grayscale images are supported. - -The class ``SURF_GPU`` can store results in the GPU and CPU memory. It provides functions to convert results between CPU and GPU version ( ``uploadKeypoints``, ``downloadKeypoints``, ``downloadDescriptors`` ). The format of CPU results is the same as ``SURF`` results. GPU results are stored in ``GpuMat``. The ``keypoints`` matrix is :math:`\texttt{nFeatures} \times 7` matrix with the ``CV_32FC1`` type. - -* ``keypoints.ptr(X_ROW)[i]`` contains x coordinate of the i-th feature. -* ``keypoints.ptr(Y_ROW)[i]`` contains y coordinate of the i-th feature. -* ``keypoints.ptr(LAPLACIAN_ROW)[i]`` contains the laplacian sign of the i-th feature. -* ``keypoints.ptr(OCTAVE_ROW)[i]`` contains the octave of the i-th feature. -* ``keypoints.ptr(SIZE_ROW)[i]`` contains the size of the i-th feature. -* ``keypoints.ptr(ANGLE_ROW)[i]`` contain orientation of the i-th feature. -* ``keypoints.ptr(HESSIAN_ROW)[i]`` contains the response of the i-th feature. - -The ``descriptors`` matrix is :math:`\texttt{nFeatures} \times \texttt{descriptorSize}` matrix with the ``CV_32FC1`` type. - -The class ``SURF_GPU`` uses some buffers and provides access to it. All buffers can be safely released between function calls. - -.. seealso:: :ocv:class:`SURF` diff --git a/modules/gpunonfree/doc/gpunonfree.rst b/modules/gpunonfree/doc/gpunonfree.rst deleted file mode 100644 index 4c2b71fe26..0000000000 --- a/modules/gpunonfree/doc/gpunonfree.rst +++ /dev/null @@ -1,9 +0,0 @@ -****************************************************** -gpunonfree. GPU-accelerated Computer Vision (non free) -****************************************************** - -.. toctree:: - :maxdepth: 1 - - feature_detection_and_description - video diff --git a/modules/gpunonfree/perf/perf_main.cpp b/modules/gpunonfree/perf/perf_main.cpp deleted file mode 100644 index 75e3ca651b..0000000000 --- a/modules/gpunonfree/perf/perf_main.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "perf_precomp.hpp" - -using namespace perf; - -CV_PERF_TEST_MAIN(gpunonfree, printCudaInfo()) diff --git a/modules/gpunonfree/perf/perf_precomp.cpp b/modules/gpunonfree/perf/perf_precomp.cpp deleted file mode 100644 index 8552ac3d42..0000000000 --- a/modules/gpunonfree/perf/perf_precomp.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "perf_precomp.hpp" diff --git a/modules/gpunonfree/perf/perf_precomp.hpp b/modules/gpunonfree/perf/perf_precomp.hpp deleted file mode 100644 index 410eaecfdf..0000000000 --- a/modules/gpunonfree/perf/perf_precomp.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#ifdef __GNUC__ -# pragma GCC diagnostic ignored "-Wmissing-declarations" -# if defined __clang__ || defined __APPLE__ -# pragma GCC diagnostic ignored "-Wmissing-prototypes" -# pragma GCC diagnostic ignored "-Wextra" -# endif -#endif - -#ifndef __OPENCV_PERF_PRECOMP_HPP__ -#define __OPENCV_PERF_PRECOMP_HPP__ - -#include -#include - -#include "cvconfig.h" - -#include "opencv2/ts/ts.hpp" -#include "opencv2/ts/ts_perf.hpp" -#include "opencv2/ts/gpu_perf.hpp" - -#include "opencv2/core/core.hpp" -#include "opencv2/highgui/highgui.hpp" -#include "opencv2/gpu/gpu.hpp" -#include "opencv2/gpunonfree/gpunonfree.hpp" -#include "opencv2/nonfree/nonfree.hpp" - -#ifdef GTEST_CREATE_SHARED_LIBRARY -#error no modules except ts should have GTEST_CREATE_SHARED_LIBRARY defined -#endif - -#endif diff --git a/modules/gpunonfree/src/precomp.cpp b/modules/gpunonfree/src/precomp.cpp deleted file mode 100644 index 75eb6935d0..0000000000 --- a/modules/gpunonfree/src/precomp.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -/* End of file. */ - diff --git a/modules/gpunonfree/src/precomp.hpp b/modules/gpunonfree/src/precomp.hpp deleted file mode 100644 index 59a5a2cdec..0000000000 --- a/modules/gpunonfree/src/precomp.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. -// Copyright (C) 2009, Willow Garage Inc., all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifndef __OPENCV_PRECOMP_H__ -#define __OPENCV_PRECOMP_H__ - -#if defined _MSC_VER && _MSC_VER >= 1200 - #pragma warning( disable: 4251 4710 4711 4514 4996 ) -#endif - -#ifdef HAVE_CVCONFIG_H - #include "cvconfig.h" -#endif - -#include - -#include "opencv2/gpu/gpu.hpp" -#include "opencv2/gpunonfree/gpunonfree.hpp" - -#ifdef HAVE_CUDA - #include "opencv2/gpu/stream_accessor.hpp" - #include "opencv2/gpu/device/common.hpp" - - static inline void throw_nogpu() { CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); } - -#else /* defined(HAVE_CUDA) */ - - static inline void throw_nogpu() { CV_Error(CV_GpuNotSupported, "The library is compiled without GPU support"); } - -#endif /* defined(HAVE_CUDA) */ - -#endif /* __OPENCV_PRECOMP_H__ */ diff --git a/modules/gpunonfree/test/test_main.cpp b/modules/gpunonfree/test/test_main.cpp deleted file mode 100644 index 4c15ff95e9..0000000000 --- a/modules/gpunonfree/test/test_main.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "test_precomp.hpp" - -#ifdef HAVE_CUDA - -using namespace std; -using namespace cv; -using namespace cv::gpu; -using namespace cvtest; -using namespace testing; - -int main(int argc, char** argv) -{ - try - { - const char* keys = - "{ h | help ? | false | Print help}" - "{ i | info | false | Print information about system and exit }" - "{ d | device | -1 | Device on which tests will be executed (-1 means all devices) }" - ; - - CommandLineParser cmd(argc, (const char**)argv, keys); - - if (cmd.get("help")) - { - cmd.printParams(); - return 0; - } - - printCudaInfo(); - - if (cmd.get("info")) - { - return 0; - } - - int device = cmd.get("device"); - if (device < 0) - { - DeviceManager::instance().loadAll(); - - cout << "Run tests on all supported devices \n" << endl; - } - else - { - DeviceManager::instance().load(device); - - DeviceInfo info(device); - cout << "Run tests on device " << device << " [" << info.name() << "] \n" << endl; - } - - TS::ptr()->init("gpu"); - InitGoogleTest(&argc, argv); - - return RUN_ALL_TESTS(); - } - catch (const exception& e) - { - cerr << e.what() << endl; - return -1; - } - catch (...) - { - cerr << "Unknown error" << endl; - return -1; - } - - return 0; -} - -#else // HAVE_CUDA - -int main() -{ - std::cerr << "OpenCV was built without CUDA support" << std::endl; - return 0; -} - -#endif // HAVE_CUDA diff --git a/modules/gpunonfree/test/test_precomp.cpp b/modules/gpunonfree/test/test_precomp.cpp deleted file mode 100644 index 8121ae405b..0000000000 --- a/modules/gpunonfree/test/test_precomp.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "test_precomp.hpp" diff --git a/modules/gpunonfree/test/test_precomp.hpp b/modules/gpunonfree/test/test_precomp.hpp deleted file mode 100644 index 5030a0d391..0000000000 --- a/modules/gpunonfree/test/test_precomp.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#ifdef __GNUC__ -# pragma GCC diagnostic ignored "-Wmissing-declarations" -# if defined __clang__ || defined __APPLE__ -# pragma GCC diagnostic ignored "-Wmissing-prototypes" -# pragma GCC diagnostic ignored "-Wextra" -# endif -#endif - -#ifndef __OPENCV_TEST_PRECOMP_HPP__ -#define __OPENCV_TEST_PRECOMP_HPP__ - -#include "cvconfig.h" - -#include - -#ifdef HAVE_CUDA - #include "opencv2/ts/ts.hpp" - #include "opencv2/ts/ts_perf.hpp" - #include "opencv2/ts/gpu_test.hpp" - - #include "opencv2/core/core.hpp" - #include "opencv2/highgui/highgui.hpp" - #include "opencv2/gpu/gpu.hpp" - #include "opencv2/gpunonfree/gpunonfree.hpp" - #include "opencv2/nonfree/nonfree.hpp" -#endif - -#endif diff --git a/modules/nonfree/CMakeLists.txt b/modules/nonfree/CMakeLists.txt index eeaf53a6f8..e00cf8f247 100644 --- a/modules/nonfree/CMakeLists.txt +++ b/modules/nonfree/CMakeLists.txt @@ -3,4 +3,28 @@ if(BUILD_ANDROID_PACKAGE) endif() set(the_description "Functionality with possible limitations on the use") -ocv_define_module(nonfree opencv_imgproc opencv_features2d opencv_calib3d) +ocv_add_module(nonfree opencv_imgproc opencv_features2d opencv_calib3d OPTIONAL opencv_gpu) +ocv_module_include_directories() + +if(HAVE_CUDA AND HAVE_opencv_gpu) + ocv_source_group("Src\\Cuda" GLOB "src/cuda/*.cu") + ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include" ${CUDA_INCLUDE_DIRS}) + ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef) + + file(GLOB lib_cuda "src/cuda/*.cu") + ocv_cuda_compile(cuda_objs ${lib_cuda}) + + set(cuda_link_libs ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY}) +else() + set(lib_cuda "") + set(cuda_objs "") + set(cuda_link_libs "") +endif() + +ocv_glob_module_sources(SOURCES ${lib_cuda} ${cuda_objs}) + +ocv_create_module(${cuda_link_libs}) +ocv_add_precompiled_headers(${the_module}) + +ocv_add_accuracy_tests() +ocv_add_perf_tests() diff --git a/modules/gpunonfree/doc/video.rst b/modules/nonfree/doc/background_subtraction.rst similarity index 97% rename from modules/gpunonfree/doc/video.rst rename to modules/nonfree/doc/background_subtraction.rst index 4fdfacc07d..11603ca566 100644 --- a/modules/gpunonfree/doc/video.rst +++ b/modules/nonfree/doc/background_subtraction.rst @@ -1,5 +1,5 @@ -Video Analysis -============== +Background Subtraction +====================== .. highlight:: cpp diff --git a/modules/nonfree/doc/feature_detection.rst b/modules/nonfree/doc/feature_detection.rst index e4ac357429..bb2f6b0387 100644 --- a/modules/nonfree/doc/feature_detection.rst +++ b/modules/nonfree/doc/feature_detection.rst @@ -127,3 +127,106 @@ Detects keypoints and computes SURF descriptors for them. The function is parallelized with the TBB library. If you are using the C version, make sure you call ``cv::initModule_nonfree()`` from ``nonfree/nonfree.hpp``. + + + +gpu::SURF_GPU +------------- +.. ocv:class:: gpu::SURF_GPU + +Class used for extracting Speeded Up Robust Features (SURF) from an image. :: + + class SURF_GPU + { + public: + enum KeypointLayout + { + X_ROW = 0, + Y_ROW, + LAPLACIAN_ROW, + OCTAVE_ROW, + SIZE_ROW, + ANGLE_ROW, + HESSIAN_ROW, + ROWS_COUNT + }; + + //! the default constructor + SURF_GPU(); + //! the full constructor taking all the necessary parameters + explicit SURF_GPU(double _hessianThreshold, int _nOctaves=4, + int _nOctaveLayers=2, bool _extended=false, float _keypointsRatio=0.01f); + + //! returns the descriptor size in float's (64 or 128) + int descriptorSize() const; + + //! upload host keypoints to device memory + void uploadKeypoints(const vector& keypoints, + GpuMat& keypointsGPU); + //! download keypoints from device to host memory + void downloadKeypoints(const GpuMat& keypointsGPU, + vector& keypoints); + + //! download descriptors from device to host memory + void downloadDescriptors(const GpuMat& descriptorsGPU, + vector& descriptors); + + void operator()(const GpuMat& img, const GpuMat& mask, + GpuMat& keypoints); + + void operator()(const GpuMat& img, const GpuMat& mask, + GpuMat& keypoints, GpuMat& descriptors, + bool useProvidedKeypoints = false, + bool calcOrientation = true); + + void operator()(const GpuMat& img, const GpuMat& mask, + std::vector& keypoints); + + void operator()(const GpuMat& img, const GpuMat& mask, + std::vector& keypoints, GpuMat& descriptors, + bool useProvidedKeypoints = false, + bool calcOrientation = true); + + void operator()(const GpuMat& img, const GpuMat& mask, + std::vector& keypoints, + std::vector& descriptors, + bool useProvidedKeypoints = false, + bool calcOrientation = true); + + void releaseMemory(); + + // SURF parameters + double hessianThreshold; + int nOctaves; + int nOctaveLayers; + bool extended; + bool upright; + + //! max keypoints = keypointsRatio * img.size().area() + float keypointsRatio; + + GpuMat sum, mask1, maskSum, intBuffer; + + GpuMat det, trace; + + GpuMat maxPosBuffer; + }; + + +The class ``SURF_GPU`` implements Speeded Up Robust Features descriptor. There is a fast multi-scale Hessian keypoint detector that can be used to find the keypoints (which is the default option). But the descriptors can also be computed for the user-specified keypoints. Only 8-bit grayscale images are supported. + +The class ``SURF_GPU`` can store results in the GPU and CPU memory. It provides functions to convert results between CPU and GPU version ( ``uploadKeypoints``, ``downloadKeypoints``, ``downloadDescriptors`` ). The format of CPU results is the same as ``SURF`` results. GPU results are stored in ``GpuMat``. The ``keypoints`` matrix is :math:`\texttt{nFeatures} \times 7` matrix with the ``CV_32FC1`` type. + +* ``keypoints.ptr(X_ROW)[i]`` contains x coordinate of the i-th feature. +* ``keypoints.ptr(Y_ROW)[i]`` contains y coordinate of the i-th feature. +* ``keypoints.ptr(LAPLACIAN_ROW)[i]`` contains the laplacian sign of the i-th feature. +* ``keypoints.ptr(OCTAVE_ROW)[i]`` contains the octave of the i-th feature. +* ``keypoints.ptr(SIZE_ROW)[i]`` contains the size of the i-th feature. +* ``keypoints.ptr(ANGLE_ROW)[i]`` contain orientation of the i-th feature. +* ``keypoints.ptr(HESSIAN_ROW)[i]`` contains the response of the i-th feature. + +The ``descriptors`` matrix is :math:`\texttt{nFeatures} \times \texttt{descriptorSize}` matrix with the ``CV_32FC1`` type. + +The class ``SURF_GPU`` uses some buffers and provides access to it. All buffers can be safely released between function calls. + +.. seealso:: :ocv:class:`SURF` diff --git a/modules/nonfree/doc/nonfree.rst b/modules/nonfree/doc/nonfree.rst index e524ea82f8..f8fa1d6eba 100644 --- a/modules/nonfree/doc/nonfree.rst +++ b/modules/nonfree/doc/nonfree.rst @@ -8,3 +8,4 @@ The module contains algorithms that may be patented in some countries or have so :maxdepth: 2 feature_detection + background_subtraction diff --git a/modules/gpunonfree/include/opencv2/gpunonfree/gpunonfree.hpp b/modules/nonfree/include/opencv2/nonfree/gpu.hpp similarity index 96% rename from modules/gpunonfree/include/opencv2/gpunonfree/gpunonfree.hpp rename to modules/nonfree/include/opencv2/nonfree/gpu.hpp index 40d9cfd2bc..911022669d 100644 --- a/modules/gpunonfree/include/opencv2/gpunonfree/gpunonfree.hpp +++ b/modules/nonfree/include/opencv2/nonfree/gpu.hpp @@ -40,12 +40,12 @@ // //M*/ -#ifndef __OPENCV_GPUNONFREE_HPP__ -#define __OPENCV_GPUNONFREE_HPP__ +#ifndef __OPENCV_NONFREE_GPU_HPP__ +#define __OPENCV_NONFREE_GPU_HPP__ -#ifndef SKIP_INCLUDES -#include -#endif +#include "opencv2/opencv_modules.hpp" + +#if defined(HAVE_OPENCV_GPU) #include "opencv2/gpu/gpu.hpp" @@ -164,4 +164,6 @@ private: } // namespace cv -#endif /* __OPENCV_GPUNONFREE_HPP__ */ +#endif // defined(HAVE_OPENCV_GPU) + +#endif // __OPENCV_NONFREE_GPU_HPP__ diff --git a/modules/gpunonfree/perf/perf_gpunonfree.cpp b/modules/nonfree/perf/perf_gpu.cpp similarity index 95% rename from modules/gpunonfree/perf/perf_gpunonfree.cpp rename to modules/nonfree/perf/perf_gpu.cpp index 4a27b77258..a68fb6a0ea 100644 --- a/modules/gpunonfree/perf/perf_gpunonfree.cpp +++ b/modules/nonfree/perf/perf_gpu.cpp @@ -4,12 +4,14 @@ using namespace std; using namespace testing; using namespace perf; +#if defined(HAVE_OPENCV_GPU) && defined(HAVE_CUDA) + ////////////////////////////////////////////////////////////////////// // SURF DEF_PARAM_TEST_1(Image, string); -PERF_TEST_P(Image, Features2D_SURF, +PERF_TEST_P(Image, GPU_SURF, Values("gpu/perf/aloe.png")) { declare.time(50.0); @@ -55,7 +57,7 @@ PERF_TEST_P(Image, Features2D_SURF, DEF_PARAM_TEST(Video_Cn, string, int); -PERF_TEST_P(Video_Cn, Video_VIBE, +PERF_TEST_P(Video_Cn, GPU_VIBE, Combine(Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi"), GPU_CHANNELS_1_3_4)) { @@ -116,3 +118,5 @@ PERF_TEST_P(Video_Cn, Video_VIBE, FAIL_NO_CPU(); } } + +#endif diff --git a/modules/nonfree/perf/perf_main.cpp b/modules/nonfree/perf/perf_main.cpp index 3fcca19c3c..444ace981a 100644 --- a/modules/nonfree/perf/perf_main.cpp +++ b/modules/nonfree/perf/perf_main.cpp @@ -1,3 +1,3 @@ #include "perf_precomp.hpp" -CV_PERF_TEST_MAIN(nonfree) +CV_PERF_TEST_MAIN(nonfree, perf::printCudaInfo()) diff --git a/modules/nonfree/perf/perf_precomp.hpp b/modules/nonfree/perf/perf_precomp.hpp index 79a368d712..3dafdb206b 100644 --- a/modules/nonfree/perf/perf_precomp.hpp +++ b/modules/nonfree/perf/perf_precomp.hpp @@ -9,10 +9,18 @@ #ifndef __OPENCV_PERF_PRECOMP_HPP__ #define __OPENCV_PERF_PRECOMP_HPP__ +#include "cvconfig.h" +#include "opencv2/opencv_modules.hpp" + #include "opencv2/ts/ts.hpp" +#include "opencv2/ts/gpu_perf.hpp" #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/highgui/highgui.hpp" +#if defined(HAVE_OPENCV_GPU) && defined(HAVE_CUDA) + #include "opencv2/nonfree/gpu.hpp" +#endif + #ifdef GTEST_CREATE_SHARED_LIBRARY #error no modules except ts should have GTEST_CREATE_SHARED_LIBRARY defined #endif diff --git a/modules/gpunonfree/src/cuda/surf.cu b/modules/nonfree/src/cuda/surf.cu similarity index 100% rename from modules/gpunonfree/src/cuda/surf.cu rename to modules/nonfree/src/cuda/surf.cu diff --git a/modules/gpunonfree/src/cuda/vibe.cu b/modules/nonfree/src/cuda/vibe.cu similarity index 100% rename from modules/gpunonfree/src/cuda/vibe.cu rename to modules/nonfree/src/cuda/vibe.cu diff --git a/modules/nonfree/src/precomp.hpp b/modules/nonfree/src/precomp.hpp index 1730b8b10d..51157d26e2 100644 --- a/modules/nonfree/src/precomp.hpp +++ b/modules/nonfree/src/precomp.hpp @@ -47,8 +47,23 @@ #include "cvconfig.h" #endif +#include "opencv2/opencv_modules.hpp" + #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/core/internal.hpp" +#if defined(HAVE_OPENCV_GPU) + #include "opencv2/nonfree/gpu.hpp" + + #if defined(HAVE_CUDA) + #include "opencv2/gpu/stream_accessor.hpp" + #include "opencv2/gpu/device/common.hpp" + + static inline void throw_nogpu() { CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); } + #else + static inline void throw_nogpu() { CV_Error(CV_GpuNotSupported, "The library is compiled without GPU support"); } + #endif +#endif + #endif diff --git a/modules/gpunonfree/src/surf.cpp b/modules/nonfree/src/surf_gpu.cpp similarity index 99% rename from modules/gpunonfree/src/surf.cpp rename to modules/nonfree/src/surf_gpu.cpp index 024087fe5a..dec9c0d2dc 100644 --- a/modules/gpunonfree/src/surf.cpp +++ b/modules/nonfree/src/surf_gpu.cpp @@ -42,11 +42,12 @@ #include "precomp.hpp" +#if defined(HAVE_OPENCV_GPU) + using namespace cv; using namespace cv::gpu; -using namespace std; -#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) +#if !defined (HAVE_CUDA) cv::gpu::SURF_GPU::SURF_GPU() { throw_nogpu(); } cv::gpu::SURF_GPU::SURF_GPU(double, int, int, bool, float, bool) { throw_nogpu(); } @@ -61,7 +62,7 @@ void cv::gpu::SURF_GPU::operator()(const GpuMat&, const GpuMat&, vector&, vector&, bool) { throw_nogpu(); } void cv::gpu::SURF_GPU::releaseMemory() { throw_nogpu(); } -#else /* !defined (HAVE_CUDA) */ +#else // !defined (HAVE_CUDA) namespace cv { namespace gpu { namespace device { @@ -416,4 +417,6 @@ void cv::gpu::SURF_GPU::releaseMemory() maxPosBuffer.release(); } -#endif /* !defined (HAVE_CUDA) */ +#endif // !defined (HAVE_CUDA) + +#endif // defined(HAVE_OPENCV_GPU) diff --git a/modules/gpunonfree/src/vibe.cpp b/modules/nonfree/src/vibe_gpu.cpp similarity index 98% rename from modules/gpunonfree/src/vibe.cpp rename to modules/nonfree/src/vibe_gpu.cpp index ff7e58082e..e34862765d 100644 --- a/modules/gpunonfree/src/vibe.cpp +++ b/modules/nonfree/src/vibe_gpu.cpp @@ -42,6 +42,8 @@ #include "precomp.hpp" +#if defined(HAVE_OPENCV_GPU) + #if !defined HAVE_CUDA || defined(CUDA_DISABLER) cv::gpu::VIBE_GPU::VIBE_GPU(unsigned long) { throw_nogpu(); } @@ -135,3 +137,5 @@ void cv::gpu::VIBE_GPU::release() } #endif + +#endif // defined(HAVE_OPENCV_GPU) diff --git a/modules/gpunonfree/test/test_gpunonfree.cpp b/modules/nonfree/test/test_gpu.cpp similarity index 96% rename from modules/gpunonfree/test/test_gpunonfree.cpp rename to modules/nonfree/test/test_gpu.cpp index 2d4e179e19..2993cf5676 100644 --- a/modules/gpunonfree/test/test_gpunonfree.cpp +++ b/modules/nonfree/test/test_gpu.cpp @@ -41,7 +41,7 @@ #include "test_precomp.hpp" -#ifdef HAVE_CUDA +#if defined(HAVE_OPENCV_GPU) && defined(HAVE_CUDA) using namespace cvtest; @@ -81,7 +81,7 @@ PARAM_TEST_CASE(SURF, cv::gpu::DeviceInfo, SURF_HessianThreshold, SURF_Octaves, GPU_TEST_P(SURF, Detector) { - cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); + cv::Mat image = readImage("../gpu/features2d/aloe.png", cv::IMREAD_GRAYSCALE); ASSERT_FALSE(image.empty()); cv::gpu::SURF_GPU surf; @@ -129,7 +129,7 @@ GPU_TEST_P(SURF, Detector) GPU_TEST_P(SURF, Detector_Masked) { - cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); + cv::Mat image = readImage("../gpu/features2d/aloe.png", cv::IMREAD_GRAYSCALE); ASSERT_FALSE(image.empty()); cv::Mat mask(image.size(), CV_8UC1, cv::Scalar::all(1)); @@ -180,7 +180,7 @@ GPU_TEST_P(SURF, Detector_Masked) GPU_TEST_P(SURF, Descriptor) { - cv::Mat image = readImage("features2d/aloe.png", cv::IMREAD_GRAYSCALE); + cv::Mat image = readImage("../gpu/features2d/aloe.png", cv::IMREAD_GRAYSCALE); ASSERT_FALSE(image.empty()); cv::gpu::SURF_GPU surf; @@ -282,5 +282,4 @@ INSTANTIATE_TEST_CASE_P(GPU_Video, VIBE, testing::Combine( testing::Values(MatType(CV_8UC1), MatType(CV_8UC3), MatType(CV_8UC4)), WHOLE_SUBMAT)); -#endif // HAVE_CUDA - +#endif diff --git a/modules/nonfree/test/test_main.cpp b/modules/nonfree/test/test_main.cpp index 6b24993447..bf4c6c0c3b 100644 --- a/modules/nonfree/test/test_main.cpp +++ b/modules/nonfree/test/test_main.cpp @@ -1,3 +1,73 @@ #include "test_precomp.hpp" +#if defined(HAVE_OPENCV_GPU) && defined(HAVE_CUDA) + +using namespace cv; +using namespace cv::gpu; +using namespace cvtest; +using namespace testing; + +int main(int argc, char** argv) +{ + try + { + const char* keys = + "{ h | help ? | false | Print help}" + "{ i | info | false | Print information about system and exit }" + "{ d | device | -1 | Device on which tests will be executed (-1 means all devices) }" + ; + + CommandLineParser cmd(argc, (const char**)argv, keys); + + if (cmd.get("help")) + { + cmd.printParams(); + return 0; + } + + printCudaInfo(); + + if (cmd.get("info")) + { + return 0; + } + + int device = cmd.get("device"); + if (device < 0) + { + DeviceManager::instance().loadAll(); + + std::cout << "Run tests on all supported devices \n" << std::endl; + } + else + { + DeviceManager::instance().load(device); + + DeviceInfo info(device); + std::cout << "Run tests on device " << device << " [" << info.name() << "] \n" << std::endl; + } + + TS::ptr()->init("cv"); + InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); + } + catch (const std::exception& e) + { + std::cerr << e.what() << std::endl; + return -1; + } + catch (...) + { + std::cerr << "Unknown error" << std::endl; + return -1; + } + + return 0; +} + +#else // HAVE_CUDA + CV_TEST_MAIN("cv") + +#endif // HAVE_CUDA diff --git a/modules/nonfree/test/test_precomp.hpp b/modules/nonfree/test/test_precomp.hpp index 062ab7bb13..14c4b2a874 100644 --- a/modules/nonfree/test/test_precomp.hpp +++ b/modules/nonfree/test/test_precomp.hpp @@ -9,10 +9,19 @@ #ifndef __OPENCV_TEST_PRECOMP_HPP__ #define __OPENCV_TEST_PRECOMP_HPP__ +#include + +#include "cvconfig.h" +#include "opencv2/opencv_modules.hpp" + #include "opencv2/ts/ts.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/nonfree/nonfree.hpp" -#include + +#if defined(HAVE_OPENCV_GPU) && defined(HAVE_CUDA) + #include "opencv2/ts/gpu_test.hpp" + #include "opencv2/nonfree/gpu.hpp" +#endif #endif diff --git a/modules/stitching/CMakeLists.txt b/modules/stitching/CMakeLists.txt index b310a8eb65..5d48bd378f 100644 --- a/modules/stitching/CMakeLists.txt +++ b/modules/stitching/CMakeLists.txt @@ -1,3 +1,3 @@ set(the_description "Images stitching") -ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect OPTIONAL opencv_gpu opencv_gpunonfree opencv_nonfree) +ocv_define_module(stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect OPTIONAL opencv_gpu opencv_nonfree) diff --git a/modules/stitching/include/opencv2/stitching/detail/matchers.hpp b/modules/stitching/include/opencv2/stitching/detail/matchers.hpp index 9332d94660..108cd0face 100644 --- a/modules/stitching/include/opencv2/stitching/detail/matchers.hpp +++ b/modules/stitching/include/opencv2/stitching/detail/matchers.hpp @@ -47,8 +47,9 @@ #include "opencv2/features2d/features2d.hpp" #include "opencv2/opencv_modules.hpp" -#ifdef HAVE_OPENCV_GPUNONFREE -#include "opencv2/gpunonfree/gpunonfree.hpp" + +#if defined(HAVE_OPENCV_NONFREE) && defined(HAVE_OPENCV_GPU) + #include "opencv2/nonfree/gpu.hpp" #endif namespace cv { @@ -103,7 +104,7 @@ private: }; -#ifdef HAVE_OPENCV_GPUNONFREE +#if defined(HAVE_OPENCV_NONFREE) && defined(HAVE_OPENCV_GPU) class CV_EXPORTS SurfFeaturesFinderGpu : public FeaturesFinder { public: diff --git a/modules/stitching/src/matchers.cpp b/modules/stitching/src/matchers.cpp index 07845d2770..2231d13681 100644 --- a/modules/stitching/src/matchers.cpp +++ b/modules/stitching/src/matchers.cpp @@ -429,7 +429,7 @@ void OrbFeaturesFinder::find(const Mat &image, ImageFeatures &features) } } -#ifdef HAVE_OPENCV_GPUNONFREE +#if defined(HAVE_OPENCV_NONFREE) && defined(HAVE_OPENCV_GPU) SurfFeaturesFinderGpu::SurfFeaturesFinderGpu(double hess_thresh, int num_octaves, int num_layers, int num_octaves_descr, int num_layers_descr) { diff --git a/modules/stitching/src/precomp.hpp b/modules/stitching/src/precomp.hpp index 0aade9faa3..4849ace1eb 100644 --- a/modules/stitching/src/precomp.hpp +++ b/modules/stitching/src/precomp.hpp @@ -71,10 +71,11 @@ #include "opencv2/features2d/features2d.hpp" #include "opencv2/calib3d/calib3d.hpp" #ifdef HAVE_OPENCV_GPU -# include "opencv2/gpu/gpu.hpp" -#endif -#ifdef HAVE_OPENCV_GPUNONFREE -# include "opencv2/gpunonfree/gpunonfree.hpp" + #include "opencv2/gpu/gpu.hpp" + + #ifdef HAVE_OPENCV_NONFREE + #include "opencv2/nonfree/gpu.hpp" + #endif #endif #include "../../imgproc/src/gcgraph.hpp" diff --git a/modules/stitching/src/stitcher.cpp b/modules/stitching/src/stitcher.cpp index 2a2fe0f6b1..5da26f6dbf 100644 --- a/modules/stitching/src/stitcher.cpp +++ b/modules/stitching/src/stitcher.cpp @@ -61,7 +61,7 @@ Stitcher Stitcher::createDefault(bool try_use_gpu) #ifdef HAVE_OPENCV_GPU if (try_use_gpu && gpu::getCudaEnabledDeviceCount() > 0) { -#ifdef HAVE_OPENCV_GPUNONFREE +#if defined(HAVE_OPENCV_NONFREE) stitcher.setFeaturesFinder(new detail::SurfFeaturesFinderGpu()); #else stitcher.setFeaturesFinder(new detail::OrbFeaturesFinder()); diff --git a/modules/superres/src/btv_l1_gpu.cpp b/modules/superres/src/btv_l1_gpu.cpp index 4820d716a9..4f7b4f15a4 100644 --- a/modules/superres/src/btv_l1_gpu.cpp +++ b/modules/superres/src/btv_l1_gpu.cpp @@ -51,7 +51,7 @@ using namespace cv::gpu; using namespace cv::superres; using namespace cv::superres::detail; -#ifndef HAVE_CUDA +#if !defined(HAVE_CUDA) || !defined(HAVE_OPENCV_GPU) Ptr cv::superres::createSuperResolution_BTVL1_GPU() { diff --git a/samples/cpp/CMakeLists.txt b/samples/cpp/CMakeLists.txt index 3f42f43973..f69382ac66 100644 --- a/samples/cpp/CMakeLists.txt +++ b/samples/cpp/CMakeLists.txt @@ -20,10 +20,6 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpu/include") endif() - if(HAVE_opencv_gpunonfree) - ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpunonfree/include") - endif() - if(CMAKE_COMPILER_IS_GNUCXX AND NOT ENABLE_NOISY_WARNINGS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function") endif() @@ -48,9 +44,6 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) if(HAVE_opencv_gpu) target_link_libraries(${the_target} opencv_gpu) endif() - if(HAVE_opencv_gpunonfree) - target_link_libraries(${the_target} opencv_gpunonfree) - endif() set_target_properties(${the_target} PROPERTIES OUTPUT_NAME "cpp-${sample_kind}-${name}" diff --git a/samples/cpp/stitching_detailed.cpp b/samples/cpp/stitching_detailed.cpp index fe4ad8779e..e795fdb8f6 100644 --- a/samples/cpp/stitching_detailed.cpp +++ b/samples/cpp/stitching_detailed.cpp @@ -355,7 +355,7 @@ int main(int argc, char* argv[]) Ptr finder; if (features_type == "surf") { -#ifdef HAVE_OPENCV_GPUNONFREE +#if defined(HAVE_OPENCV_NONFREE) && defined(HAVE_OPENCV_GPU) if (try_gpu && gpu::getCudaEnabledDeviceCount() > 0) finder = new SurfFeaturesFinderGpu(); else diff --git a/samples/gpu/CMakeLists.txt b/samples/gpu/CMakeLists.txt index f68d2cd439..85bee50585 100644 --- a/samples/gpu/CMakeLists.txt +++ b/samples/gpu/CMakeLists.txt @@ -17,8 +17,8 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) "${OpenCV_SOURCE_DIR}/modules/gpu/src/nvidia/core" ) - if(HAVE_opencv_gpunonfree) - ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/gpunonfree/include") + if(HAVE_opencv_nonfree) + ocv_include_directories("${OpenCV_SOURCE_DIR}/modules/nonfree/include") endif() if(HAVE_CUDA) @@ -37,8 +37,8 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) add_executable(${the_target} ${srcs}) target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} ${OPENCV_GPU_SAMPLES_REQUIRED_DEPS}) - if(HAVE_opencv_gpunonfree) - target_link_libraries(${the_target} opencv_gpunonfree) + if(HAVE_opencv_nonfree) + target_link_libraries(${the_target} opencv_nonfree) endif() set_target_properties(${the_target} PROPERTIES diff --git a/samples/gpu/bgfg_segm.cpp b/samples/gpu/bgfg_segm.cpp index ff538f805f..a77d336a9e 100644 --- a/samples/gpu/bgfg_segm.cpp +++ b/samples/gpu/bgfg_segm.cpp @@ -6,8 +6,8 @@ #include "opencv2/gpu/gpu.hpp" #include "opencv2/highgui/highgui.hpp" -#ifdef HAVE_OPENCV_GPUNONFREE -#include "opencv2/gpunonfree/gpunonfree.hpp" +#ifdef HAVE_OPENCV_NONFREE +#include "opencv2/nonfree/gpu.hpp" #endif using namespace std; @@ -19,7 +19,7 @@ enum Method FGD_STAT, MOG, MOG2, -#ifdef HAVE_OPENCV_GPUNONFREE +#ifdef HAVE_OPENCV_NONFREE VIBE, #endif GMG @@ -48,7 +48,7 @@ int main(int argc, const char** argv) if (method != "fgd" && method != "mog" && method != "mog2" - #ifdef HAVE_OPENCV_GPUNONFREE + #ifdef HAVE_OPENCV_NONFREE && method != "vibe" #endif && method != "gmg") @@ -60,7 +60,7 @@ int main(int argc, const char** argv) Method m = method == "fgd" ? FGD_STAT : method == "mog" ? MOG : method == "mog2" ? MOG2 : - #ifdef HAVE_OPENCV_GPUNONFREE + #ifdef HAVE_OPENCV_NONFREE method == "vibe" ? VIBE : #endif GMG; @@ -86,7 +86,7 @@ int main(int argc, const char** argv) FGDStatModel fgd_stat; MOG_GPU mog; MOG2_GPU mog2; -#ifdef HAVE_OPENCV_GPUNONFREE +#ifdef HAVE_OPENCV_NONFREE VIBE_GPU vibe; #endif GMG_GPU gmg; @@ -114,7 +114,7 @@ int main(int argc, const char** argv) mog2(d_frame, d_fgmask); break; -#ifdef HAVE_OPENCV_GPUNONFREE +#ifdef HAVE_OPENCV_NONFREE case VIBE: vibe.initialize(d_frame); break; @@ -129,7 +129,7 @@ int main(int argc, const char** argv) namedWindow("foreground mask", WINDOW_NORMAL); namedWindow("foreground image", WINDOW_NORMAL); if (m != GMG - #ifdef HAVE_OPENCV_GPUNONFREE + #ifdef HAVE_OPENCV_NONFREE && m != VIBE #endif ) @@ -165,7 +165,7 @@ int main(int argc, const char** argv) mog2.getBackgroundImage(d_bgimg); break; -#ifdef HAVE_OPENCV_GPUNONFREE +#ifdef HAVE_OPENCV_NONFREE case VIBE: vibe(d_frame, d_fgmask); break; diff --git a/samples/gpu/performance/CMakeLists.txt b/samples/gpu/performance/CMakeLists.txt index 2e8677d617..492b4c7900 100644 --- a/samples/gpu/performance/CMakeLists.txt +++ b/samples/gpu/performance/CMakeLists.txt @@ -10,8 +10,8 @@ endif() add_executable(${the_target} ${sources} ${headers}) target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} ${OPENCV_GPU_SAMPLES_REQUIRED_DEPS}) -if(HAVE_opencv_gpunonfree) - target_link_libraries(${the_target} opencv_gpunonfree opencv_nonfree) +if(HAVE_opencv_nonfree) + target_link_libraries(${the_target} opencv_nonfree) endif() set_target_properties(${the_target} PROPERTIES diff --git a/samples/gpu/performance/tests.cpp b/samples/gpu/performance/tests.cpp index 3c77d59e88..8af4722c38 100644 --- a/samples/gpu/performance/tests.cpp +++ b/samples/gpu/performance/tests.cpp @@ -8,8 +8,8 @@ #include "performance.h" #include "opencv2/opencv_modules.hpp" -#ifdef HAVE_OPENCV_GPUNONFREE -#include "opencv2/gpunonfree/gpunonfree.hpp" +#ifdef HAVE_OPENCV_NONFREE +#include "opencv2/nonfree/gpu.hpp" #include "opencv2/nonfree/nonfree.hpp" #endif @@ -271,7 +271,7 @@ TEST(meanShift) } } -#ifdef HAVE_OPENCV_GPUNONFREE +#ifdef HAVE_OPENCV_NONFREE TEST(SURF) { diff --git a/samples/gpu/surf_keypoint_matcher.cpp b/samples/gpu/surf_keypoint_matcher.cpp index 914867b9ec..f4c5e73f79 100644 --- a/samples/gpu/surf_keypoint_matcher.cpp +++ b/samples/gpu/surf_keypoint_matcher.cpp @@ -2,13 +2,13 @@ #include "opencv2/opencv_modules.hpp" -#ifdef HAVE_OPENCV_GPUNONFREE +#ifdef HAVE_OPENCV_NONFREE #include "opencv2/core/core.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/gpu/gpu.hpp" -#include "opencv2/gpunonfree/gpunonfree.hpp" +#include "opencv2/nonfree/gpu.hpp" using namespace std; using namespace cv; @@ -91,7 +91,7 @@ int main(int argc, char* argv[]) int main() { - std::cerr << "OpenCV was built without gpunonfree module" << std::endl; + std::cerr << "OpenCV was built without nonfree module" << std::endl; return 0; } From b37d65ff2b1c441b7c121277d246cb0e759c040f Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Tue, 12 Mar 2013 11:33:46 +0400 Subject: [PATCH 21/41] Code refactoring was done. --- .../android/native-activity/jni/native.cpp | 89 +++++++++---------- 1 file changed, 44 insertions(+), 45 deletions(-) diff --git a/samples/android/native-activity/jni/native.cpp b/samples/android/native-activity/jni/native.cpp index 494ad66bbe..38dda06038 100644 --- a/samples/android/native-activity/jni/native.cpp +++ b/samples/android/native-activity/jni/native.cpp @@ -28,14 +28,14 @@ struct Engine cv::Ptr capture; }; -cv::Size calcOptimalResolution(const char* supported, int width, int height) +cv::Size calc_optimal_camera_resolution(const char* supported, int width, int height) { - int frameWidth = 0; - int frameHeight = 0; + int frame_width = 0; + int frame_height = 0; size_t prev_idx = 0; size_t idx = 0; - float minDiff = FLT_MAX; + float min_diff = FLT_MAX; do { @@ -52,11 +52,11 @@ cv::Size calcOptimalResolution(const char* supported, int width, int height) int h_diff = height - tmp_height; if ((h_diff >= 0) && (w_diff >= 0)) { - if ((h_diff <= minDiff) && (tmp_height <= 720)) + if ((h_diff <= min_diff) && (tmp_height <= 720)) { - frameWidth = tmp_width; - frameHeight = tmp_height; - minDiff = h_diff; + frame_width = tmp_width; + frame_height = tmp_height; + min_diff = h_diff; } } @@ -64,15 +64,13 @@ cv::Size calcOptimalResolution(const char* supported, int width, int height) } while(supported[idx-1] != '\0'); - return cv::Size(frameWidth, frameHeight); + return cv::Size(frame_width, frame_height); } static void engine_draw_frame(Engine* engine, const cv::Mat& frame) { if (engine->app->window == NULL) - { return; // No window. - } ANativeWindow_Buffer buffer; if (ANativeWindow_lock(engine->app->window, &buffer, NULL) < 0) @@ -83,10 +81,13 @@ static void engine_draw_frame(Engine* engine, const cv::Mat& frame) void* pixels = buffer.bits; - for (int yy = 0; yy < std::min(frame.rows, buffer.height); yy++) + int left_indent = (buffer.width-frame.cols)/2; + int top_indent = (buffer.height-frame.rows)/2; + + for (int yy = top_indent; yy < std::min(frame.rows+top_indent, buffer.height); yy++) { unsigned char* line = (unsigned char*)pixels; - memcpy(line, frame.ptr(yy), + memcpy(line+left_indent*4*sizeof(unsigned char), frame.ptr(yy), std::min(frame.cols, buffer.width)*4*sizeof(unsigned char)); // go to next line pixels = (int32_t*)pixels + buffer.stride; @@ -109,32 +110,36 @@ static void engine_handle_cmd(android_app* app, int32_t cmd) union {double prop; const char* name;} u; u.prop = engine->capture->get(CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING); - cv::Size resolution; + int view_width = ANativeWindow_getWidth(app->window); + int view_height = ANativeWindow_getHeight(app->window); + + cv::Size camera_resolution; if (u.name) - resolution = calcOptimalResolution(u.name, - ANativeWindow_getWidth(app->window), - ANativeWindow_getHeight(app->window)); + camera_resolution = calc_optimal_camera_resolution(u.name, 640, 480); else { - LOGE("Cannot get supported camera resolutions"); - resolution = cv::Size(ANativeWindow_getWidth(app->window), + LOGE("Cannot get supported camera camera_resolutions"); + camera_resolution = cv::Size(ANativeWindow_getWidth(app->window), ANativeWindow_getHeight(app->window)); } - if ((resolution.width != 0) && (resolution.height != 0)) + if ((camera_resolution.width != 0) && (camera_resolution.height != 0)) { - engine->capture->set(CV_CAP_PROP_FRAME_WIDTH, resolution.width); - engine->capture->set(CV_CAP_PROP_FRAME_HEIGHT, resolution.height); + engine->capture->set(CV_CAP_PROP_FRAME_WIDTH, camera_resolution.width); + engine->capture->set(CV_CAP_PROP_FRAME_HEIGHT, camera_resolution.height); } - if (ANativeWindow_setBuffersGeometry(app->window, resolution.width, - resolution.height, WINDOW_FORMAT_RGBA_8888) < 0) + float scale = std::min((float)view_width/camera_resolution.width, + (float)view_height/camera_resolution.height); + + if (ANativeWindow_setBuffersGeometry(app->window, (int)(view_width/scale), + int(view_height/scale), WINDOW_FORMAT_RGBA_8888) < 0) { LOGE("Cannot set pixel format!"); return; } - LOGI("Camera initialized at resoution %dx%d", resolution.width, resolution.height); + LOGI("Camera initialized at resoution %dx%d", camera_resolution.width, camera_resolution.height); } break; case APP_CMD_TERM_WINDOW: @@ -158,9 +163,8 @@ void android_main(android_app* app) engine.app = app; float fps = 0; - cv::Mat drawingFrame; - bool firstFrame = true; - std::queue timeQueue; + cv::Mat drawing_frame; + std::queue time_queue; // loop waiting for stuff to do. while (1) @@ -189,34 +193,29 @@ void android_main(android_app* app) int64 then; int64 now = cv::getTickCount(); - timeQueue.push(now); + time_queue.push(now); // Capture frame from camera and draw it if (!engine.capture.empty()) { if (engine.capture->grab()) - { - engine.capture->retrieve(drawingFrame, CV_CAP_ANDROID_COLOR_FRAME_RGBA); -// if (firstFrame) -// { -// firstFrame = false; -// engine.capture->set(CV_CAP_PROP_AUTOGRAB, 1); -// } - } + engine.capture->retrieve(drawing_frame, CV_CAP_ANDROID_COLOR_FRAME_RGBA); + char buffer[256]; - sprintf(buffer, "Display performance: %dx%d @ %.3f", drawingFrame.cols, drawingFrame.rows, fps); - cv::putText(drawingFrame, std::string(buffer), cv::Point(8,64), cv::FONT_HERSHEY_COMPLEX_SMALL, 1, cv::Scalar(0,255,0,255)); - engine_draw_frame(&engine, drawingFrame); + sprintf(buffer, "Display performance: %dx%d @ %.3f", drawing_frame.cols, drawing_frame.rows, fps); + cv::putText(drawing_frame, std::string(buffer), cv::Point(8,64), + cv::FONT_HERSHEY_COMPLEX_SMALL, 1, cv::Scalar(0,255,0,255)); + engine_draw_frame(&engine, drawing_frame); } - if (timeQueue.size() >= 2) - then = timeQueue.front(); + if (time_queue.size() >= 2) + then = time_queue.front(); else then = 0; - if (timeQueue.size() >= 25) - timeQueue.pop(); + if (time_queue.size() >= 25) + time_queue.pop(); - fps = 1.f*timeQueue.size()*(float)cv::getTickFrequency()/(float)(now-then); + fps = time_queue.size() * (float)cv::getTickFrequency() / (now-then); } } From a06af5ca250e31840a3e8b86f8d1de3500585137 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Tue, 19 Mar 2013 18:28:17 +0400 Subject: [PATCH 22/41] dramatic speedup of SVM::predict in the case of linear SVM --- modules/ml/include/opencv2/ml/ml.hpp | 2 + modules/ml/src/svm.cpp | 55 ++++++++++++++++++++++++++++ samples/cpp/letter_recog.cpp | 3 ++ 3 files changed, 60 insertions(+) diff --git a/modules/ml/include/opencv2/ml/ml.hpp b/modules/ml/include/opencv2/ml/ml.hpp index dc7a4048a5..6612d2ea13 100644 --- a/modules/ml/include/opencv2/ml/ml.hpp +++ b/modules/ml/include/opencv2/ml/ml.hpp @@ -534,6 +534,8 @@ protected: virtual void write_params( CvFileStorage* fs ) const; virtual void read_params( CvFileStorage* fs, CvFileNode* node ); + void optimize_linear_svm(); + CvSVMParams params; CvMat* class_labels; int var_all; diff --git a/modules/ml/src/svm.cpp b/modules/ml/src/svm.cpp index 9cbc46be84..3c970f201a 100644 --- a/modules/ml/src/svm.cpp +++ b/modules/ml/src/svm.cpp @@ -1517,6 +1517,7 @@ bool CvSVM::do_train( int svm_type, int sample_count, int var_count, const float } } + optimize_linear_svm(); ok = true; __END__; @@ -1524,6 +1525,59 @@ bool CvSVM::do_train( int svm_type, int sample_count, int var_count, const float return ok; } + +void CvSVM::optimize_linear_svm() +{ + // we optimize only linear SVM: compress all the support vectors into one. + if( params.kernel_type != LINEAR ) + return; + + int class_count = class_labels ? class_labels->cols : + params.svm_type == CvSVM::ONE_CLASS ? 1 : 0; + + int i, df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1; + CvSVMDecisionFunc* df = decision_func; + + for( i = 0; i < df_count; i++ ) + { + int sv_count = df[i].sv_count; + if( sv_count != 1 ) + break; + } + + // if every decision functions uses a single support vector; + // it's already compressed. skip it then. + if( i == df_count ) + return; + + int var_count = get_var_count(); + int sample_size = (int)(var_count*sizeof(sv[0][0])); + float** new_sv = (float**)cvMemStorageAlloc(storage, df_count*sizeof(new_sv[0])); + + for( i = 0; i < df_count; i++ ) + { + new_sv[i] = (float*)cvMemStorageAlloc(storage, sample_size); + float* dst = new_sv[i]; + memset(dst, 0, sample_size); + int j, k, sv_count = df[i].sv_count; + for( j = 0; j < sv_count; j++ ) + { + const float* src = class_count > 1 ? sv[df[i].sv_index[j]] : sv[j]; + double a = df[i].alpha[j]; + for( k = 0; k < var_count; k++ ) + dst[k] = (float)(dst[k] + src[k]*a); + } + df[i].sv_count = 1; + df[i].alpha[0] = 1.; + if( class_count > 1 ) + df[i].sv_index[0] = i; + } + + sv = new_sv; + sv_total = df_count; +} + + bool CvSVM::train( const CvMat* _train_data, const CvMat* _responses, const CvMat* _var_idx, const CvMat* _sample_idx, CvSVMParams _params ) { @@ -2516,6 +2570,7 @@ void CvSVM::read( CvFileStorage* fs, CvFileNode* svm_node ) CV_NEXT_SEQ_ELEM( df_node->data.seq->elem_size, reader ); } + optimize_linear_svm(); create_kernel(); __END__; diff --git a/samples/cpp/letter_recog.cpp b/samples/cpp/letter_recog.cpp index 49a55fc62b..144dbe8361 100644 --- a/samples/cpp/letter_recog.cpp +++ b/samples/cpp/letter_recog.cpp @@ -691,7 +691,10 @@ int build_svm_classifier( char* data_filename ) CvMat *result = cvCreateMat(1, nsamples_all - ntrain_samples, CV_32FC1); printf("Classification (may take a few minutes)...\n"); + double t = (double)cvGetTickCount(); svm.predict(&sample, result); + t = (double)cvGetTickCount() - t; + printf("Prediction type: %gms\n", t/(cvGetTickFrequency()*1000.)); int true_resp = 0; for (int i = 0; i < nsamples_all - ntrain_samples; i++) From 24c614f686f1281ca21d796fb3f28b1e1d6acfe9 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Tue, 19 Mar 2013 18:41:38 +0400 Subject: [PATCH 23/41] added load/save feature for SVM classifier in letter_recog sample --- samples/cpp/letter_recog.cpp | 44 ++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/samples/cpp/letter_recog.cpp b/samples/cpp/letter_recog.cpp index 144dbe8361..74d5971caa 100644 --- a/samples/cpp/letter_recog.cpp +++ b/samples/cpp/letter_recog.cpp @@ -131,7 +131,7 @@ int build_rtrees_classifier( char* data_filename, printf( "Could not read the classifier %s\n", filename_to_load ); return -1; } - printf( "The classifier %s is loaded.\n", data_filename ); + printf( "The classifier %s is loaded.\n", filename_to_load ); } else { @@ -262,7 +262,7 @@ int build_boost_classifier( char* data_filename, printf( "Could not read the classifier %s\n", filename_to_load ); return -1; } - printf( "The classifier %s is loaded.\n", data_filename ); + printf( "The classifier %s is loaded.\n", filename_to_load ); } else { @@ -403,7 +403,7 @@ int build_mlp_classifier( char* data_filename, printf( "Could not read the classifier %s\n", filename_to_load ); return -1; } - printf( "The classifier %s is loaded.\n", data_filename ); + printf( "The classifier %s is loaded.\n", filename_to_load ); } else { @@ -639,10 +639,11 @@ int build_nbayes_classifier( char* data_filename ) } static -int build_svm_classifier( char* data_filename ) +int build_svm_classifier( char* data_filename, const char* filename_to_save, const char* filename_to_load ) { CvMat* data = 0; CvMat* responses = 0; + CvMat* train_resp = 0; CvMat train_data; int nsamples_all = 0, ntrain_samples = 0; int var_count; @@ -666,13 +667,29 @@ int build_svm_classifier( char* data_filename ) ntrain_samples = (int)(nsamples_all*0.1); var_count = data->cols; - // train classifier - printf( "Training the classifier (may take a few minutes)...\n"); - cvGetRows( data, &train_data, 0, ntrain_samples ); - CvMat* train_resp = cvCreateMat( ntrain_samples, 1, CV_32FC1); - for (int i = 0; i < ntrain_samples; i++) - train_resp->data.fl[i] = responses->data.fl[i]; - svm.train(&train_data, train_resp, 0, 0, param); + // Create or load Random Trees classifier + if( filename_to_load ) + { + // load classifier from the specified file + svm.load( filename_to_load ); + ntrain_samples = 0; + if( svm.get_var_count() == 0 ) + { + printf( "Could not read the classifier %s\n", filename_to_load ); + return -1; + } + printf( "The classifier %s is loaded.\n", filename_to_load ); + } + else + { + // train classifier + printf( "Training the classifier (may take a few minutes)...\n"); + cvGetRows( data, &train_data, 0, ntrain_samples ); + train_resp = cvCreateMat( ntrain_samples, 1, CV_32FC1); + for (int i = 0; i < ntrain_samples; i++) + train_resp->data.fl[i] = responses->data.fl[i]; + svm.train(&train_data, train_resp, 0, 0, param); + } // classification std::vector _sample(var_count * (nsamples_all - ntrain_samples)); @@ -705,6 +722,9 @@ int build_svm_classifier( char* data_filename ) printf("true_resp = %f%%\n", (float)true_resp / (nsamples_all - ntrain_samples) * 100); + if( filename_to_save ) + svm.save( filename_to_save ); + cvReleaseMat( &train_resp ); cvReleaseMat( &result ); cvReleaseMat( &data ); @@ -775,7 +795,7 @@ int main( int argc, char *argv[] ) method == 4 ? build_nbayes_classifier( data_filename) : method == 5 ? - build_svm_classifier( data_filename ): + build_svm_classifier( data_filename, filename_to_save, filename_to_load ): -1) < 0) { help(); From 9a86245242f2dddc6149bd954bae1f0e307fa8d7 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Wed, 20 Mar 2013 11:58:19 +0400 Subject: [PATCH 24/41] added test for bug #1448 and hopefully fixes the bug #2898 --- modules/core/src/lapack.cpp | 8 ++++---- modules/core/test/test_math.cpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/modules/core/src/lapack.cpp b/modules/core/src/lapack.cpp index 62206fac4c..b20273f6eb 100644 --- a/modules/core/src/lapack.cpp +++ b/modules/core/src/lapack.cpp @@ -531,12 +531,12 @@ template<> inline int VBLAS::givensx(double* a, double* b, int n, double #endif template void -JacobiSVDImpl_(_Tp* At, size_t astep, _Tp* _W, _Tp* Vt, size_t vstep, int m, int n, int n1, double minval) +JacobiSVDImpl_(_Tp* At, size_t astep, _Tp* _W, _Tp* Vt, size_t vstep, + int m, int n, int n1, double minval, _Tp eps) { VBLAS<_Tp> vblas; AutoBuffer Wbuf(n); double* W = Wbuf; - _Tp eps = DBL_EPSILON*10; int i, j, k, iter, max_iter = std::max(m, 30); _Tp c, s; double sd; @@ -729,12 +729,12 @@ JacobiSVDImpl_(_Tp* At, size_t astep, _Tp* _W, _Tp* Vt, size_t vstep, int m, int static void JacobiSVD(float* At, size_t astep, float* W, float* Vt, size_t vstep, int m, int n, int n1=-1) { - JacobiSVDImpl_(At, astep, W, Vt, vstep, m, n, !Vt ? 0 : n1 < 0 ? n : n1, FLT_MIN); + JacobiSVDImpl_(At, astep, W, Vt, vstep, m, n, !Vt ? 0 : n1 < 0 ? n : n1, FLT_MIN, FLT_EPSILON*2); } static void JacobiSVD(double* At, size_t astep, double* W, double* Vt, size_t vstep, int m, int n, int n1=-1) { - JacobiSVDImpl_(At, astep, W, Vt, vstep, m, n, !Vt ? 0 : n1 < 0 ? n : n1, DBL_MIN); + JacobiSVDImpl_(At, astep, W, Vt, vstep, m, n, !Vt ? 0 : n1 < 0 ? n : n1, DBL_MIN, DBL_EPSILON*10); } /* y[0:m,0:n] += diag(a[0:1,0:m]) * x[0:m,0:n] */ diff --git a/modules/core/test/test_math.cpp b/modules/core/test/test_math.cpp index 1203961311..c3d88bda6b 100644 --- a/modules/core/test/test_math.cpp +++ b/modules/core/test/test_math.cpp @@ -2487,6 +2487,35 @@ TEST(Core_SVBkSb, accuracy) { Core_SVBkSbTest test; test.safe_run(); } TEST(Core_Trace, accuracy) { Core_TraceTest test; test.safe_run(); } TEST(Core_SolvePoly, accuracy) { Core_SolvePolyTest test; test.safe_run(); } + +TEST(Core_SVD, flt) +{ + float a[] = { + 1.23377746e+011f, -7.05490125e+010f, -4.18380882e+010f, -11693456.f, + -39091328.f, 77492224.f, -7.05490125e+010f, 2.36211143e+011f, + -3.51093473e+010f, 70773408.f, -4.83386156e+005f, -129560368.f, + -4.18380882e+010f, -3.51093473e+010f, 9.25311222e+010f, -49052424.f, + 43922752.f, 12176842.f, -11693456.f, 70773408.f, -49052424.f, 8.40836094e+004f, + 5.17475293e+003f, -1.16122949e+004f, -39091328.f, -4.83386156e+005f, + 43922752.f, 5.17475293e+003f, 5.16047969e+004f, 5.68887842e+003f, 77492224.f, + -129560368.f, 12176842.f, -1.16122949e+004f, 5.68887842e+003f, + 1.28060578e+005f + }; + + float b[] = { + 283751232.f, 2.61604198e+009f, -745033216.f, 2.31125625e+005f, + -4.52429188e+005f, -1.37596525e+006f + }; + + Mat A(6, 6, CV_32F, a); + Mat B(6, 1, CV_32F, b); + Mat X, B1; + solve(A, B, X, DECOMP_SVD); + B1 = A*X; + EXPECT_LE(norm(B1, B, NORM_L2 + NORM_RELATIVE), FLT_EPSILON*10); +} + + // TODO: eigenvv, invsqrt, cbrt, fastarctan, (round, floor, ceil(?)), From 99c49648fadada8e319e8ea0f3efb53f62e455b2 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Wed, 20 Mar 2013 12:31:21 +0400 Subject: [PATCH 25/41] fixed gpu::LUT on multi device system --- modules/gpu/src/arithm.cpp | 61 ++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/modules/gpu/src/arithm.cpp b/modules/gpu/src/arithm.cpp index 7e0aaab680..573f7c574a 100644 --- a/modules/gpu/src/arithm.cpp +++ b/modules/gpu/src/arithm.cpp @@ -319,40 +319,14 @@ void cv::gpu::flip(const GpuMat& src, GpuMat& dst, int flipCode, Stream& stream) void cv::gpu::LUT(const GpuMat& src, const Mat& lut, GpuMat& dst, Stream& s) { - class LevelsInit - { - public: - Npp32s pLevels[256]; - const Npp32s* pLevels3[3]; - int nValues3[3]; - -#if (CUDA_VERSION > 4020) - GpuMat d_pLevels; -#endif - - LevelsInit() - { - nValues3[0] = nValues3[1] = nValues3[2] = 256; - for (int i = 0; i < 256; ++i) - pLevels[i] = i; - + const int cn = src.channels(); -#if (CUDA_VERSION <= 4020) - pLevels3[0] = pLevels3[1] = pLevels3[2] = pLevels; -#else - d_pLevels.upload(Mat(1, 256, CV_32S, pLevels)); - pLevels3[0] = pLevels3[1] = pLevels3[2] = d_pLevels.ptr(); -#endif - } - }; - static LevelsInit lvls; + CV_Assert( src.type() == CV_8UC1 || src.type() == CV_8UC3 ); + CV_Assert( lut.depth() == CV_8U ); + CV_Assert( lut.channels() == 1 || lut.channels() == cn ); + CV_Assert( lut.rows * lut.cols == 256 && lut.isContinuous() ); - int cn = src.channels(); - - CV_Assert(src.type() == CV_8UC1 || src.type() == CV_8UC3); - CV_Assert(lut.depth() == CV_8U && (lut.channels() == 1 || lut.channels() == cn) && lut.rows * lut.cols == 256 && lut.isContinuous()); - - dst.create(src.size(), CV_MAKETYPE(lut.depth(), cn)); + dst.create(src.size(), CV_MAKE_TYPE(lut.depth(), cn)); NppiSize sz; sz.height = src.rows; @@ -361,19 +335,34 @@ void cv::gpu::LUT(const GpuMat& src, const Mat& lut, GpuMat& dst, Stream& s) Mat nppLut; lut.convertTo(nppLut, CV_32S); - cudaStream_t stream = StreamAccessor::getStream(s); + int nValues3[] = {256, 256, 256}; + + Npp32s pLevels[256]; + for (int i = 0; i < 256; ++i) + pLevels[i] = i; + + const Npp32s* pLevels3[3]; +#if (CUDA_VERSION <= 4020) + pLevels3[0] = pLevels3[1] = pLevels3[2] = pLevels; +#else + GpuMat d_pLevels; + d_pLevels.upload(Mat(1, 256, CV_32S, pLevels)); + pLevels3[0] = pLevels3[1] = pLevels3[2] = d_pLevels.ptr(); +#endif + + cudaStream_t stream = StreamAccessor::getStream(s); NppStreamHandler h(stream); if (src.type() == CV_8UC1) { #if (CUDA_VERSION <= 4020) nppSafeCall( nppiLUT_Linear_8u_C1R(src.ptr(), static_cast(src.step), - dst.ptr(), static_cast(dst.step), sz, nppLut.ptr(), lvls.pLevels, 256) ); + dst.ptr(), static_cast(dst.step), sz, nppLut.ptr(), pLevels, 256) ); #else GpuMat d_nppLut(Mat(1, 256, CV_32S, nppLut.data)); nppSafeCall( nppiLUT_Linear_8u_C1R(src.ptr(), static_cast(src.step), - dst.ptr(), static_cast(dst.step), sz, d_nppLut.ptr(), lvls.d_pLevels.ptr(), 256) ); + dst.ptr(), static_cast(dst.step), sz, d_nppLut.ptr(), d_pLevels.ptr(), 256) ); #endif } else @@ -410,7 +399,7 @@ void cv::gpu::LUT(const GpuMat& src, const Mat& lut, GpuMat& dst, Stream& s) } nppSafeCall( nppiLUT_Linear_8u_C3R(src.ptr(), static_cast(src.step), - dst.ptr(), static_cast(dst.step), sz, pValues3, lvls.pLevels3, lvls.nValues3) ); + dst.ptr(), static_cast(dst.step), sz, pValues3, pLevels3, nValues3) ); } if (stream == 0) From 83def21ba93d1fa0f12a516cb0ea6a033f72e306 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Wed, 20 Mar 2013 11:49:33 +0400 Subject: [PATCH 26/41] increased time limits in perf tests --- modules/gpu/perf/perf_calib3d.cpp | 6 +++--- modules/gpu/perf/perf_denoising.cpp | 2 +- modules/gpu/perf/perf_features2d.cpp | 2 ++ modules/gpu/perf/perf_imgproc.cpp | 10 +++++++--- modules/gpu/perf/perf_objdetect.cpp | 2 ++ modules/gpu/perf/perf_video.cpp | 2 +- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/modules/gpu/perf/perf_calib3d.cpp b/modules/gpu/perf/perf_calib3d.cpp index 3631236feb..8019c0349a 100644 --- a/modules/gpu/perf/perf_calib3d.cpp +++ b/modules/gpu/perf/perf_calib3d.cpp @@ -13,7 +13,7 @@ DEF_PARAM_TEST_1(ImagePair, pair_string); PERF_TEST_P(ImagePair, Calib3D_StereoBM, Values(pair_string("gpu/perf/aloe.png", "gpu/perf/aloeR.png"))) { - declare.time(5.0); + declare.time(300.0); const cv::Mat imgLeft = readImage(GET_PARAM(0), cv::IMREAD_GRAYSCALE); ASSERT_FALSE(imgLeft.empty()); @@ -54,7 +54,7 @@ PERF_TEST_P(ImagePair, Calib3D_StereoBM, PERF_TEST_P(ImagePair, Calib3D_StereoBeliefPropagation, Values(pair_string("gpu/stereobp/aloe-L.png", "gpu/stereobp/aloe-R.png"))) { - declare.time(10.0); + declare.time(300.0); const cv::Mat imgLeft = readImage(GET_PARAM(0)); ASSERT_FALSE(imgLeft.empty()); @@ -88,7 +88,7 @@ PERF_TEST_P(ImagePair, Calib3D_StereoBeliefPropagation, PERF_TEST_P(ImagePair, Calib3D_StereoConstantSpaceBP, Values(pair_string("gpu/stereobm/aloe-L.png", "gpu/stereobm/aloe-R.png"))) { - declare.time(10.0); + declare.time(300.0); const cv::Mat imgLeft = readImage(GET_PARAM(0), cv::IMREAD_GRAYSCALE); ASSERT_FALSE(imgLeft.empty()); diff --git a/modules/gpu/perf/perf_denoising.cpp b/modules/gpu/perf/perf_denoising.cpp index e4ce9f3c38..9701225685 100644 --- a/modules/gpu/perf/perf_denoising.cpp +++ b/modules/gpu/perf/perf_denoising.cpp @@ -64,7 +64,7 @@ PERF_TEST_P(Sz_Depth_Cn_WinSz_BlockSz, Denoising_NonLocalMeans, Values(21), Values(5))) { - declare.time(60.0); + declare.time(600.0); const cv::Size size = GET_PARAM(0); const int depth = GET_PARAM(1); diff --git a/modules/gpu/perf/perf_features2d.cpp b/modules/gpu/perf/perf_features2d.cpp index c6b1f598a4..e5a6ef3c89 100644 --- a/modules/gpu/perf/perf_features2d.cpp +++ b/modules/gpu/perf/perf_features2d.cpp @@ -55,6 +55,8 @@ PERF_TEST_P(Image_NFeatures, Features2D_ORB, Combine(Values("gpu/perf/aloe.png"), Values(4000))) { + declare.time(300.0); + const cv::Mat img = readImage(GET_PARAM(0), cv::IMREAD_GRAYSCALE); ASSERT_FALSE(img.empty()); diff --git a/modules/gpu/perf/perf_imgproc.cpp b/modules/gpu/perf/perf_imgproc.cpp index d1a87968d0..c984b04fdb 100644 --- a/modules/gpu/perf/perf_imgproc.cpp +++ b/modules/gpu/perf/perf_imgproc.cpp @@ -632,7 +632,7 @@ DEF_PARAM_TEST_1(Image, string); PERF_TEST_P(Image, ImgProc_MeanShiftFiltering, Values("gpu/meanshift/cones.png")) { - declare.time(15.0); + declare.time(300.0); const cv::Mat img = readImage(GetParam()); ASSERT_FALSE(img.empty()); @@ -668,7 +668,7 @@ PERF_TEST_P(Image, ImgProc_MeanShiftFiltering, PERF_TEST_P(Image, ImgProc_MeanShiftProc, Values("gpu/meanshift/cones.png")) { - declare.time(5.0); + declare.time(300.0); const cv::Mat img = readImage(GetParam()); ASSERT_FALSE(img.empty()); @@ -702,7 +702,7 @@ PERF_TEST_P(Image, ImgProc_MeanShiftProc, PERF_TEST_P(Image, ImgProc_MeanShiftSegmentation, Values("gpu/meanshift/cones.png")) { - declare.time(5.0); + declare.time(300.0); const cv::Mat img = readImage(GetParam()); ASSERT_FALSE(img.empty()); @@ -830,6 +830,8 @@ PERF_TEST_P(Sz_TemplateSz_Cn_Method, ImgProc_MatchTemplate8U, GPU_CHANNELS_1_3_4, ALL_TEMPLATE_METHODS)) { + declare.time(300.0); + const cv::Size size = GET_PARAM(0); const cv::Size templ_size = GET_PARAM(1); const int cn = GET_PARAM(2); @@ -868,6 +870,8 @@ PERF_TEST_P(Sz_TemplateSz_Cn_Method, ImgProc_MatchTemplate32F, GPU_CHANNELS_1_3_4, Values(TemplateMethod(cv::TM_SQDIFF), TemplateMethod(cv::TM_CCORR)))) { + declare.time(300.0); + const cv::Size size = GET_PARAM(0); const cv::Size templ_size = GET_PARAM(1); const int cn = GET_PARAM(2); diff --git a/modules/gpu/perf/perf_objdetect.cpp b/modules/gpu/perf/perf_objdetect.cpp index 51c8695d1f..4f8e56853f 100644 --- a/modules/gpu/perf/perf_objdetect.cpp +++ b/modules/gpu/perf/perf_objdetect.cpp @@ -19,6 +19,8 @@ PERF_TEST_P(Image, ObjDetect_HOG, "gpu/caltech/image_00000527_0.png", "gpu/caltech/image_00000574_0.png")) { + declare.time(300.0); + const cv::Mat img = readImage(GetParam(), cv::IMREAD_GRAYSCALE); ASSERT_FALSE(img.empty()); diff --git a/modules/gpu/perf/perf_video.cpp b/modules/gpu/perf/perf_video.cpp index e9b38ed5e7..86e129c736 100644 --- a/modules/gpu/perf/perf_video.cpp +++ b/modules/gpu/perf/perf_video.cpp @@ -142,7 +142,7 @@ PERF_TEST_P(Image_MinDistance, Video_GoodFeaturesToTrack, PERF_TEST_P(ImagePair, Video_BroxOpticalFlow, Values(make_pair("gpu/opticalflow/frame0.png", "gpu/opticalflow/frame1.png"))) { - declare.time(10); + declare.time(300); cv::Mat frame0 = readImage(GetParam().first, cv::IMREAD_GRAYSCALE); ASSERT_FALSE(frame0.empty()); From b07bce11ef2238291b6c430f3e8def3160fec82b Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Wed, 20 Mar 2013 11:49:58 +0400 Subject: [PATCH 27/41] increased epsilon in sanity test --- modules/gpu/perf/perf_imgproc.cpp | 4 ++-- modules/gpu/perf/perf_video.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/gpu/perf/perf_imgproc.cpp b/modules/gpu/perf/perf_imgproc.cpp index c984b04fdb..84cb0e200f 100644 --- a/modules/gpu/perf/perf_imgproc.cpp +++ b/modules/gpu/perf/perf_imgproc.cpp @@ -1038,7 +1038,7 @@ PERF_TEST_P(Image_Type_Border_BlockSz_ApertureSz, ImgProc_CornerHarris, TEST_CYCLE() cv::gpu::cornerHarris(d_img, dst, d_Dx, d_Dy, d_buf, blockSize, apertureSize, k, borderMode); - GPU_SANITY_CHECK(dst); + GPU_SANITY_CHECK(dst, 1e-4); } else { @@ -1081,7 +1081,7 @@ PERF_TEST_P(Image_Type_Border_BlockSz_ApertureSz, ImgProc_CornerMinEigenVal, TEST_CYCLE() cv::gpu::cornerMinEigenVal(d_img, dst, d_Dx, d_Dy, d_buf, blockSize, apertureSize, borderMode); - GPU_SANITY_CHECK(dst); + GPU_SANITY_CHECK(dst, 1e-4); } else { diff --git a/modules/gpu/perf/perf_video.cpp b/modules/gpu/perf/perf_video.cpp index 86e129c736..876d81513a 100644 --- a/modules/gpu/perf/perf_video.cpp +++ b/modules/gpu/perf/perf_video.cpp @@ -372,8 +372,8 @@ PERF_TEST_P(ImagePair, Video_OpticalFlowDual_TVL1, TEST_CYCLE() d_alg(d_frame0, d_frame1, u, v); - GPU_SANITY_CHECK(u, 1e-4); - GPU_SANITY_CHECK(v, 1e-4); + GPU_SANITY_CHECK(u, 1e-2); + GPU_SANITY_CHECK(v, 1e-2); } else { From 0149969463bc989d232525d903b0f63ccf889ea2 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Wed, 20 Mar 2013 11:50:42 +0400 Subject: [PATCH 28/41] disable tests that requires video support if it is not available --- modules/gpu/perf/perf_video.cpp | 42 +++++++++++++++++++++++++++---- modules/gpu/test/test_bgfg.cpp | 24 ++++++++++++++++++ modules/nonfree/perf/perf_gpu.cpp | 16 ++++++++++++ 3 files changed, 77 insertions(+), 5 deletions(-) diff --git a/modules/gpu/perf/perf_video.cpp b/modules/gpu/perf/perf_video.cpp index 876d81513a..b998ff95fe 100644 --- a/modules/gpu/perf/perf_video.cpp +++ b/modules/gpu/perf/perf_video.cpp @@ -4,6 +4,18 @@ using namespace std; using namespace testing; using namespace perf; +#if defined(HAVE_XINE) || \ + defined(HAVE_GSTREAMER) || \ + defined(HAVE_QUICKTIME) || \ + defined(HAVE_AVFOUNDATION) || \ + defined(HAVE_FFMPEG) || \ + defined(WIN32) /* assume that we have ffmpeg */ + +# define BUILD_WITH_VIDEO_INPUT_SUPPORT 1 +#else +# define BUILD_WITH_VIDEO_INPUT_SUPPORT 0 +#endif + namespace cv { template<> void Ptr::delete_obj() @@ -482,6 +494,8 @@ PERF_TEST_P(ImagePair, Video_FastOpticalFlowBM, ////////////////////////////////////////////////////// // FGDStatModel +#if BUILD_WITH_VIDEO_INPUT_SUPPORT + DEF_PARAM_TEST_1(Video, string); PERF_TEST_P(Video, Video_FGDStatModel, @@ -548,9 +562,13 @@ PERF_TEST_P(Video, Video_FGDStatModel, } } +#endif + ////////////////////////////////////////////////////// // MOG +#if BUILD_WITH_VIDEO_INPUT_SUPPORT + DEF_PARAM_TEST(Video_Cn_LearningRate, string, MatCn, double); PERF_TEST_P(Video_Cn_LearningRate, Video_MOG, @@ -643,9 +661,13 @@ PERF_TEST_P(Video_Cn_LearningRate, Video_MOG, } } +#endif + ////////////////////////////////////////////////////// // MOG2 +#if BUILD_WITH_VIDEO_INPUT_SUPPORT + DEF_PARAM_TEST(Video_Cn, string, int); PERF_TEST_P(Video_Cn, Video_MOG2, @@ -740,9 +762,13 @@ PERF_TEST_P(Video_Cn, Video_MOG2, } } +#endif + ////////////////////////////////////////////////////// // MOG2GetBackgroundImage +#if BUILD_WITH_VIDEO_INPUT_SUPPORT + PERF_TEST_P(Video_Cn, Video_MOG2GetBackgroundImage, Combine(Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi"), GPU_CHANNELS_1_3_4)) @@ -818,9 +844,13 @@ PERF_TEST_P(Video_Cn, Video_MOG2GetBackgroundImage, } } +#endif + ////////////////////////////////////////////////////// // GMG +#if BUILD_WITH_VIDEO_INPUT_SUPPORT + DEF_PARAM_TEST(Video_Cn_MaxFeatures, string, MatCn, int); PERF_TEST_P(Video_Cn_MaxFeatures, Video_GMG, @@ -928,11 +958,13 @@ PERF_TEST_P(Video_Cn_MaxFeatures, Video_GMG, } } -#ifdef HAVE_NVCUVID +#endif ////////////////////////////////////////////////////// // VideoReader +#if defined(HAVE_NVCUVID) && BUILD_WITH_VIDEO_INPUT_SUPPORT + PERF_TEST_P(Video, Video_VideoReader, Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi")) { declare.time(20); @@ -963,10 +995,12 @@ PERF_TEST_P(Video, Video_VideoReader, Values("gpu/video/768x576.avi", "gpu/video } } +#endif + ////////////////////////////////////////////////////// // VideoWriter -#ifdef WIN32 +#if defined(HAVE_NVCUVID) && defined(WIN32) PERF_TEST_P(Video, Video_VideoWriter, Values("gpu/video/768x576.avi", "gpu/video/1920x1080.avi")) { @@ -1024,6 +1058,4 @@ PERF_TEST_P(Video, Video_VideoWriter, Values("gpu/video/768x576.avi", "gpu/video SANITY_CHECK(frame); } -#endif // WIN32 - -#endif // HAVE_NVCUVID +#endif diff --git a/modules/gpu/test/test_bgfg.cpp b/modules/gpu/test/test_bgfg.cpp index 253ded26c6..9847fcfab7 100644 --- a/modules/gpu/test/test_bgfg.cpp +++ b/modules/gpu/test/test_bgfg.cpp @@ -45,9 +45,23 @@ using namespace cvtest; +#if defined(HAVE_XINE) || \ + defined(HAVE_GSTREAMER) || \ + defined(HAVE_QUICKTIME) || \ + defined(HAVE_AVFOUNDATION) || \ + defined(HAVE_FFMPEG) || \ + defined(WIN32) /* assume that we have ffmpeg */ + +# define BUILD_WITH_VIDEO_INPUT_SUPPORT 1 +#else +# define BUILD_WITH_VIDEO_INPUT_SUPPORT 0 +#endif + ////////////////////////////////////////////////////// // FGDStatModel +#if BUILD_WITH_VIDEO_INPUT_SUPPORT + namespace cv { template<> void Ptr::delete_obj() @@ -132,9 +146,13 @@ INSTANTIATE_TEST_CASE_P(GPU_Video, FGDStatModel, testing::Combine( testing::Values(std::string("768x576.avi")), testing::Values(Channels(3), Channels(4)))); +#endif + ////////////////////////////////////////////////////// // MOG +#if BUILD_WITH_VIDEO_INPUT_SUPPORT + namespace { IMPLEMENT_PARAM_CLASS(UseGray, bool) @@ -206,9 +224,13 @@ INSTANTIATE_TEST_CASE_P(GPU_Video, MOG, testing::Combine( testing::Values(LearningRate(0.0), LearningRate(0.01)), WHOLE_SUBMAT)); +#endif + ////////////////////////////////////////////////////// // MOG2 +#if BUILD_WITH_VIDEO_INPUT_SUPPORT + namespace { IMPLEMENT_PARAM_CLASS(DetectShadow, bool) @@ -322,6 +344,8 @@ INSTANTIATE_TEST_CASE_P(GPU_Video, MOG2, testing::Combine( testing::Values(DetectShadow(true), DetectShadow(false)), WHOLE_SUBMAT)); +#endif + ////////////////////////////////////////////////////// // GMG diff --git a/modules/nonfree/perf/perf_gpu.cpp b/modules/nonfree/perf/perf_gpu.cpp index a68fb6a0ea..c00955c894 100644 --- a/modules/nonfree/perf/perf_gpu.cpp +++ b/modules/nonfree/perf/perf_gpu.cpp @@ -4,6 +4,18 @@ using namespace std; using namespace testing; using namespace perf; +#if defined(HAVE_XINE) || \ + defined(HAVE_GSTREAMER) || \ + defined(HAVE_QUICKTIME) || \ + defined(HAVE_AVFOUNDATION) || \ + defined(HAVE_FFMPEG) || \ + defined(WIN32) /* assume that we have ffmpeg */ + +# define BUILD_WITH_VIDEO_INPUT_SUPPORT 1 +#else +# define BUILD_WITH_VIDEO_INPUT_SUPPORT 0 +#endif + #if defined(HAVE_OPENCV_GPU) && defined(HAVE_CUDA) ////////////////////////////////////////////////////////////////////// @@ -55,6 +67,8 @@ PERF_TEST_P(Image, GPU_SURF, ////////////////////////////////////////////////////// // VIBE +#if BUILD_WITH_VIDEO_INPUT_SUPPORT + DEF_PARAM_TEST(Video_Cn, string, int); PERF_TEST_P(Video_Cn, GPU_VIBE, @@ -120,3 +134,5 @@ PERF_TEST_P(Video_Cn, GPU_VIBE, } #endif + +#endif From d87b709c2614c87f74ce72de8c23c0e623f91f11 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 21 Mar 2013 12:18:56 +0400 Subject: [PATCH 29/41] fixed minMax perf test --- modules/gpu/perf/perf_core.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/modules/gpu/perf/perf_core.cpp b/modules/gpu/perf/perf_core.cpp index 22840f9f46..70bb8f24f1 100644 --- a/modules/gpu/perf/perf_core.cpp +++ b/modules/gpu/perf/perf_core.cpp @@ -1748,7 +1748,10 @@ PERF_TEST_P(Sz_Depth_Norm, Core_Norm, const int normType = GET_PARAM(2); cv::Mat src(size, depth); - declare.in(src, WARMUP_RNG); + if (depth == CV_8U) + cv::randu(src, 0, 254); + else + declare.in(src, WARMUP_RNG); if (PERF_RUN_GPU()) { @@ -1923,7 +1926,10 @@ PERF_TEST_P(Sz_Depth, Core_MinMax, const int depth = GET_PARAM(1); cv::Mat src(size, depth); - declare.in(src, WARMUP_RNG); + if (depth == CV_8U) + cv::randu(src, 0, 254); + else + declare.in(src, WARMUP_RNG); if (PERF_RUN_GPU()) { @@ -1958,7 +1964,10 @@ PERF_TEST_P(Sz_Depth, Core_MinMaxLoc, const int depth = GET_PARAM(1); cv::Mat src(size, depth); - declare.in(src, WARMUP_RNG); + if (depth == CV_8U) + cv::randu(src, 0, 254); + else + declare.in(src, WARMUP_RNG); if (PERF_RUN_GPU()) { From 33ff3d6016292a04a9e8d43dc387fa5800a8394b Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Wed, 20 Mar 2013 16:27:58 +0400 Subject: [PATCH 30/41] added simd_functions.hpp to device layer --- .../opencv2/gpu/device/simd_functions.hpp | 910 ++++++++++++++++++ modules/gpu/src/cuda/element_operations.cu | 702 +++----------- modules/gpu/src/element_operations.cpp | 355 ++----- 3 files changed, 1144 insertions(+), 823 deletions(-) create mode 100644 modules/gpu/include/opencv2/gpu/device/simd_functions.hpp diff --git a/modules/gpu/include/opencv2/gpu/device/simd_functions.hpp b/modules/gpu/include/opencv2/gpu/device/simd_functions.hpp new file mode 100644 index 0000000000..55b1f247ff --- /dev/null +++ b/modules/gpu/include/opencv2/gpu/device/simd_functions.hpp @@ -0,0 +1,910 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Copyright (C) 2010-2013, NVIDIA Corporation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +/* + * Copyright (c) 2013 NVIDIA Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of NVIDIA Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __OPENCV_GPU_SIMD_FUNCTIONS_HPP__ +#define __OPENCV_GPU_SIMD_FUNCTIONS_HPP__ + +#include "common.hpp" + +/* + This header file contains inline functions that implement intra-word SIMD + operations, that are hardware accelerated on sm_3x (Kepler) GPUs. Efficient + emulation code paths are provided for earlier architectures (sm_1x, sm_2x) + to make the code portable across all GPUs supported by CUDA. The following + functions are currently implemented: + + vadd2(a,b) per-halfword unsigned addition, with wrap-around: a + b + vsub2(a,b) per-halfword unsigned subtraction, with wrap-around: a - b + vabsdiff2(a,b) per-halfword unsigned absolute difference: |a - b| + vavg2(a,b) per-halfword unsigned average: (a + b) / 2 + vavrg2(a,b) per-halfword unsigned rounded average: (a + b + 1) / 2 + vseteq2(a,b) per-halfword unsigned comparison: a == b ? 1 : 0 + vcmpeq2(a,b) per-halfword unsigned comparison: a == b ? 0xffff : 0 + vsetge2(a,b) per-halfword unsigned comparison: a >= b ? 1 : 0 + vcmpge2(a,b) per-halfword unsigned comparison: a >= b ? 0xffff : 0 + vsetgt2(a,b) per-halfword unsigned comparison: a > b ? 1 : 0 + vcmpgt2(a,b) per-halfword unsigned comparison: a > b ? 0xffff : 0 + vsetle2(a,b) per-halfword unsigned comparison: a <= b ? 1 : 0 + vcmple2(a,b) per-halfword unsigned comparison: a <= b ? 0xffff : 0 + vsetlt2(a,b) per-halfword unsigned comparison: a < b ? 1 : 0 + vcmplt2(a,b) per-halfword unsigned comparison: a < b ? 0xffff : 0 + vsetne2(a,b) per-halfword unsigned comparison: a != b ? 1 : 0 + vcmpne2(a,b) per-halfword unsigned comparison: a != b ? 0xffff : 0 + vmax2(a,b) per-halfword unsigned maximum: max(a, b) + vmin2(a,b) per-halfword unsigned minimum: min(a, b) + + vadd4(a,b) per-byte unsigned addition, with wrap-around: a + b + vsub4(a,b) per-byte unsigned subtraction, with wrap-around: a - b + vabsdiff4(a,b) per-byte unsigned absolute difference: |a - b| + vavg4(a,b) per-byte unsigned average: (a + b) / 2 + vavrg4(a,b) per-byte unsigned rounded average: (a + b + 1) / 2 + vseteq4(a,b) per-byte unsigned comparison: a == b ? 1 : 0 + vcmpeq4(a,b) per-byte unsigned comparison: a == b ? 0xff : 0 + vsetge4(a,b) per-byte unsigned comparison: a >= b ? 1 : 0 + vcmpge4(a,b) per-byte unsigned comparison: a >= b ? 0xff : 0 + vsetgt4(a,b) per-byte unsigned comparison: a > b ? 1 : 0 + vcmpgt4(a,b) per-byte unsigned comparison: a > b ? 0xff : 0 + vsetle4(a,b) per-byte unsigned comparison: a <= b ? 1 : 0 + vcmple4(a,b) per-byte unsigned comparison: a <= b ? 0xff : 0 + vsetlt4(a,b) per-byte unsigned comparison: a < b ? 1 : 0 + vcmplt4(a,b) per-byte unsigned comparison: a < b ? 0xff : 0 + vsetne4(a,b) per-byte unsigned comparison: a != b ? 1: 0 + vcmpne4(a,b) per-byte unsigned comparison: a != b ? 0xff: 0 + vmax4(a,b) per-byte unsigned maximum: max(a, b) + vmin4(a,b) per-byte unsigned minimum: min(a, b) +*/ + +namespace cv { namespace gpu { namespace device +{ + // 2 + + static __device__ __forceinline__ unsigned int vadd2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vadd2.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #elif __CUDA_ARCH__ >= 200 + asm("vadd.u32.u32.u32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vadd.u32.u32.u32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int s; + s = a ^ b; // sum bits + r = a + b; // actual sum + s = s ^ r; // determine carry-ins for each bit position + s = s & 0x00010000; // carry-in to high word (= carry-out from low word) + r = r - s; // subtract out carry-out from low word + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsub2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vsub2.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #elif __CUDA_ARCH__ >= 200 + asm("vsub.u32.u32.u32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vsub.u32.u32.u32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int s; + s = a ^ b; // sum bits + r = a - b; // actual sum + s = s ^ r; // determine carry-ins for each bit position + s = s & 0x00010000; // borrow to high word + r = r + s; // compensate for borrow from low word + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vabsdiff2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vabsdiff2.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #elif __CUDA_ARCH__ >= 200 + asm("vabsdiff.u32.u32.u32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vabsdiff.u32.u32.u32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int s, t, u, v; + s = a & 0x0000ffff; // extract low halfword + r = b & 0x0000ffff; // extract low halfword + u = ::max(r, s); // maximum of low halfwords + v = ::min(r, s); // minimum of low halfwords + s = a & 0xffff0000; // extract high halfword + r = b & 0xffff0000; // extract high halfword + t = ::max(r, s); // maximum of high halfwords + s = ::min(r, s); // minimum of high halfwords + r = u | t; // maximum of both halfwords + s = v | s; // minimum of both halfwords + r = r - s; // |a - b| = max(a,b) - min(a,b); + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vavg2(unsigned int a, unsigned int b) + { + unsigned int r, s; + + // HAKMEM #23: a + b = 2 * (a & b) + (a ^ b) ==> + // (a + b) / 2 = (a & b) + ((a ^ b) >> 1) + s = a ^ b; + r = a & b; + s = s & 0xfffefffe; // ensure shift doesn't cross halfword boundaries + s = s >> 1; + s = r + s; + + return s; + } + + static __device__ __forceinline__ unsigned int vavrg2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vavrg2.u32.u32.u32 %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + // HAKMEM #23: a + b = 2 * (a | b) - (a ^ b) ==> + // (a + b + 1) / 2 = (a | b) - ((a ^ b) >> 1) + unsigned int s; + s = a ^ b; + r = a | b; + s = s & 0xfffefffe; // ensure shift doesn't cross half-word boundaries + s = s >> 1; + r = r - s; + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vseteq2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset2.u32.u32.eq %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + // inspired by Alan Mycroft's null-byte detection algorithm: + // null_byte(x) = ((x - 0x01010101) & (~x & 0x80808080)) + unsigned int c; + r = a ^ b; // 0x0000 if a == b + c = r | 0x80008000; // set msbs, to catch carry out + r = r ^ c; // extract msbs, msb = 1 if r < 0x8000 + c = c - 0x00010001; // msb = 0, if r was 0x0000 or 0x8000 + c = r & ~c; // msb = 1, if r was 0x0000 + r = c >> 15; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmpeq2(unsigned int a, unsigned int b) + { + unsigned int r, c; + + #if __CUDA_ARCH__ >= 300 + r = vseteq2(a, b); + c = r << 16; // convert bool + r = c - r; // into mask + #else + // inspired by Alan Mycroft's null-byte detection algorithm: + // null_byte(x) = ((x - 0x01010101) & (~x & 0x80808080)) + r = a ^ b; // 0x0000 if a == b + c = r | 0x80008000; // set msbs, to catch carry out + r = r ^ c; // extract msbs, msb = 1 if r < 0x8000 + c = c - 0x00010001; // msb = 0, if r was 0x0000 or 0x8000 + c = r & ~c; // msb = 1, if r was 0x0000 + r = c >> 15; // convert + r = c - r; // msbs to + r = c | r; // mask + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsetge2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset2.u32.u32.ge %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int c; + asm("not.b32 %0, %0;" : "+r"(b)); + c = vavrg2(a, b); // (a + ~b + 1) / 2 = (a - b) / 2 + c = c & 0x80008000; // msb = carry-outs + r = c >> 15; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmpge2(unsigned int a, unsigned int b) + { + unsigned int r, c; + + #if __CUDA_ARCH__ >= 300 + r = vsetge2(a, b); + c = r << 16; // convert bool + r = c - r; // into mask + #else + asm("not.b32 %0, %0;" : "+r"(b)); + c = vavrg2(a, b); // (a + ~b + 1) / 2 = (a - b) / 2 + c = c & 0x80008000; // msb = carry-outs + r = c >> 15; // convert + r = c - r; // msbs to + r = c | r; // mask + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsetgt2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset2.u32.u32.gt %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int c; + asm("not.b32 %0, %0;" : "+r"(b)); + c = vavg2(a, b); // (a + ~b) / 2 = (a - b) / 2 [rounded down] + c = c & 0x80008000; // msbs = carry-outs + r = c >> 15; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmpgt2(unsigned int a, unsigned int b) + { + unsigned int r, c; + + #if __CUDA_ARCH__ >= 300 + r = vsetgt2(a, b); + c = r << 16; // convert bool + r = c - r; // into mask + #else + asm("not.b32 %0, %0;" : "+r"(b)); + c = vavg2(a, b); // (a + ~b) / 2 = (a - b) / 2 [rounded down] + c = c & 0x80008000; // msbs = carry-outs + r = c >> 15; // convert + r = c - r; // msbs to + r = c | r; // mask + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsetle2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset2.u32.u32.le %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int c; + asm("not.b32 %0, %0;" : "+r"(a)); + c = vavrg2(a, b); // (b + ~a + 1) / 2 = (b - a) / 2 + c = c & 0x80008000; // msb = carry-outs + r = c >> 15; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmple2(unsigned int a, unsigned int b) + { + unsigned int r, c; + + #if __CUDA_ARCH__ >= 300 + r = vsetle2(a, b); + c = r << 16; // convert bool + r = c - r; // into mask + #else + asm("not.b32 %0, %0;" : "+r"(a)); + c = vavrg2(a, b); // (b + ~a + 1) / 2 = (b - a) / 2 + c = c & 0x80008000; // msb = carry-outs + r = c >> 15; // convert + r = c - r; // msbs to + r = c | r; // mask + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsetlt2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset2.u32.u32.lt %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int c; + asm("not.b32 %0, %0;" : "+r"(a)); + c = vavg2(a, b); // (b + ~a) / 2 = (b - a) / 2 [rounded down] + c = c & 0x80008000; // msb = carry-outs + r = c >> 15; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmplt2(unsigned int a, unsigned int b) + { + unsigned int r, c; + + #if __CUDA_ARCH__ >= 300 + r = vsetlt2(a, b); + c = r << 16; // convert bool + r = c - r; // into mask + #else + asm("not.b32 %0, %0;" : "+r"(a)); + c = vavg2(a, b); // (b + ~a) / 2 = (b - a) / 2 [rounded down] + c = c & 0x80008000; // msb = carry-outs + r = c >> 15; // convert + r = c - r; // msbs to + r = c | r; // mask + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsetne2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm ("vset2.u32.u32.ne %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + // inspired by Alan Mycroft's null-byte detection algorithm: + // null_byte(x) = ((x - 0x01010101) & (~x & 0x80808080)) + unsigned int c; + r = a ^ b; // 0x0000 if a == b + c = r | 0x80008000; // set msbs, to catch carry out + c = c - 0x00010001; // msb = 0, if r was 0x0000 or 0x8000 + c = r | c; // msb = 1, if r was not 0x0000 + c = c & 0x80008000; // extract msbs + r = c >> 15; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmpne2(unsigned int a, unsigned int b) + { + unsigned int r, c; + + #if __CUDA_ARCH__ >= 300 + r = vsetne2(a, b); + c = r << 16; // convert bool + r = c - r; // into mask + #else + // inspired by Alan Mycroft's null-byte detection algorithm: + // null_byte(x) = ((x - 0x01010101) & (~x & 0x80808080)) + r = a ^ b; // 0x0000 if a == b + c = r | 0x80008000; // set msbs, to catch carry out + c = c - 0x00010001; // msb = 0, if r was 0x0000 or 0x8000 + c = r | c; // msb = 1, if r was not 0x0000 + c = c & 0x80008000; // extract msbs + r = c >> 15; // convert + r = c - r; // msbs to + r = c | r; // mask + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vmax2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vmax2.u32.u32.u32 %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #elif __CUDA_ARCH__ >= 200 + asm("vmax.u32.u32.u32 %0.h0, %1.h0, %2.h0, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vmax.u32.u32.u32 %0.h1, %1.h1, %2.h1, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int s, t, u; + r = a & 0x0000ffff; // extract low halfword + s = b & 0x0000ffff; // extract low halfword + t = ::max(r, s); // maximum of low halfwords + r = a & 0xffff0000; // extract high halfword + s = b & 0xffff0000; // extract high halfword + u = ::max(r, s); // maximum of high halfwords + r = t | u; // combine halfword maximums + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vmin2(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vmin2.u32.u32.u32 %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #elif __CUDA_ARCH__ >= 200 + asm("vmin.u32.u32.u32 %0.h0, %1.h0, %2.h0, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vmin.u32.u32.u32 %0.h1, %1.h1, %2.h1, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int s, t, u; + r = a & 0x0000ffff; // extract low halfword + s = b & 0x0000ffff; // extract low halfword + t = ::min(r, s); // minimum of low halfwords + r = a & 0xffff0000; // extract high halfword + s = b & 0xffff0000; // extract high halfword + u = ::min(r, s); // minimum of high halfwords + r = t | u; // combine halfword minimums + #endif + + return r; + } + + // 4 + + static __device__ __forceinline__ unsigned int vadd4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vadd4.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #elif __CUDA_ARCH__ >= 200 + asm("vadd.u32.u32.u32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vadd.u32.u32.u32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vadd.u32.u32.u32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vadd.u32.u32.u32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int s, t; + s = a ^ b; // sum bits + r = a & 0x7f7f7f7f; // clear msbs + t = b & 0x7f7f7f7f; // clear msbs + s = s & 0x80808080; // msb sum bits + r = r + t; // add without msbs, record carry-out in msbs + r = r ^ s; // sum of msb sum and carry-in bits, w/o carry-out + #endif /* __CUDA_ARCH__ >= 300 */ + + return r; + } + + static __device__ __forceinline__ unsigned int vsub4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vsub4.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #elif __CUDA_ARCH__ >= 200 + asm("vsub.u32.u32.u32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vsub.u32.u32.u32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vsub.u32.u32.u32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vsub.u32.u32.u32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int s, t; + s = a ^ ~b; // inverted sum bits + r = a | 0x80808080; // set msbs + t = b & 0x7f7f7f7f; // clear msbs + s = s & 0x80808080; // inverted msb sum bits + r = r - t; // subtract w/o msbs, record inverted borrows in msb + r = r ^ s; // combine inverted msb sum bits and borrows + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vavg4(unsigned int a, unsigned int b) + { + unsigned int r, s; + + // HAKMEM #23: a + b = 2 * (a & b) + (a ^ b) ==> + // (a + b) / 2 = (a & b) + ((a ^ b) >> 1) + s = a ^ b; + r = a & b; + s = s & 0xfefefefe; // ensure following shift doesn't cross byte boundaries + s = s >> 1; + s = r + s; + + return s; + } + + static __device__ __forceinline__ unsigned int vavrg4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vavrg4.u32.u32.u32 %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + // HAKMEM #23: a + b = 2 * (a | b) - (a ^ b) ==> + // (a + b + 1) / 2 = (a | b) - ((a ^ b) >> 1) + unsigned int c; + c = a ^ b; + r = a | b; + c = c & 0xfefefefe; // ensure following shift doesn't cross byte boundaries + c = c >> 1; + r = r - c; + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vseteq4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset4.u32.u32.eq %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + // inspired by Alan Mycroft's null-byte detection algorithm: + // null_byte(x) = ((x - 0x01010101) & (~x & 0x80808080)) + unsigned int c; + r = a ^ b; // 0x00 if a == b + c = r | 0x80808080; // set msbs, to catch carry out + r = r ^ c; // extract msbs, msb = 1 if r < 0x80 + c = c - 0x01010101; // msb = 0, if r was 0x00 or 0x80 + c = r & ~c; // msb = 1, if r was 0x00 + r = c >> 7; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmpeq4(unsigned int a, unsigned int b) + { + unsigned int r, t; + + #if __CUDA_ARCH__ >= 300 + r = vseteq4(a, b); + t = r << 8; // convert bool + r = t - r; // to mask + #else + // inspired by Alan Mycroft's null-byte detection algorithm: + // null_byte(x) = ((x - 0x01010101) & (~x & 0x80808080)) + t = a ^ b; // 0x00 if a == b + r = t | 0x80808080; // set msbs, to catch carry out + t = t ^ r; // extract msbs, msb = 1 if t < 0x80 + r = r - 0x01010101; // msb = 0, if t was 0x00 or 0x80 + r = t & ~r; // msb = 1, if t was 0x00 + t = r >> 7; // build mask + t = r - t; // from + r = t | r; // msbs + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsetle4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset4.u32.u32.le %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int c; + asm("not.b32 %0, %0;" : "+r"(a)); + c = vavrg4(a, b); // (b + ~a + 1) / 2 = (b - a) / 2 + c = c & 0x80808080; // msb = carry-outs + r = c >> 7; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmple4(unsigned int a, unsigned int b) + { + unsigned int r, c; + + #if __CUDA_ARCH__ >= 300 + r = vsetle4(a, b); + c = r << 8; // convert bool + r = c - r; // to mask + #else + asm("not.b32 %0, %0;" : "+r"(a)); + c = vavrg4(a, b); // (b + ~a + 1) / 2 = (b - a) / 2 + c = c & 0x80808080; // msbs = carry-outs + r = c >> 7; // convert + r = c - r; // msbs to + r = c | r; // mask + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsetlt4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset4.u32.u32.lt %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int c; + asm("not.b32 %0, %0;" : "+r"(a)); + c = vavg4(a, b); // (b + ~a) / 2 = (b - a) / 2 [rounded down] + c = c & 0x80808080; // msb = carry-outs + r = c >> 7; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmplt4(unsigned int a, unsigned int b) + { + unsigned int r, c; + + #if __CUDA_ARCH__ >= 300 + r = vsetlt4(a, b); + c = r << 8; // convert bool + r = c - r; // to mask + #else + asm("not.b32 %0, %0;" : "+r"(a)); + c = vavg4(a, b); // (b + ~a) / 2 = (b - a) / 2 [rounded down] + c = c & 0x80808080; // msbs = carry-outs + r = c >> 7; // convert + r = c - r; // msbs to + r = c | r; // mask + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsetge4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset4.u32.u32.ge %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int c; + asm("not.b32 %0, %0;" : "+r"(b)); + c = vavrg4(a, b); // (a + ~b + 1) / 2 = (a - b) / 2 + c = c & 0x80808080; // msb = carry-outs + r = c >> 7; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmpge4(unsigned int a, unsigned int b) + { + unsigned int r, s; + + #if __CUDA_ARCH__ >= 300 + r = vsetge4(a, b); + s = r << 8; // convert bool + r = s - r; // to mask + #else + asm ("not.b32 %0,%0;" : "+r"(b)); + r = vavrg4 (a, b); // (a + ~b + 1) / 2 = (a - b) / 2 + r = r & 0x80808080; // msb = carry-outs + s = r >> 7; // build mask + s = r - s; // from + r = s | r; // msbs + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsetgt4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset4.u32.u32.gt %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int c; + asm("not.b32 %0, %0;" : "+r"(b)); + c = vavg4(a, b); // (a + ~b) / 2 = (a - b) / 2 [rounded down] + c = c & 0x80808080; // msb = carry-outs + r = c >> 7; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmpgt4(unsigned int a, unsigned int b) + { + unsigned int r, c; + + #if __CUDA_ARCH__ >= 300 + r = vsetgt4(a, b); + c = r << 8; // convert bool + r = c - r; // to mask + #else + asm("not.b32 %0, %0;" : "+r"(b)); + c = vavg4(a, b); // (a + ~b) / 2 = (a - b) / 2 [rounded down] + c = c & 0x80808080; // msb = carry-outs + r = c >> 7; // convert + r = c - r; // msbs to + r = c | r; // mask + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vsetne4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vset4.u32.u32.ne %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + // inspired by Alan Mycroft's null-byte detection algorithm: + // null_byte(x) = ((x - 0x01010101) & (~x & 0x80808080)) + unsigned int c; + r = a ^ b; // 0x00 if a == b + c = r | 0x80808080; // set msbs, to catch carry out + c = c - 0x01010101; // msb = 0, if r was 0x00 or 0x80 + c = r | c; // msb = 1, if r was not 0x00 + c = c & 0x80808080; // extract msbs + r = c >> 7; // convert to bool + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vcmpne4(unsigned int a, unsigned int b) + { + unsigned int r, c; + + #if __CUDA_ARCH__ >= 300 + r = vsetne4(a, b); + c = r << 8; // convert bool + r = c - r; // to mask + #else + // inspired by Alan Mycroft's null-byte detection algorithm: + // null_byte(x) = ((x - 0x01010101) & (~x & 0x80808080)) + r = a ^ b; // 0x00 if a == b + c = r | 0x80808080; // set msbs, to catch carry out + c = c - 0x01010101; // msb = 0, if r was 0x00 or 0x80 + c = r | c; // msb = 1, if r was not 0x00 + c = c & 0x80808080; // extract msbs + r = c >> 7; // convert + r = c - r; // msbs to + r = c | r; // mask + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vabsdiff4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vabsdiff4.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #elif __CUDA_ARCH__ >= 200 + asm("vabsdiff.u32.u32.u32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vabsdiff.u32.u32.u32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vabsdiff.u32.u32.u32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vabsdiff.u32.u32.u32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int s; + s = vcmpge4(a, b); // mask = 0xff if a >= b + r = a ^ b; // + s = (r & s) ^ b; // select a when a >= b, else select b => max(a,b) + r = s ^ r; // select a when b >= a, else select b => min(a,b) + r = s - r; // |a - b| = max(a,b) - min(a,b); + #endif + + return r; + } + + static __device__ __forceinline__ unsigned int vmax4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vmax4.u32.u32.u32 %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #elif __CUDA_ARCH__ >= 200 + asm("vmax.u32.u32.u32 %0.b0, %1.b0, %2.b0, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vmax.u32.u32.u32 %0.b1, %1.b1, %2.b1, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vmax.u32.u32.u32 %0.b2, %1.b2, %2.b2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vmax.u32.u32.u32 %0.b3, %1.b3, %2.b3, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int s; + s = vcmpge4(a, b); // mask = 0xff if a >= b + r = a & s; // select a when b >= a + s = b & ~s; // select b when b < a + r = r | s; // combine byte selections + #endif + + return r; // byte-wise unsigned maximum + } + + static __device__ __forceinline__ unsigned int vmin4(unsigned int a, unsigned int b) + { + unsigned int r = 0; + + #if __CUDA_ARCH__ >= 300 + asm("vmin4.u32.u32.u32 %0, %1, %2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #elif __CUDA_ARCH__ >= 200 + asm("vmin.u32.u32.u32 %0.b0, %1.b0, %2.b0, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vmin.u32.u32.u32 %0.b1, %1.b1, %2.b1, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vmin.u32.u32.u32 %0.b2, %1.b2, %2.b2, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + asm("vmin.u32.u32.u32 %0.b3, %1.b3, %2.b3, %3;" : "=r"(r) : "r"(a), "r"(b), "r"(r)); + #else + unsigned int s; + s = vcmpge4(b, a); // mask = 0xff if a >= b + r = a & s; // select a when b >= a + s = b & ~s; // select b when b < a + r = r | s; // combine byte selections + #endif + + return r; + } +}}} + +#endif // __OPENCV_GPU_SIMD_FUNCTIONS_HPP__ diff --git a/modules/gpu/src/cuda/element_operations.cu b/modules/gpu/src/cuda/element_operations.cu index 5165b352ae..e9397e534f 100644 --- a/modules/gpu/src/cuda/element_operations.cu +++ b/modules/gpu/src/cuda/element_operations.cu @@ -48,6 +48,7 @@ #include "opencv2/gpu/device/transform.hpp" #include "opencv2/gpu/device/limits.hpp" #include "opencv2/gpu/device/saturate_cast.hpp" +#include "opencv2/gpu/device/simd_functions.hpp" using namespace cv::gpu; using namespace cv::gpu::device; @@ -154,170 +155,28 @@ namespace arithm namespace arithm { - template struct VAdd4; - template <> struct VAdd4 : binary_function + struct VAdd4 : binary_function { __device__ __forceinline__ uint operator ()(uint a, uint b) const { - uint res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vadd4.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vadd.u32.u32.u32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.u32.u32.u32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.u32.u32.u32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.u32.u32.u32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VAdd4() {} - __device__ __forceinline__ VAdd4(const VAdd4& other) {} - }; - template <> struct VAdd4 : binary_function - { - __device__ __forceinline__ uint operator ()(int a, int b) const - { - uint res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vadd4.u32.s32.s32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vadd.u32.s32.s32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.u32.s32.s32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.u32.s32.s32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.u32.s32.s32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; + return vadd4(a, b); } __device__ __forceinline__ VAdd4() {} - __device__ __forceinline__ VAdd4(const VAdd4& other) {} - }; - template <> struct VAdd4 : binary_function - { - __device__ __forceinline__ int operator ()(uint a, uint b) const - { - int res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vadd4.s32.u32.u32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vadd.s32.u32.u32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.s32.u32.u32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.s32.u32.u32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.s32.u32.u32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VAdd4() {} - __device__ __forceinline__ VAdd4(const VAdd4& other) {} - }; - template <> struct VAdd4 : binary_function - { - __device__ __forceinline__ int operator ()(int a, int b) const - { - int res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vadd4.s32.s32.s32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vadd.s32.s32.s32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.s32.s32.s32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.s32.s32.s32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.s32.s32.s32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VAdd4() {} - __device__ __forceinline__ VAdd4(const VAdd4& other) {} + __device__ __forceinline__ VAdd4(const VAdd4& other) {} }; //////////////////////////////////// - template struct VAdd2; - template <> struct VAdd2 : binary_function + struct VAdd2 : binary_function { __device__ __forceinline__ uint operator ()(uint a, uint b) const { - uint res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vadd2.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vadd.u32.u32.u32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.u32.u32.u32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VAdd2() {} - __device__ __forceinline__ VAdd2(const VAdd2& other) {} - }; - template <> struct VAdd2 : binary_function - { - __device__ __forceinline__ int operator ()(uint a, uint b) const - { - int res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vadd2.s32.u32.u32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vadd.s32.u32.u32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.s32.u32.u32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VAdd2() {} - __device__ __forceinline__ VAdd2(const VAdd2& other) {} - }; - template <> struct VAdd2 : binary_function - { - __device__ __forceinline__ uint operator ()(int a, int b) const - { - uint res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vadd2.u32.s32.s32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vadd.u32.s32.s32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.u32.s32.s32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; + return vadd2(a, b); } __device__ __forceinline__ VAdd2() {} - __device__ __forceinline__ VAdd2(const VAdd2& other) {} - }; - template <> struct VAdd2 : binary_function - { - __device__ __forceinline__ int operator ()(int a, int b) const - { - int res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vadd2.s32.s32.s32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vadd.s32.s32.s32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vadd.s32.s32.s32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VAdd2() {} - __device__ __forceinline__ VAdd2(const VAdd2& other) {} + __device__ __forceinline__ VAdd2(const VAdd2& other) {} }; //////////////////////////////////// @@ -336,13 +195,13 @@ namespace arithm namespace cv { namespace gpu { namespace device { - template struct TransformFunctorTraits< arithm::VAdd4 > : arithm::ArithmFuncTraits + template <> struct TransformFunctorTraits< arithm::VAdd4 > : arithm::ArithmFuncTraits { }; //////////////////////////////////// - template struct TransformFunctorTraits< arithm::VAdd2 > : arithm::ArithmFuncTraits + template <> struct TransformFunctorTraits< arithm::VAdd2 > : arithm::ArithmFuncTraits { }; @@ -355,28 +214,16 @@ namespace cv { namespace gpu { namespace device namespace arithm { - template - void vadd4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream) + void addMat_v4(PtrStepSz src1, PtrStepSz src2, PtrStepSz dst, cudaStream_t stream) { - transform((PtrStepSz) src1, (PtrStepSz) src2, (PtrStepSz) dst, VAdd4(), WithOutMask(), stream); + transform(src1, src2, dst, VAdd4(), WithOutMask(), stream); } - template void vadd4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vadd4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vadd4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vadd4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - - template - void vadd2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream) + void addMat_v2(PtrStepSz src1, PtrStepSz src2, PtrStepSz dst, cudaStream_t stream) { - transform((PtrStepSz) src1, (PtrStepSz) src2, (PtrStepSz) dst, VAdd2(), WithOutMask(), stream); + transform(src1, src2, dst, VAdd2(), WithOutMask(), stream); } - template void vadd2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vadd2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vadd2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vadd2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void addMat(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream) { @@ -543,170 +390,28 @@ namespace arithm namespace arithm { - template struct VSub4; - template <> struct VSub4 : binary_function + struct VSub4 : binary_function { __device__ __forceinline__ uint operator ()(uint a, uint b) const { - uint res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vsub4.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vsub.u32.u32.u32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.u32.u32.u32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.u32.u32.u32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.u32.u32.u32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VSub4() {} - __device__ __forceinline__ VSub4(const VSub4& other) {} - }; - template <> struct VSub4 : binary_function - { - __device__ __forceinline__ uint operator ()(int a, int b) const - { - uint res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vsub4.u32.s32.s32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vsub.u32.s32.s32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.u32.s32.s32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.u32.s32.s32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.u32.s32.s32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VSub4() {} - __device__ __forceinline__ VSub4(const VSub4& other) {} - }; - template <> struct VSub4 : binary_function - { - __device__ __forceinline__ int operator ()(uint a, uint b) const - { - int res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vsub4.s32.u32.u32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vsub.s32.u32.u32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.s32.u32.u32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.s32.u32.u32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.s32.u32.u32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; + return vsub4(a, b); } __device__ __forceinline__ VSub4() {} - __device__ __forceinline__ VSub4(const VSub4& other) {} - }; - template <> struct VSub4 : binary_function - { - __device__ __forceinline__ int operator ()(int a, int b) const - { - int res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vsub4.s32.s32.s32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vsub.s32.s32.s32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.s32.s32.s32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.s32.s32.s32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.s32.s32.s32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VSub4() {} - __device__ __forceinline__ VSub4(const VSub4& other) {} + __device__ __forceinline__ VSub4(const VSub4& other) {} }; //////////////////////////////////// - template struct VSub2; - template <> struct VSub2 : binary_function + struct VSub2 : binary_function { __device__ __forceinline__ uint operator ()(uint a, uint b) const { - uint res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vsub2.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vsub.u32.u32.u32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.u32.u32.u32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VSub2() {} - __device__ __forceinline__ VSub2(const VSub2& other) {} - }; - template <> struct VSub2 : binary_function - { - __device__ __forceinline__ int operator ()(uint a, uint b) const - { - int res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vsub2.s32.u32.u32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vsub.s32.u32.u32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.s32.u32.u32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VSub2() {} - __device__ __forceinline__ VSub2(const VSub2& other) {} - }; - template <> struct VSub2 : binary_function - { - __device__ __forceinline__ uint operator ()(int a, int b) const - { - uint res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vsub2.u32.s32.s32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vsub.u32.s32.s32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.u32.s32.s32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VSub2() {} - __device__ __forceinline__ VSub2(const VSub2& other) {} - }; - template <> struct VSub2 : binary_function - { - __device__ __forceinline__ int operator ()(int a, int b) const - { - int res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vsub2.s32.s32.s32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vsub.s32.s32.s32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vsub.s32.s32.s32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; + return vsub2(a, b); } __device__ __forceinline__ VSub2() {} - __device__ __forceinline__ VSub2(const VSub2& other) {} + __device__ __forceinline__ VSub2(const VSub2& other) {} }; //////////////////////////////////// @@ -725,13 +430,13 @@ namespace arithm namespace cv { namespace gpu { namespace device { - template struct TransformFunctorTraits< arithm::VSub4 > : arithm::ArithmFuncTraits + template <> struct TransformFunctorTraits< arithm::VSub4 > : arithm::ArithmFuncTraits { }; //////////////////////////////////// - template struct TransformFunctorTraits< arithm::VSub2 > : arithm::ArithmFuncTraits + template <> struct TransformFunctorTraits< arithm::VSub2 > : arithm::ArithmFuncTraits { }; @@ -744,28 +449,16 @@ namespace cv { namespace gpu { namespace device namespace arithm { - template - void vsub4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream) + void subMat_v4(PtrStepSz src1, PtrStepSz src2, PtrStepSz dst, cudaStream_t stream) { - transform((PtrStepSz) src1, (PtrStepSz) src2, (PtrStepSz) dst, VSub4(), WithOutMask(), stream); + transform(src1, src2, dst, VSub4(), WithOutMask(), stream); } - template void vsub4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vsub4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vsub4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vsub4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - - template - void vsub2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream) + void subMat_v2(PtrStepSz src1, PtrStepSz src2, PtrStepSz dst, cudaStream_t stream) { - transform((PtrStepSz) src1, (PtrStepSz) src2, (PtrStepSz) dst, VSub2(), WithOutMask(), stream); + transform(src1, src2, dst, VSub2(), WithOutMask(), stream); } - template void vsub2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vsub2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vsub2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vsub2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void subMat(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream) { @@ -1496,90 +1189,28 @@ namespace arithm namespace arithm { - template struct VAbsDiff4; - template <> struct VAbsDiff4 : binary_function + struct VAbsDiff4 : binary_function { __device__ __forceinline__ uint operator ()(uint a, uint b) const { - uint res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vabsdiff4.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vabsdiff.u32.u32.u32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vabsdiff.u32.u32.u32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vabsdiff.u32.u32.u32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vabsdiff.u32.u32.u32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; + return vabsdiff4(a, b); } __device__ __forceinline__ VAbsDiff4() {} - __device__ __forceinline__ VAbsDiff4(const VAbsDiff4& other) {} - }; - template <> struct VAbsDiff4 : binary_function - { - __device__ __forceinline__ int operator ()(int a, int b) const - { - int res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vabsdiff4.s32.s32.s32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vabsdiff.s32.s32.s32.sat %0.b0, %1.b0, %2.b0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vabsdiff.s32.s32.s32.sat %0.b1, %1.b1, %2.b1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vabsdiff.s32.s32.s32.sat %0.b2, %1.b2, %2.b2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vabsdiff.s32.s32.s32.sat %0.b3, %1.b3, %2.b3, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VAbsDiff4() {} - __device__ __forceinline__ VAbsDiff4(const VAbsDiff4& other) {} + __device__ __forceinline__ VAbsDiff4(const VAbsDiff4& other) {} }; //////////////////////////////////// - template struct VAbsDiff2; - template <> struct VAbsDiff2 : binary_function + struct VAbsDiff2 : binary_function { __device__ __forceinline__ uint operator ()(uint a, uint b) const { - uint res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vabsdiff2.u32.u32.u32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vabsdiff.u32.u32.u32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vabsdiff.u32.u32.u32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; - } - - __device__ __forceinline__ VAbsDiff2() {} - __device__ __forceinline__ VAbsDiff2(const VAbsDiff2& other) {} - }; - template <> struct VAbsDiff2 : binary_function - { - __device__ __forceinline__ int operator ()(int a, int b) const - { - int res = 0; - - #if __CUDA_ARCH__ >= 300 - asm("vabsdiff2.s32.s32.s32.sat %0, %1, %2, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #elif __CUDA_ARCH__ >= 200 - asm("vabsdiff.s32.s32.s32.sat %0.h0, %1.h0, %2.h0, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - asm("vabsdiff.s32.s32.s32.sat %0.h1, %1.h1, %2.h1, %3;" : "=r"(res) : "r"(a), "r"(b), "r"(res)); - #endif - - return res; + return vabsdiff2(a, b); } __device__ __forceinline__ VAbsDiff2() {} - __device__ __forceinline__ VAbsDiff2(const VAbsDiff2& other) {} + __device__ __forceinline__ VAbsDiff2(const VAbsDiff2& other) {} }; //////////////////////////////////// @@ -1611,13 +1242,13 @@ namespace arithm namespace cv { namespace gpu { namespace device { - template struct TransformFunctorTraits< arithm::VAbsDiff4 > : arithm::ArithmFuncTraits + template <> struct TransformFunctorTraits< arithm::VAbsDiff4 > : arithm::ArithmFuncTraits { }; //////////////////////////////////// - template struct TransformFunctorTraits< arithm::VAbsDiff2 > : arithm::ArithmFuncTraits + template <> struct TransformFunctorTraits< arithm::VAbsDiff2 > : arithm::ArithmFuncTraits { }; @@ -1630,24 +1261,16 @@ namespace cv { namespace gpu { namespace device namespace arithm { - template - void vabsDiff4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream) + void absDiffMat_v4(PtrStepSz src1, PtrStepSz src2, PtrStepSz dst, cudaStream_t stream) { - transform((PtrStepSz) src1, (PtrStepSz) src2, (PtrStepSz) dst, VAbsDiff4(), WithOutMask(), stream); + transform(src1, src2, dst, VAbsDiff4(), WithOutMask(), stream); } - template void vabsDiff4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vabsDiff4(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - - template - void vabsDiff2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream) + void absDiffMat_v2(PtrStepSz src1, PtrStepSz src2, PtrStepSz dst, cudaStream_t stream) { - transform((PtrStepSz) src1, (PtrStepSz) src2, (PtrStepSz) dst, VAbsDiff2(), WithOutMask(), stream); + transform(src1, src2, dst, VAbsDiff2(), WithOutMask(), stream); } - template void vabsDiff2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void vabsDiff2(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream); - template void absDiffMat(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, cudaStream_t stream) { @@ -1877,6 +1500,49 @@ namespace arithm namespace arithm { + struct VCmpEq4 : binary_function + { + __device__ __forceinline__ uint operator ()(uint a, uint b) const + { + return vcmpeq4(a, b); + } + + __device__ __forceinline__ VCmpEq4() {} + __device__ __forceinline__ VCmpEq4(const VCmpEq4& other) {} + }; + struct VCmpNe4 : binary_function + { + __device__ __forceinline__ uint operator ()(uint a, uint b) const + { + return vcmpne4(a, b); + } + + __device__ __forceinline__ VCmpNe4() {} + __device__ __forceinline__ VCmpNe4(const VCmpNe4& other) {} + }; + struct VCmpLt4 : binary_function + { + __device__ __forceinline__ uint operator ()(uint a, uint b) const + { + return vcmplt4(a, b); + } + + __device__ __forceinline__ VCmpLt4() {} + __device__ __forceinline__ VCmpLt4(const VCmpLt4& other) {} + }; + struct VCmpLe4 : binary_function + { + __device__ __forceinline__ uint operator ()(uint a, uint b) const + { + return vcmple4(a, b); + } + + __device__ __forceinline__ VCmpLe4() {} + __device__ __forceinline__ VCmpLe4(const VCmpLe4& other) {} + }; + + //////////////////////////////////// + template struct Cmp : binary_function { @@ -1890,6 +1556,21 @@ namespace arithm namespace cv { namespace gpu { namespace device { + template <> struct TransformFunctorTraits< arithm::VCmpEq4 > : arithm::ArithmFuncTraits + { + }; + template <> struct TransformFunctorTraits< arithm::VCmpNe4 > : arithm::ArithmFuncTraits + { + }; + template <> struct TransformFunctorTraits< arithm::VCmpLt4 > : arithm::ArithmFuncTraits + { + }; + template <> struct TransformFunctorTraits< arithm::VCmpLe4 > : arithm::ArithmFuncTraits + { + }; + + //////////////////////////////////// + template struct TransformFunctorTraits< arithm::Cmp > : arithm::ArithmFuncTraits { }; @@ -1897,6 +1578,23 @@ namespace cv { namespace gpu { namespace device namespace arithm { + void cmpMatEq_v4(PtrStepSz src1, PtrStepSz src2, PtrStepSz dst, cudaStream_t stream) + { + transform(src1, src2, dst, VCmpEq4(), WithOutMask(), stream); + } + void cmpMatNe_v4(PtrStepSz src1, PtrStepSz src2, PtrStepSz dst, cudaStream_t stream) + { + transform(src1, src2, dst, VCmpNe4(), WithOutMask(), stream); + } + void cmpMatLt_v4(PtrStepSz src1, PtrStepSz src2, PtrStepSz dst, cudaStream_t stream) + { + transform(src1, src2, dst, VCmpLt4(), WithOutMask(), stream); + } + void cmpMatLe_v4(PtrStepSz src1, PtrStepSz src2, PtrStepSz dst, cudaStream_t stream) + { + transform(src1, src2, dst, VCmpLe4(), WithOutMask(), stream); + } + template