Home | History | Annotate | Download | only in videostab
      1 /*M///////////////////////////////////////////////////////////////////////////////////////
      2 //
      3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
      4 //
      5 //  By downloading, copying, installing or using the software you agree to this license.
      6 //  If you do not agree to this license, do not download, install,
      7 //  copy or use the software.
      8 //
      9 //
     10 //                           License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
     14 // Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
     15 // Third party copyrights are property of their respective owners.
     16 //
     17 // Redistribution and use in source and binary forms, with or without modification,
     18 // are permitted provided that the following conditions are met:
     19 //
     20 //   * Redistribution's of source code must retain the above copyright notice,
     21 //     this list of conditions and the following disclaimer.
     22 //
     23 //   * Redistribution's in binary form must reproduce the above copyright notice,
     24 //     this list of conditions and the following disclaimer in the documentation
     25 //     and/or other materials provided with the distribution.
     26 //
     27 //   * The name of the copyright holders may not be used to endorse or promote products
     28 //     derived from this software without specific prior written permission.
     29 //
     30 // This software is provided by the copyright holders and contributors "as is" and
     31 // any express or implied warranties, including, but not limited to, the implied
     32 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     33 // In no event shall the Intel Corporation or contributors be liable for any direct,
     34 // indirect, incidental, special, exemplary, or consequential damages
     35 // (including, but not limited to, procurement of substitute goods or services;
     36 // loss of use, data, or profits; or business interruption) however caused
     37 // and on any theory of liability, whether in contract, strict liability,
     38 // or tort (including negligence or otherwise) arising in any way out of
     39 // the use of this software, even if advised of the possibility of such damage.
     40 //
     41 //M*/
     42 
     43 #ifndef __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__
     44 #define __OPENCV_VIDEOSTAB_OPTICAL_FLOW_HPP__
     45 
     46 #include "opencv2/core.hpp"
     47 #include "opencv2/opencv_modules.hpp"
     48 
     49 #ifdef HAVE_OPENCV_CUDAOPTFLOW
     50   #include "opencv2/cudaoptflow.hpp"
     51 #endif
     52 
     53 namespace cv
     54 {
     55 namespace videostab
     56 {
     57 
     58 //! @addtogroup videostab
     59 //! @{
     60 
     61 class CV_EXPORTS ISparseOptFlowEstimator
     62 {
     63 public:
     64     virtual ~ISparseOptFlowEstimator() {}
     65     virtual void run(
     66             InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,
     67             OutputArray status, OutputArray errors) = 0;
     68 };
     69 
     70 class CV_EXPORTS IDenseOptFlowEstimator
     71 {
     72 public:
     73     virtual ~IDenseOptFlowEstimator() {}
     74     virtual void run(
     75             InputArray frame0, InputArray frame1, InputOutputArray flowX, InputOutputArray flowY,
     76             OutputArray errors) = 0;
     77 };
     78 
     79 class CV_EXPORTS PyrLkOptFlowEstimatorBase
     80 {
     81 public:
     82     PyrLkOptFlowEstimatorBase() { setWinSize(Size(21, 21)); setMaxLevel(3); }
     83 
     84     virtual void setWinSize(Size val) { winSize_ = val; }
     85     virtual Size winSize() const { return winSize_; }
     86 
     87     virtual void setMaxLevel(int val) { maxLevel_ = val; }
     88     virtual int maxLevel() const { return maxLevel_; }
     89     virtual ~PyrLkOptFlowEstimatorBase() {}
     90 
     91 protected:
     92     Size winSize_;
     93     int maxLevel_;
     94 };
     95 
     96 class CV_EXPORTS SparsePyrLkOptFlowEstimator
     97         : public PyrLkOptFlowEstimatorBase, public ISparseOptFlowEstimator
     98 {
     99 public:
    100     virtual void run(
    101             InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,
    102             OutputArray status, OutputArray errors);
    103 };
    104 
    105 #ifdef HAVE_OPENCV_CUDAOPTFLOW
    106 
    107 class CV_EXPORTS SparsePyrLkOptFlowEstimatorGpu
    108         : public PyrLkOptFlowEstimatorBase, public ISparseOptFlowEstimator
    109 {
    110 public:
    111     SparsePyrLkOptFlowEstimatorGpu();
    112 
    113     virtual void run(
    114             InputArray frame0, InputArray frame1, InputArray points0, InputOutputArray points1,
    115             OutputArray status, OutputArray errors);
    116 
    117     void run(const cuda::GpuMat &frame0, const cuda::GpuMat &frame1, const cuda::GpuMat &points0, cuda::GpuMat &points1,
    118              cuda::GpuMat &status, cuda::GpuMat &errors);
    119 
    120     void run(const cuda::GpuMat &frame0, const cuda::GpuMat &frame1, const cuda::GpuMat &points0, cuda::GpuMat &points1,
    121              cuda::GpuMat &status);
    122 
    123 private:
    124     Ptr<cuda::SparsePyrLKOpticalFlow> optFlowEstimator_;
    125     cuda::GpuMat frame0_, frame1_, points0_, points1_, status_, errors_;
    126 };
    127 
    128 class CV_EXPORTS DensePyrLkOptFlowEstimatorGpu
    129         : public PyrLkOptFlowEstimatorBase, public IDenseOptFlowEstimator
    130 {
    131 public:
    132     DensePyrLkOptFlowEstimatorGpu();
    133 
    134     virtual void run(
    135             InputArray frame0, InputArray frame1, InputOutputArray flowX, InputOutputArray flowY,
    136             OutputArray errors);
    137 
    138 private:
    139     Ptr<cuda::DensePyrLKOpticalFlow> optFlowEstimator_;
    140     cuda::GpuMat frame0_, frame1_, flowX_, flowY_, errors_;
    141 };
    142 
    143 #endif
    144 
    145 //! @}
    146 
    147 } // namespace videostab
    148 } // namespace cv
    149 
    150 #endif
    151