OpenCV  4.1.0
Open Source Computer Vision
Public Member Functions | Static Public Member Functions | List of all members
cv::optflow::DenseRLOFOpticalFlow Class Referenceabstract

Fast dense optical flow computation based on robust local optical flow (RLOF) algorithms and sparse-to-dense interpolation scheme. More...

#include <opencv2/optflow/rlofflow.hpp>

Inheritance diagram for cv::optflow::DenseRLOFOpticalFlow:
cv::DenseOpticalFlow cv::Algorithm

Public Member Functions

virtual int getEPICK () const =0
 see ximgproc::EdgeAwareInterpolator() K value.
 
virtual float getEPICLambda () const =0
 see ximgproc::EdgeAwareInterpolator() lambda value.
 
virtual float getEPICSigma () const =0
 see ximgproc::EdgeAwareInterpolator() sigma value.
 
virtual float getFgsLambda () const =0
 see ximgproc::EdgeAwareInterpolator().
 
virtual float getFgsSigma () const =0
 see ximgproc::EdgeAwareInterpolator().
 
virtual float getForwardBackward () const =0
 
virtual Size getGridStep () const =0
 Size of the grid to spawn the motion vectors.
 
virtual InterpolationType getInterpolation () const =0
 
virtual Ptr
< RLOFOpticalFlowParameter
getRLOFOpticalFlowParameter () const =0
 
virtual bool getUsePostProc () const =0
 
virtual void setEPICK (int val)=0
 
virtual void setEPICLambda (float val)=0
 
virtual void setEPICSigma (float val)=0
 
virtual void setFgsLambda (float val)=0
 
virtual void setFgsSigma (float val)=0
 
virtual void setForwardBackward (float val)=0
 Threshold for the forward backward confidence check.
 
virtual void setGridStep (Size val)=0
 
virtual void setInterpolation (InterpolationType val)=0
 Interpolation used to compute the dense optical flow.
 
virtual void setRLOFOpticalFlowParameter (Ptr< RLOFOpticalFlowParameter > val)=0
 Configuration of the RLOF alogrithm.
 
virtual void setUsePostProc (bool val)=0
 enables ximgproc::fastGlobalSmootherFilter
 
- Public Member Functions inherited from cv::DenseOpticalFlow
virtual void calc (InputArray I0, InputArray I1, InputOutputArray flow)=0
 Calculates an optical flow.
 
virtual void collectGarbage ()=0
 Releases all inner buffers.
 
- Public Member Functions inherited from cv::Algorithm
 Algorithm ()
 
virtual ~Algorithm ()
 
virtual void clear ()
 Clears the algorithm state.
 
virtual bool empty () const
 Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read.
 
virtual String getDefaultName () const
 
virtual void read (const FileNode &fn)
 Reads algorithm parameters from a file storage.
 
virtual void save (const String &filename) const
 
virtual void write (FileStorage &fs) const
 Stores algorithm parameters in a file storage.
 
void write (const Ptr< FileStorage > &fs, const String &name=String()) const
 simplified API for language bindingsThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 

Static Public Member Functions

static Ptr< DenseRLOFOpticalFlowcreate (Ptr< RLOFOpticalFlowParameter > rlofParam=Ptr< RLOFOpticalFlowParameter >(), float forwardBackwardThreshold=1.f, Size gridStep=Size(6, 6), InterpolationType interp_type=InterpolationType::INTERP_EPIC, int epicK=128, float epicSigma=0.05f, float epicLambda=999.0f, bool use_post_proc=true, float fgsLambda=500.0f, float fgsSigma=1.5f)
 Creates instance of optflow::DenseRLOFOpticalFlow.
 

Additional Inherited Members

- Protected Member Functions inherited from cv::Algorithm
void writeFormat (FileStorage &fs) const
 

Detailed Description

Fast dense optical flow computation based on robust local optical flow (RLOF) algorithms and sparse-to-dense interpolation scheme.

The RLOF is a fast local optical flow approach similar to the pyramidal iterative Lucas-Kanade method as proposed byBouguet00. The implementation is derived from optflow::calcOpticalFlowPyrLK().

The sparse-to-dense interpolation scheme allows for fast computation of dense optical flow using RLOF (seeGeistert2016). For this scheme the following steps are applied:

  1. motion vector seeded at a regular sampled grid are computed. The sparsity of this grid can be configured with setGridStep
  2. (optinally) errornous motion vectors are filter based on the forward backward confidence. The threshold can be configured with setForwardBackward. The filter is only applied if the threshold >0 but than the runtime is doubled due to the estimation of the backward flow.
  3. Vector field interpolation is applied to the motion vector set to obtain a dense vector field.

For the RLOF configuration see optflow::RLOFOpticalFlowParameter for further details. Parameters have been described inSenst2012Senst2013Senst2014 andSenst2016.

