KinectFusion是微软研究院的一个项目,使Kinect可以作为3D物体扫描仪,代码开源在PCL(Point Cloud Library)点云库中,去年在Windows下配好环境,尝试了一下效果,没有做总结,最近将依次把相关的东西总结一下同时也重新学习,欢迎大家一起讨论,批评指正。
- KinectFusion 相关的两篇论文,感兴趣的可以去网上下载:
算法 KinectFusion: Real-time dense surface mapping and tracking. [R. A. Newcombe et al, 2011]
实现 KinectFusion: real-time 3d reconstruction and interactionusing a moving depth camera. [S. Izadi, D. Kim, O.Hilliges et al, 2011]
由源码编译的官网教程: http://pointclouds.org/documentation/tutorials/compiling_pcl_windows.php
一个中国人的博客: http://zhan.renren.com/tsinstudio?gid=3602888498031631737&checked=true
一个外国人的博客: http://razorvision.tumblr.com/post/14221437255/compiling-the-open-source-kinect-fusion-pcl-point
有一个支持CUDA的Nvidia独立显卡,上面中国人的博客上提到要求Compute Capability大于2.2,具体安装CUDA后,手册中有CUDA-Capable GPU List ,我的显卡是Geforce GTX 650,Compute Capability=3.0。
1.安装cmake2.8.3以上版本,可以在官网上下载,用于编译PCL源码和KinectFusion。我用的是2.8.10.2。
2.下载DownLoadSVN,可以Google到,用于下载PCL源码。此步骤可略。
3.下载CUDA,至少4.0以上,我下载的是 CUDA 5.0.35安装包,包括the CUDA Toolkit, SDK code samples, 和 developer drivers.
注意:避免安装多个版本的显卡驱动和CUDA,会报错。此步骤我没有选NVIDIA Display Driver 306.94 ,因为一般按显卡的时候都会装了驱动。
注意装的是32位的还是64位的。
3.用DownLoadSVN下载PCL源码,教程在此: http://pointclouds.org/documentation/tutorials/compiling_pcl_windows_3rdparty_installers.php
建议用Cmake自己编译源码。我也试过all in one安装包,可以用VS成功编译测试程序,但是对于编译KinectFusion没有好处,再次在Cmake中编译时会找不到环境路径在哪里更改,而且预编译的安装包一般更新较慢,官网上有些新的更新都没有包含在里面,最终还是卸载了重新手动自己编译。此教程中第三方依赖环境是用预编译好的包单独安装上的, http://pointclouds.org/downloads/windows.html 可下载。
下载成功后弹出“Done”对话框,过程中我有几个图片和其他文件显示超时,可能是因为国内的缘故,此步骤也可以不用SVN直接下载。
4.编译下载下来的PCl源码
打开Cmake.gui(图形化界面),按照上一步的教程编译。Boost等第三方是单独下载安装的,安装第三方时不要更改原路径,lib文件等有可能找不到。路径如果找不到则需手动查找。版本OpenNi1.5.4.0。VTK5.8.0。build选项一定要选择的有GPU,CUDA,点击configure,直到configure success,再generate success。
Qt是相关图形化界面的,如果你想看带图形化界面的示例或者自己开发图形化界面的,建议安装。这里安装的是Qt_4.8.0_msvc2010_win32;
注意:要编译KinFu一定要选上相关cuda和gpu的编译选项。Configure后出现app_in_hand_scanner和gpu_kinfu和gpu_kinfu_large_scale选上,其余编译好的还有一些实例和测试程序。
结果显示下面子模块将被
built:
common
octree
io
kdtree
search
sample_consensus
filters
2d
geometry
features
ml
segmentation
visualization
surface
registration
keypoints
tracking
recognition
stereo
apps
outofcore
examples
people
global_tests
tools
5. 到pcl/build目录下找到刚才CMake得到的vs工程,打开PCL工程,右键All Build生成,生成静态库,动态链接库和执行程序,这个过程会比较慢,可能1到几个小时,可以干些别的事情了,过程中可能弹出某某外部环境以改变,是否重新加载,点击是,继续生成。网上有人说这个过程中100多到300多个工程,总有个别编译不成功的情况,只要主要模块没有丢失,而且你要的工程编译成功就可。顺利的话,生成成功,其中pcl_kinfu_app就是KinectFusion。可以连上Kinect设备,按照-help依次尝试,重建自己身边的场景啦!
附:
下面这些编译选项这些是PCL主要的模块,基于点云库的程序大多都用到,KinFu,in_hand_scanner,和KinFu_LargeScale都用到。
common常用项
io 输入输出
filter 滤波
features各种特征提取
keypoints 关键点提取
search,octree,kdtree 查询点临近点查找
sample_consensus 平面,圆柱曲面聚类
segmentation 分割包括颜色分割
registration 匹配,包括ICP和特征匹配
visualization 视觉渲染