Intel Realsense深度相机实现BundleFusion

BundleFusion是由斯坦福大学、微软研究院和德国mpii共同开发的,能够实时构建出高精细度3D模型。
论文《BundleFusion: Real-time Globally Consistent 3D Reconstruction using Online Surface Re-integration》git

平台

Win10 + VS2013 + CUDA 8.0 + Realsense SR300 + GTX 980github

Realsense SR300

英特尔®实感™摄像头SR300(Intel ®RealSense ™ Camera SR300,后面简称RealSense SR300)是英特尔公司推出的第二代前置摄像头。RealSense SR300设备拥有三个镜头,分别是传统摄像头、红外摄像头和红外激光镜头。这三种镜头相互合做,经过探测挡在前面的物体所反射的红外线推断景深。web

RealSense SR300和Kinect 2.0有所不一样,RealSense SR300的深度捕获范围为从0.2到1.5米,而Kinect 2.0深度数据测量范围能够从0.5到4.5米。ide

在此以前须要配置SDK,版本是2016 R2(不要装最新版本SDK)。svg

Realsense SR300 + BundleFusion

(1)首先安装DirectX June 2010,而且配置好BundleFusion的环境(https://bericht.neopostmodern.com/posts/artist-guide-to-bundlefusion )。函数

(2)在BundleFusion中是没有Realsense相关的类的,在笔者与做者Angela Dai进行交流后得知 VoxelHashing( Github: https://github.com/niessner/VoxelHashing )中有Realsense相关的类以及类的实现。post

(3)VoxelHashing中须要对DepthSensing.vcxproj进行修改,将文件中的v140改成v120,还有将文件中的CUDA 7.5.props改成CUDA 8.0.props
在这里插入图片描述
(4)将VoxelHashing文件夹中的RealSenseSensor.cpp和RealSenseSensor.h(Source文件夹中)复制到BundleFusion下面的Source文件夹中。ui

(5)将RealSenseSensor.h中的createFirstConnected()函数的返回值改成void;processDepth()、processColor()函数的返回值改成bool(而且返回值改成return true)。xml

(6)相对应RealSenseSensor.cpp中函数实现的返回值也要作相应的改变。blog

(7)在RealSenseSensor类的父类RGBDSensor中的createFirstConnected()函数的返回值也应为void,processDepth()、processColor()函数的返回值也应为bool,由于在父类RGBDSensor中定义的这三个函数是纯虚函数,纯虚函数的实现是在该类的继承类中,因此返回值应该对应一致。

(8)将配置文件zParametersDefault.txt中的s_sensorIdx的值改成6

(9)在FriedLiver.h文件中添加 #include "RealSenseSensor.h"
在这里插入图片描述
(10)接下来作的就是在BundleFusion项目属性里面添加相关的目录,主要添加的有你的SDK安装目录,还有你的VoxelHashing工程的目录(建议与BundleFusion放在同一个文件目录下)。
在这里插入图片描述
在这里插入图片描述

最后很是感谢个人Teammate LZF和斯坦福博士Angela Dai的帮助。