Align3D - Iterative Closest Point in Rust
Align3D provides alignment of range images and point clouds using the Iterative Closest Point (ICP) algorithm.
It provides functionalities:
- Alignment of range images and point clouds using the Iterative Closest Point (ICP) algorithm.
- Reading and writing of .ply and .off files for easy data exchange.
- Support for the TUM and IL-RGBD datasets for input.
- Visualization of point clouds, surfels, and other geometries to inspect the results.
- Processing utilities like normal vector computation for range images and bilateral filtering for depth images.
- Computation of odometry metrics
Align3D leverages several Rust libraries to provide its functionality:
- ndarray for efficient multi-dimensional array processing;
- nalgebra for linear algebra operations;
- vulkano with Vulkan for high-performance computing and rendering capabilities.
- image is used for image processing tasks. By harnessing the capabilities of these libraries
Getting it
Use Cargo:
$ cargo add align3d
OR, to install with visualization features, use:
$ cargo add align3d --features viz
Sample use
The following code does the following:
- loads the IndoorLidarDataset;
- computes the odometry for 20 frames;
- display the metrics comparing with the ground truth;
- and shows the alignment results.
use ;
Mean trajectory error: angle: 1.91°, translation: 0.03885
and show a window like this:
(move the camera using WASD controls)
Benchmarking
Functionality | Input desc. | [min, mean, max] |
---|---|---|
ImageIcp | 1 640x480 input | [38.423 ms 38.576 ms 38.732 ms] |
kdtree | 500000 database vs 500000 queries of 3D points | [101.48 ms 101.75 ms 102.04 ms] |
compute_normals | 640x480 RGB-D frame | [1.1587 ms 1.1778 ms 1.2005 ms] |
- Hardware: 11th Gen Intel® Core™ i7-11800H @ 2.30GHz × 16
Contributing
Contributions to Align3D are welcome! If you find any issues or have suggestions for improvements, please create a new issue or submit a pull request.
License
Align3D is licensed under the MIT License.
Release Plan
Align3D is an experimental project that showcases the potential of using Rust for writing computer vision applications. While still being a experimental project, it shows the versatility and performance benefits that Rust offers compared to the traditional combination of C++ and Python commonly used in computer vision and machine learning.
The project has the following Road map:
- Bug fixes in PCL ICP.
- Optimize Image Icp performance
- Python bindings