转:TSDF in Kinect fusion
KinectFusion中用到的TSDF Fusion
原po:https://blog.csdn.net/qq_31785865/article/details/78524429
最近在看关于稠密三维重建的相关算法,看到了KinectFusion,KinectFusion是微软研究院研发的基于Kinect实现的稠密三维重建项目。采用GPU加速的KinectFusion可以实时的实现稠密三维重建。流程步骤如下图所示:
- Depth Map Conversion:读入的深度图像转换为三维点云,计算每一个点云的法向量;
- Camera Tracking(map-to-frame):通过上一次对map中点云对上一帧的投影,用ICP对当前帧进行匹配求解位姿;
- Volumetric Integration:根据步骤2的位姿,将当前帧的点云融合到网格模型中去,这里用了TSDF;
Raycasting :根据当前帧相机位姿将模型中的点云投影到当前帧并且计算其法向量,用来在步骤2中对下一帧的输入图像配准。
这里重点学习了一下TSDF
TSDF(Truncated Signed Distance Function)的作用是将点云的深度估计值和深度相机的测量值进行融合,提高深度估计的精度,改善地图效果。流程如下图所示:
将重建空间进行体素划分,如下图
我们将整个空间的体素全部存入GPU运算,每个线程处理一条(x,y)。即对于(x,y,z)的晶格坐标,每个GPU进程扫描处理一个(x,y)坐标下的晶格柱。
- 1,2:对于每个x,y坐标下的体元g,并行的从前往后扫描
- 将晶格坐标g转换到对应的世界坐标系点vg
- 对于每次TSDF操作时的拍摄变换Ti反变换到对应的相机坐标系坐标v
- 相机坐标系点v投影到图像坐标点p,从3D到2D
- 如果v在此摄像机的投影范围内,用它修正现有tsdf表示
- sdfi是该相机坐标系点vg到本次相机原点ti的距离与本次观测深度Di(p)的差值
- 8-11为截断的过程,Truncated的意义所在,用max truncation表示选取的截断范围,此值将会关系到最后重建结果的精细程度
- 如果差值为正,表示该晶格在本次测量的面的后面
- tsdfi赋值【0,1】之间,越靠近观测面的地方值越接近0
- 如果差值为负,表示该晶格在本次测量的面的前面
- tsdfi赋值【-1,0】之间,越靠近观测面的地方值越接近0
- 选取本次计算值的tsdf的权值wi,这个权值的选取直接关系到图片的适应性,以及抗噪声的能力,其实这里有点类似卡尔曼滤波。注意这里每次权值+1的操作基于这样的原因,由于只有在相机拍摄范围内的点才会进入求tsdf的操作,每次的权值在原先的基础上增加1能照顾到迅速变化的或很少扫描到的面的变化。
- 加权平均求出tsdfavg
- 将wi和tsdfavg存储在对应的晶格,进行下个晶格的扫描操作
经过上面的扫描,最终立方体晶格中存储的tsdf值形成了重建物体外是负值,物体内部是正值,物体表面是0值得形式(可能没有准确的零值,但是可以根据正负值插值求出零值点,所以最后物体表面的分辨率将会超过晶格的分辨率)
转:TSDF in Kinect fusion的更多相关文章
- Kinect for Windows SDK开发入门(十九):Kinect Fusion
Kinect for Windows SDK1.7中引入了Kinect Fusion功能.在1.8的SDK中对该功能进行了改进和强化,Kinect Fusion能够使得我们使用Kinect f ...
- [译]Kinect for Windows SDK开发入门(十八):Kinect Interaction交互控件
本文译自 http://dotneteers.net/blogs/vbandi/archive/2013/03/25/kinect-interactions-with-wpf-part-i-getti ...
- Kinect for Windows SDK 1.8的改进及新特性
今年3月, 微软推出了Kinect for Windows SDK 1.7 更新,包括了手势识别 Kinect Interactions 和实时 3D 建模 Kinect Fusion 两项新技术. ...
- 【翻译】Kinect v1和Kinect v2的彻底比较
本连载主要是比较Kinect for Windows的现行版(v1)和次世代型的开发者预览版(v2),以C++开发者为背景介绍进化的硬件和软件.本文主要是对传感的配置和运行条件进行彻底的比较. ...
- (转) SLAM系统的研究点介绍 与 Kinect视觉SLAM技术介绍
首页 视界智尚 算法技术 每日技术 来打我呀 注册 SLAM系统的研究点介绍 本文主要谈谈SLAM中的各个研究点,为研究生们(应该是博客的多数读者吧)作一个提纲挈领的摘要.然后,我 ...
- Kinect开发笔记之二Kinect for Windows 2.0新功能
这是本博客翻译文档的第一篇文章.笔者已经苦逼的竭尽全力的在翻译了.但无奈英语水平也是非常有限.不正确或者不妥当不准确的地方必定会有,还恳请大家留言或者邮件我以批评指正.我会虚心接受. 谢谢大家. ...
- Kinect实现简单的三维重建
Kinect想必大家已经很熟悉了,最近基于Kinect的创意应用更是呈井喷状态啊!看到很多国外大牛用Kinect做三维重建,其中最著名的要数来自微软研究院的Kinect Fusion了,可以看看下面这 ...
- 基于三个kinect的人体建模
单个kinect的人体重建,在Kinect SDK 1.8中,Kinect Fusion的效果已经很不错了.其缺点显而易见,一是扫描时间长,重建对象也需要长时间保持静态:二是需要人体或者kine ...
- Kinect 开发 —— Kinect Interaction 交互控件
Kinect Interactions 提供了一些新的带有姿势识别的控件如 push-to-press 按钮, grip-to-pan 列表控件, 而且支持多用户,同时二个人进行的交互,这些新添加的控 ...
随机推荐
- NodeJS基础知识
console.log方法: console.log("This is a test string"); node app.js 使用重定向标准输出流: node app.js 1 ...
- 【原创】go语言学习(十四)IO操作1
目录: 格式化输入 格式化输出 终端输入输出背后的原理理 bufio包的使用 命令行参数处理理和urfave/cli使用 格式化输入 1.从终端获取⽤用户的输入 格式化输入 fmt.Scan(a …i ...
- 解决Ubuntu19.04无法安装SecureCRT
推荐下载SecureCRT的tar包 在ubuntu19.04上安装SecureCRT的时候,报错libssl1.0.0-xxx没有安装 解决办法:下载并安装libssl1.0.0_1.0.1t-1+ ...
- 鲁班学院java架构vip课程
1.wps文档地址 https://docs.qq.com/doc/DRVNLUndvTmFSdEhO 2.百度网盘地址 https://pan.baidu.com/s/1uxaTzJZHKrsw_H ...
- 【caffe编译】nvcc warning:The 'compute_20', 'sm_20'
Makefile.config 中 CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \ -gencode arch=compute_20,code=s ...
- javascript的正则表达式总结
网上正则表达式的教程够多了,但由于javascript的历史比较悠久,也比较古老,因此有许多特性是不支持的.我们先从最简单地说起,文章所演示的正则基本都是perl方式. 元字符 ( [ { \ ^ $ ...
- 阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天
阿里巴巴高可用技术专家襄玲:压测环境的设计和搭建 PTS - 襄玲 云栖社区 今天
- vue-cli项目中使用全局过滤器及传参(日期格式化)
// 过滤日期格式,传入时间戳,根据参数返回不同格式 const formatTimer = function(val, hours) { if (val) { ); var y = dateTime ...
- 【集成模型】Boosting
0 - 思想 Bagging算法思想是减少预测方差(variance),Boosting算法思想是为了减少预测偏差(bias). Boosting算法思想是将“弱学习算法”提升为“强学习算法”.一般来 ...
- 三种实现PHP伪静态页面的方法
PHP伪静态写法--其一 伪静态又名:URL重写 主要是为了SEO而生的.(SEO是什么?这个不用问我吧.呵呵-搞网络的不懂SEO那就----) 方法一: 比如这个网页 /soft.php/1,10 ...