Note
SIMD parallelization is only available when compiling with SSE4.1. If the grid size is set to (1,1) and the forward backward threshold <= 0 that the dense optical flow field is purely. computed with the RLOF.
See Also
optflow::calcOpticalFlowDenseRLOF(), optflow::RLOFOpticalFlowParameter

Member Function Documentation

static Ptr<DenseRLOFOpticalFlow> cv::optflow::DenseRLOFOpticalFlow::create ( Ptr< RLOFOpticalFlowParameter rlofParam = PtrRLOFOpticalFlowParameter >(),
float  forwardBackwardThreshold = 1.f,
Size  gridStep = Size(6, 6),
InterpolationType  interp_type = InterpolationType::INTERP_EPIC,
int  epicK = 128,
float  epicSigma = 0.05f,
float  epicLambda = 999.0f,
bool  use_post_proc = true,
float  fgsLambda = 500.0f,
float  fgsSigma = 1.5f 
)
static
Python:
retval=cv.optflow.DenseRLOFOpticalFlow_create([, rlofParam[, forwardBackwardThreshold[, gridStep[, interp_type[, epicK[, epicSigma[, epicLambda[, use_post_proc[, fgsLambda[, fgsSigma]]]]]]]]]])

Creates instance of optflow::DenseRLOFOpticalFlow.

Parameters
rlofParamsee optflow::RLOFOpticalFlowParameter
forwardBackwardThresholdsee setForwardBackward
gridStepsee setGridStep
interp_typesee setInterpolation
epicKsee setEPICK
epicSigmasee setEPICSigma
epicLambdasee setEPICLambda
use_post_procsee setUsePostProc
fgsLambdasee setFgsLambda
fgsSigmasee setFgsSigma
virtual int cv::optflow::DenseRLOFOpticalFlow::getEPICK ( ) const
pure virtual
Python:
retval=cv.optflow_DenseRLOFOpticalFlow.getEPICK()

see ximgproc::EdgeAwareInterpolator() K value.

K is a number of nearest-neighbor matches considered, when fitting a locally affine model. Usually it should be around 128. However, lower values would make the interpolation noticeably faster.

See Also
ximgproc::EdgeAwareInterpolator, setEPICK
virtual float cv::optflow::DenseRLOFOpticalFlow::getEPICLambda ( ) const
pure virtual
Python:
retval=cv.optflow_DenseRLOFOpticalFlow.getEPICLambda()

see ximgproc::EdgeAwareInterpolator() lambda value.

Lambda is a parameter defining the weight of the edge-aware term in geodesic distance, should be in the range of 0 to 1000.

See Also
ximgproc::EdgeAwareInterpolator, setEPICSigma
virtual float cv::optflow::DenseRLOFOpticalFlow::getEPICSigma ( ) const
pure virtual
Python:
retval=cv.optflow_DenseRLOFOpticalFlow.getEPICSigma()

see ximgproc::EdgeAwareInterpolator() sigma value.

Sigma is a 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 noise in the output flow.

See Also
ximgproc::EdgeAwareInterpolator, setEPICSigma
virtual float cv::optflow::DenseRLOFOpticalFlow::getFgsLambda ( ) const
pure virtual
Python:
retval=cv.optflow_DenseRLOFOpticalFlow.getFgsLambda()

see ximgproc::EdgeAwareInterpolator().

Sets the respective fastGlobalSmootherFilter() parameter.

See Also
ximgproc::EdgeAwareInterpolator, setFgsLambda
virtual float cv::optflow::DenseRLOFOpticalFlow::getFgsSigma ( ) const
pure virtual
Python:
retval=cv.optflow_DenseRLOFOpticalFlow.getFgsSigma()

see ximgproc::EdgeAwareInterpolator().

Sets the respective fastGlobalSmootherFilter() parameter.

See Also
ximgproc::EdgeAwareInterpolator, ximgproc::fastGlobalSmootherFilter, setFgsSigma
virtual float cv::optflow::DenseRLOFOpticalFlow::getForwardBackward ( ) const
pure virtual
Python:
retval=cv.optflow_DenseRLOFOpticalFlow.getForwardBackward()

Threshold for the forward backward confidence check.

See Also
setForwardBackward
virtual Size cv::optflow::DenseRLOFOpticalFlow::getGridStep ( ) const
pure virtual
Python:
retval=cv.optflow_DenseRLOFOpticalFlow.getGridStep()

Size of the grid to spawn the motion vectors.

For each grid point a motion vector is computed. Some motion vectors will be removed due to the forwatd backward threshold (if set >0). The rest will be the base of the vector field interpolation.

See Also
getForwardBackward, setGridStep
virtual InterpolationType cv::optflow::DenseRLOFOpticalFlow::getInterpolation ( ) const
pure virtual
Python:
retval=cv.optflow_DenseRLOFOpticalFlow.getInterpolation()

