KinectFusion中用到的TSDF Fusion
来源:互联网 发布:warframe淘宝白金 编辑:程序博客网 时间:2024/06/06 02:01
KinectFusion中用到的TSDF Fusion
最近在看关于稠密三维重建的相关算法,看到了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值得形式(可能没有准确的零值,但是可以根据正负值插值求出零值点,所以最后物体表面的分辨率将会超过晶格的分辨率)
欢迎批评指正!
EMAIL:wangxf92_hit@163.com
第一次用markdown,这个插件真的是牛逼啊
参考:
1. http://blog.csdn.net/xiaohu50/article/details/51592503
2. KinectFusion: Real-Time 3D Reconstruction and Interaction Using a MovingDepth Camera
3. KinectFusion: Real-Time Dense Surface Mapping and Tracking
阅读全文
0 0
- KinectFusion中用到的TSDF Fusion
- tsdf-fusion
- projective TSDF/TSDF/flipped TSDF三种截断符号距离函数比较的个人理解
- sql 中用到的。。。。。。
- 项目中用到的
- KinFu --- KinectFusion的开源实现
- KinFu --- KinectFusion的开源实现
- KinFu --- KinectFusion的开源实现
- KinectFusion--3D重建的利器
- 配置能编译KinectFusion的PCL环境
- 推荐mac的兄弟们升级到vmware fusion 3.1
- 把windows下的vmware导入到mac中的fusion
- 测试中用到的工具
- Oracle中用到的东西
- 测试中用到的工具
- 工作中用到的日语
- 工作中用到的小东西
- 工作中用到的命令
- apache-1.3.39在ARM上的移植
- opencv sobel算子
- 快速搭建SpringBoot项目
- Homestead开启php-fpm慢日志教程
- java基础学习
- KinectFusion中用到的TSDF Fusion
- 终于还是烤焦了
- 设计模式-策略模式(java)
- 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
- ActiveMQ的消息形式
- 划分型dp
- 软件工程(C编码实践)学习总结和感悟
- 基于temporal segment networks的行为识别
- jsp/servlet第四章第二节Jsp四大作用域