1. 程式人生 > >Intel Realsense深度相機實現BundleFusion

Intel Realsense深度相機實現BundleFusion

BundleFusion是由斯坦福大學、微軟研究院和德國mpii共同開發的,可以實時構建出高精細度3D模型。
論文《BundleFusion: Real-time Globally Consistent 3D Reconstruction using Online Surface Re-integration》

平臺

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

Realsense SR300

英特爾®實感™攝像頭SR300(Intel ®RealSense ™ Camera SR300,後面簡稱RealSense SR300)是英特爾公司推出的第二代前置攝像頭。RealSense SR300裝置擁有三個鏡頭,分別是傳統攝像頭、紅外攝像頭和紅外鐳射鏡頭。這三種鏡頭相互合作,通過探測擋在前面的物體所反射的紅外線推斷景深。

RealSense SR300和Kinect 2.0有所不同,RealSense SR300的深度捕獲範圍為從0.2到1.5米,而Kinect 2.0深度資料測量範圍可以從0.5到4.5米。

在此之前需要配置SDK,版本是2016 R2(不要裝最新版本SDK)。

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相關的類以及類的實現。

(3)VoxelHashing中需要對DepthSensing.vcxproj進行修改,將檔案中的v140改為v120,還有將檔案中的CUDA 7.5.props改為CUDA 8.0.props
在這裡插入圖片描述
(4)將VoxelHashing資料夾中的RealSenseSensor.cpp和RealSenseSensor.h(Source資料夾中)複製到BundleFusion下面的Source資料夾中。

(5)將RealSenseSensor.h中的createFirstConnected()函式的返回值改為void

;processDepth()、processColor()函式的返回值改為bool(並且返回值改為return true)。

(6)相對應RealSenseSensor.cpp中函式實現的返回值也要做相應的改變。

(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的幫助。
Contact me:[email protected]