前言
最近在学习infiniTAM,里面涉及到了许多Voxel Hashing的内容,不是很明白,所以打算阅读一下Voxel Hashing这篇文章。
Voxel Hashing的特点
- 能够有效的压缩T-SDF的体积,在无需分层空间的数据结构的同时,保证表面的分辨率
- 通过插入和更新操作,能够有效的把新的T-SDF数据融合到哈希表中,同时最小化哈希冲突
- 在清理无效的体素块时,不需要重组数据结构,避免了巨大的开销
- 在主机和GPU之间构建了轻量级的双向流,支持无边界重建
- 通过标准光线投射和多边形操作,从数据结构中提取出等值面,以进行渲染和相机位姿估计
系统管道
体素块(Voxel Blocks):无限均匀的网格将世界细分为体素块(voxel block),每个体素块由888个体素构成,每个体素存储一个T-SDF、颜色和权重。哈希表中的每一项都对应着一个体素块。
1.在输入一张新的深度图片时,首先执行融合操作。根据输入的深度图分配体素块,并将块描述符插入哈希表中。这里要注意,只是分配了体素块,但是体素块内并没有存储相应的数据。接下来对依据输入的深度图和颜色数据对每个分配的体素块进行扫描,从中获得对应的SDF、颜色和权重。此外,对距离等值面太远的体素块进行移除,并释放相应的内存。
2.在融合操作结束之后,依据估计的当前相机位姿进行光线投射从而获得等值面。获得的深度信息和颜色信息可以用在下一步的相机位姿估计当中。最后,在主机和GPU中间建立双向流,将即将使用的哈希表条目及其对应的体素块传输到主机上。之前流出的体素块也可在重新访问时流回GPU数据结构。
数据结构
无限均匀的网格将世界细分为体素块(voxel block),每个体素块由888个体素构成,每个体素存储一个T-SDF、颜色和权重。
体素的数据结构如下
为了利用稀疏性,同时减少计算资源的消耗,仅仅在重建的曲面几何体周围分配。作者使用一个高效的GPU加速哈希表来管理体素块的分配和检索。哈希表存储哈希条目,每个条目都包含指向已分配的体素块的