文章目录

  • 资料
  • motivation
  • intro
  • related work
  • algorithm
    • pipeline
    • 数据结构
      • hash解决冲突

资料

csdn voxel hash

motivation

在之前的表示中,会存储每个voxel的TSDF值。但是既然使用了截断SDF值,意味着不在截断范围内的体素组成的空间是free space,也就是没有必要的部分,对表面的重建不会有太大的帮助。因此可以设计一个新的数据结构来开发有效体素的稀疏性。

intro

这篇是用hash方法,设计了一个新数据结构,让TSDF可以动态增长。这种方法在大场景和精细建模上都可以使用。

related work

现在有三种三维重建方法:

  • parametric methods, 直接把重叠的深度采样作平均,然后按照简单的topolopy来连接点。
  • point-based , 把重叠的点融合。 render采用这种方法。这种在小物件、精细重建上经常使用。这种方法没法直接对表面建模。
  • height map, 使用了2.5D的连续表面来表示重建。多用来进行建筑物建模。虽然很高效,但是不够精细。
  • volumetric,使用raycasting等,把深度图转换成sdf,以概率来加权到voxel grid里面。缺陷是需要很大内存储存voxel,无法全局构建。

解决这些问题,有人提出用moving volume, 也有人用GPU-based octree。但是得不偿失,GPU上运行很慢。

algorithm

本文方法建立在volumetric上,使用hash 而不是设计复杂octree。而且不需要表面集合的先验知识。
主要有四点:

  • 压缩TSDF,不适用octree
  • 新TSDF可以fuse到hash table中,最小化collision。collision就是多个voxel被map到了同一个hash中。
  • 去掉voxel block中的垃圾?
  • Host 和GPU中用轻量级双向数据流, 达到unbounded reconstruction
  • 使用raycasting等方法得到等值面。

pipeline

  1. alloc occupied blk
  2. update sdf in blk(integration)
  3. free voxel block that is far from surface. Ignore this step in esdf.
  4. pose etimation. ignore this step.
  5. streaming. leave it later, now just copy all.

数据结构

  • voxel数据结构,里面没有坐标, hash entry里面有。根据hash key找到hash entry。


hash解决冲突

  • 一个hash value对应一个bucket,每个bucket有4个entry. 一个coord经过hash函数计算得到一个hash value,如果对应的bucket里面有值,那么可以放到此entry后面一个entry。当寻找这个coord,(hashtable.find(coord)),先找到bucket,然后在bucket中遍历entry, 比较coord.

  • 很少情况下,bucket overflow。这时候用链表思想,offset记录下一个entry到应该在的bucket地址的偏移。

  • find_insert: 先找bucket中每一个entry(中间碰到空格不要停,因为可能被删除了。esdf不删除,应该可以停),再找链表。还没找到,说明是新的,就插入。注意,不能同时写入一个bucket,会造成重复的entry或者链表不对。

  • delete
    删除时分三种情况:
    1、如果待删除的 hash entry 在 hash value 对应的 bucket 中,并且不是末尾元素,或者是末尾元素,但是末尾元素的 offset 是空,则在 bucket 直接将 hash entry 删除。
    2、如果待删除的 hash entry 是 hash value 对应的 bucket 中的末尾元素,并且末尾元素的 offset 不是空,则需要根据 offset 找到链接的下一个 hash entry,并且将下一个 hash entry 移动到到末尾的 entry,
    因为 bucket 末尾的entry 存储的是 bucket 满时,链接的别的 bucket 中 entry 地址,所以这里必须做移动。
    3、如果待删除的 hash entry 在别的 bucket 中,删除该 entry 并且修改 offset

