KinectFusion中用到的TSDF Fusion

原po:https://blog.csdn.net/qq_31785865/article/details/78524429

最近在看关于稠密三维重建的相关算法,看到了KinectFusion,KinectFusion是微软研究院研发的基于Kinect实现的稠密三维重建项目。采用GPU加速的KinectFusion可以实时的实现稠密三维重建。流程步骤如下图所示:

  1. Depth Map Conversion:读入的深度图像转换为三维点云,计算每一个点云的法向量;
  2. Camera Tracking(map-to-frame):通过上一次对map中点云对上一帧的投影,用ICP对当前帧进行匹配求解位姿;
  3. Volumetric Integration:根据步骤2的位姿,将当前帧的点云融合到网格模型中去,这里用了TSDF
  4. Raycasting :根据当前帧相机位姿将模型中的点云投影到当前帧并且计算其法向量,用来在步骤2中对下一帧的输入图像配准。

    这里重点学习了一下TSDF 
    TSDF(Truncated Signed Distance Function)的作用是将点云的深度估计值和深度相机的测量值进行融合,提高深度估计的精度,改善地图效果。流程如下图所示: 

将重建空间进行体素划分,如下图

我们将整个空间的体素全部存入GPU运算,每个线程处理一条(x,y)。即对于(x,y,z)的晶格坐标,每个GPU进程扫描处理一个(x,y)坐标下的晶格柱。

    1. 1,2:对于每个x,y坐标下的体元g,并行的从前往后扫描
    2. 将晶格坐标g转换到对应的世界坐标系点vg
    3. 对于每次TSDF操作时的拍摄变换Ti反变换到对应的相机坐标系坐标v
    4. 相机坐标系点v投影到图像坐标点p,从3D到2D
    5. 如果v在此摄像机的投影范围内,用它修正现有tsdf表示
    6. sdfi是该相机坐标系点vg到本次相机原点ti的距离与本次观测深度Di(p)的差值
    7. 8-11为截断的过程,Truncated的意义所在,用max truncation表示选取的截断范围,此值将会关系到最后重建结果的精细程度
    8. 如果差值为正,表示该晶格在本次测量的面的后面
    9. tsdfi赋值【0,1】之间,越靠近观测面的地方值越接近0
    10. 如果差值为负,表示该晶格在本次测量的面的前面
    11. tsdfi赋值【-1,0】之间,越靠近观测面的地方值越接近0
    12. 选取本次计算值的tsdf的权值wi,这个权值的选取直接关系到图片的适应性,以及抗噪声的能力,其实这里有点类似卡尔曼滤波。注意这里每次权值+1的操作基于这样的原因,由于只有在相机拍摄范围内的点才会进入求tsdf的操作,每次的权值在原先的基础上增加1能照顾到迅速变化的或很少扫描到的面的变化。
    13. 加权平均求出tsdfavg
    14. 将wi和tsdfavg存储在对应的晶格,进行下个晶格的扫描操作 
      经过上面的扫描,最终立方体晶格中存储的tsdf值形成了重建物体外是负值,物体内部是正值,物体表面是0值得形式(可能没有准确的零值,但是可以根据正负值插值求出零值点,所以最后物体表面的分辨率将会超过晶格的分辨率)

