KinectFusion原理介绍

  • 1 简介:
  • 2 基础知识
    • 2.1 点云(Point Cloud)
    • 2.1 TSDF(Truncated Signed Distance Function)地图
  • 3 原理介绍
    • 3.1 表面测量
    • 3.2 表面预测
    • 3.3 传感器位姿估计
    • 3.4 表面重建更新
  • 4 总结

1 简介:

  2011年所开源的KinectFusion是第一个使用RGBD相机进行实时稠密三维重建的系统(需要GPU,甚至多个GPU或者高性能GPU),当时具有重大的开创意义;其所用的地图为TSDF地图,也对后续稠密地图的发展有着重大的意义。目前很多动态环境下的实时三维重建系统都是在KinectFusion或者ElasticFusion基础上扩展的。
  实时三维重建技术与SLAM有很大的相关性,不同之处在于三维重建更关注建图的完整性和精度,而SLAM技术更关注定位精度,建图是为了辅助定位,并不太关注地图的精度以及稠密程度。
  原文首发自我的古月居博客:https://www.guyuehome.com/34453
  论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6162880
  代码地址:https://github.com/chrdiller/KinectFusionApp

2 基础知识

2.1 点云(Point Cloud)

  https://blog.csdn.net/hongju_tang/article/details/85008888
  点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量空间点的集合,在获取物体表面每个采样点的空间坐标后,得到的是点的集合,称之为“点云”(Point Cloud)。RGB-D设备是获取点云的设备,比如PrimeSense公司的PrimeSensor、微软的Kinect。点云的法向量是其重要的特征,可用来匹配特征点,ICP匹配点云位姿。目前PCL库已经实现了点云的大量操作,其地位类似于OpenCV之于图像。

2.1 TSDF(Truncated Signed Distance Function)地图

  https://blog.csdn.net/qq_30339595/article/details/86103576
  TSDF可以译作截断符号距离函数,其是一种网格式的地图先选定要建模的三维空间,比如 3 × 3 × 3 m 3 3×3×3 m^3 3×3×3m3那么大,按照一定分辨率,将这个空间分成许多小块,存储每个小块内部的信息。TSDF地图整个存储在显存当中而不是内存中,由于每个体素的计算互相并不干扰,所以可以利用GPU的并行特性,并行地对对每个体素进行计算和更新。

  每个TSDF体素内,存储了该小块与最近的物体表面的距离。如果小块在最近物体表面的前方,它就有一个正的值;反之,如果该小块位于表面之后,那么这个值就为负。由于物体表面通常是很薄的一层,所以就把值太大的和太小的都取成1和-1,这就得到了截断之后距离,也就是所谓的TSDF。

3 原理介绍

  对于输入的RGB-D图像,首先计算点云及其归一化后的法向量,然后通过ICP算法迭代计算当前帧的相机位姿(输入为三维场景投影得到上一帧的深度图像,以及当前帧的点云),之后将当前点云融合到TSDF地图中,最后通过TSDF地图以及当前帧的位姿,预测(投影)出当前帧的深度图,该深度图用来和下一帧的点云计算下一阵的位姿。

3.1 表面测量

  根据每帧深度图像可以得到该帧的点云,首先通过双边滤波器去除噪声点云数据,然后计算每个空间点的法向量,计算法向量的具体方法为:

N k ( u ) = v [ ( V k ( u + 1 , v ) − V k ( u , v ) ) × ( V k ( u , v + 1 ) − V k ( u , v ) ) ] N_k(u)=v[(V_k(u+1,v)-V_k(u,v))×(V_k(u,v+1)-V_k(u,v))] Nk​(u)=v[(Vk​(u+1,v)−Vk​(u,v))×(Vk​(u,v+1)−Vk​(u,v))]

  其中:

v [ x ] = x / ∣ ∣ x ∣ ∣ 2 v[x]= x/||x||_2 v[x]=x/∣∣x∣∣2​

  其本质上就是求当前点与相邻点的向量,然后两向量的向量积(又称外积或者叉积),向量积垂直于两向量,对该项量进行归一化即可得到法向量。这只是最为简单直观的法向表达方式,其只利用三个点来计算法向量,易受噪声影响,还有很多利用邻域点云计算法向的方法,例如PCA方法:https://blog.csdn.net/suyunzzz/article/details/105534206。

3.2 表面预测

  KinectFusion并没有直接利用当前帧与上一帧的图像直接通过ICP算法计算位姿,而是通过维护的TSDF地图以及上一帧图像的位姿,投影得到上一帧预测的深度图像(Frame-to-Model)。论文中提到,这样做的效果要比两帧之间直接计算位姿的效果好的多,后者的误差会逐渐累积,严重影响重建精度。

3.3 传感器位姿估计

  KinectFusion采用ICP算法估计相机位姿,网上有很多原理讲解。首先将当前帧的点云转换到全局坐标系下(根据当前假设的位姿T),再转换到上一帧的相机坐标系下,将其投影到图像坐标系,计算得到对应前一帧的点,将上述的匹配点进行距离和法向量的对比,看是否是匹配点(有点类似于直接法)。详见博文:https://blog.csdn.net/XBB102910/article/details/52968024。
  得到匹配点之后,通过最小化点到平面的距离计算位姿,目标函数为:

  其中 q i q_i qi​为当前点云中的一点, p i p_i pi​为其匹配点通过位姿变换后的空间点, 为投影过两点的向量,在图中即为向量 d i s i d_i s_i di​si​,向量乘以di的归一后的法向量 n i n_i ni​,即可得到点 s i s_i si​到点 d i d_i di​切平面的距离,也就是我们所要最小化的误差项。当两点投影过后完全重合,该项为0。

