{ "info": { "author": "neka-nat", "author_email": "nekanat.stock@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# ![logo](https://raw.githubusercontent.com/neka-nat/probreg/master/images/logo.png)\n[![Build Status](https://travis-ci.org/neka-nat/probreg.svg?branch=master)](https://travis-ci.org/neka-nat/probreg)\n[![Build status](https://ci.appveyor.com/api/projects/status/mdoohms52gnq6law?svg=true)](https://ci.appveyor.com/project/neka-nat/probreg)\n[![PyPI version](https://badge.fury.io/py/probreg.svg)](https://badge.fury.io/py/probreg)\n[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)\n[![Documentation Status](https://readthedocs.org/projects/probreg/badge/?version=latest)](https://probreg.readthedocs.io/en/latest/?badge=latest)\n[![Downloads](https://pepy.tech/badge/probreg)](https://pepy.tech/project/probreg)\n\nProbreg is a library that implements point cloud **reg**istration algorithms with **prob**ablistic model.\n\nThe point set registration algorithms using stochastic model are more robust than ICP(Iterative Closest Point).\nThis package implements several algorithms using stochastic models and provides a simple interface with [Open3D](http://www.open3d.org/).\n\n## Core features\n\n* Open3D interface\n* Rigid and non-rigid transformation\n\n## Algorithms\n\n* Maximum likelihood when the target or source point cloud is observation data\n * [Coherent Point Drift(2010)](https://arxiv.org/pdf/0905.2635.pdf)\n * [FilterReg(CVPR2019)](https://arxiv.org/pdf/1811.10136.pdf)\n* Distance minimization of two probabilistic distributions\n * [GMMReg(2011)](https://ieeexplore.ieee.org/document/5674050)\n * [Support Vector Registration(2015)](https://arxiv.org/pdf/1511.04240.pdf)\n* Hierarchical Stocastic model\n * [GMMTree(ECCV2018)](https://arxiv.org/pdf/1807.02587.pdf)\n\n### Transformations\n\n| type | CPD | SVR, GMMReg | GMMTree | FilterReg |\n|------|-----|-------------|---------|-----------|\n|Rigid | **Scale + 6D pose** | **6D pose** | **6D pose** | **6D pose**
(Point-to-point,
Point-to-plane,
FPFH-based)|\n|NonRigid | **Affine**, **MCT** | **TPS** | - | - |\n\n## Installation\n\nYou can install probreg using `pip`.\n\n```\npip install probreg\n```\n\nOr install probreg from source.\n\n```\ngit clone https://github.com/neka-nat/probreg.git --recursive\ncd probreg\npip install -e .\n```\n\n## Getting Started\n\nThis is a sample code that reads a PCD file and calls CPD registration.\nYou can easily execute registrations from Open3D point cloud object and draw the results.\n\n```py\nimport copy\nimport numpy as np\nimport open3d as o3\nfrom probreg import cpd\n\n# load source and target point cloud\nsource = o3.read_point_cloud('bunny.pcd')\ntarget = copy.deepcopy(source)\n# transform target point cloud\nth = np.deg2rad(30.0)\ntarget.transform(np.array([[np.cos(th), -np.sin(th), 0.0, 0.0],\n [np.sin(th), np.cos(th), 0.0, 0.0],\n [0.0, 0.0, 1.0, 0.0],\n [0.0, 0.0, 0.0, 1.0]]))\nsource = o3.voxel_down_sample(source, voxel_size=0.005)\ntarget = o3.voxel_down_sample(target, voxel_size=0.005)\n\n# compute cpd registration\ntf_param, _, _ = cpd.registration_cpd(source, target)\nresult = copy.deepcopy(source)\nresult.points = tf_param.transform(result.points)\n\n# draw result\nsource.paint_uniform_color([1, 0, 0])\ntarget.paint_uniform_color([0, 1, 0])\nresult.paint_uniform_color([0, 0, 1])\no3.draw_geometries([source, target, result])\n```\n\n## Resources\n\n* [Documentation](https://probreg.readthedocs.io/en/latest/?badge=latest)\n\n## Results\n\n### Compare algorithms\n\n| CPD | SVR | GMMTree | FilterReg |\n|-----|-----|---------|-----------|\n| | | | |\n\n### Noise test\n\n| ICP(Open3D) | CPD | FilterReg |\n|-------------|-----|-----------|\n| | | |\n\n### Non rigid registration\n\n| CPD | SVR |\n|-----|-----|\n| | |\n\n### Feature based registration\n\n| FPFH FilterReg |\n|----------------|\n| |\n\n### Time measurement\n\nExecute an example script for measuring time.\n\n```\nOMP_NUM_THREADS=1 python time_measurement.py\n\n# Results [s]\n# ICP(Open3D): 0.02030642901081592\n# CPD: 3.6435861150093842\n# SVR: 0.5795929960149806\n# GMMTree: 0.34479290700983256\n# FilterReg: 0.039795294986106455\n```", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/neka-nat/probreg", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "probreg", "package_url": "https://pypi.org/project/probreg/", "platform": "", "project_url": "https://pypi.org/project/probreg/", "project_urls": { "Homepage": "https://github.com/neka-nat/probreg" }, "release_url": "https://pypi.org/project/probreg/0.1.6/", "requires_dist": null, "requires_python": "", "summary": "Probablistic point cloud resitration algorithms", "version": "0.1.6" }, "last_serial": 5902408, "releases": { "0.0.8": [ { "comment_text": "", "digests": { "md5": "c175eeb56f9c75a5c9f467279c48240d", "sha256": "06c50291320eb71eff91629b548f449fc689be6a1e01bcabd7f55bcc4f536bd1" }, "downloads": -1, "filename": "probreg-0.0.8.tar.gz", "has_sig": false, "md5_digest": "c175eeb56f9c75a5c9f467279c48240d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2335638, "upload_time": "2019-03-22T11:48:18", "url": "https://files.pythonhosted.org/packages/8b/30/1a4916d4ec1a2e80e942af386895b21b986d17e1ec0c20d31ae9b391161f/probreg-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "681f81d2cd161ba66a73ffea68dbceff", "sha256": "0a4004c3887583980e9cb340deb4ee3dea1ce976f118dcabadc2dbde054c4e07" }, "downloads": -1, "filename": "probreg-0.0.9.tar.gz", "has_sig": false, "md5_digest": "681f81d2cd161ba66a73ffea68dbceff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2335668, "upload_time": "2019-03-24T15:30:37", "url": "https://files.pythonhosted.org/packages/41/18/9606fb4fc7f2d377a6075f2ee0f13026910b8b5f501c10ba39b5476d9997/probreg-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "ae835781bbe1777c7995c1e859d4b0b0", "sha256": "650d91aea64e628c978924a8f7ffac07796069b8058eeef6516737bf90757818" }, "downloads": -1, "filename": "probreg-0.1.0.tar.gz", "has_sig": false, "md5_digest": "ae835781bbe1777c7995c1e859d4b0b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 905440, "upload_time": "2019-05-24T14:11:46", "url": "https://files.pythonhosted.org/packages/e9/64/b19b129a84194bd120bec76fb74332fd597cb8013a37082ee8b6841fcfe5/probreg-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "f9d8d58310cb0754c2e16a67f20bded3", "sha256": "e43d6c1202dc54b4a9cd182d4ba011634e742ab6b321d9fef982cd891c14e8df" }, "downloads": -1, "filename": "probreg-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f9d8d58310cb0754c2e16a67f20bded3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 905681, "upload_time": "2019-07-13T17:41:37", "url": "https://files.pythonhosted.org/packages/d3/fc/57b8b271295dbe32a883ac466723fc2ba1d2340e9ad282e9890128dfff94/probreg-0.1.1.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "1ff862ad0c0deff21b73d112515365a9", "sha256": "e715887f281f9057d60bf57812613dcd28d90fb2589eabf387341dac7937dad7" }, "downloads": -1, "filename": "probreg-0.1.5.tar.gz", "has_sig": false, "md5_digest": "1ff862ad0c0deff21b73d112515365a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 906639, "upload_time": "2019-09-20T15:52:21", "url": "https://files.pythonhosted.org/packages/84/00/0cc052f889340e60e0f6d55920c04ef66167f8e6b04de6ec99ebe9b16428/probreg-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "6b9f9849a3350ac07094b2cb8bf8d7e1", "sha256": "29e702c10598f01770541ac6ec1ef1173c0b5f0edab853fea8193828d02e7bef" }, "downloads": -1, "filename": "probreg-0.1.6.tar.gz", "has_sig": false, "md5_digest": "6b9f9849a3350ac07094b2cb8bf8d7e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 906704, "upload_time": "2019-09-29T11:27:35", "url": "https://files.pythonhosted.org/packages/51/79/316b9c89a6cb668c029ebfcb37ce6628662beb55dc94d6f363f05eca11ee/probreg-0.1.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6b9f9849a3350ac07094b2cb8bf8d7e1", "sha256": "29e702c10598f01770541ac6ec1ef1173c0b5f0edab853fea8193828d02e7bef" }, "downloads": -1, "filename": "probreg-0.1.6.tar.gz", "has_sig": false, "md5_digest": "6b9f9849a3350ac07094b2cb8bf8d7e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 906704, "upload_time": "2019-09-29T11:27:35", "url": "https://files.pythonhosted.org/packages/51/79/316b9c89a6cb668c029ebfcb37ce6628662beb55dc94d6f363f05eca11ee/probreg-0.1.6.tar.gz" } ] }