Struct opencv::optflow::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 of course unsafe as it breaks the Rust aliasing rules, but it might 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>,

§

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>,

§

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.