Struct DenseRLOFOpticalFlow

Source
pub struct DenseRLOFOpticalFlow { /* private fields */ }
Expand 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: Note that in output, if no correspondences are found between \a I0 and \a I1, the \a flow is set to 0.

§See also

optflow::calcOpticalFlowDenseRLOF(), optflow::RLOFOpticalFlowParameter

Implementations§

Source§

impl DenseRLOFOpticalFlow

Source

pub fn create( rlof_param: Ptr<RLOFOpticalFlowParameter>, forward_backward_threshold: f32, grid_step: Size, interp_type: InterpolationType, epic_k: i32, epic_sigma: f32, epic_lambda: f32, ric_sp_size: i32, ric_slic_type: i32, use_post_proc: bool, fgs_lambda: f32, fgs_sigma: f32, use_variational_refinement: bool, ) -> Result<Ptr<DenseRLOFOpticalFlow>>

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
§C++ default parameters
  • rlof_param: Ptr()
  • forward_backward_threshold: 1.f
  • grid_step: Size(6,6)
  • interp_type: InterpolationType::INTERP_EPIC
  • epic_k: 128
  • epic_sigma: 0.05f
  • epic_lambda: 999.0f
  • ric_sp_size: 15
  • ric_slic_type: 100
  • use_post_proc: true
  • fgs_lambda: 500.0f
  • fgs_sigma: 1.5f
  • use_variational_refinement: false
Source

pub fn create_def() -> Result<Ptr<DenseRLOFOpticalFlow>>

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
§Note

This alternative version of DenseRLOFOpticalFlow::create function uses the following default values for its arguments:

  • rlof_param: Ptr()
  • forward_backward_threshold: 1.f
  • grid_step: Size(6,6)
  • interp_type: InterpolationType::INTERP_EPIC
  • epic_k: 128
  • epic_sigma: 0.05f
  • epic_lambda: 999.0f
  • ric_sp_size: 15
  • ric_slic_type: 100
  • use_post_proc: true
  • fgs_lambda: 500.0f
  • fgs_sigma: 1.5f
  • use_variational_refinement: false

Trait Implementations§

Source§

impl AlgorithmTrait for DenseRLOFOpticalFlow

Source§

fn as_raw_mut_Algorithm(&mut self) -> *mut c_void

Source§

fn clear(&mut self) -> Result<()>

Clears the algorithm state
Source§

fn read(&mut self, fn_: &impl FileNodeTraitConst) -> Result<()>

Reads algorithm parameters from a file storage
Source§

impl AlgorithmTraitConst for DenseRLOFOpticalFlow

Source§

fn as_raw_Algorithm(&self) -> *const c_void

Source§

fn write(&self, fs: &mut impl FileStorageTrait) -> Result<()>

Stores algorithm parameters in a file storage
Source§

fn write_1(&self, fs: &mut impl FileStorageTrait, name: &str) -> Result<()>

Stores algorithm parameters in a file storage Read more
Source§

fn write_with_name(&self, fs: &Ptr<FileStorage>, name: &str) -> Result<()>

@deprecated Read more
Source§

fn write_with_name_def(&self, fs: &Ptr<FileStorage>) -> Result<()>

👎Deprecated:

§Note

Deprecated: ## Note This alternative version of AlgorithmTraitConst::write_with_name function uses the following default values for its arguments: Read more
Source§

fn empty(&self) -> Result<bool>

Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read
Source§

fn save(&self, filename: &str) -> Result<()>

Saves the algorithm to a file. In order to make this method work, the derived class must implement Algorithm::write(FileStorage& fs).
Source§

fn get_default_name(&self) -> Result<String>

Returns the algorithm string identifier. This string is used as top level xml/yml node tag when the object is saved to a file or string.
Source§

impl Boxed for DenseRLOFOpticalFlow

Source§

unsafe fn from_raw( ptr: <DenseRLOFOpticalFlow as OpenCVFromExtern>::ExternReceive, ) -> Self

Wrap the specified raw pointer Read more
Source§

fn into_raw( self, ) -> <DenseRLOFOpticalFlow as OpenCVTypeExternContainer>::ExternSendMut

Return the underlying raw pointer while consuming this wrapper. Read more
Source§

fn as_raw( &self, ) -> <DenseRLOFOpticalFlow as OpenCVTypeExternContainer>::ExternSend

Return the underlying raw pointer. Read more
Source§

fn as_raw_mut( &mut self, ) -> <DenseRLOFOpticalFlow as OpenCVTypeExternContainer>::ExternSendMut

Return the underlying mutable raw pointer Read more
Source§

impl Debug for DenseRLOFOpticalFlow

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl DenseOpticalFlowTrait for DenseRLOFOpticalFlow

Source§

fn as_raw_mut_DenseOpticalFlow(&mut self) -> *mut c_void

Source§

fn calc( &mut self, i0: &impl ToInputArray, i1: &impl ToInputArray, flow: &mut impl ToInputOutputArray, ) -> Result<()>

Calculates an optical flow. Read more
Source§

fn collect_garbage(&mut self) -> Result<()>

Releases all inner buffers.
Source§

impl DenseOpticalFlowTraitConst for DenseRLOFOpticalFlow

Source§

impl DenseRLOFOpticalFlowTrait for DenseRLOFOpticalFlow

Source§

fn as_raw_mut_DenseRLOFOpticalFlow(&mut self) -> *mut c_void

Source§

fn set_rlof_optical_flow_parameter( &mut self, val: Ptr<RLOFOpticalFlowParameter>, ) -> Result<()>

Configuration of the RLOF alogrithm. Read more
Source§

