本发明涉及数据处理,尤其涉及一种基于八叉树的数据处理方法、装置及计算机可读存储介质。
背景技术:
1、八叉树(octree)是一种用于描述三维空间的树形数据结构,其原理是把空间的数据按照3d坐标存储到贴图或数组中,能够实现在大型空间数据的快速搜索和查询。
2、在相关技术中,一般采用稀疏八叉树(sparse voxel octree,svo)来实现减小基于八叉树数据结构进行数据存储时内存占用量的效果。而svo是通过对存储在八叉树中的体素表示的几何体进行光线投射来的原理实现的,因此其虽然能一定程度上减小原始的八叉树数据结构的内存占用,但是当svo的存储深度超过16层时,数据的读取或存储速度都会变得非常慢。这导致svo难以适用于大规模的数据处理场景。
3、上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
技术实现思路
1、本发明的主要目的在于提供一种基于八叉树的数据处理方法,旨在解决如何提升系数八叉树在大规模的数据处理场景下的数据处理效率问题。
2、为实现上述目的,本发明提供的一种基于八叉树的数据处理方法,所述方法包括:
3、获取待存储体数据的最大数据分辨率;
4、基于所述最大数据分辨率,自下而上递减所述待存储体数据中各个层级的数据分辨率,得到lod体数据;
5、将所述lod体数据输入预设八叉树模型,并于所述八叉树模型的根节点处,逐层向下对lod体数据作稀疏化处理至叶子层,得到lod稀疏八叉树,其中,所述lod稀疏八叉树中的各个非空节点带有不同的节点编号;
6、在接收到针对所述lod稀疏八叉树中目标节点的数据处理指令时,获取所述目标节点对应的所述节点编号,并根据所述节点编号跳转至所述目标节点执行数据处理操作。
7、可选地,所述基于所述最大数据分辨率,自下而上递减所述待存储体数据中各个层级的数据分辨率,得到lod体数据的步骤包括:
8、将所述最大数据分辨率作为所述待存储体数据的最下层数据的分辨率,逐层向上递减至所述待存储体数据的最上层,得到所述lod体数据;
9、其中,所述lod体数据中下一层级的数据分辨率为相邻上一层级的数据分辨率的两倍,且各个层级之间的数据量相同,最上层的数据分辨率为所述待存储体数据在存储空间中预设的最小分辨率。
10、可选地,所述将所述lod体数据输入预设八叉树模型,并于所述八叉树模型的根节点处,逐层向下对lod体数据作稀疏化处理至叶子层,得到lod稀疏八叉树的步骤包括:
11、将所述lod体数据输入至所述八叉树模型的根节点;
12、确定所述根节点中的体素稀疏度;
13、基于所述体素稀疏度,逐层向下对lod体数据作稀疏化处理至叶子层,得到所述lod稀疏八叉树。
14、可选地,所述基于所述体素稀疏度,逐层向下对lod体数据作稀疏化处理至叶子层,得到所述lod稀疏八叉树的步骤包括:
15、确定所述根节点的所述体素稀疏度是否大于预设阈值;
16、若是,将所述根节点中的lod体数据分配至位于所述八叉树模型的下一层级的八个所述子节点中;
17、确定各个所述子节点中的所述体素稀疏度是否大于所述预设阈值;
18、若是,再次将所述子节点中的lod体数据分配至位于所述八叉树模型的下一层级的八个所述子节点中,直至当前层级中的各个所述子节点中的lod体数据均小于所述预设阈值,将所述当前层级作为所述叶子层,得到所述lod稀疏八叉树。
19、可选地,所述将所述lod体数据输入至所述八叉树模型的根节点的步骤之后,还包括:
20、于所述根节点处,逐层向下标记所述八叉树模型中各个非空节点,得到所述非空节点的节点编号。
21、可选地,所述于所述根节点处,逐层向下标记所述八叉树模型中各个非空节点的前缀位的步骤包括:
22、获取当前层级的节点中的数据分辨率;
23、根据节点所处层级数和所述数据分辨率,确定所述节点编号;
24、将所述节点编号填充至所述非空节点的所述前缀位;
25、跳转至下一层级,返回执行所述获取当前层级中节点中的数据分辨率的步骤,直至所述八叉树模型中每一非空节点的前缀位均有所述节点编号。
26、可选地,所述根据所述节点编号跳转至所述目标节点执行数据处理操作包括:
27、确定所述节点编号在所述lod稀疏八叉树中是否存在对应的目标节点地址;
28、若存在,根据所述目标节点地址,确定当前节点与目标节点之间的节点偏移量;
29、根据所述节点偏移量,从所述当前节点跳转至所述目标节点的所处层级,并对所述lod体数据执行所述数据处理操作。
30、可选地,所述根据所述节点偏移量,从所述当前节点跳转至所述目标节点的所处层级,并读取所述lod体数据的步骤之前,还包括:
31、确定所述节点偏移量是否小于预设偏移量阈值;
32、若是,执行所述根据所述节点偏移量,从所述当前节点跳转至所述目标节点的所处层级,并对所述lod体数据执行所述数据处理操作;
33、若否,将所述节点偏移量存入预设跳跃偏移块链表。
34、此外,为实现上述目的,本发明还提供一种基于八叉树的数据处理装置,所述基于八叉树的数据处理装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于八叉树的数据处理程序,所述基于八叉树的数据处理程序被所述处理器执行时实现如上所述的基于八叉树的数据处理方法的步骤。
35、此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有基于八叉树的数据处理程序,所述基于八叉树的数据处理程序被处理器执行时实现如上所述的基于八叉树的数据处理方法的步骤。
36、本发明实施例提供一种基于八叉树的数据处理方法、装置及计算机可读存储介质,通过构建带有lod结构的稀疏八叉树来存储体数据,使得体数据存储在带有lod结构的稀疏八叉树中,在接收到对lod稀疏八叉树中与当前层级不相邻的目标层级的节点所存储的体数据的数据处理指令时,能够直接跳转去获取另一层级下的节点中的体数据作相应处理,而非一层一层地向上或向下递归至目标层级下作处理。从而使得svo在大规模的数据处理场景下也能够快速读取或存储数据。
1.一种基于八叉树的数据处理方法,其特征在于,所述基于八叉树的数据处理方法包括:
2.如权利要求1所述的基于八叉树的数据处理方法,其特征在于,所述基于所述最大数据分辨率,自下而上递减所述待存储体数据中各个层级的数据分辨率,得到lod体数据的步骤包括:
3.如权利要求1所述的基于八叉树的数据处理方法,其特征在于,所述将所述lod体数据输入预设八叉树模型,并于所述八叉树模型的根节点处,逐层向下对lod体数据作稀疏化处理至叶子层,得到lod稀疏八叉树的步骤包括:
4.如权利要求3所述的基于八叉树的数据处理方法,其特征在于,所述基于所述体素稀疏度,逐层向下对lod体数据作稀疏化处理至叶子层,得到所述lod稀疏八叉树的步骤包括:
5.如权利要求3所述的基于八叉树的数据处理方法,其特征在于,所述将所述lod体数据输入至所述八叉树模型的根节点的步骤之后,还包括:
6.如权利要求5所述的基于八叉树的数据处理方法,其特征在于,所述于所述根节点处,逐层向下标记所述八叉树模型中各个非空节点的前缀位的步骤包括:
7.如权利要求1所述的基于八叉树的数据处理方法,其特征在于,所述根据所述节点编号跳转至所述目标节点执行数据处理操作包括:
8.如权利要求7所述的基于八叉树的数据处理方法,其特征在于,所述根据所述节点偏移量,从所述当前节点跳转至所述目标节点的所处层级,并读取所述lod体数据的步骤之前,还包括:
9.一种基于八叉树的数据处理装置,其特征在于,所述基于八叉树的数据处理装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于八叉树的数据处理程序,所述基于八叉树的数据处理程序被所述处理器执行时实现如权利要求1至8中任一项所述的基于八叉树的数据处理方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有基于八叉树的数据处理程序,所述基于八叉树的数据处理程序被处理器执行时实现如权利要求1至8中任一项所述的基于八叉树的数据处理方法的步骤。