CN114387358A - 一种八叉树处理方法、装置、设备及介质 - Google Patents
一种八叉树处理方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN114387358A CN114387358A CN202210083615.XA CN202210083615A CN114387358A CN 114387358 A CN114387358 A CN 114387358A CN 202210083615 A CN202210083615 A CN 202210083615A CN 114387358 A CN114387358 A CN 114387358A
- Authority
- CN
- China
- Prior art keywords
- node
- layer
- nodes
- octree
- ith
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 19
- 238000012545 processing Methods 0.000 claims abstract description 30
- 238000003860 storage Methods 0.000 claims description 153
- 230000008707 rearrangement Effects 0.000 claims description 50
- 238000000034 method Methods 0.000 claims description 38
- 238000002360 preparation method Methods 0.000 claims description 4
- 239000010410 layer Substances 0.000 description 265
- 238000012163 sequencing technique Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 10
- 230000006872 improvement Effects 0.000 description 9
- 230000008569 process Effects 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000002474 experimental method Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000000750 progressive effect Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 238000009776 industrial production Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 229920001296 polysiloxane Polymers 0.000 description 1
- 238000007670 refining Methods 0.000 description 1
- 230000033764 rhythmic process Effects 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/40—Tree coding, e.g. quadtree, octree
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/005—Tree description, e.g. octree, quadtree
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本说明实施例公开了一种八叉树处理方法、装置、设备及介质,八叉树处理方法包括:获取八叉树结构;若所述八叉树结构具有多层节点,则从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,以使:除最后一层节点外,对所述八叉树结构的任一个节点,该节点中排序靠前的位置对应的子节点,位于该节点中排序靠后的位置对应的子节点之前;以及,除最后一层外,若所述八叉树结构的任一层有多个节点,则对该层中的任两个节点,排序靠前的节点的子节点,位于排序靠后的节点的子节点之前。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种八叉树处理方法、装置、设备及介质。
背景技术
现有技术中,八叉树是非常重要的数据结构,可以应用于三维点云编码等领域。
有鉴于此,需要更有效和更高效的八叉树处理方案。
发明内容
本说明书实施例提供一种八叉树处理方法、装置、设备及介质,用以解决如何更有效和更高效地进行八叉树处理的技术问题。
为解决上述技术问题,本说明书实施例提供如下技术方案:
本说明书实施例提供一种八叉树处理方法,包括:
获取八叉树结构;
若所述八叉树结构具有多层节点,则从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,以使:
除最后一层节点外,对所述八叉树结构的任一个节点,该节点中排序靠前的位置对应的子节点,位于该节点中排序靠后的位置对应的子节点之前;以及,
除最后一层外,若所述八叉树结构的任一层有多个节点,则对该层中的任两个节点,排序靠前的节点的子节点,位于排序靠后的节点的子节点之前。
本说明书实施例提供一种八叉树处理装置,包括:
准备模块,用于获取八叉树结构;
重排模块,用于若所述八叉树结构具有多层节点,则从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,以使:除最后一层节点外,对所述八叉树结构的任一个节点,该节点中排序靠前的位置对应的子节点,位于该节点中排序靠后的位置对应的子节点之前;以及,除最后一层外,若所述八叉树结构的任一层有多个节点,则对该层中的任两个节点,排序靠前的节点的子节点,位于排序靠后的节点的子节点之前。
本说明书实施例提供一种八叉树处理设备,包括:
至少一个处理器;
以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,使所述至少一个处理器能够执行上述的八叉树处理方法。
本说明书实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现上述的八叉树处理方法。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
上述技术方案对八叉树的各级节点进行重排,使八叉树各级节点满足有序性,提高八叉树处理效果和效率。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对本说明书实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面介绍的附图仅仅是本说明书中记载的实施例可能涉及的部分附图,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本说明书第一个实施例中的八叉树处理方法的执行主体示意图。
图2是本说明书第一个实施例中的八叉树处理方法的流程示意图。
图3是本说明书第一个实施例中的一种八叉树示意图。
图4是本说明书第一个实施例中的另一种八叉树示意图。
图5是本说明书第一个实施例中的八叉树重排示意图。
图6是本说明书第二个实施例中的八叉树处理装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例的附图,对本说明书实施例的技术方案清楚、完整地进行描述。显然,本说明书所描述的实施例仅仅是本申请的部分实施例,而不是全部的实施例。基于本说明书实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
现有技术中,八叉树是非常重要的数据结构,可以应用于三维点云编码等领域。如何使所建立的八叉树结构更加合理,更便于通过八叉树进行数据处理,是一个重要课题。
本说明书第一个实施例(以下简称“实施例一”)提供了一种八叉树处理方法,实施例一的执行主体可以是终端(包括但不限于手机、计算机、pad、电视)或者服务器或者操作系统或者应用程序或者八叉树处理平台或者八叉树处理系统等,即执行主体可以是多种多样的,可以根据需要设置、使用或者变换执行主体。另外,也可以有第三方应用程序协助所述执行主体执行实施例一。例如图1所示,可以由服务器来执行实施例一中的八叉树处理方法,并且可以在(用户所持有的)终端上安装(与所述服务器)相对应的应用程序,终端或应用程序与服务器之间可以进行数据传输,通过终端或应用程序来进行数据的采集或输入或输出或(向用户)进行页面或信息处理,从而辅助服务器执行实施例一中的八叉树处理方法。
如图2所示,实施例一提供的八叉树处理方法包括:
S101:(执行主体)获取八叉树结构;
实施例一中,八叉树结构可以是基于三维点云数据建立的。其中,所述三维点云数据可以是用于表征三维模型的点云数据,如下所示:
0 0 0
0 0 1
0 1 1
0 1 0
1 0 0
1 0 1
1 1 1
1 1 0
3 0 1 2
3 0 1 4
3 0 2 3
3 1 4 5
3 0 3 4
3 2 3 6
3 1 5 2
3 4 5 6
3 3 4 7
3 3 6 7
3 2 5 6
3 4 6 7
上面的三维点云数据中,前8行中每一行的数据都代表点的坐标,故前8行的数据代表0-7(仅为示例)这8个点的坐标。第9至20每一行都代表由点构成的面,其中,每一行首位的数字3代表由三个点构成的面,即三角面片;每一行的后三位数字代表构成面的三个点的索引。例如“3 0 1 2”代表由点0、1、2构成的面,“3 0 1 4”代表由点0、1、4构成的面,以此类推。
三维点云数据可以有基本的单位,例如以条或组为单位,上面的每一行数据都可以作为一个单位的数据。具体如何划分数据的单位,以及每单位的数据所包含的数据内容,实施例一不作具体限定。
上述的三维模型包括但不限于工业产品三维模型或人体三维模型,工业产品三维模型例如车辆、飞行工具等交通工具三维模型或工业机械三维模型、机床三维模型或其他通过工业生产得到的产品的三维模型。
实施例一中,三维点云数据可以通过多种方式获取,例如可以通过使用三维测量机器对目标物体进行测量得到,或通过使用三维扫描机器对目标物体进行扫描得到。三维点云数据可以对应于某个坐标系的点的三维坐标(x,y,z),三维点云数据也可以包含更丰富的内容,例如三维点云数据还可以包含点的颜色信息。
实施例一的执行主体可以获取八叉树结构,例如实施例一的执行主体可以构建八叉树结构,自然也就获取了所构建的八叉树结构;或者,用户可以将八叉树结构导入实施例一的执行主体,或者用户可以通过其他设备将八叉树结构发送给实施例一的执行主体,以使实施例一的执行主体获取八叉树结构。实施例一对如何获取八叉树结构不作限定。
如图3所示,实施例一中的八叉树结构可以包括根节点,根节点作为第一层节点,根节点的子节点(实施例一中,子节点即孩子节点)为第二层节点,第二层节点的子节点为第三层节点,以此类推。各级节点都可以称为八叉树节点,简称节点。
如图3所示,每个八叉树节点(不论是根节点还是子节点)可以包含8个位置,这8个位置可以分别用0、1、2、3、4、5、6、7按序表示。示例性的,用于表示八叉树节点的8个位置的“0-7”这8个数字可以称为位置符。
每个八叉树节点还可以设置一个由0、1组成的八位数,这个八位数可以称为占位符,每个0或1可以称为占位符数字。八位的位置符和八位的占位符可以一一对应,即八叉树节点的每个位置对应占位符中的0或1。
设置占位符的意义包括:
对任一八叉树节点,其子节点数大于等于0个,小于等于8个。八叉树节点的八个位置作为一个字节,由于八叉树节点的每一位置对应0或1,就相当于八叉树节点的每一位置具有0/1两种状态。对于八叉树节点的任一位置,通过该位置对应0还是1,表征该位置是否有子节点。例如,若该位置对应0,表示该位置没有子节点;若该位置对应1,表示该位置有子节点。即对任一八叉树节点的任一位置,若该位置存在子节点,则该位置对应的“占位符数字”设置为1;若该位置不存在子节点,则该位置对应的“占位符数字”设置为0。如此一来,对任一八叉树节点,该八叉树节点的8个位置中,有几个位置对应的占位符数字为1,就表示该八叉树节点有几个子节点。也就是说,每个八叉树节点可以具有一个或多个子节点。
图3中仅根节点示出了位置符,其他节点简化表示,未示出位置符。
八叉树结构的邻近点预测贯穿了位置编码的始终,每一层均需寻找相邻的点进行预测。故实施例一中,对八叉树结构的每层节点按morton有序排列,以便进行二分查找邻近点的操作。
下面介绍morton码(morton code)与八叉树的关系:
假设有3位二进制坐标p(x,y,z)=(7,4,2),换算为二进制即:
位置:2 1 0
x= 1 1 1
y= 1 0 0
z= 0 1 0
先取x,y,z的第0位,构成: 1 0 0;
再取x,y,z的第1位,构成: 1 0 1;
再取x,y,z的第2位,构成:1 1 0;
故,(7,4,2)对应的morton码为:110 101 100。
假设有如图4所示的八叉树结构,则沿八叉树结构从上到下有:
对于P0,P1,P2,P3这四个八叉树节点,其左边是morton码,右边是三维坐标,这说明无论二维三维数据都可以转化为一维数据。
假设八叉树节点A和八叉树节点B的morton码分别为ma与mb,若ma<mb,在八叉树结构中,八叉树节点A必然在八叉树节点B的左边。所以,八叉树结构中任一层节点的节点位置顺序,其实就是该层节点的morton码顺序。但坐标值则不然。
例如,八叉树节点P4= 101 100 001 =(110,000,101)=(6,0,5);
八叉树节点P5= 110 001 100 =(100,100,010)=(4,4,2);
显然八叉树节点P4的morton码小于八叉树节点P5的morton码, 但八叉树节点P4的三维坐标从某种意义上大于八叉树节点P5的三维坐标。
根据上述说明可知,实施例一中:
1、对八叉树结构的任一层节点,若该层节点对应的morton码由小到大排列,则该层节点在八叉树结构中应从左到右排列。例如图4中,P0,P1,P2,P3从左到右有序排列。
2、点云位置编码需要morton码有序,故需要八叉树结构的每层节点有序排列。并且,点云位置编码是通过八叉树结构表达的。
现有技术中,通过散列算法等方式构造的八叉树结构往往并不符合morton码有序,即现有技术中难以形成morton码有序的八叉树结构。特别的,在进行点云位置编码时,输入的三维点云数据通常是杂乱无章的,从而基于三维点云数据所建立的八叉树结构的节点并不满足有序的要求。例如,若三维点云数据的输入顺序为P2对应的三维点云数据、P1对应的三维点云数据、P3对应的三维点云数据、P0对应的三维点云数据,则所建立的八叉树结构可以如图3所示。图3中八叉树节点P0,P1,P2,P3从左到右是乱序的,它们对应的morton码也是乱序的,并不符合morton码有序的要求。而点云位置编码需要记录一条符合morton码有序轨迹的八叉树路径,以保证点云位置编码唯一性。可见,实际情景中,通常建立的八叉树结构是图3这样的无序八叉树结构,其各层节点不满足有序要求,不适于进行点云位置编码。
S103:(执行主体)若所述八叉树结构具有多层节点,则从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,以使:除最后一层节点外,对所述八叉树结构的任一个节点,该节点中排序靠前的位置对应的子节点,位于该节点中排序靠后的位置对应的子节点之前;以及,除最后一层外,若所述八叉树结构的任一层有多个节点,则对该层中的任两个节点,排序靠前的节点的子节点,位于排序靠后的节点的子节点之前。
基于以上说明,获取八叉树结构后,实施例一的执行主体可以对八叉树结构进行重排。下面说明如何对八叉树结构进行重排:
若所述八叉树结构具有多层节点,则实施例一的执行主体可以从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排。即对第二层节点进行重排、对第二层节点进行重排后对第三层节点进行重排(假设有第三层节点),以此类推,直至对最后一层节点进行重排。由于第一层节点只有根节点,故无需重排。
实施例一中,若八叉树节点C是八叉树节点D的子节点,则可以称八叉树节点C来自于八叉树节点D。则对八叉树结构的任一层,该层中可能有多个节点来自于同一个上一层节点;或者,该层中的节点可能来自于不同的上一层节点。故实施例一中,对八叉树结构除第一层之外的任一层,实施例一的执行主体可以将该层节点中,来自同一个上一层节点的节点划分为一组,从而该层节点被划分为一个或多个节点组,每个节点组可以包含一个或多个节点。对该层节点进行重排,包括对由该层节点分成的各个节点组进行重排(不妨称为“组间重排”),也包括对单个节点组内的节点进行重排(不妨称为“组内重排”)。
实施例一中,从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,可以包括:
S1031:根据所述第一层节点对所述八叉树结构的第二层节点进行重排;
S1033:若所述八叉树结构具有至少三层节点,则根据重排后的上一层节点对下一层节点进行重排;其中,所述上一层为第二层至倒数第二层中的任一层。
下面通过1.1或1.2进行说明:
1.1、根据所述第一层节点对所述八叉树结构的第二层节点进行重排
如上所述,每个八叉树节点可以具有8个位置,这8个位置可以分别用0、1、2、3、4、5、6、7按序表示,则0、1、2、3、4、5、6、7的顺序就可以代表这8个位置的顺序。对任一八叉树节点的任一位置,若该位置存在子节点,则称该位置对应有子节点,该位置的子节点即为该位置对应的子节点。若该位置对应有子节点,则称该位置为非空位置。
若第一层节点只有一个非空位置,则第一层节点只有一个子节点(即第二层节点,下同),无需对第一层节点的子节点进行排序。若第一层节点有多个非空位置,则第一层节点有多个子节点,并对第一层节点的子节点进行重排。
具体的,根据所述第一层节点对所述八叉树结构的第二层节点进行重排包括:若第一层节点具有多个非空位置,则对第一层节点中的任两个非空位置,将(这两个非空位置中)“排序靠前的非空位置”对应的子节点,设置在(这两个非空位置中)“排序靠后的非空位置”对应的子节点之前。例如图3中,第一层节点排序第4的位置为非空位置,对应有子节点,排序第7的位置为非空位置,对应有子节点,则将排序第4的非空位置对应的子节点,设置在排序第7的非空位置对应的子节点之前,形成如图4所示的第二层节点。
1.2、根据重排后的上一层节点对下一层节点进行重排(上一层和下一层为相邻两层)
假设已对八叉树结构的第i层节点进行重排(所述第i层为第二层至倒数第二层中的任一层),则对任一个第i层节点,若该第i层节点只有一个非空位置,则无需对该第i层节点的子节点进行重排;若该第i层节点具有多个非空位置,则对该第i层节点中的任两个非空位置,将(这两个非空位置中)“排序靠前的非空位置”对应的子节点,设置在(这两个非空位置中)“排序靠后的非空位置”对应的子节点之前,对应上述的“组内重排”;以及,若所述八叉树结构第i层有多个节点,即有多个第i层节点,则对任两个第i层节点,将(这两个第i层节点中)“排序靠前的第i层节点”的子节点(作为一个节点组),设置在(这两个第i层节点中)“排序靠后的第i层节点”的子节点(作为一个节点组)之前,对应上述的“组间重排”。
如此一来,就对第i层节点的所有子节点完成了重排,即根据重排后的第i层节点对第i+1层节点进行了重排。
例如图3中,对两个第二层节点进行重排后,根据重排后的第二次节点对第三层节点进行重排,重排后的第三层节点如图4所示。
从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排后,就使得:除最后一层节点外,对所述八叉树结构的任一个节点,该节点中排序靠前的(非空)位置对应的子节点,位于该节点中排序靠后的(非空)位置对应的子节点之前;以及,除最后一层外,若所述八叉树结构的任一层有多个节点,则对该层中的任两个节点,(这两个节点中)“排序靠前的节点”的子节点,位于(这两个节点中)“排序靠后的节点”的子节点之前。
例如图5中,对第i层节点重排后,节点j排序位于节点j+1之前(节点j位于节点j+1左边),第i+1层节点重排前的节点顺序是节点P0, 节点P1, 节点P2, 节点P3(图5中的节点与其他图中的节点即使名称相同,也不一定是相同节点)。其中节点P1、节点P2是节点j的子节点,节点P0、节点P3是节点j+1的子节点。对第i+1层节点进行重排后,一方面,节点j的子节点位于节点j+1的子节点之前(节点j的子节点位于节点j+1的子节点左侧);另一方面,节点j的两个子节点中,节点P2位于节点P1之前(节点P2位于节点P1左侧);节点j+1的两个子节点中,节点P0位于节点P3之前(节点P0位于节点P3左侧)。
实施例一中,实施例一的执行主体会确定八叉树结构的各个节点(在内存中)的存储地址,以便存储八叉树结构的各个节点,下面通过2.1或2.2进行说明:
2.1.根据所述第一层节点对所述八叉树结构的第二层节点进行重排还可以包括:
若第一层节点只有一个非空位置,则第一层节点只有一个子节点,从而确定第一层节点的该子节点的存储地址后,即可将第一层节点的该子节点存储至其存储地址;若第一层节点具有多个非空位置,由于对第一层节点的子节点进行重排后,第一层节点中排序靠前的非空位置对应的子节点,位于第一层节点中排序靠后的非空位置对应的子节点之前,故可以根据第一层节点中前一个非空位置对应的子节点的存储地址,确定第一层节点中后一个非空位置对应的子节点的存储地址(前一个、后一个为前后两个,不代表非空位置本身是相邻的两个位置)。具体的,对第一层节点中前后两个非空位置,确定了第一层节点中前一个非空位置对应的子节点的存储地址后,可以将“第一层节点中前一个非空位置对应的子节点的存储地址”的下一个存储地址作为“第一层节点中后一个非空位置对应的子节点的存储地址”。
2.2. 根据重排后的上一层节点对下一层节点进行重排还可以包括:
若有多个第i层节点,则对第i层节点的子节点进行重排后,由于排序靠前的第i层节点的子节点,位于排序靠后的第i层节点的子节点之前,故可以根据前一个第i层节点的子节点的存储地址,确定后一个第i层节点的子节点的存储地址(前一个、后一个为相邻两个);具体的,确定了前一个第i层节点的子节点的存储地址后,从“前一个第i层节点的子节点的存储地址”的下一个存储地址开始存储“后一个第i层节点的子节点”。
例如,第i层有5个节点,对第i层节点重排后,排序第一的第i层节点有2个子节点,排序第二的第i层节点有5个子节点,排序第三的第i层节点有3个子节点,排序第四的第i层节点有1个子节点,排序第五的第i层节点有6个子节点,则:
对第i+1层节点重排后,排序第一的第i层节点的子节点的存储地址为地址0,地址1;
从“排序第一的第i层节点的子节点的存储地址”的下一个存储地址开始存储“排序第二的第i层节点的子节点”,即排序第二的第i层节点的子节点的存储地址为地址2,地址3,地址4,地址5,地址6;
从“排序第二的第i层节点的子节点的存储地址”的下一个存储地址开始存储“排序第三的第i层节点的子节点”,即排序第三的第i层节点的子节点的存储地址为地址7,地址8,地址9;
从“排序第三的第i层节点的子节点的存储地址”的下一个存储地址开始存储“排序第四的第i层节点的子节点”,即排序第四的第i层节点的子节点的存储地址为地址10;
从“排序第四的第i层节点的子节点的存储地址”的下一个存储地址开始存储“排序第五的第i层节点的子节点”,即排序第五的第i层节点的子节点的存储地址为地址11,地址12,地址13,地址14,地址15,地址16。
2.2中,对任一个第i层节点,若该第i层节点具有多个非空位置,则根据(该第i层节点)前一个非空位置对应的子节点的存储地址,确定(该第i层节点)后一个非空位置对应的子节点的存储位置,参照2.1。
沿用上例,排序第三的第i层节点的子节点的存储地址为地址7,地址8,地址9,则按照“排序第三的第i层节点的子节点”的排序,排序第三的第i层节点的子节点中,排序第一的子节点存储至地址7,排序第二的子节点存储至地址8,排序第三的子节点存储至地址9。
需要说明的是,每一个节点可以具有“first child”索引字段,该索引字段用于表征该节点的排序第一的子节点的存储地址(不妨称为目标存储地址),则将该节点的排序第一的子节点存储至所述目标存储地址,该节点的其他子节点按序依次存储至所述目标存储地址之后。
根据以上内容可知,确定节点的存储地址的过程,可以看作是积分图的方式,属于一维积分图。
实施例一中,若按照上述方式,每对一层节点进行重排,则按照该层节点的顺序逐个确定该层的各个节点的存储地址,在节点较多的情况下,计算量较大,故实施例一的执行主体根据重排后的上一层节点对下一层节点进行重排还可以包括:
若有多个第i层节点,则将第i层节点划分为若干子集,根据前一个子集内各第i层节点的子节点的存储地址,确定后一个子集内各第i层节点的子节点的存储地址。具体的,确定了“前一个子集内各第i层节点”的子节点的存储地址后,从“前一个子集内各第i层节点的子节点的存储地址”的下一个存储地址开始存储“后一个子集内各第i层节点的子节点的存储地址”。例如,前一个子集内各第i层节点的子节点总数为3,后一个子集内各第i层节点的子节点总数为4,前一个子集内各第i层节点的子节点的存储地址为地址10,地址11,地址12,则后一个子集内各第i层节点的子节点的存储地址为地址13,地址14,地址15,地址16。
进一步,对上述任一子集,根据该子集内前一个第i层节点的子节点的存储地址,确定该子集内后一个第i层节点的子节点的存储地址。具体的,确定该子集内前一个第i层节点的子节点的存储地址后,从“该子集内前一个第i层节点的子节点的存储地址”的下一个存储地址开始存储“该子集内后一个第i层节点的子节点的存储地址”。例如,该子集内前一个第i层节点有2个子节点,这2个子节点的存储地址是地址15,地址16;该子集内后一个第i层节点有3个子节点,这3个子节点的存储地址就是地址17,地址18,地址19。
进一步,对任一个第i层节点,若该第i层节点具有多个非空位置,则根据前一个非空位置对应的子节点的存储地址,确定后一个非空位置对应的子节点的存储位置,参照2.2或2.1。
可见,上述内容是按照“以子集为单位确定各个子集占用的存储地址→确定单个子集内各第i层节点的子节点的存储地址→确定单个第i层节点的非空位置对应的子节点的存储地址”的方式,确定各个子节点的存储地址。
实施例一中,实施例一的执行主体可以生成第一线程,所述第一线程用于确定所述八叉树结构的任一节点的存储地址。
或,从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,还可以包括:对所述八叉树结构的任一节点,生成该节点对应的重排线程,以便通过所述重排线程将该节点存储至该节点的存储地址。例如,该节点对应的重排线程可以通过所述第一线程获取该节点的存储地址,该节点对应的重排线程将该节点存储至该节点的存储地址。
实施例一中,从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,还可以包括:对所述八叉树结构的任一节点,生成该节点对应的重排线程,以便在该节点对应的重排线程获取该节点的存储位置后,将该节点存储至该节点的存储位置。
其中,该节点对应的重排线程可以通过所述第一线程获取该节点的存储地址;或者,通过以下方式获取该节点的存储地址:
各个节点对应的重排线程可以共同维护一个变量,第二层排序第一的节点对应的重排线程,根据根节点的索引字段确定该节点的存储地址,将该节点的存储地址写入所述变量;第二层排序第二的节点对应的重排线程,根据第二层排序第一的节点的存储地址,确定第二层排序第二的节点的存储地址,将第二层排序第二的节点的存储地址写入所述变量;以此类推,直至第二层排序最后的节点对应的重排线程,确定第二层排序最后的节点的存储地址,将第二层排序最后的节点的存储地址写入所述变量;
第三层排序第一的节点对应的重排线程,根据该节点所来自的上一层节点的索引字段,确定该节点的存储地址,将该节点的存储地址写入所述变量;第三层排序第二的节点对应的重排线程,根据第三层排序第一的节点的存储地址,确定第三层排序第二的节点的存储地址,将第三层排序第二的节点的存储地址写入所述变量;以此类推,直至第三层排序最后的节点对应的重排线程,确定第三层排序最后的节点的存储地址,将第三层排序最后的节点的存储地址写入所述变量;
第四层排序第一的节点对应的重排线程,根据该节点所来自的上一层节点的索引字段,确定该节点的存储地址,将该节点的存储地址写入所述变量;第四层排序第二的节点对应的重排线程,根据第四层排序第一的节点的存储地址,确定第四层排序第二的节点的存储地址,将第四层排序第二的节点的存储地址写入所述变量;以此类推,直至第四层排序最后的节点对应的重排线程,确定第四层排序最后的节点的存储地址,将第四层排序最后的节点的存储地址写入所述变量;
以此类推,
末层排序第一的节点对应的重排线程,根据该节点所来自的上一层节点的索引字段,确定该节点的存储地址,将该节点的存储地址写入所述变量;末层排序第二的节点对应的重排线程,根据末层排序第一的节点的存储地址,确定末层排序第二的节点的存储地址,将末层排序第二的节点的存储地址写入所述变量;以此类推,直至末层排序最后的节点对应的重排线程,确定末层排序最后的节点的存储地址(也可将末层排序最后的节点的存储地址写入所述变量)。
以上说明了确定存储地址的一些方式,对任一节点,确定该节点的存储位置一般都是在对该节点所在的层进行重排后进行的。
实施例一中,自动对八叉树结构的各级节点进行重排,使八叉树结构各级节点满足有序性,提高八叉树处理效果和效率。
通过实施例一处理后的八叉树结构是有序的,这种有序的八叉树结构是规范的,具有唯一性,对于数据交换有着重要意义。
通过实施例一处理后的八叉树结构可以广泛应用于包括三维重建、编码、渲染等在内的各领域。
因为通过实施例一处理后的八叉树结构满足有序性,故通过实施例一处理后的八叉树结构不再需要链表结构,每个节点节约了用于链接的4-8个字节,这在大规模数据中尤其重要,能够有效提高大规模数据重建、编码、渲染或其他操作的效果和效率。
实施例一中,按照“以子集为单位确定各个子集占用的存储地址→确定单个子集内各第i层节点的子节点的存储地址→确定单个第i层节点的非空位置对应的子节点的存储地址”的方式,确定各个子节点的存储地址。也就是将每层节点分成各个子集,首先以子集为单位确定各个子集占用的存储地址,再逐步细化,确定单个子集内各第i层节点的子节点的存储地址,确定单个第i层节点的非空位置对应的子节点的存储地址,能够有效降低存储地址计算量,提高存储地址计算效率。这种方式尤其适合GPU这种多线程并发计算体系结构。这是因为,先以子集为单位确定各个子集占用的存储地址,从而先为各个子集分配重排线程,确定各个子集占用的存储地址;再为各第i层节点分配重排线程,确定单个子集内各第i层节点的子节点的存储地址,再确定单个第i层节点的非空位置对应的子节点的存储地址,从而可以利用GPU的多线程性,来生成多个重排线程分别计算存储地址,提高存储地址计算效果和效率。并且,实施例一中,可以通过第一线程来单独确定所述八叉树结构的任一节点的存储地址,通过重排线程将节点存储至对应的存储地址,实现了第一线程和各重排线程这两种线程的结合,这两种线程分别执行,逻辑相对清晰。并且,第一线程和各重排线程之间通讯效率非常高,循环等待中循环次数可达到700次左右。另外,实施例一中,各节点可以存储至共享内存,即各重排线程可以共享内存,能够缓冲大部分数据,需要的辅助空间大大减少。
实验表明,当输入的点云数据规模为943,718,400 点,并基于此建立八叉树,则:
执行实施例一所需要的辅助空间仅3686408 字节;
利用CPU进行实施例一所述的八叉树处理,耗时313ms;
利用2060卡进行实施例一所述的八叉树处理,耗时仅110ms;
利用3090卡进行实施例一所述的八叉树处理,耗时仅47ms。
可见,所达到的八叉树处理效率明显提高。这也说明利用GPU执行实施例一有明显的优势,在消费型显卡上能得到数倍的提速。
实施例一中,可以各重排线程共同维护变量,从而放弃第一线程,可以进一步省去辅助空间,有利于节省动态内存,并协调了推进的节奏,让块间串行有序进行。
实验表明,采用共同维护变量这种方式,当输入的点云数据规模为943,718,400点,并基于此建立八叉树,则:
执行实施例一所需要的辅助空间仅3686408 字节;
利用CPU进行实施例一所述的八叉树处理,耗时313ms;
利用2060卡进行实施例一所述的八叉树处理,耗时仅125ms;
利用3090卡进行实施例一所述的八叉树处理,耗时仅63ms。
这说明,采用共同维护变量这种方式,与上述采用第一线程这种方式所达到的八叉树处理效率相差无几,但采用共同维护变量这种方式,实现方式更加简洁。
通过上述实验也进一步表明,通过GPU执行实施例一,不仅在速度上优于CPU,更重要的是八叉树结构数据不必通过IO交换到CPU中进行重排,节省了大量PCI总线传输时间。
实施例一不仅可以应用于八叉树重排,对于其它一切需要预先确定起始位置的问题都适用。
如图6所示,本说明书第二个实施例提供一种与实施例一所述八叉树处理方法对应的八叉树处理装置,包括:
准备模块202,用于获取八叉树结构;
重排模块204,用于若所述八叉树结构具有多层节点,则从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,以使:除最后一层节点外,对所述八叉树结构的任一个节点,该节点中排序靠前的位置对应的子节点,位于该节点中排序靠后的位置对应的子节点之前;以及,除最后一层外,若所述八叉树结构的任一层有多个节点,则对该层中的任两个节点,排序靠前的节点的子节点,位于排序靠后的节点的子节点之前。
可选的,将所述八叉树结构的根节点作为第一层节点;从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,包括:
根据所述第一层节点对所述八叉树结构的第二层节点进行重排;
若所述八叉树结构具有至少三层节点,则根据重排后的上一层节点对下一层节点进行重排;
其中,所述上一层为第二层至倒数第二层中的任一层。
可选的,根据所述第一层节点对所述八叉树结构的第二层节点进行重排包括:若第一层节点具有多个非空位置,则对第一层节点中的任两个非空位置,将排序靠前的非空位置对应的子节点,设置在排序靠后的非空位置对应的子节点之前;其中,所述非空位置为对应有子节点的位置;
或,根据重排后的上一层节点对下一层节点进行重排,包括:
对任一个第i层节点,若该第i层节点具有多个非空位置,则对该第i层节点中的任两个非空位置,将排序靠前的非空位置对应的子节点,设置在排序靠后的非空位置对应的子节点之前;以及,若有多个第i层节点,则对任两个第i层节点,将排序靠前的第i层节点的子节点,设置在排序靠后的第i层节点的子节点之前;
其中,所述第i层为第二层至倒数第二层中的任一层。
可选的,根据所述第一层节点对所述八叉树结构的第二层节点进行重排还包括:若第一层节点具有多个非空位置,则根据前一个非空位置对应的子节点的存储地址,确定后一个非空位置对应的子节点的存储位置;
或,根据重排后的上一层节点对下一层节点进行重排还包括:
若有多个第i层节点,则根据前一个第i层节点的子节点的存储地址,确定后一个第i层节点的子节点的存储地址;以及,对任一个第i层节点,若该第i层节点具有多个非空位置,则根据前一个非空位置对应的子节点的存储地址,确定后一个非空位置对应的子节点的存储位置。
可选的,根据重排后的上一层节点对下一层节点进行重排还包括:
若有多个第i层节点,则将第i层节点划分为若干子集,根据前一个子集内各第i层节点的子节点的存储地址,确定后一个子集内各第i层节点的子节点的存储地址;
对任一子集,根据该子集内前一个第i层节点的子节点的存储地址,确定该子集内后一个第i层节点的子节点的存储地址;
对任一个第i层节点,若该第i层节点具有多个非空位置,则根据前一个非空位置对应的子节点的存储地址,确定后一个非空位置对应的子节点的存储位置。
可选的,所述重排模块204,用于生成第一线程,所述第一线程用于确定所述八叉树结构的任一节点的存储地址;
或,
从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,还包括:
对所述八叉树结构的任一节点,生成该节点对应的重排线程,以便通过所述重排线程将该节点存储至该节点的存储地址。
可选的,从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,还包括:
对所述八叉树结构的任一节点,生成该节点对应的重排线程,以便在所述重排线程获取该节点的存储位置后,将该节点存储至该节点的存储位置。
本说明书第三个实施例提供一种八叉树处理设备,包括:
至少一个处理器;
以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,使所述至少一个处理器能够执行实施例一所述的八叉树处理方法。
本说明书第四个实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现实施例一所述的八叉树处理方法。
上述各实施例可以结合使用,不同实施例之间或同一实施例内的名称相同的模块可以是相同或不同的模块。
上述对本说明书特定实施例进行了描述,其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,附图中描绘的过程不一定必须按照示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备、非易失性计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书实施例提供的装置、设备、非易失性计算机可读存储介质与方法是对应的,因此,装置、设备、非易失性计算机存储介质也具有与对应方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述对应装置、设备、非易失性计算机存储介质的有益技术效果。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device, PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20 以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书实施例可提供为方法、系统、或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带式磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种八叉树处理方法,其特征是,包括:
获取八叉树结构;
若所述八叉树结构具有多层节点,则从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,以使:
除最后一层节点外,对所述八叉树结构的任一个节点,该节点中排序靠前的位置对应的子节点,位于该节点中排序靠后的位置对应的子节点之前;以及,
除最后一层外,若所述八叉树结构的任一层有多个节点,则对该层中的任两个节点,排序靠前的节点的子节点,位于排序靠后的节点的子节点之前。
2.如权利要求1所述的方法,其特征是,将所述八叉树结构的根节点作为第一层节点;从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,包括:
根据所述第一层节点对所述八叉树结构的第二层节点进行重排;
若所述八叉树结构具有至少三层节点,则根据重排后的上一层节点对下一层节点进行重排;
其中,所述上一层为第二层至倒数第二层中的任一层。
3.如权利要求2所述的方法,其特征是,根据所述第一层节点对所述八叉树结构的第二层节点进行重排包括:若第一层节点具有多个非空位置,则对第一层节点中的任两个非空位置,将排序靠前的非空位置对应的子节点,设置在排序靠后的非空位置对应的子节点之前;其中,所述非空位置为对应有子节点的位置;
或,根据重排后的上一层节点对下一层节点进行重排,包括:
对任一个第i层节点,若该第i层节点具有多个非空位置,则对该第i层节点中的任两个非空位置,将排序靠前的非空位置对应的子节点,设置在排序靠后的非空位置对应的子节点之前;以及,若有多个第i层节点,则对任两个第i层节点,将排序靠前的第i层节点的子节点,设置在排序靠后的第i层节点的子节点之前;
其中,所述第i层为第二层至倒数第二层中的任一层。
4.如权利要求2或3所述的方法,其特征是,根据所述第一层节点对所述八叉树结构的第二层节点进行重排还包括:若第一层节点具有多个非空位置,则根据前一个非空位置对应的子节点的存储地址,确定后一个非空位置对应的子节点的存储位置;
或,根据重排后的上一层节点对下一层节点进行重排还包括:
若有多个第i层节点,则根据前一个第i层节点的子节点的存储地址,确定后一个第i层节点的子节点的存储地址;以及,对任一个第i层节点,若该第i层节点具有多个非空位置,则根据前一个非空位置对应的子节点的存储地址,确定后一个非空位置对应的子节点的存储位置。
5.如权利要求2或3所述的方法,其特征是,根据重排后的上一层节点对下一层节点进行重排还包括:
若有多个第i层节点,则将第i层节点划分为若干子集,根据前一个子集内各第i层节点的子节点的存储地址,确定后一个子集内各第i层节点的子节点的存储地址;
对任一子集,根据该子集内前一个第i层节点的子节点的存储地址,确定该子集内后一个第i层节点的子节点的存储地址;
对任一个第i层节点,若该第i层节点具有多个非空位置,则根据前一个非空位置对应的子节点的存储地址,确定后一个非空位置对应的子节点的存储位置。
6.如权利要求1所述的方法,其特征是,所述方法还包括:
生成第一线程,所述第一线程用于确定所述八叉树结构的任一节点的存储地址;
或,
从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,还包括:
对所述八叉树结构的任一节点,生成该节点对应的重排线程,以便通过所述重排线程将该节点存储至该节点的存储地址。
7.如权利要求1所述的方法,其特征是,从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,还包括:
对所述八叉树结构的任一节点,生成该节点对应的重排线程,以便在所述重排线程获取该节点的存储位置后,将该节点存储至该节点的存储位置。
8.一种八叉树处理装置,其特征是,包括:
准备模块,用于获取八叉树结构;
重排模块,用于若所述八叉树结构具有多层节点,则从所述八叉树结构的第二层节点开始,依次对所述八叉树结构的各层节点进行重排,以使:除最后一层节点外,对所述八叉树结构的任一个节点,该节点中排序靠前的位置对应的子节点,位于该节点中排序靠后的位置对应的子节点之前;以及,除最后一层外,若所述八叉树结构的任一层有多个节点,则对该层中的任两个节点,排序靠前的节点的子节点,位于排序靠后的节点的子节点之前。
9.一种八叉树处理设备,其特征是,包括:
至少一个处理器;
以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,使所述至少一个处理器能够执行权利要求1至7中任一项所述方法。
10.一种计算机可读存储介质,其特征是,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现权利要求1至7中任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210083615.XA CN114387358A (zh) | 2022-01-25 | 2022-01-25 | 一种八叉树处理方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210083615.XA CN114387358A (zh) | 2022-01-25 | 2022-01-25 | 一种八叉树处理方法、装置、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114387358A true CN114387358A (zh) | 2022-04-22 |
Family
ID=81203391
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210083615.XA Pending CN114387358A (zh) | 2022-01-25 | 2022-01-25 | 一种八叉树处理方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114387358A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102841891A (zh) * | 2011-06-21 | 2012-12-26 | 金蝶软件(中国)有限公司 | 一种树状结构节点的排序方法、装置及查询系统 |
CN106649464A (zh) * | 2016-09-26 | 2017-05-10 | 深圳市数字城市工程研究中心 | 一种中文地址树的构建方法及装置 |
US20190114829A1 (en) * | 2016-10-12 | 2019-04-18 | Hewlett-Packard Development Company, L.P. | Serialising a representation of a three dimensional object |
CN110334290A (zh) * | 2019-06-28 | 2019-10-15 | 中南大学 | 一种基于MF-Octree的时空数据快速检索方法 |
CN111078689A (zh) * | 2019-11-20 | 2020-04-28 | 深圳希施玛数据科技有限公司 | 一种非连续型预排序遍历树算法的数据处理方法及系统 |
-
2022
- 2022-01-25 CN CN202210083615.XA patent/CN114387358A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102841891A (zh) * | 2011-06-21 | 2012-12-26 | 金蝶软件(中国)有限公司 | 一种树状结构节点的排序方法、装置及查询系统 |
CN106649464A (zh) * | 2016-09-26 | 2017-05-10 | 深圳市数字城市工程研究中心 | 一种中文地址树的构建方法及装置 |
US20190114829A1 (en) * | 2016-10-12 | 2019-04-18 | Hewlett-Packard Development Company, L.P. | Serialising a representation of a three dimensional object |
CN110334290A (zh) * | 2019-06-28 | 2019-10-15 | 中南大学 | 一种基于MF-Octree的时空数据快速检索方法 |
CN111078689A (zh) * | 2019-11-20 | 2020-04-28 | 深圳希施玛数据科技有限公司 | 一种非连续型预排序遍历树算法的数据处理方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102376117B1 (ko) | 병렬 결정 트리 프로세서 아키텍처 | |
CN104765589B (zh) | 基于mpi的网格并行预处理方法 | |
US11977600B2 (en) | Machine learning architecture support for block sparsity | |
US9240237B2 (en) | Semiconductor device and method of writing/reading entry address into/from semiconductor device | |
CN107957989A (zh) | 基于集群的词向量处理方法、装置以及设备 | |
CN108073687B (zh) | 随机游走、基于集群的随机游走方法、装置以及设备 | |
CN109658094B (zh) | 随机游走、基于集群的随机游走方法、装置以及设备 | |
CN108170663A (zh) | 基于集群的词向量处理方法、装置以及设备 | |
CN103544729A (zh) | 一种动画数据处理方法及系统 | |
CN114387358A (zh) | 一种八叉树处理方法、装置、设备及介质 | |
JP7044118B2 (ja) | 並列ユニオン制御装置、並列ユニオン制御方法、および並列ユニオン制御用プログラム | |
CN104036141A (zh) | 一种基于OpenCL的红黑树加速算法 | |
CN113641872B (zh) | 一种散列方法、装置、设备及介质 | |
CN113656414B (zh) | 一种数据处理方法、装置、设备及介质 | |
CN115563116A (zh) | 一种数据库表扫描方法、装置以及设备 | |
CN105573834B (zh) | 一种基于异构平台的高维词汇树构建方法 | |
US20130173647A1 (en) | String matching device based on multi-core processor and string matching method thereof | |
CN113641871B (zh) | 一种无锁散列方法、装置、设备及介质 | |
CN115098271B (zh) | 一种多线程数据处理方法、装置、设备及介质 | |
CN109753351A (zh) | 一种限时任务处理方法、装置、设备及介质 | |
Jain-Mendon et al. | A case study of streaming storage format for sparse matrices | |
Arya | Fastbit-radix sort: Optimized version of radix sort | |
US20240176984A1 (en) | Data processing device and method, and related product | |
CN116703695A (zh) | 非极大值抑制的硬件加速方法及系统 | |
CN118656218A (zh) | 一种模型推理优化方法、设备、存储介质及程序产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |