A fast and lightweight point cloud registration library implemented purely in Python.
Project description
Point Cloud Registration
point-cloud-registration is a pure Python, lightweight, and fast point cloud registration library.
It outperforms PCL and Open3D's registration in speed while relying only on NumPy for computations.
Features
✅ Pure Python – No compiled extensions, works everywhere
✅ Fast & Lightweight – Optimized algorithms with minimal overhead
✅ NumPy-based API – Seamless integration with scientific computing workflows
The following registration algorithms are supported, with our pure Python point-cloud-registration being even faster than the C++ versions of PCL and Open3D (C++ & Python wrappers).
Current Support Algorithm and Speed Comparison [^1]
| Method | Our (sec) | Open3D (sec) | PCL (sec) |
|---|---|---|---|
| Point-to-Point ICP | 0.502 | 1.511 | 0.931 |
| Point-to-Plane ICP [^2] | 0.334 | 0.677 | 0.835 |
| Voxelized Point-to-Plane ICP | 0.420 | N/A | N/A |
| Normal Distributions Transform (NDT) | 0.511 | N/A | 1.782 |
| Normal Estimation | 2.201 | 1.708 | 2.048 |
[^1]: Note: The above times are based on the test data in data/B-01.pcd with over 1,000,000 points, licensed under CC BY 4.0. For more information, see data/README.md.
Installation
Install via pip:
pip install point-cloud-registration
pip install q3dviewer==1.1.6 # (optional) for visual demo
You can benchmark it yourself using the following commands:
cd benchmark
python3 speed_test_comparison.py # Compare our implementation with Open3D
python3 speed_test_comparison_mkl.py # (optional) you can further boost it by using mkl numpy
mkdir build && cd build
cmake .. && make
./speed_test_comparison # Compare with PCL
[^2]: Without Normal Estimation
Usage
#!/usr/bin/env python3
import numpy as np
from point_cloud_registration import ICP, PlaneICP, NDT, VPlaneICP
# Example point clouds
target = np.random.rand(100, 3) # Nx3 point numpy array
scan = np.random.rand(80, 3) # Mx3 point numpy array
icp = VPlaneICP(voxel_size=0.5, max_iter=30, max_dist=2, tol=1e-3)
icp.set_target(target) # Set the target point cloud
T_new = icp.align(scan, init_T=np.eye(4)) # Fit the scan to the target
print("Estimated Transform matrix:\n", T_new)
Roadmap
🚀 Upcoming Features & Enhancements:
- Point-to-Point ICP – Basic ICP implementation
- Point-to-Plane ICP – Improved accuracy using normal constraints
- Generalized ICP (GICP) – Handles anisotropic noise and improves robustness
- Normal Distributions Transform (NDT) – Grid-based registration for high-noise environments
- Further optimizations while staying pure Python
Demo
Explore the capabilities of the library with the following demos:
Visualize Estimated Normals
Quickly estimate and visualize normals using our fast Python implementation:
python3 demo_estimate_normals.py
Visualize Voxels
Visualize 3D voxelization with our efficient Python-based algorithm:
python3 demo_visualize_voxels.py
Try Point Cloud Registration
Explore our Cloud Registration algorithms using a sample GUI. You can experiment with different settings:
python3 demo_matching.py
Comparison of Registration Methods
| Method | Objective Function* | Data Representation | Speed | Precision |
|---|---|---|---|---|
| Point-to-Point ICP | $\sum | T p_i - q_i |^2$ | Point-Based | Fast | Moderate |
| Point-to-Plane ICP | $\sum | n_i^T (T p_i - q_i) |^2$ | Point-Based (with normals) | Fast | High |
| Voxelized Point-to-Plane ICP | $\sum | n_i^T (T p_i - q_i) |^2$ | Voxel-Based (with normals) | Very Fast | High |
| Generalized ICP (GICP) | $\sum (T p_i - q_i)^T (C_i^Q + R C_i^P R^T)^{-1} (T p_i - q_i)$ | Point-Based (with covariances) | Moderate | Very High |
| Normal Distributions Transform (NDT) | $\sum (T p_i - \mu_i)^T \Sigma_i^{-1} (T p_i - \mu_i)$ | Voxel-Based (with covariances) | Very Fast | Moderate |
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file point_cloud_registration-1.0.5-py3-none-any.whl.
File metadata
- Download URL: point_cloud_registration-1.0.5-py3-none-any.whl
- Upload date:
- Size: 31.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.8.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f13ab9a20b6609b22991bf97729b5e86a660807ae874013fa0c1d08a84c5769
|
|
| MD5 |
f8d7f187f83cb1242ec62c4e6c022214
|
|
| BLAKE2b-256 |
762d4367540f915b14157b2922830dfffda7eb5c79e0206cd1331b8c8c5e8bb3
|