Skip to main content

Point Cloud Registration

License: MIT PyPI version Python application

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

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

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

Estimated Normals

Visualize Voxels

Visualize 3D voxelization with our efficient Python-based algorithm:

python3 demo_visualize_voxels.py

Voxel Visualization

Try Point Cloud Registration

Explore our Cloud Registration algorithms using a sample GUI. You can experiment with different settings:

python3 demo_matching.py

demo

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.

  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. ↩

  2. Without Normal Estimation ↩

Metadata

Release files for point-cloud-registration 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for point-cloud-registration 1.0.5
File Interpreter ABI Platform
point_cloud_registration-1.0.5-py3-none-any.whl Python 3 none any Details

Release files / point_cloud_registration-1.0.5-py3-none-any.whl

Download URL point_cloud_registration-1.0.5-py3-none-any.whl
Size 31.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2f13ab9a20b6609b22991bf97729b5e86a660807ae874013fa0c1d08a84c5769
BLAKE2b-256 checksum
How to use checksums
762d4367540f915b14157b2922830dfffda7eb5c79e0206cd1331b8c8c5e8bb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.8.10

Security for point-cloud-registration 1.0.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.5 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page