vdbfusion

C++/Python Sparse Volumetric TSDF Fusion

https://github.com/prbonn/vdbfusion

Science Score: 85.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in README
  • Academic publication links
    Links to: mdpi.com
  • Committers with academic emails
    2 of 8 committers (25.0%) from academic institutions
  • Institutional organization owner
    Organization prbonn has institutional domain (www.ipb.uni-bonn.de)
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (14.3%) to scientific vocabulary

Keywords

3dmapping lidar-point-cloud rgbd tsdf-fusion tsdf-volume

Keywords from Contributors

3d-mapping icp lidar-slam ros ros2 slam
Last synced: 6 months ago · JSON representation ·

Repository

C++/Python Sparse Volumetric TSDF Fusion

Basic Info
  • Host: GitHub
  • Owner: PRBonn
  • License: mit
  • Language: C++
  • Default Branch: main
  • Homepage:
  • Size: 9.33 MB
Statistics
  • Stars: 573
  • Watchers: 9
  • Forks: 61
  • Open Issues: 5
  • Releases: 2
Topics
3dmapping lidar-point-cloud rgbd tsdf-fusion tsdf-volume
Created about 4 years ago · Last pushed about 1 year ago
Metadata Files
Readme License Citation

README.md

VDBFusion: Flexible and Efficient TSDF Integration

C++ Python Linux PyPI version shields.io PRs Welcome Paper MIT license Open In Colab

example

This is a small utility library that implements the VDBFusion algorithm, similar to TSDF-based reconstruction pipelines but using a different data-structure (VDB).

Installation

Take a seat and relax, you only need to:

shell pip install vdbfusion

If you plan to use our C++ API then you should build this project from source. More details in the Installation instructions.

The ROS-1 C++ wrapper for this library is available at https://github.com/PRBonn/vdbfusion_ros

Usage

The code shown below is not intended to be copy pasted but rather be a spiritual guide for developers. If you really want to give this library a try you should consider checking the standalone Python, Notebooks, and C++ examples.

Data loading

NOTE: This step is not mandatory. Our API only expects points and poses but this is the easiest way to deal with 3D data.

Python C++
```python class Dataset: def __init__(self, *args, **kwargs): # Initialize your dataset here .. def __len__(self) -> int: return len(self.n_scans) def __getitem__(self, idx: int): # Returns a PointCloud(np.array(N, 3)) # and sensor origin(Eigen::Vector3d) # in the global coordinate frame. return points, origin ``` ```c++ class Dataset { // Initialize your dataset here .. Dataset(...); // Return length of the dataset std::size_t size() const { return n_scans_; } // Returns a Cloud(std::vector) // and the sensor origin(Eigen::Vector3d) in the // global coordinate frame. std::tuple operator[](int idx) const; }; ```

TSDF Fusion pipeline

Python C++
```python import vdbfusion vdb_volume = vdbfusion.VDBVolume(voxel_size, sdf_trunc, space_carving dataset = Dataset(...) for scan, origin in dataset: vdb_volume.integrate(scan, origin) ``` ```cpp #include "vdbfusion/VDBVolume.h" vdb_fusion::VDBVolume vdb_volume(voxel_size, sdf_trunc, space_carving); const auto dataset = Dataset(...); for (const auto& [scan, origin] : iterable(dataset)) { vdb_volume.Integrate(scan, origin); } ```

Visualization

For visualization you can use any 3D library you like. For this example we are going to be using Open3D. If you are using the Python API make sure to pip install open3d before trying this snippet.

Python C++
```python import open3d as o3d # Extract triangle mesh (numpy arrays) vert, tri = vdb_volume.extract_triangle_mesh() # Visualize the results mesh = o3d.geometry.TriangleMesh( o3d.utility.Vector3dVector(vert), o3d.utility.Vector3iVector(tri), ) mesh.compute_vertex_normals() o3d.visualization.draw_geometries([mesh]) ``` ```cpp #include // Extract triangle mesh (Eigen). auto [verts, tris] = vdb_volume.ExtractTriangleMesh(); // Visualize the results auto mesh = o3d::geometry::TriangleMesh( verts, tris, ) mesh.ComputeVertexNormals() o3d::visualization::DrawGeometries({&mesh}) ```

LICENSE

The LICENSE can be found at the root of this repository. It only applies to the code of VDBFusion but not to its 3rdparty dependencies. Please make sure to check the licenses in there before using any form of this code.

Credits

I would like to thank the Open3D and OpenVDB authors and contributors for making their implementations open source which inspired, helped and guided the implementation of the VDBFusion library.

Citation

If you use this library for any academic work, please cite the original paper.

