最近淘寶了一個二手的Kinect v1, 沒有涉足過RGB-D深度相機,感覺挺好玩的,BundleFusion算法可以實現三維的實時重建。那麼就開始安裝。
源碼是基於Window平臺下的.
我的安裝環境
- Windows 10
- CUDA 8
- VS 2013
- DirectX SDK June 2010
我首先準備好了用到的所有軟件
一個一個來解決:
安裝CUDA8.0
操作系統就不用多講了。我電腦上安裝了cuda 9.2 可以在DOS命令下輸入
nvcc -V 查看版本號
這是我按照cuda8 以後的,其實系統中可以安裝多個cuda版本,我的系統中有兩個版本,查看環境變量
如果想切換到cuda9.2的話,需要修改CUDA_PATH和PATH中的兩個地址
安裝Vs 2013
起初我電腦上有VS 2015,爲了偷懶不想安裝vs 2013 ,發現vs 2015加載項目失敗,所以還是乖乖的安裝了…
安裝DirectX SDK June 2010
安裝這個庫,有時候會遇到報錯,安裝失敗,一般是由於操作系統中已經安裝了有關vs 2010c++的開發環境
那麼在控制面板裏把它卸載掉即可,還有我當時系統中還裝了c++ 2010 的runtime的也把對應的卸載掉,否則還是安裝不上。
安裝源碼
項目第地址 http://graphics.stanford.edu/projects/bundlefusion/添加鏈接描述
下載源碼:https://github.com/niessner/BundleFusion
下載mlib:https://github.com/niessner/mLib
下載mlibexternal :http://kaldir.vc.in.tum.de/mLib/mLibExternal.zip
然後把mlib 放到bundfusion目錄下的external目錄中
mLibExternal 放在bundfusion目錄中
具體如截圖
編譯源碼
- 在編譯之前,需要修改CUDA的版本,默認情況下是CUDA7.0
用記事本或者Sublime 打開 FriedLiver/FriedLiver.vcxproj
第35、375行 把7.0 改成8.0
-
VS2013 啓動項目以後,主要編譯Release版本,然後需要設置gpu的計算力
根據GPU可以到官網查詢 -
設置傳感器的類型
用到哪個開啓哪個,然後編譯。我這主要是kinect v1 所以第一個開啓,
還行要安裝Kinectv1的驅動
到官網下載 KinectDeveloperToolkit-v1.8.0-Setup.exe
安裝完之後,開始編譯
…
在編譯是我遇到了一個問題,找不到boost的array_wrapper.h文件,當時以爲是自己還需要安裝boost 版本嗎,其實在mlibexternal中已經包含了用的所有的庫,包括opencv boost 不過確實那個頭文件不存在,但是array.h 文件存在,我用它進行了替換,然後就成功了。
運行BundleFusion
- 創建scans文件夾,用來保存掃描後的mesh
- 修改zParametersDefault.txt中的參數
s_sensorIdx = 0; // 修改成0 表示Kinect v1 其他的上面有註釋,改成對應的編號值
s_hashNumBuckets = 100000; //800000; //smaller voxels require more space
s_hashNumSDFBlocks = 100000; //200000; 100000; //smaller voxels require more space
// 可以改小些,否則需要更多的計算空間
- zParametersBundlingDefault.txt
s_maxNumImages = 800; // 1200 改成合適的即可
然後直接點擊FriedLive.exe 運行,點擊Tab鍵,顯示窗口會出現幫助等操作,按2 加載彩色深度圖,9 直接把掃描的結果保存到scans 文件中
速度還是可以的,不過可能是由於kinect v1 精度不高,所以質量不是太好,比較成本比較廉價嘛,該算法我還沒有具體研究過的,但是看到代碼框架是用到了siftgpu,也是基於特徵點進行匹配的,所以在掃描的時候如果畫面的特徵太少或者是一個白牆的話,很容易卡着不動了,這一點需要注意,接下來要研究裏面的源碼才行。