算法流程

Real-time 3D Reconstruction at Scale using Voxel Hashing

  • 将每一张新输入的深度图融合到哈希表中,同时去除无效的体素来保持存储的稀疏性。
  • 渲染生成当前位姿的深度图和彩色图用于下一帧的ICP计算位姿,采用渲染图的目的是保证定位是frame-to-model的。

数据结构

Real-time 3D Reconstruction at Scale using Voxel Hashing

  • 在表面附近创建体素快,每个体素块包含83个体素,每个体素中存储sdf值,RGB值和权重。
  • hash表中每一个元素存储对应的三维坐标值,指向对应体素快的指针和为了处理重复冲突的指向其他hash表的指针。hash表的序号由三维坐标x,y,z,三个大素数p1,p2,p3和哈希表长度n计算得到: H(x,y,z)=(xp1yp2zp2) mod n H(x,y,z)=(x \cdot p1 \bigoplus y \cdot p2 \bigoplus z \cdot p2) ~ mod ~ n

冲突处理

在出现冲突时,在hash表的同一个哈希块中找到空位插入。

元素插入

根据x,y,z计算出位置,在hash中找到目标位置进行融合和创建体素。查找过程可能需要便利冲突处理的链表。在并行计算时,锁住正在处理的哈希块避免处理冲突,这可能会导致一些插入操作有延时,但不影响最终的效果。

元素删除

在删除无效的体素时,需要维护链表。

体素块更新

对于每一帧图像的每一条射线,根据截断的距离生成和插入所有的体素块。便利哈希表,并行处理所有需要更新,删除的体素。

本地体素快的管理

为了加快计算,在每个流程的开始,将不在视野中的体素块移出,并加入新进入视野的体素块。

相关文章: