#point-cloud #registration #robust #paper #matching #kiss-matcher #revisited

kriss_matcher

Rust implementation of the paper 'KISS-Matcher: Fast and Robust Point Cloud Registration Revisited'

1 unstable release

0.0.1 Oct 23, 2024

#32 in #registration

Download history 128/week @ 2024-10-22 4/week @ 2024-10-29 5/week @ 2024-11-05

137 downloads per month

Apache-2.0

91KB
887 lines

KRISS-Matcher: Rust/Python implementation of KISS-Matcher

The implementation of the paper KISS-Matcher: Fast and Robust Point Cloud Registration Revisited.

matching

Disclaimer

This project is my first complete implementation in Rust, created out of curiosity and a desire to learn the language while implementing the concepts from the paper. It was developed over a weekend, so it may not be production-ready. Feedback and contributions are welcome!

Differences from the Original Paper

This implementation has some differences:

  1. Single Radius Search:

    • This implementation uses only r_normal instead of sub-sampling from r_fpfh. There are no particular reasons, just to ease implementation since it seemed non-important.
  2. Histogram Bin Size:

    • The paper does not specify the histogram bin size (H) used in the calculation of FPFH (Fast Point Feature Histogram). More information on my choice is here.
  3. GNC Solver for Rotation and Translation Estimation:

    • The paper does not provide details on the specific GNC (Graduated Non-Convexity) solver used.
    • My implementation adapts the GNC-TLS (Truncated Least Squares) solver from the TEASER++ library.
    • Residual calculation function adapts methods from Least-Squares Rigid Motion Using SVD.
  4. Normal Estimation Using SVD Instead of PCA:

    • The implementation uses Singular Value Decomposition (SVD) instead of Principal Component Analysis (PCA) for normal estimation.
    • Since the matrices are small, performance is not a significant concern, and SVD provides more stable results.
  5. Graph Representation in Correspondence Pruning:

    • While the paper suggests using Compressed Sparse Row (CSR) representation for efficiency, this implementation uses a standard adjacency list graph (CSR can be easily integrated, tho).

Code Structure and Correspondence to Paper Sections

Section III.C. Faster-PFH: Boosting FPFH Speed

Also covers "Appendix.I. Detailed Explanation of Faster-PFH".

  • Normal Estimation and filtering: normal_estimation.rs
  • Point Feature Histogram Calculation: point_feature_histograms.rs
  • Feature Matching: feature_matching.rs

Section III.D. k-Core-Based Graph-Theoretic Outlier Pruning

  • Correspondence Graph Pruning: graph_pruning.rs

Section III.E. Graduated Non-Convexity-Based Non-Minimal Solver

  • Optimal Rotation and Translation Estimation: gnc_solver.rs

Usage

To add library to your rust project use:

$ cargo add kriss_matcher

To use in Python use any package managers such as pip or uv.

$ pip install kriss_matcher

or

$ uv add kriss_matcher

To run the example you can use:

uv run --no-project --python=3.11 examples/example.py

it will install all required dependencies.

Contributing

Feel free to open issues or submit pull requests if you find bugs or have suggestions for improvements.

License

This project is open-sourced under the Apache Version 2.0 License.

Dependencies

~16–51MB
~783K SLoC