当前位置:   article > 正文

TSDF三维重建

tsdf

流程分析:

  • 首先需要构建一大块空区域(不能太大,GPU放不下)
  • 一般把这个大区域叫做volume
  • 它有很多个小区域组成,每个角voxel(体素)
  • 需要计算每个voxel的TSDF值及其权重

初始化操作:

  • 一个三维的大区域(TSDF图)由LxWxH个三维小方块组成
  • 其中每一个小方块的大小也是自己定义的,例如0.05mx0.05mx0.05m
  • 5mx5mx5m的真实三维场景中有10^6个体素,计算量很大
  • 一般都用GPU来算,CPU也可以,但是会很慢

要对每个体素计算什么呢?(一个体素的SDF值,是它到最近的表面的距离)

  • x是其中的一个体素,绿色是离它最近平面
  • P点是平面上离X最近的一点
  • 它两之间的距离就是SDF(要计算的结果)
  • 其中T表示截断的意思(太近太远的设为 定值 )
  • 0表示最近,1和-1分别表示正面和反面最远

如何计算TSDF呢?

  • 面到相机的深度是ds,相机采集到的深度dv,则d(x)=ds-dv
  • d(x)>0说明该体素在真实的面的前面;反之则说明改体素在真实的面的后面

  • 转换操作(ds,其实就是我们的深度图中的数值)
  • 遍历每一个体素,计算其在世界坐标系中的位置
  • 根据初始化“大块”时设置的极点位置和体素大小决定
  • 再将其在世界坐标系的值转换成其在相机坐标系中的位置(位姿RT已知)(其到相机坐标原点的举例就是dv)
  • 再根据相机内参,转换到像素坐标(因为我们由深度图,得到像素坐标就能得到其深度值)

TSDF结果:

  • 红色表示一个表面
  • 正负1表示离得很远
  • 最终得到了多少体素的结果
  • 当前只表示其中一帧,还要融合

TSDF组合

  • 我们的输入由很多视角的图像组成,但是大块就那么一个
  • 所以咱们的大块时一直在更新的,但是并不是算完所有的一起更新
  • 相当于每一个体素的值是一种平均的感觉,各个视角的图都会对其产生影响
  • 但是第二帧是由其结果与第一帧组合得到,第三帧就是组合了第二帧(就像之前的动图,是一个增量式的过程,并不是最后一次组合)

整体概述

这个就是TSDF的更新和组合的过程

一步步计算各个体素TSDF值再把他们拼接起来

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/883721
推荐阅读
相关标签
  

闽ICP备14008679号