fn set_forward_backward(&mut self, val: f32) -> Result<()>

Threshold for the forward backward confidence check For each grid point inline formula a motion vector inline formula is computed. * If the forward backward error block formula * is larger than threshold given by this function then the motion vector will not be used by the following * vector field interpolation. inline formula 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 Read more
Source§

fn set_grid_step(&mut self, val: Size) -> Result<()>

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. * getForwardBackward, setGridStep Read more
Source§

fn set_interpolation(&mut self, val: InterpolationType) -> Result<()>

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. * see also: ximgproc::EdgeAwareInterpolator, getInterpolation
Source§

fn set_epick(&mut self, val: i32) -> Result<()>

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. * ximgproc::EdgeAwareInterpolator, setEPICK Read more
Source§

fn set_epic_sigma(&mut self, val: f32) -> Result<()>

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. * ximgproc::EdgeAwareInterpolator, setEPICSigma Read more
Source§

fn set_epic_lambda(&mut self, val: f32) -> Result<()>

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. * ximgproc::EdgeAwareInterpolator, setEPICSigma Read more
Source§

fn set_fgs_lambda(&mut self, val: f32) -> Result<()>

see ximgproc::EdgeAwareInterpolator(). Sets the respective fastGlobalSmootherFilter() parameter. * ximgproc::EdgeAwareInterpolator, setFgsLambda Read more
Source§

fn set_fgs_sigma(&mut self, val: f32) -> Result<()>

see ximgproc::EdgeAwareInterpolator(). Sets the respective fastGlobalSmootherFilter() parameter. * ximgproc::EdgeAwareInterpolator, ximgproc::fastGlobalSmootherFilter, setFgsSigma Read more
Source§

fn set_use_post_proc(&mut self, val: bool) -> Result<()>

enables ximgproc::fastGlobalSmootherFilter Read more
Source§

fn set_use_variational_refinement(&mut self, val: bool) -> Result<()>

enables VariationalRefinement Read more
Source§

fn set_ricsp_size(&mut self, val: i32) -> Result<()>

Parameter to tune the approximate size of the superpixel used for oversegmentation. Read more
Source§

fn set_ricslic_type(&mut self, val: i32) -> Result<()>

Parameter to choose superpixel algorithm variant to use: Read more
Source§

impl DenseRLOFOpticalFlowTraitConst for DenseRLOFOpticalFlow

Source§

fn as_raw_DenseRLOFOpticalFlow(&self) -> *const c_void

Source§

fn get_rlof_optical_flow_parameter( &self, ) -> Result<Ptr<RLOFOpticalFlowParameter>>

Configuration of the RLOF alogrithm. Read more
Source§

fn get_forward_backward(&self) -> Result<f32>

Threshold for the forward backward confidence check For each grid point inline formula a motion vector inline formula is computed. * If the forward backward error block formula * is larger than threshold given by this function then the motion vector will not be used by the following * vector field interpolation. inline formula 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. * getForwardBackward, setGridStep Read more
Source§

fn get_grid_step(&self) -> Result<Size>

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
Source§

fn get_interpolation(&self) -> Result<InterpolationType>

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. * ximgproc::EdgeAwareInterpolator, getInterpolation Read more
Source§

fn get_epick(&self) -> Result<i32>

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
Source§

fn get_epic_sigma(&self) -> Result<f32>

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
Source§

fn get_epic_lambda(&self) -> Result<f32>

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
Source§

fn get_fgs_lambda(&self) -> Result<f32>

see ximgproc::EdgeAwareInterpolator(). Sets the respective fastGlobalSmootherFilter() parameter. * see also: ximgproc::EdgeAwareInterpolator, setFgsLambda
Source§

fn get_fgs_sigma(&self) -> Result<f32>

see ximgproc::EdgeAwareInterpolator(). Sets the respective fastGlobalSmootherFilter() parameter. * see also: ximgproc::EdgeAwareInterpolator, ximgproc::fastGlobalSmootherFilter, setFgsSigma
Source§

fn get_use_post_proc(&self) -> Result<bool>

enables ximgproc::fastGlobalSmootherFilter Read more
Source§

fn get_use_variational_refinement(&self) -> Result<bool>

enables VariationalRefinement Read more
Source§

fn get_ricsp_size(&self) -> Result<i32>

Parameter to tune the approximate size of the superpixel used for oversegmentation. Read more
Source§

fn get_ricslic_type(&self) -> Result<i32>

Parameter to choose superpixel algorithm variant to use: Read more
Source§

impl Drop for DenseRLOFOpticalFlow

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl From<DenseRLOFOpticalFlow> for Algorithm

Source§

fn from(s: DenseRLOFOpticalFlow) -> Self

Converts to this type from the input type.
Source§

impl From<DenseRLOFOpticalFlow> for DenseOpticalFlow

Source§

fn from(s: DenseRLOFOpticalFlow) -> Self

Converts to this type from the input type.
Source§

impl Send for DenseRLOFOpticalFlow

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<Mat> ModifyInplace for Mat
where Mat: Boxed,

Source§

unsafe fn modify_inplace<Res>( &mut self, f: impl FnOnce(&Mat, &mut Mat) -> Res, ) -> Res

Helper function to call OpenCV functions that allow in-place modification of a Mat or another similar object. By passing a mutable reference to the Mat to this function your closure will get called with the read reference and a write references to the same Mat. This is unsafe in a general case as it leads to having non-exclusive mutable access to the internal data, but it can be useful for some performance sensitive operations. One example of an OpenCV function that allows such in-place modification is imgproc::threshold. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.