KinectFusion是微软在2011年发表的一篇论文里提到的点云重建的方法,论文题目是:KinectFusion: Real-Time Dense Surface Mapping and Tracking。点云是用Kinect采集的,然后算法把这些点云注册对齐,融合成一个整体点云。
Kinect是一个RGBD扫描仪,它可以同时采集彩色图像和深度图像。这是第一代Kinect和第二代Kinect的外观比较。

Kienct每秒可以获取30帧的RGBD图像,光线暗的情况下帧率会下降一些。
这是一个典型的KinectV2的数据。左边是带颜色的点云,右边的点云去掉了颜色,并且计算了法线信息。KinectFusion处理的是深度数据,像右边这种没有带颜色的点云。Kinect数据的详细介绍可以参考专题 Kinect数据。

KinectFusion的核心有两个技术,一个是ICP注册,一个是符号距离函数。它的思路是一边注册,一边融合。由于是深度视频,帧与帧之间的位置差别不大,点云可以看作是初始注册好的,所以可以直接应用ICP进行精细注册。融合采用了符号距离函数技术,它在空间中定义了一个曲面的距离场,0等值面则为测量的曲面。
KinectFusion算法
下面介绍一下KinectFusion的算法步骤:

  • 生成三维点云:Kinect采集的原始数据是深度图像,可以用KinectSDK把深度图像转化为三维点云。
  • 点云预处理:预处理包含很多可选的算子,比如法线计算,点云范围裁剪(有些扫描仪在一定范围内的误差是可以接受的,故可以剔除掉误差范围大的区域),去噪(低精度的扫描数据可以去噪提高注册稳定性),边界点剔除(边界点的误差通常很大),孤立项剔除(孤立项的误差通常也很大)等。
  • 点云位姿估计:KinectFusion是一边注册,一边融合,所以它会维护一个当前融合的整体点云,记为PointCloud。新扫描的点云Depth,就是与PointCloud进行ICP注册。ICP注册的详细介绍可以参考专题点云ICP注册。
  • 点云融合:Depth与PointCloud注册好以后,它会与PointCloud再进行融合,更新PointCloud。
  • 整个扫描过程,每帧的点云重复步骤1-4,最后就得到一个整体点云PointCloud。
    符号距离场函数(Signed Distance Function)
    符号距离场函数,简称SDF,源自1996的一篇Siggraph论文:A volumetric method for building complex models from range images

SDF是定义在三维空间中的一个函数,它度量了空间点到曲面的距离。距离为0的点即为曲面上的点。我们把SDF离散化,定义在空间体素上。每个体素有三个变量:D,W,Flag。其中D为体素到曲面的距离值,W是权重,Flag是体素是否有效。
下面介绍点云如何融入SDF:点云是相机在某个视角下观察采集到的,如左图所示。单从一个视线观测一点来分析,如右图所示,这个视线上的点到曲面的距离可以定义如下,视线方向上,观测点前面的距离为负,观测点后面的距离为正。由于SDF是定义在空间中的体素里,我们这里也把距离离散化到体素里,其中d是体素宽度。由于系统误差的存在,我们给这些体素值一个权重,越靠近点云的体素权重越大。


点云注册后,不断的往SDF里进行融合更新,最后把SDF的0等值面提取出来,就是融合的点云了。
SDF把点云通过距离函数的形式,离散化到空间体素里。而它的精髓在于给距离函数定义了一个范围,这个范围使得距离函数有了一定程度的光滑性。因为Kinect数据精度是很低的,两次观测的点云,会有很大的误差,如图所示。多个点云融合在一起,如何达到平均的效果,就是通过平均距离函数来实现的。我们知道,光滑函数的叠加,也是一个光滑函数。所以,每个距离函数光滑化以后,使得融合后的距离函数也是光滑的。而这个光滑性,就使得融合点云是光滑的,并且一定程度上能消掉点云重影。


