by tum-vision

tum-vision / fastfusion

Volumetric 3D Mapping in Real-Time on a CPU

445 Stars 152 Forks Last release: Not found GNU General Public License v2.0 7 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


Volumetric 3D Mapping in Real-Time on a CPU

This code implements the approach for real-time 3D mapping on a CPU as described in the following research paper:

Volumetric 3D Mapping in Real-Time on a CPU (F. Steinbruecker, J. Sturm, D. Cremers), In Int. Conf. on Robotics and Automation, 2014.

alt tag

Demo video:

@string{icra="Int. Conf. on Robotics and Automation"}
  author = {F. Steinbruecker and J. Sturm and D. Cremers},
  title = {Volumetric 3D Mapping in Real-Time on a CPU},
  booktitle = icra,
  year = {2014},
  address = {Hongkong, China},
  titleurl = {steinbruecker_etal_icra2014.pdf},
  topic = {3D Reconstruction},
  keywords =  {RGB-D,Fusion,3d-reconstruction}


$ git clone`

$ cd fastfusion

$ cmake .

$ make

Preparation of the data

The software takes a text file as input which contains per file - the camera pose - the depth image filename - the color image filename

You can either generate such a file yourself (e.g., by running Christan Kerl's DVO SLAM:

available as open source on our homepage) or you can download sequences from the TUM RGB-D benchmark:

For simplicity, we take a pre-recorded sequence from the TUM RGB-D benchmark.

$ mkdir ~/data

$ cd ~/data

$ wget

$ tar xvzf rgbd_dataset_freiburg3_long_office_household.tgz

Now we need to generate the text file. For this, we use the tool from the RGB-D benchmark website. We need to run it twice, as we join the camera poses, the depth image list and the color image list into a single file:

$ cd ~/fastfusion/

$ ./ ~/data/rgbd_dataset_freiburg3_long_office_household/groundtruth.txt ~/data/rgbd_dataset_freiburg3_long_office_household/depth.txt > tmp.txt

$ ./ tmp.txt ~/data/rgbd_dataset_freiburg3_long_office_household/rgb.txt > ~/data/rgbd_dataset_freiburg3_long_office_household/associate.txt

The resulting text file should look as follows:

$ head ~/data/rgbd_dataset_freiburg3_long_office_household/associate.txt
1341847980.790000 -0.6832 2.6909 1.7373 0.0003 0.8617 -0.5072 -0.0145 1341847980.786879 depth/1341847980.786879.png 1341847980.786856 rgb/1341847980.786856.png
1341847980.820100 -0.6821 2.6914 1.7371 0.0003 0.8609 -0.5085 -0.0151 1341847980.822989 depth/1341847980.822989.png 1341847980.822978 rgb/1341847980.822978.png
1341847980.850000 -0.6811 2.6918 1.7371 0.0001 0.8610 -0.5084 -0.0159 1341847980.854690 depth/1341847980.854690.png 1341847980.854676 rgb/1341847980.854676.png

Running the code

$ ./bin/onlinefusion ~/data/rgbd_dataset_freiburg3_long_office_household/associate.txt --thread-fusion

After some debugging output on the console, a window with a 3D viewer should open. To start the reconstruction process, press "S".

If you run the program for the first time, press and hold the CTRL key and turn your scroll wheel. This is only needed once to "free" the camera viewpoint. After this, you can pan (right click) and rotate (left click) the view as you wish using your mouse.

Further options

   ./bin/onlinefusion  [--intrinsics ] [--imagescale ]
                       [--threshold ] [--scale ]
                       [--max-camera-distance ]
                       [--consistency-checks ] [-k ] [-e ]
                       [-s ] [--incremental-meshing] [-c] [-b] [-v]
                       [--thread-image] [--thread-fusion]
                       [--thread-meshing] [-l ] [--] [--version]
                       [-h]  ...


--intrinsics File with Camera Matrix

--imagescale Image Depth Scale

--threshold Threshold

--scale Size of the Voxel

--max-camera-distance Maximum Camera Distance to Surface

--consistency-checks Number of Depth Consistency Checks

-k , --imagestep Use every kth step

-e , --endimage Number of the End Image

-s , --startimage Number of the Start Image

--incremental-meshing Perform incremental Meshing

-c, --loopclosures Read Multiple Trajectories and perform Loop Closures

-b, --buffer Buffer all Images

-v, --viewer Show a Viewer after Fusion

--thread-image Thread reading the Images from Hard Disk

--thread-fusion Thread the Fusion inside the Viewer

--thread-meshing Thread the Meshing inside the Fusion

-l , --loadmesh Loads this mesh

--, --ignore_rest Ignores the rest of the labeled arguments following this flag.

--version Displays version information and exits.

-h, --help Displays usage information and exits.

(accepted multiple times) The File Names

alt tag

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.