Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/neka-nat/probreg
Python package for point cloud registration using probabilistic model (Coherent Point Drift, GMMReg, SVR, GMMTree, FilterReg, Bayesian CPD)
https://github.com/neka-nat/probreg
3d coherent-point-drift dual-quaternion dual-quaternion-skinning expectation-maximization-algorithm filterreg gaussian-mixture-models non-rigid-registration open3d point-cloud point-cloud-registration registration rigid-transformations variational-inference
Last synced: 1 day ago
JSON representation
Python package for point cloud registration using probabilistic model (Coherent Point Drift, GMMReg, SVR, GMMTree, FilterReg, Bayesian CPD)
- Host: GitHub
- URL: https://github.com/neka-nat/probreg
- Owner: neka-nat
- License: mit
- Created: 2019-01-07T13:48:03.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-05-11T06:44:00.000Z (8 months ago)
- Last Synced: 2024-12-19T05:31:31.535Z (3 days ago)
- Topics: 3d, coherent-point-drift, dual-quaternion, dual-quaternion-skinning, expectation-maximization-algorithm, filterreg, gaussian-mixture-models, non-rigid-registration, open3d, point-cloud, point-cloud-registration, registration, rigid-transformations, variational-inference
- Language: Python
- Homepage:
- Size: 52.1 MB
- Stars: 868
- Watchers: 22
- Forks: 147
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ![logo](https://raw.githubusercontent.com/neka-nat/probreg/master/images/logo.png)
[![Build status](https://github.com/neka-nat/probreg/actions/workflows/build-and-test.yaml/badge.svg)](https://github.com/neka-nat/probreg/actions/workflows/build-and-test.yaml/badge.svg)
[![PyPI version](https://badge.fury.io/py/probreg.svg)](https://badge.fury.io/py/probreg)
[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)
[![Documentation Status](https://readthedocs.org/projects/probreg/badge/?version=latest)](https://probreg.readthedocs.io/en/latest/?badge=latest)
[![Downloads](https://static.pepy.tech/badge/probreg)](https://pepy.tech/project/probreg)Probreg is a library that implements point cloud **reg**istration algorithms with **prob**ablistic model.
The point set registration algorithms using stochastic model are more robust than ICP(Iterative Closest Point).
This package implements several algorithms using stochastic models and provides a simple interface with [Open3D](http://www.open3d.org/).## Core features
* Open3D interface
* Rigid and non-rigid transformation## Algorithms
* Maximum likelihood when the target or source point cloud is observation data
* [Coherent Point Drift (2010)](https://arxiv.org/pdf/0905.2635.pdf)
* [Extended Coherent Point Drift (2016)](https://ieeexplore.ieee.org/abstract/document/7477719) (add correspondence priors to CPD)
* [Color Coherent Point Drift (2018)](https://arxiv.org/pdf/1802.01516)
* [FilterReg (CVPR2019)](https://arxiv.org/pdf/1811.10136.pdf)
* Variational Bayesian inference
* [Bayesian Coherent Point Drift (2020)](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8985307)
* Distance minimization of two probabilistic distributions
* [GMMReg (2011)](https://ieeexplore.ieee.org/document/5674050)
* [Support Vector Registration (2015)](https://arxiv.org/pdf/1511.04240.pdf)
* Hierarchical Stocastic model
* [GMMTree (ECCV2018)](https://arxiv.org/pdf/1807.02587.pdf)### Transformations
| type | CPD | SVR, GMMReg | GMMTree | FilterReg | BCPD (experimental) |
|------|-----|-------------|---------|-----------|---------------------|
|Rigid | **Scale + 6D pose** | **6D pose** | **6D pose** | **6D pose** (Point-to-point, Point-to-plane, FPFH-based)| - |
|NonRigid | **Affine**, **MCT** | **TPS** | - | **Deformable Kinematic** (experimental) | **Combined model** (Rigid + Scale + NonRigid-term)### CUDA support
You need to install cupy.```
pip install cupy
```* [Rigid CPD](https://github.com/neka-nat/probreg/blob/master/examples/cpd_rigid_cuda.py)
* [Affine CPD](https://github.com/neka-nat/probreg/blob/master/examples/cpd_affine3d_cuda.py)## Installation
You can install probreg using `pip`.
```
pip install probreg
```Or install probreg from source.
```
git clone https://github.com/neka-nat/probreg.git --recursive
cd probreg
pip install -e .
```## Getting Started
This is a sample code that reads a PCD file and calls CPD registration.
You can easily execute registrations from Open3D point cloud object and draw the results.```py
import copy
import numpy as np
import open3d as o3
from probreg import cpd# load source and target point cloud
source = o3.io.read_point_cloud('bunny.pcd')
source.remove_non_finite_points()
target = copy.deepcopy(source)
# transform target point cloud
th = np.deg2rad(30.0)
target.transform(np.array([[np.cos(th), -np.sin(th), 0.0, 0.0],
[np.sin(th), np.cos(th), 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]]))
source = source.voxel_down_sample(voxel_size=0.005)
target = target.voxel_down_sample(voxel_size=0.005)# compute cpd registration
tf_param, _, _ = cpd.registration_cpd(source, target)
result = copy.deepcopy(source)
result.points = tf_param.transform(result.points)# draw result
source.paint_uniform_color([1, 0, 0])
target.paint_uniform_color([0, 1, 0])
result.paint_uniform_color([0, 0, 1])
o3.visualization.draw_geometries([source, target, result])
```## Resources
* [Documentation](https://probreg.readthedocs.io/en/latest/?badge=latest)
## Results
### Compare algorithms
| CPD | SVR | GMMTree | FilterReg |
|-----|-----|---------|-----------|
| | | | |### Noise test
| ICP(Open3D) | CPD | FilterReg |
|-------------|-----|-----------|
| | | |### Non rigid registration
| CPD | SVR | Filterreg | BCPD |
|-----|-----|-----------|------|
| | | | |### Feature based registration
| FPFH FilterReg |
|----------------|
| |### Time measurement
Execute an example script for measuring time.
```
OMP_NUM_THREADS=1 python time_measurement.py# Results [s]
# ICP(Open3D): 0.0014092829951550812
# CPD: 0.038112225010991096
# SVR: 0.036476270004641265
# GMMTree: 0.10535842599347234
# FilterReg: 0.005098833993542939
```## Citing
```
@software{probreg,
author = {{Kenta-Tanaka et al.}},
title = {probreg},
url = {https://probreg.readthedocs.io/en/latest/},
version = {0.1.6},
date = {2019-9-29},
}
```