voxel hashing相关推荐

  1. Voxel Hashing阅读笔记

    前言 最近在学习infiniTAM,里面涉及到了许多Voxel Hashing的内容,不是很明白,所以打算阅读一下Voxel Hashing这篇文章. Voxel Hashing的特点 能够有效的压缩 ...

  2. 3D视觉创新应用(三维重建)竞赛作品系列——人体三维精准量测与动作捕捉

    一.背景介绍 1 项目背景与国内外研究现状 1.1 项目背景分析 近年来,RGB-Depth(RGB-D)传感器,如Kinect V1,和Structure Sensor等,在室内即时定位与地图构建应 ...

  3. 转:SLAM算法解析:抓住视觉SLAM难点,了解技术发展大趋势

    SLAM(Simultaneous Localization and Mapping)是业界公认视觉领域空间定位技术的前沿方向,中文译名为"同步定位与地图构建",它主要用于解决机器 ...

  4. bundlefusion论文阅读笔记

    4. 全局位姿对齐(glob pose alignment) 输入系统的是使用消费级的传感器获取的RGBD数据流,并且保证这些数据中的彩色图像和深度图像是时间和空间上都对齐的.图像分辨率是640x48 ...

  5. 三维网格精简算法java版_ISMAR 2020 | 商汤提出手机端实时单目三维重建系统

    导读:商汤研究院和浙江大学CAD&CG国家重点实验室合作研发了一个手机端实时单目三维重建系统Mobile3DRecon.与现有的基于RGBD的在线三维重建或离线生成表面网格的系统不同,该系统结 ...

  6. 最详细的SLAM综述

    论文:Past, Present, and Future of Simultaneous Localization And Mapping: Towards the Robust-Perception ...

  7. Matterport3D:室内环境RGB-D数据的深度学习

    Matterport3D:室内环境RGB-D数据的深度学习 Taylor Guo, 2017年9月24日 Matterport3D: Learning from RGB-D Data in Indoo ...

  8. [地图]常用的地图结构

    占据栅格地图 参考 https://zhuanlan.zhihu.com/p/21738718 Octomap地图 将三维空间建模分割成许多的小方块,如果将每个小方块的每个面切成两片,那么这个小方块就 ...

  9. 论文解读:基于深度相机的3D建模 2020最新综述

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨安如夏@知乎 来源丨https://zhuanlan.zhihu.com/p/299489800 ...

最新文章

  1. C++ : 二进制法生成子集
  2. 基于物化视图优化_CVPR2017|基于构造多视图子空间中的潜在表示解决聚类问题
  3. 函数式编程的兴衰与当前之崛起
  4. 16年微软/腾讯云/华为云MVP是怎样炼成的
  5. 在Kafka上异步发送数据
  6. mysql 自动备份删除_mysql自动备份删除5天前的备份
  7. mysql无法添加或更新子行_违反完整性约束:1452无法添加或更新子行:
  8. 一文看尽苹果WWDC大会:今年有亮点,但都不“硬”
  9. avc水平什么意思_5个步骤切实有效地提高你的写作水平
  10. Java代码:调用外部接口(使用Json格式传递参数)的方法
  11. 计算机制图作品答辩,工程制图(第一章)答辩.ppt
  12. iphone自适应屏幕亮度_如何降低iPhone的亮度低于iOS允许的亮度
  13. Effective C++条款粗略总结
  14. XSS(跨站脚本攻击)理论知识
  15. A-Priori算法及其优化(FP树)
  16. 2010年安防企业与事件盘点
  17. openldap安装
  18. 三款Linux下最好的看图工具GPicView,sxiv,feh
  19. wordpress 文章插入的超链接访问不了
  20. MVC三层架构(超详细解析)

热门文章

  1. 趣图 | 这该死的自信
  2. 开始学习SHAREPOINT 2003。
  3. 教你如何简便下载网站上的视频
  4. 按键为什么要进行消抖
  5. 【陈工笔记】# 同步网络和异步网络的理解 #
  6. X86 LSS指令详解
  7. App卡顿的原因及解决方案
  8. 高空坠球,皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?
  9. Arduino使用OLED显示汉字——For初学者
  10. 如何把Excel的数据导入python?