重新打包体素数据以实现高效存储

时间:2016-03-04 18:29:30

标签: kdtree voxel octree

我有3D体素数据,我想重新打包它以提高内存效率和快速访问。数据以常规八叉树生成,每个单元一个整数值。不幸的是,数据不稀疏,但应连接具有相同值的单元。

Example for one slice:
[11122]
[11223]
[12222]
[44444]

我目前的想法是使用kD-tree,最好是左平衡,但我不确定是否有一种有效的算法来生成它。 我有一些想法,但我希望这是已经建立算法的问题之一,或者至少是我可以谷歌的名字。

2 个答案:

答案 0 :(得分:1)

OctoMap怎么样?据我了解,它就像一个八叉树,但将相邻的占用区域合并到区域以节省内存。但我对此并不了解。

修改

你也可以试试我的PH-Tree。它的工作方式类似于八叉树,但内存效率非常高,因为每个节点只存储与父节点不同的位。您实际上可以将整数值存储为第四维。与直觉相反,4D树可能需要比3D树更少的空间,并且它可能更快(解释在PDF中可以在上面的链接中找到)。如果您的整数是第四维,那么树中的任何子树只会包含类似的'整数,可能对你的情况是否足够?此外,任何节点仅包含近邻,但近邻不一定在相同(或相邻)节点中。

答案 1 :(得分:0)

另一个链接:http://www.openvdb.org/。为什么我在问这个问题后才发现这个?这就像在超市里寻找东西只是为了发现你站在它旁边。

我最终做了一些更简单的事情,因为我需要一个解决方案:我将体素体积转换为2D平面堆栈,每个平面存储该值将更改为下一个更高的平面。这样,体素数据只能垂直压缩,但现在似乎“足够好”。如果我有空闲时间,我会为其他数据结构处理数字(空间需求与性能)。