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>

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 |
Threshold for the forward backward confidence check. | |
virtual Size | getGridStep () const =0 |
Size of the grid to spawn the motion vectors. | |
virtual InterpolationType | getInterpolation () const =0 |
Interpolation used to compute the dense optical flow. | |
virtual int | getRICSLICType () const =0 |
Parameter to choose superpixel algorithm variant to use: | |
virtual int | getRICSPSize () const =0 |
Parameter to tune the approximate size of the superpixel used for oversegmentation. | |
virtual Ptr< RLOFOpticalFlowParameter > | getRLOFOpticalFlowParameter () const =0 |
Configuration of the RLOF alogrithm. | |
virtual bool | getUsePostProc () const =0 |
enables ximgproc::fastGlobalSmootherFilter | |
virtual bool | getUseVariationalRefinement () const =0 |
enables VariationalRefinement | |
virtual void | setEPICK (int val)=0 |
see ximgproc::EdgeAwareInterpolator() K value. | |
virtual void | setEPICLambda (float val)=0 |
see ximgproc::EdgeAwareInterpolator() lambda value. | |
virtual void | setEPICSigma (float val)=0 |
see ximgproc::EdgeAwareInterpolator() sigma value. | |
virtual void | setFgsLambda (float val)=0 |
see ximgproc::EdgeAwareInterpolator(). | |
virtual void | setFgsSigma (float val)=0 |
see ximgproc::EdgeAwareInterpolator(). | |
virtual void | setForwardBackward (float val)=0 |
Threshold for the forward backward confidence check. | |
virtual void | setGridStep (Size val)=0 |
Size of the grid to spawn the motion vectors. | |
virtual void | setInterpolation (InterpolationType val)=0 |
Interpolation used to compute the dense optical flow. | |
virtual void | setRICSLICType (int val)=0 |
Parameter to choose superpixel algorithm variant to use: | |
virtual void | setRICSPSize (int val)=0 |
Parameter to tune the approximate size of the superpixel used for oversegmentation. | |
virtual void | setRLOFOpticalFlowParameter (Ptr< RLOFOpticalFlowParameter > val)=0 |
Configuration of the RLOF alogrithm. | |
virtual void | setUsePostProc (bool val)=0 |
enables ximgproc::fastGlobalSmootherFilter | |
virtual void | setUseVariationalRefinement (bool val)=0 |
enables VariationalRefinement | |
![]() | |
virtual void | calc (InputArray I0, InputArray I1, InputOutputArray flow)=0 |
Calculates an optical flow. | |
virtual void | collectGarbage ()=0 |
Releases all inner buffers. | |
![]() | |
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 |
void | write (const Ptr< FileStorage > &fs, const String &name=String()) const |
virtual void | write (FileStorage &fs) const |
Stores algorithm parameters in a file storage. | |
void | write (FileStorage &fs, const String &name) const |
Static Public Member Functions | |
static Ptr< DenseRLOFOpticalFlow > | create (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, int ricSPSize=15, int ricSLICType=100, bool use_post_proc=true, float fgsLambda=500.0f, float fgsSigma=1.5f, bool use_variational_refinement=false) |
Creates instance of optflow::DenseRLOFOpticalFlow. | |
![]() | |
template<typename _Tp > | |
static Ptr< _Tp > | load (const String &filename, const String &objname=String()) |
Loads algorithm from the file. | |
template<typename _Tp > | |
static Ptr< _Tp > | loadFromString (const String &strModel, const String &objname=String()) |
Loads algorithm from a String. | |
template<typename _Tp > | |
static Ptr< _Tp > | read (const FileNode &fn) |
Reads algorithm from the file node. | |
Additional Inherited Members | |
![]() | |
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 described in [Senst2012] [Senst2013] [Senst2014] and [Senst2016] similar to the pyramidal iterative Lucas-Kanade method as proposed by [Bouguet00]. More details and experiments can be found in the following thesis [Senst2019]. The implementation is derived from optflow::calcOpticalFlowPyrLK().
The sparse-to-dense interpolation scheme allows for fast computation of dense optical flow using RLOF (see [Geistert2016]). For this scheme the following steps are applied:
- motion vector seeded at a regular sampled grid are computed. The sparsity of this grid can be configured with setGridStep
- (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.
- 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 in [Senst2012] [Senst2013] [Senst2014] and [Senst2016].
- Note
- If the grid size is set to (1,1) and the forward backward threshold <= 0 than pixelwise dense optical flow field is computed by RLOF without using interpolation.
- Note that in output, if no correspondences are found between I0 and I1, the flow is set to 0.
Member Function Documentation
◆ create()
|
static |
Creates instance of optflow::DenseRLOFOpticalFlow.
- Parameters
-
rlofParam see optflow::RLOFOpticalFlowParameter forwardBackwardThreshold see setForwardBackward gridStep see setGridStep interp_type see setInterpolation epicK see setEPICK epicSigma see setEPICSigma epicLambda see setEPICLambda ricSPSize see setRICSPSize ricSLICType see setRICSLICType use_post_proc see setUsePostProc fgsLambda see setFgsLambda fgsSigma see setFgsSigma use_variational_refinement see setUseVariationalRefinement
◆ getEPICK()
|
pure virtual |
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
◆ getEPICLambda()
|
pure virtual |
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.
◆ getEPICSigma()
|
pure virtual |
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.
◆ getFgsLambda()
|
pure virtual |
see ximgproc::EdgeAwareInterpolator().
Sets the respective fastGlobalSmootherFilter() parameter.
◆ getFgsSigma()
|
pure virtual |
see ximgproc::EdgeAwareInterpolator().
Sets the respective fastGlobalSmootherFilter() parameter.
◆ getForwardBackward()
|
pure virtual |
Threshold for the forward backward confidence check.
- See also
- setForwardBackward
◆ getGridStep()
|
pure virtual |
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
◆ getInterpolation()
|
pure virtual |
Interpolation used to compute the dense optical flow.
◆ getRICSLICType()
|
pure virtual |
Parameter to choose superpixel algorithm variant to use:
- See also
- setRICSLICType
◆ getRICSPSize()
|
pure virtual |
Parameter to tune the approximate size of the superpixel used for oversegmentation.
- See also
- setRICSPSize
◆ getRLOFOpticalFlowParameter()
|
pure virtual |
Configuration of the RLOF alogrithm.
◆ getUsePostProc()
|
pure virtual |
◆ getUseVariationalRefinement()
|
pure virtual |
enables VariationalRefinement
◆ setEPICK()
|
pure virtual |
see ximgproc::EdgeAwareInterpolator() K value.
- See also
- ximgproc::EdgeAwareInterpolator, getEPICK
◆ setEPICLambda()
|
pure virtual |
see ximgproc::EdgeAwareInterpolator() lambda value.
◆ setEPICSigma()
|
pure virtual |
see ximgproc::EdgeAwareInterpolator() sigma value.
◆ setFgsLambda()
|
pure virtual |
see ximgproc::EdgeAwareInterpolator().
◆ setFgsSigma()
|
pure virtual |
see ximgproc::EdgeAwareInterpolator().
◆ setForwardBackward()
|
pure virtual |
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
◆ setGridStep()
|
pure virtual |
Size of the grid to spawn the motion vectors.
- See also
- getGridStep
◆ setInterpolation()
|
pure virtual |
Interpolation used to compute the dense optical flow.
Two interpolation algorithms are supported
- INTERP_GEO applies the fast geodesic interpolation, see [Geistert2016].
- INTERP_EPIC_RESIDUAL applies the edge-preserving interpolation, see [Revaud2015],Geistert2016.
◆ setRICSLICType()
|
pure virtual |
Parameter to choose superpixel algorithm variant to use:
- cv::ximgproc::SLICType SLIC segments image using a desired region_size (value: 100)
- cv::ximgproc::SLICType SLICO will optimize using adaptive compactness factor (value: 101)
- cv::ximgproc::SLICType MSLIC will optimize using manifold methods resulting in more content-sensitive superpixels (value: 102).
◆ setRICSPSize()
|
pure virtual |
Parameter to tune the approximate size of the superpixel used for oversegmentation.
◆ setRLOFOpticalFlowParameter()
|
pure virtual |
Configuration of the RLOF alogrithm.
◆ setUsePostProc()
|
pure virtual |
enables ximgproc::fastGlobalSmootherFilter
- See also
- getUsePostProc
◆ setUseVariationalRefinement()
|
pure virtual |
enables VariationalRefinement
- See also
- getUseVariationalRefinement
The documentation for this class was generated from the following file:
- opencv2/optflow/rlofflow.hpp