BundleFusion 转

https://blog.csdn.net/ffcjjhv/article/details/89221992

 

 

介绍

在深度相机室内实时稠密三维重建领域,BundleFusion是目前效果最好的开源算法框架。论文地址:https://arxiv.org/pdf/1604.01093.pdf
演示视频截取片断:
在这里插入图片描述
视频地址:https://www.youtube.com/watch?v=keIirXrRb1k
在演示视频中,structure sensor是卡在iPad上,将采集到的数据通过无线网络传给台式机(带GPU),匹配、优化和重建工作都是在台式机上运行,重建的结果再通过无线网络传到iPad上显示。
重建效果图:
在这里插入图片描述

一、配置

1、cuda8.0安装

#建议安装:cuda8.0vs2013
#卸载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

最终目录结构:

bundlefusion
	BundleFusion-master/
	  external/
	    mLib/ # this is the submodule you replaced
	      data/
	      src/
	      [...]
	  FriedLiver/
	    [...]
	    FriedLiver.sln
	    [...]
	mLibExternal/ # you downloaded this from Dropbox
	  include
	  libsWindows
	  [...]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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.txtzParametersDefault.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
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BundleFusion算法虽然在实时重建和场景重建方面有一定的优势,但也存在一些不足之处: 1. 对大规模场景的处理能力有限:BundleFusion算法在处理大规模场景时可能会面临内存和计算资源限制的挑战。由于需要存储和处理大量的点云数据,算法的实时性能可能会受到限制。 2. 对运动快速或动态场景的鲁棒性较差:BundleFusion算法在处理运动快速或动态场景时可能会出现模糊或伪影等问题,导致重建结果的不准确性。算法对于相机姿态变化和场景动态性的鲁棒性有待改进。 3. 对纹理缺乏鲁棒性:由于BundleFusion算法主要依赖于特征点的提取和匹配,对于纹理缺乏或低纹理区域的处理可能会存在困难。这可能导致在低纹理区域的重建结果较差。 4. 对平面结构和非平面结构的处理不平衡:BundleFusion算法在处理平面结构和非平面结构时可能存在处理不平衡的问题。对于非平面结构,算法可能需要更复杂的建模和优化策略来捕捉其几何形状和细节。 5. 受限于输入传感器:BundleFusion算法对输入传感器的要求较高,需要精确的相机姿态和深度图像信息。这可能限制了算法在一些设备或传感器上的适用性。 综上所述,BundleFusion算法在实时重建和场景重建方面具有一定的局限性。然而,随着技术的不断发展和改进,这些问题有望得到进一步解决,并提高算法的稳定性和鲁棒性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值