bibtex @article{vizzo2022sensors, author = {Vizzo, Ignacio and Guadagnino, Tiziano and Behley, Jens and Stachniss, Cyrill}, title = {VDBFusion: Flexible and Efficient TSDF Integration of Range Sensor Data}, journal = {Sensors}, volume = {22}, year = {2022}, number = {3}, article-number = {1296}, url = {https://www.mdpi.com/1424-8220/22/3/1296}, issn = {1424-8220}, doi = {10.3390/s22031296} }

Owner

  • Name: Photogrammetry & Robotics Bonn
  • Login: PRBonn
  • Kind: organization
  • Email: cyrill.stachniss@igg.uni-bonn.de
  • Location: Bonn

Photogrammetry & Robotics Lab at the University of Bonn

Citation (CITATION.cff)

cff-version: 1.2.0
preferred-citation:
  title: "VDBFusion: Flexible and Efficient TSDF Integration of Range Sensor Data"
  doi: "10.3390/s22031296"
  year: "2022"
  type: article
  journal: "Sensors"
  url: https://www.mdpi.com/1424-8220/22/3/1296
  authors:
    - family-names: Vizzo
      given-names: Ignacio
    - family-names: Guadagnino
      given-names: Tiziano
    - family-names: Behley
      given-names: Jens
    - family-names: Stachniss
      given-names: Cyrill

GitHub Events

Total
  • Issues event: 8
  • Watch event: 80
  • Issue comment event: 10
  • Push event: 1
  • Pull request event: 1
  • Fork event: 8
Last Year
  • Issues event: 8
  • Watch event: 80
  • Issue comment event: 10
  • Push event: 1
  • Pull request event: 1
  • Fork event: 8

Committers

Last synced: 11 months ago

All Time
  • Total Commits: 26
  • Total Committers: 8
  • Avg Commits per committer: 3.25
  • Development Distribution Score (DDS): 0.423
Past Year
  • Commits: 3
  • Committers: 2
  • Avg Commits per committer: 1.5
  • Development Distribution Score (DDS): 0.333
Top Committers
Name Email Commits
Ignacio Vizzo i****o@g****m 15
Saurabh Gupta s****2@g****m 4
Sumanth Nagulavancha 8****7 2
luarzou s****o@u****e 1
Wei Zhang z****5@g****m 1
SamThomas s****l@g****m 1
Jan Kuhlmann 3****E 1
Benedikt Mersch m****h@i****e 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 35
  • Total pull requests: 18
  • Average time to close issues: about 1 month
  • Average time to close pull requests: about 1 month
  • Total issue authors: 30
  • Total pull request authors: 10
  • Average comments per issue: 2.89
  • Average comments per pull request: 2.11
  • Merged pull requests: 11
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 5
  • Pull requests: 2
  • Average time to close issues: about 2 months
  • Average time to close pull requests: 1 day
  • Issue authors: 5
  • Pull request authors: 1
  • Average comments per issue: 0.6
  • Average comments per pull request: 1.0
  • Merged pull requests: 2
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • qpc001 (5)
  • Willyzw (2)
  • lin-name (1)
  • Rockarel (1)
  • MohamedEllaithy42 (1)
  • YM5149 (1)
  • JunyuanDeng (1)
  • SunshineWYC (1)
  • changyuan79 (1)
  • swarmt (1)
  • maulanaazhari (1)
  • ignotuspeverel (1)
  • zang09 (1)
  • waveleaf27 (1)
  • kuwan2e (1)
Pull Request Authors
  • saurabh1002 (6)
  • swarmt (3)
  • sumanthrao1997 (3)
  • borongyuan (2)
  • M2-TE (2)
  • cosama (2)
  • mehermvr (2)
  • luarzou (1)
  • Willyzw (1)
  • anja-sheppard (1)
Top Labels
Issue Labels
Pull Request Labels
enhancement (2)

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 797 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 2
  • Total versions: 5
  • Total maintainers: 1
pypi.org: vdbfusion

3D Volumetric Surface Reconstruction using the VDB data structure

  • Versions: 5
  • Dependent Packages: 0
  • Dependent Repositories: 2
  • Downloads: 797 Last month
Rankings
Dependent packages count: 10.0%
Dependent repos count: 11.6%
Average: 12.4%
Downloads: 15.7%
Maintainers (1)
Last synced: 6 months ago

Dependencies

docker/builder/Dockerfile docker
  • ubuntu 20.04 build
docker/pip/Dockerfile docker
  • ubuntu 20.04 build
docker-compose.yml docker
  • gitlab.ipb.uni-bonn.de 4567/ipb-team/ipb-tools/vdbfusion
  • gitlab.ipb.uni-bonn.de 4567/ipb-team/ipb-tools/vdbfusion/pip_builder
dev-requirements.txt pypi
  • pytest * development
examples/python/requirements.txt pypi
  • PyYAML *
  • argh *
  • diskcache >=5.3.0
  • easydict *
  • natsort *
  • numpy *
  • open3d *
  • pandas *
  • scipy *
  • tqdm *
  • trimesh *
  • vdbfusion *
requirements.txt pypi
  • numpy *
pyproject.toml pypi
setup.py pypi