[−][src]Struct opencv::surface_matching::ICP
This class implements a very efficient and robust variant of the iterative closest point (ICP) algorithm. The task is to register a 3D model (or point cloud) against a set of noisy target data. The variants are put together by myself after certain tests. The task is to be able to match partial, noisy point clouds in cluttered scenes, quickly. You will find that my emphasis is on the performance, while retaining the accuracy. This implementation is based on Tolga Birdal's MATLAB implementation in here: http://www.mathworks.com/matlabcentral/fileexchange/47152-icp-registration-using-efficient-variants-and-multi-resolution-scheme The main contributions come from:
- Picky ICP: http://www5.informatik.uni-erlangen.de/Forschung/Publikationen/2003/Zinsser03-ARI.pdf
- Efficient variants of the ICP Algorithm: http://docs.happycoders.org/orgadoc/graphics/imaging/fasticp_paper.pdf
- Geometrically Stable Sampling for the ICP Algorithm: https://graphics.stanford.edu/papers/stabicp/stabicp.pdf
- Multi-resolution registration: http://www.cvl.iis.u-tokyo.ac.jp/~oishi/Papers/Alignment/Jost_MultiResolutionICP_3DIM03.pdf
- Linearization of Point-to-Plane metric by Kok Lim Low: https://www.comp.nus.edu.sg/~lowkl/publications/lowk_point-to-plane_icp_techrep.pdf
Implementations
impl ICP
[src]
pub fn as_raw_ICP(&self) -> *const c_void
[src]
pub fn as_raw_mut_ICP(&mut self) -> *mut c_void
[src]
impl ICP
[src]
pub fn default() -> Result<ICP>
[src]
pub fn new(
iterations: i32,
tolerence: f32,
rejection_scale: f32,
num_levels: i32,
sample_type: i32,
num_max_corr: i32
) -> Result<ICP>
[src]
iterations: i32,
tolerence: f32,
rejection_scale: f32,
num_levels: i32,
sample_type: i32,
num_max_corr: i32
) -> Result<ICP>
\brief ICP constructor with default arguments.
Parameters
- iterations:
- tolerence: Controls the accuracy of registration at each iteration of ICP.
- rejectionScale: Robust outlier rejection is applied for robustness. This value actually corresponds to the standard deviation coefficient. Points with rejectionScale * &sigma are ignored during registration.
- numLevels: Number of pyramid levels to proceed. Deep pyramids increase speed but decrease accuracy. Too coarse pyramids might have computational overhead on top of the inaccurate registrtaion. This parameter should be chosen to optimize a balance. Typical values range from 4 to 10.
- sampleType: Currently this parameter is ignored and only uniform sampling is applied. Leave it as 0.
- numMaxCorr: Currently this parameter is ignored and only PickyICP is applied. Leave it as 1.
C++ default parameters
- tolerence: 0.05f
- rejection_scale: 2.5f
- num_levels: 6
- sample_type: ICP::ICP_SAMPLING_TYPE_UNIFORM
- num_max_corr: 1
Trait Implementations
impl Boxed for ICP
[src]
unsafe fn from_raw(ptr: *mut c_void) -> Self
[src]
fn into_raw(self) -> *mut c_void
[src]
fn as_raw(&self) -> *const c_void
[src]
fn as_raw_mut(&mut self) -> *mut c_void
[src]
impl Drop for ICP
[src]
impl ICPTrait for ICP
[src]
fn as_raw_ICP(&self) -> *const c_void
[src]
fn as_raw_mut_ICP(&mut self) -> *mut c_void
[src]
fn register_model_to_scene(
&mut self,
src_pc: &Mat,
dst_pc: &Mat,
residual: &mut f64,
pose: &mut Matx44d
) -> Result<i32>
[src]
&mut self,
src_pc: &Mat,
dst_pc: &Mat,
residual: &mut f64,
pose: &mut Matx44d
) -> Result<i32>
fn register_model_to_scene_vec(
&mut self,
src_pc: &Mat,
dst_pc: &Mat,
poses: &mut Vector<Pose3DPtr>
) -> Result<i32>
[src]
&mut self,
src_pc: &Mat,
dst_pc: &Mat,
poses: &mut Vector<Pose3DPtr>
) -> Result<i32>
impl Send for ICP
[src]
Auto Trait Implementations
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,