Interpolation used to compute the dense optical flow.

See Also
ximgproc::EdgeAwareInterpolator, setInterpolation
virtual Ptr<RLOFOpticalFlowParameter> cv::optflow::DenseRLOFOpticalFlow::getRLOFOpticalFlowParameter ( ) const
pure virtual
Python:
retval=cv.optflow_DenseRLOFOpticalFlow.getRLOFOpticalFlowParameter()

Configuration of the RLOF alogrithm.

See Also
optflow::RLOFOpticalFlowParameter, setRLOFOpticalFlowParameter
virtual bool cv::optflow::DenseRLOFOpticalFlow::getUsePostProc ( ) const
pure virtual
Python:
retval=cv.optflow_DenseRLOFOpticalFlow.getUsePostProc()
virtual void cv::optflow::DenseRLOFOpticalFlow::setEPICK ( int  val)
pure virtual
Python:
None=cv.optflow_DenseRLOFOpticalFlow.setEPICK(val)

see ximgproc::EdgeAwareInterpolator() K value.

See Also
ximgproc::EdgeAwareInterpolator, getEPICK
virtual void cv::optflow::DenseRLOFOpticalFlow::setEPICLambda ( float  val)
pure virtual
Python:
None=cv.optflow_DenseRLOFOpticalFlow.setEPICLambda(val)

see ximgproc::EdgeAwareInterpolator() lambda value.

See Also
ximgproc::EdgeAwareInterpolator, getEPICLambda
virtual void cv::optflow::DenseRLOFOpticalFlow::setEPICSigma ( float  val)
pure virtual
Python:
None=cv.optflow_DenseRLOFOpticalFlow.setEPICSigma(val)

see ximgproc::EdgeAwareInterpolator() sigma value.

See Also
ximgproc::EdgeAwareInterpolator, getEPICSigma
virtual void cv::optflow::DenseRLOFOpticalFlow::setFgsLambda ( float  val)
pure virtual
Python:
None=cv.optflow_DenseRLOFOpticalFlow.setFgsLambda(val)

see ximgproc::EdgeAwareInterpolator().

See Also
ximgproc::EdgeAwareInterpolator, ximgproc::fastGlobalSmootherFilter, getFgsLambda
virtual void cv::optflow::DenseRLOFOpticalFlow::setFgsSigma ( float  val)
pure virtual
Python:
None=cv.optflow_DenseRLOFOpticalFlow.setFgsSigma(val)

see ximgproc::EdgeAwareInterpolator().

See Also
ximgproc::EdgeAwareInterpolator, ximgproc::fastGlobalSmootherFilter, getFgsSigma
virtual void cv::optflow::DenseRLOFOpticalFlow::setForwardBackward ( float  val)
pure virtual
Python:
None=cv.optflow_DenseRLOFOpticalFlow.setForwardBackward(val)

Threshold for the forward backward confidence check.

For each grid point \( \mathbf{x} \) a motion vector \( d_{I0,I1}(\mathbf{x}) \) is computed. If the forward backward error

\[ EP_{FB} = || d_{I0,I1} + d_{I1,I0} || \]

is larger than threshold given by this function then the motion vector will not be used by the following vector field interpolation. \( d_{I1,I0} \) denotes the backward flow. Note, the forward backward test will only be applied if the threshold > 0. This may results into a doubled runtime for the motion estimation.

See Also
getForwardBackward, setGridStep
virtual void cv::optflow::DenseRLOFOpticalFlow::setGridStep ( Size  val)
pure virtual
Python:
None=cv.optflow_DenseRLOFOpticalFlow.setGridStep(val)

Size of the grid to spawn the motion vectors.

See Also
getGridStep
virtual void cv::optflow::DenseRLOFOpticalFlow::setInterpolation ( InterpolationType  val)
pure virtual
Python:
None=cv.optflow_DenseRLOFOpticalFlow.setInterpolation(val)

Interpolation used to compute the dense optical flow.

Two interpolation algorithms are supported

virtual void cv::optflow::DenseRLOFOpticalFlow::setRLOFOpticalFlowParameter ( Ptr< RLOFOpticalFlowParameter val)
pure virtual
Python:
None=cv.optflow_DenseRLOFOpticalFlow.setRLOFOpticalFlowParameter(val)

Configuration of the RLOF alogrithm.

See Also
optflow::RLOFOpticalFlowParameter, getRLOFOpticalFlowParameter
virtual void cv::optflow::DenseRLOFOpticalFlow::setUsePostProc ( bool  val)
pure virtual
Python:
None=cv.optflow_DenseRLOFOpticalFlow.setUsePostProc(val)

The documentation for this class was generated from the following file: