| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 | 
							- /*
 
- 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
 
-                        (3-clause BSD License)
 
- Copyright (C) 2013, OpenCV Foundation, 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:
 
-   * 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 names of the copyright holders nor the names of the 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 copyright holders 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_OPTFLOW_HPP__
 
- #define __OPENCV_OPTFLOW_HPP__
 
- #include "opencv2/core.hpp"
 
- #include "opencv2/video.hpp"
 
- /**
 
- @defgroup optflow Optical Flow Algorithms
 
- Dense optical flow algorithms compute motion for each point:
 
- - cv::optflow::calcOpticalFlowSF
 
- - cv::optflow::createOptFlow_DeepFlow
 
- Motion templates is alternative technique for detecting motion and computing its direction.
 
- See samples/motempl.py.
 
- - cv::motempl::updateMotionHistory
 
- - cv::motempl::calcMotionGradient
 
- - cv::motempl::calcGlobalOrientation
 
- - cv::motempl::segmentMotion
 
- Functions reading and writing .flo files in "Middlebury" format, see: <http://vision.middlebury.edu/flow/code/flow-code/README.txt>
 
- - cv::optflow::readOpticalFlow
 
- - cv::optflow::writeOpticalFlow
 
-  */
 
- #include "opencv2/optflow/pcaflow.hpp"
 
- #include "opencv2/optflow/sparse_matching_gpc.hpp"
 
- namespace cv
 
- {
 
- namespace optflow
 
- {
 
-     
 
- //! @addtogroup optflow
 
- //! @{
 
- /** @overload */
 
- CV_EXPORTS_W void calcOpticalFlowSF( InputArray from, InputArray to, OutputArray flow,
 
-                                      int layers, int averaging_block_size, int max_flow);
 
- /** @brief Calculate an optical flow using "SimpleFlow" algorithm.
 
- @param from First 8-bit 3-channel image.
 
- @param to Second 8-bit 3-channel image of the same size as prev
 
- @param flow computed flow image that has the same size as prev and type CV_32FC2
 
- @param layers Number of layers
 
- @param averaging_block_size Size of block through which we sum up when calculate cost function
 
- for pixel
 
- @param max_flow maximal flow that we search at each level
 
- @param sigma_dist vector smooth spatial sigma parameter
 
- @param sigma_color vector smooth color sigma parameter
 
- @param postprocess_window window size for postprocess cross bilateral filter
 
- @param sigma_dist_fix spatial sigma for postprocess cross bilateralf filter
 
- @param sigma_color_fix color sigma for postprocess cross bilateral filter
 
- @param occ_thr threshold for detecting occlusions
 
- @param upscale_averaging_radius window size for bilateral upscale operation
 
- @param upscale_sigma_dist spatial sigma for bilateral upscale operation
 
- @param upscale_sigma_color color sigma for bilateral upscale operation
 
- @param speed_up_thr threshold to detect point with irregular flow - where flow should be
 
- recalculated after upscale
 
- See @cite Tao2012 . And site of project - <http://graphics.berkeley.edu/papers/Tao-SAN-2012-05/>.
 
- @note
 
-    -   An example using the simpleFlow algorithm can be found at samples/simpleflow_demo.cpp
 
-  */
 
- CV_EXPORTS_W void calcOpticalFlowSF( InputArray from, InputArray to, OutputArray flow, int layers,
 
-                                      int averaging_block_size, int max_flow,
 
-                                      double sigma_dist, double sigma_color, int postprocess_window,
 
-                                      double sigma_dist_fix, double sigma_color_fix, double occ_thr,
 
-                                      int upscale_averaging_radius, double upscale_sigma_dist,
 
-                                      double upscale_sigma_color, double speed_up_thr );
 
- /** @brief Fast dense optical flow based on PyrLK sparse matches interpolation.
 
- @param from first 8-bit 3-channel or 1-channel image.
 
- @param to  second 8-bit 3-channel or 1-channel image of the same size as from
 
- @param flow computed flow image that has the same size as from and CV_32FC2 type
 
- @param grid_step stride used in sparse match computation. Lower values usually
 
-        result in higher quality but slow down the algorithm.
 
- @param k number of nearest-neighbor matches considered, when fitting a locally affine
 
-        model. Lower values can make the algorithm noticeably faster at the cost of
 
-        some quality degradation.
 
- @param sigma parameter defining how fast the weights decrease in the locally-weighted affine
 
-        fitting. Higher values can help preserve fine details, lower values can help to get rid
 
-        of the noise in the output flow.
 
- @param use_post_proc defines whether the ximgproc::fastGlobalSmootherFilter() is used
 
-        for post-processing after interpolation
 
- @param fgs_lambda see the respective parameter of the ximgproc::fastGlobalSmootherFilter()
 
- @param fgs_sigma  see the respective parameter of the ximgproc::fastGlobalSmootherFilter()
 
-  */
 
- CV_EXPORTS_W void calcOpticalFlowSparseToDense ( InputArray from, InputArray to, OutputArray flow,
 
-                                                  int grid_step = 8, int k = 128, float sigma = 0.05f,
 
-                                                  bool use_post_proc = true, float fgs_lambda = 500.0f,
 
-                                                  float fgs_sigma = 1.5f );
 
- /** @brief Read a .flo file
 
- @param path Path to the file to be loaded
 
- The function readOpticalFlow loads a flow field from a file and returns it as a single matrix.
 
- Resulting Mat has a type CV_32FC2 - floating-point, 2-channel. First channel corresponds to the
 
- flow in the horizontal direction (u), second - vertical (v).
 
-  */
 
- CV_EXPORTS_W Mat readOpticalFlow( const String& path );
 
- /** @brief Write a .flo to disk
 
- @param path Path to the file to be written
 
- @param flow Flow field to be stored
 
- The function stores a flow field in a file, returns true on success, false otherwise.
 
- The flow field must be a 2-channel, floating-point matrix (CV_32FC2). First channel corresponds
 
- to the flow in the horizontal direction (u), second - vertical (v).
 
-  */
 
- CV_EXPORTS_W bool writeOpticalFlow( const String& path, InputArray flow );
 
- /** @brief Variational optical flow refinement
 
- This class implements variational refinement of the input flow field, i.e.
 
- it uses input flow to initialize the minimization of the following functional:
 
- \f$E(U) = \int_{\Omega} \delta \Psi(E_I) + \gamma \Psi(E_G) + \alpha \Psi(E_S) \f$,
 
- where \f$E_I,E_G,E_S\f$ are color constancy, gradient constancy and smoothness terms
 
- respectively. \f$\Psi(s^2)=\sqrt{s^2+\epsilon^2}\f$ is a robust penalizer to limit the
 
- influence of outliers. A complete formulation and a description of the minimization
 
- procedure can be found in @cite Brox2004
 
- */
 
- class CV_EXPORTS_W VariationalRefinement : public DenseOpticalFlow
 
- {
 
- public:
 
-     /** @brief @ref calc function overload to handle separate horizontal (u) and vertical (v) flow components
 
-     (to avoid extra splits/merges) */
 
-     CV_WRAP virtual void calcUV(InputArray I0, InputArray I1, InputOutputArray flow_u, InputOutputArray flow_v) = 0;
 
-     /** @brief Number of outer (fixed-point) iterations in the minimization procedure.
 
-     @see setFixedPointIterations */
 
-     CV_WRAP virtual int getFixedPointIterations() const = 0;
 
-     /** @copybrief getFixedPointIterations @see getFixedPointIterations */
 
-     CV_WRAP virtual void setFixedPointIterations(int val) = 0;
 
-     /** @brief Number of inner successive over-relaxation (SOR) iterations
 
-         in the minimization procedure to solve the respective linear system.
 
-     @see setSorIterations */
 
-     CV_WRAP virtual int getSorIterations() const = 0;
 
-     /** @copybrief getSorIterations @see getSorIterations */
 
-     CV_WRAP virtual void setSorIterations(int val) = 0;
 
-     /** @brief Relaxation factor in SOR
 
-     @see setOmega */
 
-     CV_WRAP virtual float getOmega() const = 0;
 
-     /** @copybrief getOmega @see getOmega */
 
-     CV_WRAP virtual void setOmega(float val) = 0;
 
-     /** @brief Weight of the smoothness term
 
-     @see setAlpha */
 
-     CV_WRAP virtual float getAlpha() const = 0;
 
-     /** @copybrief getAlpha @see getAlpha */
 
-     CV_WRAP virtual void setAlpha(float val) = 0;
 
-     /** @brief Weight of the color constancy term
 
-     @see setDelta */
 
-     CV_WRAP virtual float getDelta() const = 0;
 
-     /** @copybrief getDelta @see getDelta */
 
-     CV_WRAP virtual void setDelta(float val) = 0;
 
-     /** @brief Weight of the gradient constancy term
 
-     @see setGamma */
 
-     CV_WRAP virtual float getGamma() const = 0;
 
-     /** @copybrief getGamma @see getGamma */
 
-     CV_WRAP virtual void setGamma(float val) = 0;
 
- };
 
- /** @brief Creates an instance of VariationalRefinement
 
- */
 
- CV_EXPORTS_W Ptr<VariationalRefinement> createVariationalFlowRefinement();
 
- /** @brief DeepFlow optical flow algorithm implementation.
 
- The class implements the DeepFlow optical flow algorithm described in @cite Weinzaepfel2013 . See
 
- also <http://lear.inrialpes.fr/src/deepmatching/> .
 
- Parameters - class fields - that may be modified after creating a class instance:
 
- -   member float alpha
 
- Smoothness assumption weight
 
- -   member float delta
 
- Color constancy assumption weight
 
- -   member float gamma
 
- Gradient constancy weight
 
- -   member float sigma
 
- Gaussian smoothing parameter
 
- -   member int minSize
 
- Minimal dimension of an image in the pyramid (next, smaller images in the pyramid are generated
 
- until one of the dimensions reaches this size)
 
- -   member float downscaleFactor
 
- Scaling factor in the image pyramid (must be \< 1)
 
- -   member int fixedPointIterations
 
- How many iterations on each level of the pyramid
 
- -   member int sorIterations
 
- Iterations of Succesive Over-Relaxation (solver)
 
- -   member float omega
 
- Relaxation factor in SOR
 
-  */
 
- CV_EXPORTS_W Ptr<DenseOpticalFlow> createOptFlow_DeepFlow();
 
- //! Additional interface to the SimpleFlow algorithm - calcOpticalFlowSF()
 
- CV_EXPORTS_W Ptr<DenseOpticalFlow> createOptFlow_SimpleFlow();
 
- //! Additional interface to the Farneback's algorithm - calcOpticalFlowFarneback()
 
- CV_EXPORTS_W Ptr<DenseOpticalFlow> createOptFlow_Farneback();
 
- //! Additional interface to the SparseToDenseFlow algorithm - calcOpticalFlowSparseToDense()
 
- CV_EXPORTS_W Ptr<DenseOpticalFlow> createOptFlow_SparseToDense();
 
- /** @brief DIS optical flow algorithm.
 
- This class implements the Dense Inverse Search (DIS) optical flow algorithm. More
 
- details about the algorithm can be found at @cite Kroeger2016 . Includes three presets with preselected
 
- parameters to provide reasonable trade-off between speed and quality. However, even the slowest preset is
 
- still relatively fast, use DeepFlow if you need better quality and don't care about speed.
 
- This implementation includes several additional features compared to the algorithm described in the paper,
 
- including spatial propagation of flow vectors (@ref getUseSpatialPropagation), as well as an option to
 
- utilize an initial flow approximation passed to @ref calc (which is, essentially, temporal propagation,
 
- if the previous frame's flow field is passed).
 
- */
 
- class CV_EXPORTS_W DISOpticalFlow : public DenseOpticalFlow
 
- {
 
- public:
 
-     enum
 
-     {
 
-         PRESET_ULTRAFAST = 0,
 
-         PRESET_FAST = 1,
 
-         PRESET_MEDIUM = 2
 
-     };
 
-     /** @brief Finest level of the Gaussian pyramid on which the flow is computed (zero level
 
-         corresponds to the original image resolution). The final flow is obtained by bilinear upscaling.
 
-         @see setFinestScale */
 
-     CV_WRAP virtual int getFinestScale() const = 0;
 
-     /** @copybrief getFinestScale @see getFinestScale */
 
-     CV_WRAP virtual void setFinestScale(int val) = 0;
 
-     /** @brief Size of an image patch for matching (in pixels). Normally, default 8x8 patches work well
 
-         enough in most cases.
 
-         @see setPatchSize */
 
-     CV_WRAP virtual int getPatchSize() const = 0;
 
-     /** @copybrief getPatchSize @see getPatchSize */
 
-     CV_WRAP virtual void setPatchSize(int val) = 0;
 
-     /** @brief Stride between neighbor patches. Must be less than patch size. Lower values correspond
 
-         to higher flow quality.
 
-         @see setPatchStride */
 
-     CV_WRAP virtual int getPatchStride() const = 0;
 
-     /** @copybrief getPatchStride @see getPatchStride */
 
-     CV_WRAP virtual void setPatchStride(int val) = 0;
 
-     /** @brief Maximum number of gradient descent iterations in the patch inverse search stage. Higher values
 
-         may improve quality in some cases.
 
-         @see setGradientDescentIterations */
 
-     CV_WRAP virtual int getGradientDescentIterations() const = 0;
 
-     /** @copybrief getGradientDescentIterations @see getGradientDescentIterations */
 
-     CV_WRAP virtual void setGradientDescentIterations(int val) = 0;
 
-     /** @brief Number of fixed point iterations of variational refinement per scale. Set to zero to
 
-         disable variational refinement completely. Higher values will typically result in more smooth and
 
-         high-quality flow.
 
-     @see setGradientDescentIterations */
 
-     CV_WRAP virtual int getVariationalRefinementIterations() const = 0;
 
-     /** @copybrief getGradientDescentIterations @see getGradientDescentIterations */
 
-     CV_WRAP virtual void setVariationalRefinementIterations(int val) = 0;
 
-     /** @brief Weight of the smoothness term
 
-     @see setVariationalRefinementAlpha */
 
-     CV_WRAP virtual float getVariationalRefinementAlpha() const = 0;
 
-     /** @copybrief getVariationalRefinementAlpha @see getVariationalRefinementAlpha */
 
-     CV_WRAP virtual void setVariationalRefinementAlpha(float val) = 0;
 
-     /** @brief Weight of the color constancy term
 
-     @see setVariationalRefinementDelta */
 
-     CV_WRAP virtual float getVariationalRefinementDelta() const = 0;
 
-     /** @copybrief getVariationalRefinementDelta @see getVariationalRefinementDelta */
 
-     CV_WRAP virtual void setVariationalRefinementDelta(float val) = 0;
 
-     /** @brief Weight of the gradient constancy term
 
-     @see setVariationalRefinementGamma */
 
-     CV_WRAP virtual float getVariationalRefinementGamma() const = 0;
 
-     /** @copybrief getVariationalRefinementGamma @see getVariationalRefinementGamma */
 
-     CV_WRAP virtual void setVariationalRefinementGamma(float val) = 0;
 
-     /** @brief Whether to use mean-normalization of patches when computing patch distance. It is turned on
 
-         by default as it typically provides a noticeable quality boost because of increased robustness to
 
-         illumination variations. Turn it off if you are certain that your sequence doesn't contain any changes
 
-         in illumination.
 
-     @see setUseMeanNormalization */
 
-     CV_WRAP virtual bool getUseMeanNormalization() const = 0;
 
-     /** @copybrief getUseMeanNormalization @see getUseMeanNormalization */
 
-     CV_WRAP virtual void setUseMeanNormalization(bool val) = 0;
 
-     /** @brief Whether to use spatial propagation of good optical flow vectors. This option is turned on by
 
-         default, as it tends to work better on average and can sometimes help recover from major errors
 
-         introduced by the coarse-to-fine scheme employed by the DIS optical flow algorithm. Turning this
 
-         option off can make the output flow field a bit smoother, however.
 
-     @see setUseSpatialPropagation */
 
-     CV_WRAP virtual bool getUseSpatialPropagation() const = 0;
 
-     /** @copybrief getUseSpatialPropagation @see getUseSpatialPropagation */
 
-     CV_WRAP virtual void setUseSpatialPropagation(bool val) = 0;
 
- };
 
- /** @brief Creates an instance of DISOpticalFlow
 
- @param preset one of PRESET_ULTRAFAST, PRESET_FAST and PRESET_MEDIUM
 
- */
 
- CV_EXPORTS_W Ptr<DISOpticalFlow> createOptFlow_DIS(int preset = DISOpticalFlow::PRESET_FAST);
 
- //! @}
 
- } //optflow
 
- }
 
- #include "opencv2/optflow/motempl.hpp"
 
- #endif
 
 
  |