在深度相机室内实时稠密三维重建领域,BundleFusion是目前效果最好的开源算法框架。论文地址:https://arxiv.org/pdf/1604.01093.pdf
演示视频截取片断:
视频地址:https://www.youtube.com/watch?v=keIirXrRb1k
在演示视频中,structure sensor是卡在iPad上,将采集到的数据通过无线网络传给台式机(带GPU),匹配、优化和重建工作都是在台式机上运行,重建的结果再通过无线网络传到iPad上显示。
重建效果图:
#建议安装:cuda8.0
,vs2013
#卸载cuda10.0
在控制面板/卸载程序,卸载掉所有带有NVIDIA的程序,卸载顺序不影响
#下载cuda8.0:https://developer.nvidia.com/cuda-80-ga2-download-archive ,并运行安装。
#验证安装成功,输入nvcc --version
下载地址: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)
注意:
3、重启后,控制面板卸载2010两项,再重新安装DXSDK_Jun10.exe,即可解决。
BundleFusion GitHub地址:https://github.com/niessner/BundleFusion
配置过程主要参考这里
从GitHub上下载该BundleFusion,并解压,得到工程 BundleFusioin-master
下载地址:https://github.com/niessner/mLib ,解压后,替换掉目录 BundleFusion-master\external\mLib
下载地址:https://www.dropbox.com/s/fve3uen5mzonidx/mLibExternal.zip?dl=0 ,解压后,放到 BundleFusioin-master 同级目录
,网址访问不了的话可以用我传到网盘的mLibExternal.zip:链接:https://pan.baidu.com/s/1CJysQCHl4t7RPfvqliwfew 提取码:0x4t
最终目录结构:
bundlefusion
BundleFusion-master/
external/
mLib/ # this is the submodule you replaced
data/
src/
[...]
FriedLiver/
[...]
FriedLiver.sln
[...]
mLibExternal/ # you downloaded this from Dropbox
include
libsWindows
[...]
用VS2013打开 BundleFusion-master\FriedLiver\FriedLiver.sln
工程,如果cuda版本不是原代码设置的cuda7.0,就会出现如下错误:
修改 BundleFusion-master\FriedLiver\FriedLiver.vcxproj
文件,用vs code打开该文件,并修改如下两行:
再次打开就不会报错了。
选择适合你显卡的compute能力,显卡计算能力在这里查询
我的笔记本显卡NVIDIA GeForce MX150,计算能力与GeForce 940M等同,为5.0,在工程的配置选项中设置如下:
输入数据可以为Kinect v1,Kinect v2,PrimeSenseSensor,IntelSensor,RealSense,StructureSensor以及SensorDataReader(离线数据)
具体可以查看FriedLiver.cpp
中7-103行的内容
没有深度相机的,以离线数据office3.sens
为例,下载地址:http://graphics.stanford.edu/projects/bundlefusion/
因为使用的是离线数据,将GlobalAppState.h
中深度相机全部注释掉。
注:如果用深度相机(如:Kinect v1)实时运行,用哪个将哪个取消注释,并安装对应SDK。
修改为 Release
版本,然后选择 生成->生成解决方法
编译通过后,如下图:
在BundleFusion-master\FriedLiver\x64\Release
中生成可执行文件FriedLiver.exe
将BundleFusion-master\FriedLiver
目录下的 zParametersBundlingDefault.txt
和 zParametersDefault.txt
拷贝到 BundleFusion-master\FriedLiver\x64\Release
用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
双击运行后,若出现窗口崩溃或者没有响应直接跳出,如下图:
用vs code打开 zParametersBundlingDefault.txt
配置文件,修改第30行,设置s_maxNumImages = 400
配置修改后,双击运行FriedLiver.exe
按下tab键
,如下图所示,按照提示与软件进行交互,按下ctrl+2
显示带颜色深度,按下ctrl+3
显示彩色视频流,按下ctrl+9
导出当前模型到FriedLiver\x64\Release\scans\scan.ply
,具体实现代码查看FriedLiver\Source\DepthSensing\DepthSensing.cpp
运行结束后,BundleFusion-master\FriedLiver\x64\data\office3.sens
同目录下生成office3.ply,用meshlab打开
Kinect for Windows SDK v1.8
Kinect for Windows Developer Toolkit v1.8
下载后默认安装
重新打开 BundleFusion-master\FriedLiver\FriedLiver.sln
工程,将GlobalAppState.h
中第三行取消注释
选择 生成->生成解决方法
,即可编译通过。
zParametersDefault.txt
配置文件,选择输入类型,这里使用Kinect v1,修改第2行,设置s_sensorIdx = 0