pub struct LargeKinfu { /* private fields */ }
Expand description
Large Scale Dense Depth Fusion implementation
This class implements a 3d reconstruction algorithm for larger environments using Spatially hashed TSDF volume “Submaps”. It also runs a periodic posegraph optimization to minimize drift in tracking over long sequences. Currently the algorithm does not implement a relocalization or loop closure module. Potentially a Bag of words implementation or RGBD relocalization as described in Glocker et al. ISMAR 2013 will be implemented
It takes a sequence of depth images taken from depth sensor (or any depth images source such as stereo camera matching algorithm or even raymarching renderer). The output can be obtained as a vector of points and their normals or can be Phong-rendered from given camera pose.
An internal representation of a model is a spatially hashed voxel cube that stores TSDF values which represent the distance to the closest surface (for details read the kinectfusion article about TSDF). There is no interface to that representation yet.
For posegraph optimization, a Submap abstraction over the Volume class is created. New submaps are added to the model when there is low visibility overlap between current viewing frustrum and the existing volume/model. Multiple submaps are simultaneously tracked and a posegraph is created and optimized periodically.
LargeKinfu does not use any OpenCL acceleration yet. To enable or disable it explicitly use cv::setUseOptimized() or cv::ocl::setUseOpenCL().
This implementation is inspired from Kintinuous, InfiniTAM and other SOTA algorithms
You need to set the OPENCV_ENABLE_NONFREE option in CMake to use KinectFusion.
Implementations§
source§impl LargeKinfu
impl LargeKinfu
Trait Implementations§
source§impl Boxed for LargeKinfu
impl Boxed for LargeKinfu
source§unsafe fn from_raw(ptr: <LargeKinfu as OpenCVFromExtern>::ExternReceive) -> Self
unsafe fn from_raw(ptr: <LargeKinfu as OpenCVFromExtern>::ExternReceive) -> Self
source§fn into_raw(self) -> <LargeKinfu as OpenCVTypeExternContainer>::ExternSendMut
fn into_raw(self) -> <LargeKinfu as OpenCVTypeExternContainer>::ExternSendMut
source§fn as_raw(&self) -> <LargeKinfu as OpenCVTypeExternContainer>::ExternSend
fn as_raw(&self) -> <LargeKinfu as OpenCVTypeExternContainer>::ExternSend
source§fn as_raw_mut(
&mut self,
) -> <LargeKinfu as OpenCVTypeExternContainer>::ExternSendMut
fn as_raw_mut( &mut self, ) -> <LargeKinfu as OpenCVTypeExternContainer>::ExternSendMut
source§impl Debug for LargeKinfu
impl Debug for LargeKinfu
source§impl Drop for LargeKinfu
impl Drop for LargeKinfu
source§impl LargeKinfuTrait for LargeKinfu
impl LargeKinfuTrait for LargeKinfu
source§impl LargeKinfuTraitConst for LargeKinfu
impl LargeKinfuTraitConst for LargeKinfu
fn as_raw_LargeKinfu(&self) -> *const c_void
fn get_params(&self) -> Result<Params>
fn render(&self, image: &mut impl ToOutputArray) -> Result<()>
fn render_1( &self, image: &mut impl ToOutputArray, camera_pose: Matx44f, ) -> Result<()>
fn get_cloud( &self, points: &mut impl ToOutputArray, normals: &mut impl ToOutputArray, ) -> Result<()>
fn get_points(&self, points: &mut impl ToOutputArray) -> Result<()>
fn get_normals( &self, points: &impl ToInputArray, normals: &mut impl ToOutputArray, ) -> Result<()>
fn get_pose(&self) -> Result<Affine3f>
impl Send for LargeKinfu
Auto Trait Implementations§
impl Freeze for LargeKinfu
impl RefUnwindSafe for LargeKinfu
impl !Sync for LargeKinfu
impl Unpin for LargeKinfu
impl UnwindSafe for LargeKinfu
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<Mat> ModifyInplace for Matwhere
Mat: Boxed,
impl<Mat> ModifyInplace for Matwhere
Mat: Boxed,
source§unsafe fn modify_inplace<Res>(
&mut self,
f: impl FnOnce(&Mat, &mut Mat) -> Res,
) -> Res
unsafe fn modify_inplace<Res>( &mut self, f: impl FnOnce(&Mat, &mut Mat) -> Res, ) -> Res
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