3.4 表面重建更新

  最后根据当前帧的深度信息计算TSDF地图,并以加权的形式融合到全局的TSDF中。

4 总结

  KinectFusion是第一个使用RGBD相机进行实时稠密三维重建的系统,在当时(2011年)具有非常重大的开创意义,后续很多工作都是在此就基础上开展的,Frame-to-Model的ICP算法依然得到很大的应用。
  不足之处

  • (1) TSDF地图需要缓存在显卡中,对显卡性能要求比较高;实时性是建立在GPU加速计算的基础上的,对GPU性能有要求。
  • (2) 没有考虑到环境的变换,在动态场景下鲁棒性不够强。
  • (3) 没有回环检测等环节,与ORB-SLAM系统的定位精度有较大差距。

   参考:
  https://www.bilibili.com/video/BV1Ls41167ud?share_source=copy_web
  https://blog.csdn.net/fuxingyin/article/details/51417822
  https://www.bilibili.com/video/BV117411u7D4?share_source=copy_web

KinectFusion原理介绍相关推荐

  1. HDR sensor 原理介绍

    HDR sensor 原理介绍 一. HDR sensor 原理介绍 什么是sensor的动态范围(dynamic range): sensor的动态范围就是sensor在一幅图像里能够同时体现高光和 ...

  2. java语言的实现机制_JAVA语言之Java NIO的工作机制和实现原理介绍

    本文主要向大家介绍了JAVA语言之Java NIO的工作机制和实现原理介绍,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 前言 本文只简单介绍NIO的原理实现和基本工作流程 I/O和 ...

  3. 中兴SDH原理介绍及中兴E300网管介绍

    姓名 苟忠兴 培训课程 中兴SDH原理介绍及中兴E300网管介绍 培训心得 1. SDH概念: SDH(Synchronous Digital Hierarchy,同步数字体系)是一种将复接.线路传输 ...

  4. 【机器学习】多项式回归原理介绍

    [机器学习]多项式回归原理介绍 [机器学习]多项式回归python实现 [机器学习]多项式回归sklearn实现 在上一节中我们介绍了线性回归的原理,然后分别用python和sklearn实现了不同变 ...

  5. 计算机原理 英文版,计算机原理介绍英文版.doc

    计算机原理介绍英文版 Importing TrafficOverview This lesson demonstrates the traffic import capabilities of Mod ...

  6. heartbeat原理介绍

    heartbeat原理介绍 HeartBeat运行于备用主机上的Heartbeat可以通过以太网连接检测主服务器的运行状态,一旦其无法检测到主服务器的"心跳"则自动接管主服务器的资 ...

  7. 安检x光机原理计算机实现,安检x光机成像原理介绍

    安检x光机是我们都很熟悉的一种安检设备,但很少有人去了解安检x光机成像原理.本文将为大家介绍安检x光机成像原理. 安检x光机成像原理 安检x光机主要由X光管和X光机电源以及控制电路等组成,而X光管又由 ...

  8. php new对象 调用函数,关于JS中new调用函数的原理介绍

    这篇文章主要介绍了关于JS中new调用函数的原理介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 JavaScript 中经常使用构造函数创建对象(通过 new 操作符调用一个函数) ...

  9. Springboot中的缓存Cache和CacheManager原理介绍

    一.背景理解 什么是缓存,为什么要用缓存? 程序运行中,在内存保持一定时间不变的数据就是缓存.简单到写一个Map,里面放着一些key,value数据,就已经是个缓存了.所以缓存并不是什么高大上的技术, ...

最新文章

  1. 使用一个特别设计的损失来处理类别不均衡的数据集
  2. Ubuntu 安装 scikit-image
  3. Keras之DNN:利用DNN【Input(8)→(12+8)(relu)→O(sigmoid)】模型实现预测新数据(利用糖尿病数据集的八个特征进行二分类预测
  4. JavaScript实现使用DisjointSet 检测无向循环算法(附完整源码)
  5. 为什么我学了6个月Python,还是找不到工作?
  6. charles源码分析
  7. c++多态与java多态性_Java中的多态性
  8. 容器技术Docker K8s 8 容器服务ACK Pro版集群
  9. Android TV框架TIF
  10. 易语言怎么查看服务器文件,易语言文件传输查看进度
  11. 苦难是人生中必须经历的一课
  12. 香港各个大学计算机类专业
  13. 【HDU5442】 Favorite Donut(后缀数组)
  14. Java 实现数据脱敏的技术方案
  15. 云服务PaaS、SaaS、IaaS
  16. Maple学习(一)Maple的安装
  17. 一节计算机课作文500,难忘的一节课作文500字4篇
  18. 机器学习 使用三分法找最优解参数
  19. Wek9 B - Brand type judgment
  20. SAP HANA数据库HA双机架构概念及运维

热门文章

  1. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  2. CSS设置html网页背景图片 CSS设置网页背景颜色
  3. Mysql-如何进行慢SQL查询
  4. 某东满3000减2020真的有这个劵么
  5. 高性能分布式游戏服务器框架
  6. 如何在网页中添加 GitHub Corners
  7. Mac Zoc设置
  8. CISCO Switchport trunk encap dot1q 与 Switchport trunk 区别
  9. codeforces1438D Powerful Ksenia
  10. 2022讯飞——糖尿病遗传风险检测挑战赛解决方案