转:TSDF in Kinect fusion的更多相关文章

  1. Kinect for Windows SDK开发入门(十九):Kinect Fusion

        Kinect for Windows SDK1.7中引入了Kinect Fusion功能.在1.8的SDK中对该功能进行了改进和强化,Kinect Fusion能够使得我们使用Kinect f ...

  2. [译]Kinect for Windows SDK开发入门(十八):Kinect Interaction交互控件

    本文译自 http://dotneteers.net/blogs/vbandi/archive/2013/03/25/kinect-interactions-with-wpf-part-i-getti ...

  3. Kinect for Windows SDK 1.8的改进及新特性

    今年3月, 微软推出了Kinect for Windows SDK 1.7 更新,包括了手势识别 Kinect Interactions 和实时 3D 建模 Kinect Fusion 两项新技术. ...

  4. 【翻译】Kinect v1和Kinect v2的彻底比较

      本连载主要是比较Kinect for Windows的现行版(v1)和次世代型的开发者预览版(v2),以C++开发者为背景介绍进化的硬件和软件.本文主要是对传感的配置和运行条件进行彻底的比较.   ...

  5. (转) SLAM系统的研究点介绍 与 Kinect视觉SLAM技术介绍

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     SLAM系统的研究点介绍 本文主要谈谈SLAM中的各个研究点,为研究生们(应该是博客的多数读者吧)作一个提纲挈领的摘要.然后,我 ...

  6. Kinect开发笔记之二Kinect for Windows 2.0新功能

    这是本博客翻译文档的第一篇文章.笔者已经苦逼的竭尽全力的在翻译了.但无奈英语水平也是非常有限.不正确或者不妥当不准确的地方必定会有,还恳请大家留言或者邮件我以批评指正.我会虚心接受. 谢谢大家.   ...

  7. Kinect实现简单的三维重建

    Kinect想必大家已经很熟悉了,最近基于Kinect的创意应用更是呈井喷状态啊!看到很多国外大牛用Kinect做三维重建,其中最著名的要数来自微软研究院的Kinect Fusion了,可以看看下面这 ...

  8. 基于三个kinect的人体建模

       单个kinect的人体重建,在Kinect SDK 1.8中,Kinect Fusion的效果已经很不错了.其缺点显而易见,一是扫描时间长,重建对象也需要长时间保持静态:二是需要人体或者kine ...

  9. Kinect 开发 —— Kinect Interaction 交互控件

    Kinect Interactions 提供了一些新的带有姿势识别的控件如 push-to-press 按钮, grip-to-pan 列表控件, 而且支持多用户,同时二个人进行的交互,这些新添加的控 ...

随机推荐

  1. docker部署springboot应用

    1.安装运行node image docker pull java:8 2.将编译后的jar包上传到主机上 3.编写dockerfile,并创建镜像 Dockerfile FROM java:8MAI ...

  2. python3实例

    1.一行代码求一个数的阶乘 例如:求5的阶乘 from functools import reduce print((lambda k: reduce(, k+), ))()) 借鉴:https:// ...

  3. 纯JS 10分钟 实现图片懒惰加载

    知识点: 1:h5 新增选择器  document.querySelectorAll 2:JS 经典,防抖 3:距离判断:getBoundingClientRect  思路:通过浏览器滚动事件, 判断 ...

  4. Vue源码分析(二) : Vue实例挂载

    Vue源码分析(二) : Vue实例挂载 author: @TiffanysBear 实例挂载主要是 $mount 方法的实现,在 src/platforms/web/entry-runtime-wi ...

  5. "Could not resolve host: mirrorlist.centos.org; Unknown error"解决方法

    这两天学习历程可谓历尽坎坷,昨天在vSphere Client中安装完CentOS系统后,今天尝试在系统中安装mysql数据库. 由于刚接触Linux,所以对于一些常用指令和操作并不熟悉,也是一边百度 ...

  6. osg fbx 模型树结构

    void Test::printOsgGroup(osg::ref_ptr<osg::Group> &groupParam) { qDebug() <<groupPar ...

  7. HBase里配置SNAPPY压缩以后regionserver启动不了的问题

    配置了HBase的SNAPPY压缩以后,出现regionserver启动不了的问题.分析应该是属性配置错了! 官网上的是:<name>hbase.regionserver.codecs&l ...

  8. jq删除标签

    <script>$(function(){ $("div").remove()})</script>

  9. ABAP编辑器输入中文变成问号

    在ABAP编辑器里输入汉字,点击空格后显示问号? 中英文环境下编辑都出现乱码 实用程序->设置 ->基于文本的编辑器 如果用老式编辑器,可以输入中文  试试打个补丁 GUI740 补丁17 ...

  10. Delphi中动态加载TreeView信息

    unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...