KinectFusion算法分析
下面点评一下KinectFusion算法:

  • KienctFusion属于SLAM前端,高质量的点云重建还需要加入后端全局优化
    -KienctFusion注册时采用了Frame-to-Model的方式,也就是采集的点云与SDF融合的点云进行注册。有时候也可以用Frame-to-Frame的方式,也就是点云与前帧点云进行注册。这样速度可以更快一些。
  • 点云注册只应用了深度图像,这个算是一个优点,比如有些场景下只有深度数据。有些时候,扫描对象的几何特征不明显,如果能借助彩色图像的辅助,点云注册可以更加的稳定。
  • 点云融合的时候,KinectFusion采用了SDF技术,它擅长融合低精度数据,但是开销还是比较大的。可以采用一些性能高的融合方法来替换SDF。
  • 原论文里面采用了GPU加速来达到实时。根据现在的CPU性能,其实是不用GPU辅助就能达到实时的。
  • KinectFusion算是三维SLAM前端的一个开始,之后出现了大量的三维SLAM前端方案,都是解决一些实际的问题,比如采集数据的质量差;扫描对象的特征不明显,这个特征包括几何特征和颜色特征;大数据量导致的质量和性能的平衡;多传感器的融合;面向移动设备的处理等。
    备注:
    点击下面链接,进入奥比中光开发者社区,了解更多3D视觉技术信息:https://developer.orbbec.com.cn/
    或扫描下方二维码,进入奥比中光开发者社区:

KinectFusion简介相关推荐

  1. kinectfusion解析_KinectFusion介绍

    KinectFusion 介绍 KinectFusion简介 KinectFusion是微软在2011年发表的一篇论文里提到的点云重建的方法,论文题目是:KinectFusion: Real-Time ...

  2. KinectFusion原理介绍

    KinectFusion原理介绍 1 简介: 2 基础知识 2.1 点云(Point Cloud) 2.1 TSDF(Truncated Signed Distance Function)地图 3 原 ...

  3. KinectFusion:用运动的深度相机进行实时3D重建及交互

    KinectFusion的GPU Pipeline实现, 涉及到的两篇原理和实现中的一篇,两年前翻译的,那时候多数不理解,再拿出来整理一下,也是加深理解,配图来自原论文,文字为本人翻译,如有不正,敬请 ...

  4. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  5. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  6. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  7. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  8. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  9. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

最新文章

  1. Java项目:CRM客户关系管理系统(java+Springboot+maven+mysql)
  2. 仅为方便自己记忆一些滤波器【仅为考试】
  3. mysql范围查找性能_MYSQL(四)查询性能优化
  4. 风讯dotNETCMS源码分析—数据存取篇
  5. flink自定义trigger详解
  6. spring boot 如何动态替换bean?
  7. 北方华创:「8大报表应用场景」助力全方位数字化管理
  8. php 什么情况下加异常,PHP中的异常
  9. 手写一个简化版Tomcat
  10. 4t硬盘实际容量是多少_4TB超大容量+便携实用的移动硬盘-东芝A3移动硬盘体验
  11. ubuntu下Xmodmap映射Esc和Ctrl_L
  12. BZOJ5217[Lydsy2017省队十连测] 航海舰队
  13. 毕设中涉及层次分析法的EXCEL处理步骤
  14. Unity初级坦克大战游戏实现(Battle Tank)带工程源码资源包(二)
  15. 【keytool】keytool查看jks证书详情
  16. 登录不了WPS国际版,密码正确,在网页能够正常登录,在WPS不行,求解答,版本号是10.2.0.7646已刷语言包
  17. java人民币金额大写_Java人民币金额数字转换成大写
  18. Matlab imfilter函数
  19. 基于微信小程序云开发(校园许愿墙app)2.0稳定版,以发布上线
  20. Oracle递归查询的原理

热门文章

  1. JavaScript中实现函数重载和参数默认值
  2. 网关拓扑结构与功能设计归纳
  3. 实现一个全链路监控平台很难吗?一点都不难。。。
  4. 进入编译器后,一个函数经历了什么?
  5. 3 月,跳还是不跳?
  6. 你知道什么是数据科学?如何把数据变成产品么?
  7. 2018年,关于CAP最精彩的小故事!
  8. 技术面试,高效求职准则
  9. 华为精益敏捷专家:DevOps转型中的那些坑
  10. 推荐远程办公的产品软件