介绍
在深度相机室内实时稠密三维重建领域,BundleFusion是目前效果最好的开源算法框架。论文地址:https://arxiv.org/pdf/1604.01093.pdf
演示视频截取片断:
视频地址:https://www.youtube.com/watch?v=keIirXrRb1k
在演示视频中,structure sensor是卡在iPad上,将采集到的数据通过无线网络传给台式机(带GPU),匹配、优化和重建工作都是在台式机上运行,重建的结果再通过无线网络传到iPad上显示。
重建效果图:
一、配置
1、cuda8.0安装
#建议安装:cuda8.0
,vs2013
#卸载cuda10.0
在控制面板/卸载程序,卸载掉所有带有NVIDIA的程序,卸载顺序不影响
#下载cuda8.0:https://developer.nvidia.com/cuda-80-ga2-download-archive ,并运行安装。
#验证安装成功,输入nvcc --version
2、DirectX SDK安装
下载地址:http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe ,运行安装。
#若运行安装出现 错误 ErrorCode:s1023
解决办法1:
控制面板卸载以上两项,再重新安装DXSDK_Jun10.exe即可。
大部分通过这个方法可以解决,如果以上两项不存在或者卸载后仍不能解决问题(比如我),可能Microsoft Visual C++ 运行库安装有问题,得删除并重新安装 Microsoft Visual C++ 运行库
,步骤如下:
1、控制面板卸载名称包含“Microsoft Visual C++”和“Redistributable”的所有程序
2、下载并安装以下所有软件:
Microsoft Visual C++ 2005 SP1 Redistributable (x86)
Microsoft Visual C++ 2005 SP1 Redistributable (x64)
Microsoft Visual C++ 2008 SP1 Redistributable (x86)
Microsoft Visual C++ 2008 SP1 Redistributable (x64)
Microsoft Visual C++ 2010 SP1 Redistributable (x86)
Microsoft Visual C++ 2010 SP1 Redistributable (x64)
Microsoft Visual C++ 2012 Update 4 Redistributable(x86 和 x64)
Microsoft Visual C++ 2013 Update 5 Redistributable Package(x86 和 x64)
Microsoft Visual C++ 2015 Update 3 Redistributable(x86 和 x64)
注意:
- 每个下载的文件名均相同,因此在安装它之前,请确保不覆盖之前的文件。下载一个安装一个,然后再下载下一个并安装,依此类推。
- 64 位系统上需要 x86 和 x64 版本。32 位系统只需要 x86 版本。
3、重启后,控制面板卸载2010两项,再重新安装DXSDK_Jun10.exe,即可解决。
二、vs2013代码生成
BundleFusion GitHub地址:https://github.com/niessner/BundleFusion
配置过程主要参考这里
从GitHub上下载该BundleFusion,并解压,得到工程 BundleFusioin-master
1、mLib与 mLib external配置
mLib
下载地址:https://github.com/niessner/mLib ,解压后,替换掉目录 BundleFusion-master\external\mLib
mLib external
下载地址:https://www.dropbox.com/s/fve3uen5mzonidx/mLibExternal.zip?dl=0 ,解压后,放到 BundleFusioin-master 同级目录
,网址访问不了的话可以用我传到网盘的mLibExternal.zip:链接:https://pan.baidu.com/s/1CJysQCHl4t7RPfvqliwfew 提取码:0x4t
最终目录结构:
1 | bundlefusion |
2、cuda设置
修改cuda版本
用VS2013打开 BundleFusion-master\FriedLiver\FriedLiver.sln
工程,如果cuda版本不是原代码设置的cuda7.0,就会出现如下错误:
修改 BundleFusion-master\FriedLiver\FriedLiver.vcxproj
文件,用vs code打开该文件,并修改如下两行:
再次打开就不会报错了。
显卡计算能力设置
选择适合你显卡的compute能力,显卡计算能力在这里查询
我的笔记本显卡NVIDIA GeForce MX150,计算能力与GeForce 940M等同,为5.0,在工程的配置选项中设置如下:
3、相机类型设置(以apt0.sens离线数据为例)
输入类型
输入数据可以为Kinect v1,Kinect v2,PrimeSenseSensor,IntelSensor,RealSense,StructureSensor以及SensorDataReader(离线数据)
具体可以查看FriedLiver.cpp
中7-103行的内容
没有深度相机的,以离线数据office3.sens
为例,下载地址:http://graphics.stanford.edu/projects/bundlefusion/
修改GlobalAppState.h
因为使用的是离线数据,将GlobalAppState.h
中深度相机全部注释掉。
注:如果用深度相机(如:Kinect v1)实时运行,用哪个将哪个取消注释,并安装对应SDK。
4、生成FriedLiver.exe
修改为 Release
版本,然后选择 生成->生成解决方法
编译通过后,如下图:
在BundleFusion-master\FriedLiver\x64\Release
中生成可执行文件FriedLiver.exe
三、运行与结果
1、配置文件修改
将BundleFusion-master\FriedLiver
目录下的 zParametersBundlingDefault.txt
和 zParametersDefault.txt
拷贝到 BundleFusion-master\FriedLiver\x64\Release
修改zParametersDefault.txt
用vs code打开 zParametersDefault.txt
配置文件,选择输入类型,这里使用离线数据,修改第2行,设置s_sensorIdx = 8
。如果用深度相机(如:Kinect v1)实时运行,修改为对应的序列号。
修改第49行,设置s_hashNumSDFBlocks = 100000
修改第58行,设置输入路径s_binaryDumpSensorFile = "../data/office3.sens"
将下载的office3.sens
放置到BundleFusion-master\FriedLiver\x64\data
修改zParametersBundlingDefault.txt
双击运行后,若出现窗口崩溃或者没有响应直接跳出,如下图:
用vs code打开 zParametersBundlingDefault.txt
配置文件,修改第30行,设置s_maxNumImages = 400
2、运行结果
配置修改后,双击运行FriedLiver.exe
按下tab键
,如下图所示,按照提示与软件进行交互,按下ctrl+2
显示带颜色深度,按下ctrl+3
显示彩色视频流,按下ctrl+9
导出当前模型到FriedLiver\x64\Release\scans\scan.ply
,具体实现代码查看FriedLiver\Source\DepthSensing\DepthSensing.cpp
3、模型生成
运行结束后,BundleFusion-master\FriedLiver\x64\data\office3.sens
同目录下生成office3.ply,用meshlab打开
4、在Kinect v1上的实时运行
安装 Kinect SDK v1.8
Kinect for Windows SDK v1.8
Kinect for Windows Developer Toolkit v1.8
下载后默认安装
设置Kinect v1输入
重新打开 BundleFusion-master\FriedLiver\FriedLiver.sln
工程,将GlobalAppState.h
中第三行取消注释
选择 生成->生成解决方法
,即可编译通过。
zParametersDefault.txt
配置文件,选择输入类型,这里使用Kinect v1,修改第2行,设置s_sensorIdx = 0
实时运行
插上Kinect v1,双击运行FriedLiver.exe