KinFu --- KinectFusion的开源实现

 

转自:http://blog.csdn.net/coker/article/details/7423302,谢谢coker同学的分享。

 

KinectFusion是微软研究院的一个项目,研究用Kinect来实时地重构3D表面,最终用于人机交互。

先看视频:http://research.microsoft.com/en-us/projects/surfacerecon/

算法在此:http://research.microsoft.com/pubs/155378/ismar2011.pdf

 

KinFu是KinctFusion的开源实现,由PCL开发团队开发,目前还没有进入release版本。

看这里:http://pointclouds.org/news/kinectfusion-open-source.html

 

迫不及待想试试效果,便直接编译代码,运行时才发现我的显卡不支持。。。。

KinFu对显卡的要求很高,现在也没有正式的最低配置发布出来,以下是猜测可以运行的配置:

Nvidia的Fermi架构显卡;支持CUDA,而且CC(Compute Capability)在2.0以上;显存至少750M;

 

有强悍显卡的同学可以按照以下步骤编译,看能否运行(能运行的请将配置发到评论里,谢谢):

Windows下的详细过程在这里:

http://pointclouds.org/documentation/tutorials/compiling_pcl_windows.php

http://razorvision.tumblr.com/post/14221437255/compiling-the-open-source-kinect-fusion-pcl-point

 

以下附加简要说明:

我的系统:Windows 7, VS2010 Pro

 

1. 代码的SVN Repository URL:http://svn.pointclouds.org/pcl/trunk      

     // 我用的是TortoiseSVN,没用过的可Google

2. 代码版本是rev 5477. 代码更新比较快,有些是无法编译的,这个版本可以。

3. 运行CMake-GUI后需要改几个设置:

   a. CMAKE --> CMAKE_INSTALL_PREFIX     // 默认是在C:\Program Files\PCL,可以改成C:\PCL,

        避免写权限的问题。

   b. BUILD --> BUILD_GPU   // 勾上这个

   c. Ungrouped Entries --> USE_PROJECT_FOLDERS   // 如果用的是Pro版本的Visual Studio,

       可以勾上这个,方便浏览工程

 

4. 编译代码前请先安装:

   a. CUDA toolkit: http://developer.nvidia.com/cuda-downloads   // 安装后没有重启提示,需要手工重启

   b. 更新显卡驱动到最新

 

5. 编译“ALL BUILD”需要花很长时间(我用了20多分钟),中间出了几个Marco问题

(这个是VS2010的问题,还没解决),点cancel继续编译。编译结束后会提示重新加载工程,

    因为生成了几个新的工程。加载后再编译一次“ALL BUILD”,新的工程便可以编译到.

 

6. 打开命令行窗口运行你编译的KinFu,这样可以看到打印信息。我的路径是

    C:\PCL\kinfu_app_debug.exe,编译的是debug版本。

7. 如果一切正常,到这里就能看到效果了。

转载于:https://www.cnblogs.com/leven20061001/archive/2012/05/02/2724709.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCL (Point Cloud Library) 是一个广泛使用的开源库,用于处理三维点云数据。KinectFusion是一种基于RGB-D相机的三维重建技术,能够实时地构建环境的三维模型。PCL中提供了GPU加速的ICP(迭代最近点)算法,可以用于KinectFusion中的点云配准。 要使用GPU加速的ICP算法,需要使用PCL的gpu模块。首先需要安装CUDA和PCL的gpu模块。安装完成后,可以使用以下代码示例来使用GPU加速的ICP算法: ```c++ #include <pcl/gpu/kinfu_large_scale/kinfu.h> #include <pcl/gpu/kinfu_large_scale/kinfuLS.h> #include <pcl/gpu/containers/device_array.h> #include <pcl/gpu/kinfu_large_scale/impl/kinfuLS.hpp> #include <pcl/point_types.h> // 创建一个kinfu对象 pcl::gpu::kinfuLS::KinfuTracker::Ptr kinfu(new pcl::gpu::kinfuLS::KinfuTracker()); // 设置kinfu的参数,比如图像分辨率、体素大小等 kinfu->volume().setSize(256, 256, 256); kinfu->volume().setTsdfTruncDist(0.03f); kinfu->setDepthTruncationForICP(4.f); kinfu->setCameraMovementThreshold(0.001f); kinfu->setIcpCoresCount(256); // 读取RGB-D数据 pcl::gpu::kinfuLS::KinfuTracker::DepthMap depth_device; pcl::gpu::kinfuLS::KinfuTracker::ColorMap color_device; // 读取深度图和彩色图像 // ... // 运行kinfu kinfu->operator()(depth_device, color_device); // 获取点云数据 pcl::PointCloud<pcl::PointXYZI>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZI>()); kinfu->volume().fetchCloud(*cloud); // 运行GPU加速的ICP算法 pcl::gpu::DeviceArray<pcl::PointXYZI> cloud_device(cloud->size()); cloud_device.upload(cloud->points); kinfu->performLastICP(cloud_device); // 获取配准后的点云 kinfu->volume().fetchCloud(*cloud); ``` 在这个例子中,首先创建了一个kinfu对象,并设置了一些参数。然后读取RGB-D数据,并运行kinfu。接着将点云数据上传到GPU,并运行GPU加速的ICP算法。最后获取配准后的点云数据。 需要注意的是,GPU加速的ICP算法需要非常强的计算能力,建议使用高性能的GPU进行计算。同时,需要根据实际情况调整一些参数,比如体素大小、ICP迭代次数等,以获得更好的配准效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值