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:
(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
(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]