Git Product home page Git Product logo

ewenwan / infinitam Goto Github PK

View Code? Open in Web Editor NEW

This project forked from victorprad/infinitam

4.0 3.0 2.0 3.52 MB

实时多视角融合 三位重建 深度信息融合与跟踪技术框架 https://mmcheng.net/zh/itam/

Home Page: http://www.infinitam.org

License: Other

Vim Script 0.04% CMake 3.96% C++ 81.14% Makefile 0.43% Java 0.87% Objective-C 0.43% Objective-C++ 4.58% Cuda 5.59% C 1.44% Metal 1.27% Shell 0.25%

infinitam's Introduction

InfiniTAM v3

最近需要做 动态语义slam,
经过一番搜寻从DynSLAM(https://github.com/AndreiBarsan/DynSLAM)
找到了 InfiniTAM (实时3d目标跟踪与重建) 的 开源实现。


InfiniTAM是基于voxel hashing基础上做的,我们先对voxel hashing介绍。
参考文献:”Real-time 3D Reconstruction at Scale using Voxel Hashing”。
Algorithm Overview

和 KinectFusion 一样也是利用 TSDF 模型对重建进行建模,只是在建模的时候,
不是对整个空间都划分等大小的网格,只是在场景表面的周围划分网格。


为解决 volumetric fusion 重建时,重建的空间划分成等大小的 voxel,显存消耗太多,难以重建大场景,
并且大量 voxel 更新耗费 GPU 资源问题,斯坦福图形学组提出了 voxel hashing 算法(
参考文献:”Real-time 3D Reconstruction at Scale using Voxel Hashing”),
voxel hashing 只在相机测量到的场景表面划分 voxel,而不是将整个空间都划分成 voxel,从而节省显存。
算法用 hash 表的形式存储在场景表面划分的 voxel block(8x8x8 voxels),方便 voxel block 的查询。
算法代码开源。InfiniTAM 是对 voxel hashing 的改进,算法速度更快,
适合在移动端运行。BunldeFusion mapping 部分 code 和 voxel hashing 是一样的。

voxel hashing 解析

This is the main branch of the software bundle "InfiniTAM", the current version is actively maintained by:

Victor Adrian Prisacariu [email protected]
Olaf Kaehler [email protected]
Stuart Golodetz [email protected]
Michael Sapienza [email protected]
Tommaso Cavallari [email protected]

Previous maintainers and contributors are:

Carl Yuheng Ren [email protected]
Ming Ming Cheng [email protected]
Xin Sun [email protected]
Philip H.S. Torr [email protected]
Ian D Reid [email protected]
David W Murray [email protected]

For more information about InfiniTAM please visit the project website http://www.infinitam.org.

Other related projects can be found on the AVLCode website http://www.avlcode.org.

1. Building the System

1.1 Requirements

Several 3rd party libraries are needed for compiling InfiniTAM. The given version numbers are checked and working, but different versions might be fine as well. Some of the libraries are optional, and skipping them will reduce functionality.

  • cmake (e.g. version 2.8.10.2 or 3.2.3) REQUIRED for Linux, unless you write your own build system OPTIONAL for MS Windows, if you use MSVC instead available at http://www.cmake.org/

  • OpenGL / GLUT (e.g. freeglut 2.8.0 or 3.0.0) REQUIRED for the visualisation the library should run without available at http://freeglut.sourceforge.net/

  • CUDA (e.g. version 6.0 or 7.0) OPTIONAL but REQUIRED for all GPU accelerated code at least with cmake it is still possible to compile the CPU part without available at https://developer.nvidia.com/cuda-downloads

  • OpenNI (e.g. version 2.2.0.33) OPTIONAL but REQUIRED to get live images from suitable hardware also make sure you have freenect/OpenNI2-FreenectDriver if you need it available at http://structure.io/openni

  • libpng (e.g. version 1.6) OPTIONAL, allows to read PNG input files available at http://libpng.org

  • FFMPEG (e.g. version 2.8.6) OPTIONAL, allows writing and playback of lossless FFV1 encoded videos available at https://www.ffmpeg.org/

  • librealsense (e.g. github version from 2016-MAR-22) OPTIONAL, allows to get live images from Intel Realsense cameras available at https://github.com/IntelRealSense/librealsense

  • librealsense2 (e.g. Intel® RealSense™ SDK 2.X) OPTIONAL, allows to get live images from Intel Realsense cameras available at https://github.com/IntelRealSense/librealsense

  • libuvc (e.g. github version from 2015-OCT-27) OPTIONAL, deprecated alternative to librealsense currently this works only with branch olafkaehler/master available at https://github.com/olafkaehler/libuvc

  • doxygen (e.g. version 1.8.2) OPTIONAL, builds a nice reference manual available at http://www.doxygen.org/

###1.2 Build Process

To compile the system, use the standard cmake approach:

  $ mkdir build
  $ cd build
  $ cmake /path/to/InfiniTAM -DOPEN_NI_ROOT=/path/to/OpenNI2/
  $ make

To create a doxygen documentation, just run doxygen:

  $ doxygen Doxyfile

This will create a new directory doxygen-html/ containing all the documentation.

1.3 Odds and Ends

Padding the data structure ITMVoxel in ITMLibDefines.h with one extra byte may or may not improve the overall performance on certain GPUs. On a NVidia GTX 680 it appears to do, on a GTX 780 it does not. Have a try yourself if you need the speed.

On Mac OS X 10.9 there are currently some issues with libc++ vs. libstdc++ in conjunction with CUDA. They eventually manifest in error messages like:

Undefined symbols for architecture x86_64: 
"std::ios_base::Init::Init()", referenced from:
      __GLOBAL__I_a in libITMLib.a(ITMLib_generated_ITMColorTracker_CUDA.cu.o)
      __GLOBAL__I_a in libITMLib.a(ITMLib_generated_ITMDepthTracker_CUDA.cu.o)
     [...]

In the current version of InfiniTAM these errors are avoided by specifying CMAKE_CXX_FLAGS=-stdlib=libstdc++ whenever clang is detected as complier. However, future versions of CUDA might not require this anymore or even get confused and/or require CUDA_HOST_COMPILER=/usr/bin/clang instead.

If a version of GLUT other than freeglut is used, the InfiniTAM sample application has problems on exit, as it is currently not explicitly cleaning up CUDA memory or closing the OpenNI device. Use freeglut to avoid this if you experience any problems.

Some sensors may need a small change to work correctly with OpenNI, the changes are described here.

2. Sample Programs

The build process should result in an executable InfiniTAM, which is the main sample program. For a version without visualisation, try InfiniTAM_cli. If compiled with OpenNI support, both should run out-of-the-box without problems for live reconstruction. If you have calibration information for your specific device, you can pass it as the first argument to the program, e.g.:

  $ ./InfiniTAM Teddy/calib.txt

If no OpenNI support has been compiled in, the program can be used for offline processing:

  $ ./InfiniTAM Teddy/calib.txt Teddy/Frames/%04i.ppm Teddy/Frames/%04i.pgm

The arguments are essentially masks for sprintf and the %04i will be replaced by a running number, accordingly.

3. Additional Documentation

Apart from the doxygen documentation there should also be a technical report shipped along with this package. It is also available from the official project website. Further technical information is to be found in:

@inproceedings{InfiniTAM_ECCV_2016,
  author    = {Olaf K{\"{a}}hler and
               Victor Adrian Prisacariu and
               David W. Murray},
  title     = {Real-Time Large-Scale Dense 3D Reconstruction with Loop Closure},
  booktitle = {Computer Vision - {ECCV} 2016 - 14th European Conference, Amsterdam,
               The Netherlands, October 11-14, 2016, Proceedings, Part {VIII}},
  pages     = {500--516},
  year      = {2016}
}

and

@article{InfiniTAM_ISMAR_2015,
author = {{K{\"a}hler}, O. and
		  {Prisacariu}, V.~A. and
		  {Ren}, C.~Y. and
		  {Sun}, X. and
		  {Torr}, P.~H.~S and
		  {Murray}, D.~W.},
title = "{Very High Frame Rate Volumetric Integration of Depth Images on Mobile Device}",
journal = "{IEEE Transactions on Visualization and Computer Graphics 
	   (Proceedings International Symposium on Mixed and Augmented Reality 2015}",
volume = {22},
number = {11},
year = 2015

and

@article{InfiniTAM_arXiv_2017,
author = {V A Prisacariu and O K{\"a}hler and S Golodetz and M Sapienza and T Cavallari and P H S Torr and D W Murray},
title = {{InfiniTAM v3: A Framework for Large-Scale 3D Reconstruction with Loop Closure}},
journal = {arXiv pre-print arXiv:1708.00783v1},
year = {2017}
}

History:

  • 2017-JUL-23: version 3 release
  • 2016-NOV-18: updated to reflect changes to team and project structure
  • 2015-JUL-10: updated dependencies, added reference to ISMAR paper
  • 2014-OCT-06: initial public release

infinitam's People

Stargazers

 avatar Joezey avatar  avatar  avatar

Watchers

James Cloos avatar  avatar paper2code - bot avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.