A modern modular pure Rust implementation of the Iterative Closest Point algorithm.
let (alignee_transform, error_sum) = estimate_transform(
alignee_cloud,
&target_cloud,
20, // max iterations
BidirectionalDistance::new(&target_cloud),
accept_all,
reject_n_sigma_dist(3.0),
point_to_plane_lls::estimate_isometry,
same_squared_distance_error(1.0),
);
An integrations with the modelz crate is provided so you can use Model3D
with the estimate_transform
function.
use modelz::Model3D;
if let (Ok(alignee), Ok(target)) = (Model3D::load("alignee.gltf"), Model3D::load("target.stl")) {
let (transform, error_sum) = estimate_transform(
alignee,
&target,
20, // max iterations
BidirectionalDistance::new(&target),
accept_all,
reject_n_sigma_dist(3.0),
point_to_plane_lls::estimate_isometry,
same_squared_distance_error(1.0),
);
}