【问题标题】:What's the most storage efficient Octree structure for reconstruction?用于重建的存储效率最高的八叉树结构是什么?
【发布时间】:2013-01-23 00:29:10
【问题描述】:

我编写了一个完整的八叉树实现,没有对 3D 重建进行太多优化,但是,树结构包含太多指针,并且不能支持超过 256^3 个体素。

理论上,对于非树结构,如果我使用 vector<bool> 每个体素使用约 1 位,这将更容易接受,因为非树结构可以支持 2k^3 和 8GB 内存。

然而,优化的八叉树结构应该能够做到等于或优于此,因为:

  1. 它不应该存储每个体素,因为压缩可以允许压缩附近的相同值的体素。

  2. 它不应该使用太多的指针,因为指针本身已经使用了相当多的字节。

  3. 八叉树必须具有相当低的节点/体素比率

对于一个完整的八叉树,节点号可以计算为(s^3 -1) / 7s 是体积分辨率,是 2 的幂。例如,如果 s = 4,我需要八叉树中的 1 + 8 = 9 节点来表示 4x4x4 体素网格。

有人知道符合这些规范的 C++ 八叉树实现吗?

【问题讨论】:

  • 现在这类事情往往是使用 GPU 来完成的,你也许可以调整那里使用的技术来改进你的代码,一个很好的起点是 Cyril Crassin 的博士工作:maverick.inria.fr/Membres/Cyril.Crassin/thesis
  • 你为什么不优化你当前的实现呢?例如,叶节点不需要指向子节点的指针,这样可以节省一些内存。您也可以使用稀疏八叉树。我不知道您的八叉树实现如何,但如果您希望它具有内存效率,为什么要使用向量? 256^3 是一个相当低的值。
  • 不确定我是否理解这个问题,但我认为您可以使用数组树

标签: c++ algorithm memory tree octree


【解决方案1】:

我认为八叉树是可行的方法,但只有在需要时才应构建子节点(至少设置一个体素)。此外,应该使用压缩。通常相邻的体素具有相同的值,因此 RLE 压缩似乎效果很好。这在这篇论文中有解释http://www.terathon.com/voxels/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    相关资源
    最近更新 更多