BundleFusion编译与使用
最近淘宝了一个二手的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,也是基于特征点进行匹配的,所以在扫描的时候如果画面的特征太少或者是一个白墙的话,很容易卡着不动了,这一点需要注意,接下来要研究里面的源码才行。
上一篇: CLDC HI虚拟机 虚拟机OSJavaMELinuxSymbian
下一篇: 小试Netbeans6.5中的“web应用程序的JavaMe客户端” JavaMEWeb应用服务器NetbeansWebService
推荐阅读