Icp

Struct Icp 

Source
pub struct Icp<T>
where T: Point + Copy,
{ /* private fields */ }
Expand description

N dimensional Icp

§Salient features

  1. Generic Type can be any n dimensional point
  2. Implement Point Trait for your point
  3. Uses SVD to find rotation and translation
  4. Vectorised operations to control time complexity

§Examples


let max_iterations = 100;
let cost_change_threshold = 1e-5;
let icp = Icp::new(
   model_point_set.clone(),
   max_iterations,
   cost_change_threshold,
);
let result = icp.register(&target_point_set);

§TODO:

  1. Outlier rejection of input data
  2. Voxel binning to make finding correspondences faster

Implementations§

Source§

impl<T> Icp<T>
where T: Point + Copy,

Source

pub fn new( model_point_set: PointSet<T>, max_iterations: i32, cost_change_threshold: f32, ) -> Self

Source

pub fn register(&self, target_point_set: &PointSet<T>) -> OMatrix<f32, Dyn, Dyn>

ICP registration

  1. Initialises the transformation given number of dimensions
  2. For each point
    • Find closest point in reference cloud
  3. Remove the means
  4. Find transformaton and rotation which will minimise the error
  5. Transform the target cloud
  6. Iterate until within error threshold or max iterations

Auto Trait Implementations§

§

impl<T> Freeze for Icp<T>

§

impl<T> RefUnwindSafe for Icp<T>
where T: RefUnwindSafe,

§

impl<T> Send for Icp<T>
where T: Send,

§

impl<T> Sync for Icp<T>
where T: Sync,

§

impl<T> Unpin for Icp<T>
where T: Unpin,

§

impl<T> UnwindSafe for Icp<T>
where T: UnwindSafe,

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<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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.