CN112102467A - 一种基于gpu的并行八叉树生成、装置及电子设备 - Google Patents
一种基于gpu的并行八叉树生成、装置及电子设备 Download PDFInfo
- Publication number
- CN112102467A CN112102467A CN202010708874.8A CN202010708874A CN112102467A CN 112102467 A CN112102467 A CN 112102467A CN 202010708874 A CN202010708874 A CN 202010708874A CN 112102467 A CN112102467 A CN 112102467A
- Authority
- CN
- China
- Prior art keywords
- octree
- array
- nodes
- node
- coding
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 38
- 238000004364 calculation method Methods 0.000 claims abstract description 34
- 238000003491 array Methods 0.000 claims abstract description 24
- 238000004590 computer program Methods 0.000 claims description 14
- 238000010276 construction Methods 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 5
- 230000006386 memory function Effects 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000005070 sampling Methods 0.000 description 3
- 239000013598 vector Substances 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
Images
Classifications
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明实施例提供一种基于GPU的并行八叉树生成方法、装置及电子设备,所述方法包括:获取点云数据,所述点云数据包括每个点的位置信息;根据所述点云数据在所述GPU分配所述点云数据的计算空间;根据每个点的位置信息计算所述计算空间中所有点的编码数组,根据所述编码数组创建八叉树最底层的初始八叉树节点,所述八叉树的每个节点均包含一键值;基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件生成目标八叉树。这样可以在GPU上高度的自底向上的方式并行为给定的点云数据构建八叉树,且使用线性方式存储八叉树节点,能够高效利用空间,进而节约空间,并提高八叉树的建树效率。
Description
技术领域
本发明涉及三维空间技术领域,尤其涉及一种基于GPU的并行八叉树生成、装置及电子设备。
背景技术
随着计算机技术的进步以及数字化需求的不断增加,三维模型作为一种新型的多媒体数字技术,正以日新月异的速度向前发展。近年来,三维激光扫描技术飞速发展,随着其在效率、精度、测距范围等方面的性能不断提升以及相关理论的发展,三维扫描技术在越来越多的领域得到了应用。三维激光扫描直接对物体表面进行三维密集采样,可快速获取具有三维坐标(X,Y,Z)的不规则空间分布三维点云,成为数字化时代下刻画复杂现实世界最为直接和重要的三维地理空间数据获取手段,在全球变化、智慧城市、全球制图等国家重大需求和地球系统科学研究中起到十分重要的作用。
八叉树是一种描述三维空间的树状数据结构,用一个立方体代表一个节点,每个节点有零个或者八个子节点,传统的八叉树构建方法是在CPU端自根节点向下递归建立到最大深度为止,这种方法很难在GPU上高效实现,且运行空间大以及八叉树的建树效率低。
发明内容
本发明实施例提供一种基于GPU的并行八叉树生成方法,能够能够在GPU上实现,且节约空间以及提高八叉树的建树效率。
第一方面,本发明实施例提供一种基于GPU的并行八叉树生成方法,所述方法包括以下步骤:
获取点云数据,所述点云数据包括每个点的位置信息;
根据所述点云数据在所述GPU分配所述点云数据的计算空间;
根据每个点的位置信息计算所述计算空间中所有点的编码数组,根据所述编码数组创建八叉树最底层的初始八叉树节点,所述八叉树的每个节点均包含一键值;
基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件生成目标八叉树。
可选的,所述根据每个点的位置信息计算所述计算空间中所有点的编码数组,根据所述编码数组创建初始八叉树节点的步骤包括:
根据所述每个点的位置信息基于预设的编码策略对所述计算空间进行分割,并进行编码,以得到每个点的编码值,所述编码值与所述键值存在对应关系;
根据所有点的编码值以及所有点的序号生成所有点的编码数组;
根据所述编码数组创建标记数组;
根据所述标记数组创建八叉树节点数组,并配置与所述第一八叉树节点数组对应的键值;
根据所述编码数组与所述八叉树数组创建八叉树最底层的初始八叉树节点。
可选的,所述基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件得到目标八叉树的步骤包括:
根据所述初始八叉树节点计算每一层八叉树节点个数,并创建层级数组以及节点地址数组,所述层级数组用于记录每一层节点个数,所述节点地址数组用于记录每一层节点的起始位置;
根据所述层级数组计算所有节点的空间大小,并生成树节点数组;
根据所述节点地址数组以及所述树节点数组建立各个层级的八叉树节点,直到根节点对应的层级为止,以生成目标八叉树。
可选的,所述基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件得到目标八叉树的步骤还包括:
根据初始八叉树节点的相邻子节点的键值右移六位来判断相邻子节点的父节点是不是兄弟关系;
若是,则通过父节点的键的后三位来确定两父节点在兄弟节点的位置。
第二方面,本发明实施例还提供了一种基于GPU的并行八叉树生成装置,所述装置包括:
第一获取模块,用于获取点云数据,所述点云数据包括每个点的位置信息;
空间分配模块,用于根据所述点云数据在所述GPU分配所述点云数据的计算空间;
第一计算模块,用于根据每个点的位置信息计算所述计算空间中所有点的编码数组,根据所述编码数组创建八叉树最底层的初始八叉树节点,所述八叉树的每个节点均包含一键值;
目标八叉树生成模块,用于基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件生成目标八叉树。
可选的,所述第一计算模块包括:
编码单元,用于根据所述每个点的位置信息基于预设的编码策略对所述计算空间进行分割,并进行编码,以得到每个点的编码值,所述编码值与所述键值存在对应关系;
编码数组生成单元,用于根据所有点的编码值以及所有点的序号生成所有点的编码数组;
第一创建单元,用于根据所述编码数组创建标记数组;
第二创建单元,用于根据所述标记数组创建八叉树节点数组,并配置与所述第一八叉树节点数组对应的键值;
第三创建单元,用于根据所述编码数组与所述八叉树数组创建八叉树最底层的初始八叉树节点。
可选的,所述目标八叉树生成模块包括:
第四创建单元,用于根据所述初始八叉树节点计算每一层八叉树节点个数,并创建层级数组以及节点地址数组,所述层级数组用于记录每一层节点个数,所述节点地址数组用于记录每一层节点的起始位置;
树节点数组生成单元,用于根据所述层级数组计算所有节点的空间大小,并生成树节点数组;
目标八叉树生成单元,用于根据所述节点地址数组以及所述树节点数组建立各个层级的八叉树节点,直到根节点对应的层级为止,以生成目标八叉树。
可选的,所述目标八叉树生成模块还包括:
判断单元,用于根据初始八叉树节点的相邻子节点的键值右移六位来判断相邻子节点的父节点是不是兄弟关系;
确定单元,用于若是,则通过父节点的键的后三位来确定两父节点在兄弟节点的位置。
第三方面,本发明实施例还提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实施例提供的基于GPU的并行八叉树生成方法中的步骤。
第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例提供的基于GPU的并行八叉树生成方法中的步骤。
本发明实施例带来的有益效果:通过获取点云数据,所述点云数据包括每个点的位置信息;根据所述点云数据在所述GPU分配所述点云数据的计算空间;根据每个点的位置信息计算所述计算空间中所有点的编码数组,根据所述编码数组创建八叉树最底层的初始八叉树节点,所述八叉树的每个节点均包含一键值;基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件生成目标八叉树。这样可以在GPU上高度的自底向上的方式并行为给定的点云数据构建八叉树,且使用线性方式存储八叉树节点,能够高效利用空间,进而节约空间,并提高八叉树的建树效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的基于GPU的并行八叉树生成方法的流程图;
图2是本发明实施例中步骤103提供的一种方法的流程图;
图3是本发明实施例中步骤104提供的一种方法的流程图;
图4是本发明实施例中步骤104提供的另一种方法的流程图;
图5是本发明实施例提供的基于GPU的并行八叉树生成装置的结构示意图;
图6是本发明实施例中第一计算模块提供的一种结构示意图;
图7是本发明实施例中目标八叉树生成模块提供的一种结构示意图;
图8是本发明实施例中目标八叉树生成模块提供的另一种结构示意图;
图9是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本发明实施例中可能采用术语第一、第二等来描述各种单元,但这些单元不应限于这些术语。这些术语仅用来将同一类型的单元彼此区分开。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
请参见图1,图1是本发明实施例提供的基于GPU的并行八叉树生成方法的流程图,该基于GPU的并行八叉树生成方法包括以下步骤:
步骤101、获取点云数据。
其中,上述点云数据是指在一个三维坐标系统中的一组向量的集合,这些向量通常以x、y、z三维坐标的形式表示。点云数据包括每个点的位置信息,该点云数据还可以包括每个点的点名称信息、点ID信息、颜色(RGB)信息、反射强度信息、灰度值等等。每个点的位置信息可以使用坐标信息来表示。当点云数据为图像点云数据时,每个点的位置信息可以是指每个点对应的像素点的像素坐标信息等。
具体的,点云数据一般采用3D扫描设备采集得到的,例如激光雷达(2d/3d)、立体摄像头(stereo camera)、越渡时间相机(time-of-flight camera)等,这些设备用自动化的方式测量在物体表面的大量的点的信息,然后用某种数据文件输出点云数据。
步骤102、根据点云数据在GPU分配点云数据的计算空间。
其中,上述GPU(Graphics Processing Unit,图形处理器)的数量可以为多个,且可以是并行工作的。上述计算空间用于计算并构建点云数据的八叉树的空间,也可以说是点云数据的存储空间。上述计算空间可以为立方体空间,且点云数据中的点均存储在该立体空间中。八叉树是一种描述三维空间的树状数据结构,用一个立方体代表一个节点,每个节点有零个或者八个子节点,每个节点对应的立方体可以称为包围盒。所述计算空间的分配方式可以是并行分配。
具体的,当获取到点云数据后,可以将所有点云加载到显存,可以根据点云数据的空间大小在GPU中分配满足点云数据需求的计算空间。该计算空间存储所有的点云数据。
需要说明的是,由于使用的是线性数组存储点云的,因此使用数组下标代替指针,其中,该指针包括两种指针分别为绝对指针和相对指针,绝对指针是类似于八叉树节点数组的下标,相对指针是类似于节点的八个节点ID。
步骤103、根据每个点的位置信息计算空间中所有点的编码数组,根据编码数组创建八叉树最底层的初始八叉树节点。
其中,上述初始八叉树节点为把八叉树最底层的八叉树节点。八叉树的每个节点均包含一键值,该一组键值对应于对应节点的存储路径,从根节点到叶子节点的路径。键值为八叉树节点的一属性,每个八叉树节点均还包括父节点、邻居节点、零个或八个子节点。键值可以称为Key值、或Key。每个节点还记录包含的顶点情况,每个节点包含的顶点采用顶点的起始ID以及个数来记录。
具体的,如图2所示,步骤103包括以下步骤:
步骤201、根据每个点的位置信息基于预设的编码策略对计算空间进行分割,并进行编码,以得到每个点的编码值,编码值与键值存在对应关系。
步骤202、根据所有点的编码值以及所有点的序号生成所有点的编码数组;
步骤203、根据编码数组创建标记数组。
步骤204、根据标记数组创建八叉树节点数组,并配置与第一八叉树节点数组对应的键值。
步骤205、根据编码数组与八叉树数组创建八叉树最底层的初始八叉树节点。
更具体的,在得到点云数据的计算空间后,可以根据每个点的位置信息对计算空间进行层级分割,得到八个小立方体。并且采用预设的编码策略进行编码,进而得到每个点的编码值。预设的编码策略为采用记函数进行编码,记函数的具体公式如下:
X分量的记函数:
其中,xd是x轴的编码值,p.x是顶点坐标的x分量,Cd.x是第d层节点X轴中心。
还包括Y分量以及Z分量的记函数:
其中,yd是Y轴的编码值,p.y是顶点坐标的y分量,Cd.y是第d层节点Y轴中心。
其中,zd是Z轴的编码值,p.z是顶点坐标的z分量,Cd.z是第d层节点的Z轴中心。
根据公式1、公式2以及公式3就可以得到xdydzd,这样从最大的计算空间依次降级分割,进而在预设最大深度完成后,即可得到x0y0z0x1y1z1x2y2z2x3y3z3...xdydzd的一组键值,此时这组键值代表从根节点到叶子节点的路径。
更进一步的,步骤201-步骤205可以通过以下方法来完成:
步骤一:并行计算所有点云的包围盒。
步骤二:新建数组codeArray(编码数组),并行计算所有顶点的编码值,并与顶点的序号组成一个64位整数。
步骤三:对codeArray排序,并且把点云按照codeArray排序。
步骤四:新建数组markArrray(标记数组)。
步骤五:并行如下步骤:
if code[i].key≠code[i-1].key;
markArray[i]=1;
eles markArray[i]=0;
步骤六:统计markArray数组中非零元素n,生成数组大小为8*n的数组nodeArrayD八叉树节点数组,并赋值key值。
步骤七:并行遍历codeArray数组执行以下步骤:
if codeArray[i].key==nodeArrayD[i].key;
将顶点的起始ID以及个数更新。
这样就把最底层的初始八叉树节点建立好了。
步骤104、基于初始八叉树空间建立各个层级的八叉树节点,直到达到预设的终止条件得到目标八叉树。
其中,有损坏的终止条件可以是建立各个层级的八叉树节点达到预设的层级深度、或者建立各个层级的八叉树节点达到分配的计算空间的最大边缘、或者点云数据中的点选取结束等。
具体的,如图3所示,步骤104包括以下步骤:
步骤301、根据初始八叉树节点计算每一层八叉树节点个数,并创建层级数组以及节点地址数组。
其中,层级数组用于记录每一层节点个数,节点地址数组用于记录每一层节点的起始位置。
步骤302、根据层级数组计算所有节点的空间大小,并生成树节点数组。
步骤303、根据节点地址数组以及树节点数组建立各个层级的八叉树节点,直到根节点对应的层级为止,以生成目标八叉树。
进一步的,预设八叉树最底层为d层,最底层的上一层为d-1层,d大于1小于等于八叉树的最大深度N,N为大于1的整数。步骤301包括以下步骤:
根据d层所有节点的键值计算得到d-1层节点个数,并创建d-1层对应的层级数组以及节点地址数组,d的取值顺序为从N至1进行选取。
d每取一次值,均更新d-1层对应的层级数组以及节点地址数组,直到d取值完毕。
在本发明一实施方式中,如图4所示,步骤104还包括以下步骤:
步骤304、根据初始八叉树节点的相邻子节点的键值右移六位来判断相邻子节点的父节点是不是兄弟关系。
步骤305、若是,则通过父节点的键的后三位来确定两父节点在兄弟节点的位置。
更具体的,在步骤201-步骤205中的步骤七的基础上,步骤301-步骤305可以通过以下方法来完成:
步骤八:计算每一层八叉树节点个数。
创建数组eachLevelArray(层级数组)记录每一层节点个数。
创建数组nodeAddressArray(节点地址数组)记录每一层节点的起始位置。
对于d-1层节点,把d层所有key右移三位去重乘以8就是d-1层数组个数,更新eachLevelArray,nodeAddressArray。
类似方法,计算d-2层节点把d-1层节点右移3位去重乘以8,更新上述eachLevelArray、nodeAddressArray两个数组,直到根节点为止。
步骤九:根据eachLevelArray计算所有节点的空间大小,生成TreeNodes(树节点数组),并且把最大成深度节点按照nodeAddressArray的记录拷贝到指定位置。
步骤十:并行遍历d层节点并执行以下步骤:
preKey=TreeNodes[nodeAddressArray[d]].key>>3//获取最大深度节点的父节点key;
parentID=nodeAddressArray[d-1]//获取父节点的存储位置;
//这两句话是赋值父节点数组的前八个节点Key;
for i=0to 7;
TreeNodes[parentID+i].Key=preKey>>3+i;
for i=0 to eachLevelArray[d]in parallel//并行遍历d层节点;
int currentId=i+nodeAddressArray[d]//获取当前节点在Treenodes数组中的位置;
node n=TreeNodes[currentId]//获取当前节点;
nextKey=n.Key>>3//取当前节点的父节点key;
nextIndex=n.Key&7//当前节点是父节点的哪个子节点;
//如果当前节点的父节点与之记录的父节点不是兄弟节点,就要把parentID往后挪8位;
if(nextKey>>3!=preKey>>3);
parentID+=8;
preKey=nextKey;
for j=0 to 7;
TreeNodes[parentID+j].Key=preKey>>3+j;
TreeNodes[parentID+nexKey&7].child[nextIndex]=currentID//更新父节点的子节点;
TreeNodes[currentID].parent=parentID+nextKey&7//更新子节点的父节点;
由上可知,通过把相邻的子节点key值右移6位来判断他们的父节点是不是兄弟关系,如果是,再通过父节点的key值后三位来确定是父节点在兄弟节点的位置,如果不是,则后移八位。这样可以判断各个父节点之间的兄弟关系以及确定各个兄弟节点之间的位置关系。
基于这个事实,更新节点中采样点个数,父节点中采样点个数是子节点个数和,起始位置是子节点起始位置最小的。
步骤十一:重复十步,建立所有的八叉树节点。
下面生成八叉树邻居节点的关系的方法如下:
步骤十二:for each node t at depth d in parallel;
步骤十三:for j=0 to 26;
步骤十四:i=t’s 3-bit xyz key//(节点t key值的后三位);
步骤十五:p=NodeArray[t.parent];
步骤十六:if p.neighs[LUTParent[i][j]]≠-1then;
步骤十七:h=NodeArray[p.neighs[LUTparent[i][j]];
步骤十八:t.neighs[j]=h.children[LUTchild[i][j]];
步骤十九:else
t.neighs[j]=-1。
这样就可以判断出各个节点之间是否是相邻节点。
在本发明实施例中,通过获取点云数据,所述点云数据包括每个点的位置信息;根据所述点云数据在所述GPU分配所述点云数据的计算空间;根据每个点的位置信息计算所述计算空间中所有点的编码数组,根据所述编码数组创建八叉树最底层的初始八叉树节点,所述八叉树的每个节点均包含一键值;基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件生成目标八叉树。这样可以在GPU上高度的自底向上的方式并行为给定的点云数据构建八叉树,且使用线性方式存储八叉树节点,能够高效利用空间,进而节约空间,并提高八叉树遍历效率。
参见图5,图5是本发明实施例提供的基于GPU的并行八叉树生成装置的结构示意图,该基于GPU的并行八叉树生成装置400包括:
第一获取模块401,用于获取点云数据,点云数据包括每个点的位置信息;
空间分配模块402,用于根据点云数据在GPU分配点云数据的计算空间;
第一计算模块403,用于根据每个点的位置信息计算空间中所有点的编码数组,根据编码数组创建八叉树最底层的初始八叉树节点,八叉树的每个节点均包含一键值;
目标八叉树生成模块404,用于基于初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件生成目标八叉树。
可选的,如图6所示,第一计算模块403包括:
编码单元4031,用于根据每个点的位置信息基于预设的编码策略对计算空间进行分割,并进行编码,以得到每个点的编码值,编码值与键值存在对应关系;
编码数组生成单元4032,用于根据所有点的编码值以及所有点的序号生成所有点的编码数组;
第一创建单元4033,用于根据编码数组创建标记数组;
第二创建单元4034,用于根据标记数组创建八叉树节点数组,并配置与第一八叉树节点数组对应的键值;
第三创建单元4035,用于根据编码数组与八叉树数组创建八叉树最底层的初始八叉树节点。
可选的,如图7所示,目标八叉树生成模块404包括:
第四创建单元4041,用于根据初始八叉树节点计算每一层八叉树节点个数,并创建层级数组以及节点地址数组,层级数组用于记录每一层节点个数,节点地址数组用于记录每一层节点的起始位置;
树节点数组生成单元4042,用于根据层级数组计算所有节点的空间大小,并生成树节点数组;
目标八叉树生成单元4043,用于根据节点地址数组以及树节点数组建立各个层级的八叉树节点,直到根节点对应的层级为止,以生成目标八叉树。
可选的,如图8所示,目标八叉树生成模块404还包括:
判断单元4044,用于根据初始八叉树节点的相邻子节点的键值右移六位来判断相邻子节点的父节点是不是兄弟关系;
确定单元4045,用于若是,则通过父节点的键的后三位来确定两父节点在兄弟节点的位置。
本发明实施例提供的基于GPU的并行八叉树生成装置400能够实现上述方法实施例中的各个实施方式,以及相应有益效果,为避免重复,这里不再赘述。
参见图9,图9是本发明实施例提供的一种电子设备的结构示意图,该电子设备500包括:存储器502、处理器501及存储在存储器502上并可在处理器501上运行的计算机程序,处理器501执行计算机程序时实现上述实施例提供的基于GPU的并行八叉树生成方法中的步骤,处理器501执行以下步骤:
获取点云数据,点云数据包括每个点的位置信息;
根据点云数据在GPU分配点云数据的计算空间;
根据每个点的位置信息计算空间中所有点的编码数组,根据编码数组创建八叉树最底层的初始八叉树节点,八叉树的每个节点均包含一键值;
基于初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件生成目标八叉树。
可选的,处理器501执行的根据每个点的位置信息计算空间中所有点的编码数组,根据编码数组创建初始八叉树节点的步骤包括:
根据每个点的位置信息基于预设的编码策略对计算空间进行分割,并进行编码,以得到每个点的编码值,编码值与键值存在对应关系;
根据所有点的编码值以及所有点的序号生成所有点的编码数组;
根据编码数组创建标记数组;
根据标记数组创建八叉树节点数组,并配置与第一八叉树节点数组对应的键值;
根据编码数组与八叉树数组创建八叉树最底层的初始八叉树节点。
可选的,处理器501执行的基于初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件得到目标八叉树的步骤包括:
根据初始八叉树节点计算每一层八叉树节点个数,并创建层级数组以及节点地址数组,层级数组用于记录每一层节点个数,节点地址数组用于记录每一层节点的起始位置;
根据层级数组计算所有节点的空间大小,并生成树节点数组;
根据节点地址数组以及树节点数组建立各个层级的八叉树节点,直到根节点对应的层级为止,以生成目标八叉树。
可选的,处理器501执行的基于初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件得到目标八叉树的步骤还包括:
根据初始八叉树节点的相邻子节点的键值右移六位来判断相邻子节点的父节点是不是兄弟关系;
若是,则通过父节点的键的后三位来确定两父节点在兄弟节点的位置。
本发明实施例提供的电子设备500能够实现上述方法实施例中的各个实施方式,以及相应有益效果,为避免重复,这里不再赘述。
本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现本发明实施例提供的基于GPU的并行八叉树生成方法中的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存取存储器(Random AccessMemory,简称RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (10)
1.一种基于GPU的并行八叉树生成方法,其特征在于,所述方法包括:
获取点云数据,所述点云数据包括每个点的位置信息;
根据所述点云数据在所述GPU分配所述点云数据的计算空间;
根据每个点的位置信息计算所述计算空间中所有点的编码数组,根据所述编码数组创建八叉树最底层的初始八叉树节点,所述八叉树的每个节点均包含一键值;
基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件生成目标八叉树。
2.如权利要求1所述的基于GPU的并行八叉树生成方法,其特征在于,所述根据每个点的位置信息计算所述计算空间中所有点的编码数组,根据所述编码数组创建初始八叉树节点的步骤包括:
根据所述每个点的位置信息基于预设的编码策略对所述计算空间进行分割,并进行编码,以得到每个点的编码值,所述编码值与所述键值存在对应关系;
根据所有点的编码值以及所有点的序号生成所有点的编码数组;
根据所述编码数组创建标记数组;
根据所述标记数组创建八叉树节点数组,并配置与所述第一八叉树节点数组对应的键值;
根据所述编码数组与所述八叉树数组创建八叉树最底层的初始八叉树节点。
3.如权利要求1所述的基于GPU的并行八叉树生成方法,其特征在于,所述基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件得到目标八叉树的步骤包括:
根据所述初始八叉树节点计算每一层八叉树节点个数,并创建层级数组以及节点地址数组,所述层级数组用于记录每一层节点个数,所述节点地址数组用于记录每一层节点的起始位置;
根据所述层级数组计算所有节点的空间大小,并生成树节点数组;
根据所述节点地址数组以及所述树节点数组建立各个层级的八叉树节点,直到根节点对应的层级为止,以生成目标八叉树。
4.如权利要求3所述的基于GPU的并行八叉树生成方法,其特征在于,所述基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件得到目标八叉树的步骤还包括:
根据初始八叉树节点的相邻子节点的键值右移六位来判断相邻子节点的父节点是不是兄弟关系;
若是,则通过父节点的键的后三位来确定两父节点在兄弟节点的位置。
5.一种基于GPU的并行八叉树生成装置,其特征在于,所述装置包括:
第一获取模块,用于获取点云数据,所述点云数据包括每个点的位置信息;
空间分配模块,用于根据所述点云数据在所述GPU分配所述点云数据的计算空间;
第一计算模块,用于根据每个点的位置信息计算所述计算空间中所有点的编码数组,根据所述编码数组创建八叉树最底层的初始八叉树节点,所述八叉树的每个节点均包含一键值;
目标八叉树生成模块,用于基于所述初始八叉树节点建立各个层级的八叉树节点,直到达到预设终止条件生成目标八叉树。
6.如权利要求5所述的基于GPU的并行八叉树生成装置,其特征在于,所述第一计算模块包括:
编码单元,用于根据所述每个点的位置信息基于预设的编码策略对所述计算空间进行分割,并进行编码,以得到每个点的编码值,所述编码值与所述键值存在对应关系;
编码数组生成单元,用于根据所有点的编码值以及所有点的序号生成所有点的编码数组;
第一创建单元,用于根据所述编码数组创建标记数组;
第二创建单元,用于根据所述标记数组创建八叉树节点数组,并配置与所述第一八叉树节点数组对应的键值;
第三创建单元,用于根据所述编码数组与所述八叉树数组创建八叉树最底层的初始八叉树节点。
7.如权利要求6所述的基于GPU的并行八叉树生成装置,其特征在于,所述目标八叉树生成模块包括:
第四创建单元,用于根据所述初始八叉树节点计算每一层八叉树节点个数,并创建层级数组以及节点地址数组,所述层级数组用于记录每一层节点个数,所述节点地址数组用于记录每一层节点的起始位置;
树节点数组生成单元,用于根据所述层级数组计算所有节点的空间大小,并生成树节点数组;
目标八叉树生成单元,用于根据所述节点地址数组以及所述树节点数组建立各个层级的八叉树节点,直到根节点对应的层级为止,以生成目标八叉树。
8.如权利要求7所述的基于GPU的并行八叉树生成装置,其特征在于,所述目标八叉树生成模块还包括:
判断单元,用于根据初始八叉树节点的相邻子节点的键值右移六位来判断相邻子节点的父节点是不是兄弟关系;
确定单元,用于若是,则通过父节点的键的后三位来确定两父节点在兄弟节点的位置。
9.一种电子设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至4中任一项所述的基于GPU的并行八叉树生成方法中的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至4中任一项所述的基于GPU的并行八叉树生成方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010708874.8A CN112102467B (zh) | 2020-07-22 | 2020-07-22 | 一种基于gpu的并行八叉树生成、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010708874.8A CN112102467B (zh) | 2020-07-22 | 2020-07-22 | 一种基于gpu的并行八叉树生成、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112102467A true CN112102467A (zh) | 2020-12-18 |
CN112102467B CN112102467B (zh) | 2024-05-24 |
Family
ID=73749770
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010708874.8A Active CN112102467B (zh) | 2020-07-22 | 2020-07-22 | 一种基于gpu的并行八叉树生成、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112102467B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112578395A (zh) * | 2021-01-12 | 2021-03-30 | 贵州理工学院 | 一种直升机电力巡线用激光雷达系统 |
CN113051270A (zh) * | 2021-03-26 | 2021-06-29 | 合安科技技术有限公司 | 基于异形结构树的分组方法、装置、电子设备及存储介质 |
WO2022141494A1 (zh) * | 2020-12-31 | 2022-07-07 | 深圳元戎启行科技有限公司 | 三维点云聚类方法、装置、计算机设备和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1946180A (zh) * | 2006-10-27 | 2007-04-11 | 北京航空航天大学 | 一种基于Octree的三维模型压缩编/解码方法 |
US20100082703A1 (en) * | 2008-09-29 | 2010-04-01 | Microsoft Corporation | Octree construction on graphics processing units |
CN102306180A (zh) * | 2011-08-29 | 2012-01-04 | 北京建筑工程学院 | 一种基于海量激光雷达栅格点云数据的建模方法 |
CN106846457A (zh) * | 2016-11-25 | 2017-06-13 | 国家超级计算天津中心 | 一种ct切片数据可视化重构的八叉树并行构造方法 |
US20190392102A1 (en) * | 2018-06-22 | 2019-12-26 | Xplicit Computing, Inc. | Unified geometries for dynamic high-performance computing |
US20200042863A1 (en) * | 2017-04-28 | 2020-02-06 | Microsoft Technology Licensing, Llc | Octree-based convolutional neural network |
CN110910462A (zh) * | 2019-10-14 | 2020-03-24 | 广州南方智能技术有限公司 | 一种基于特征计算的点云轻量化方法及存储介质 |
CN114651192A (zh) * | 2020-08-17 | 2022-06-21 | 腾讯美国有限责任公司 | 用于点云编解码的基于哈希的属性预测 |
-
2020
- 2020-07-22 CN CN202010708874.8A patent/CN112102467B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1946180A (zh) * | 2006-10-27 | 2007-04-11 | 北京航空航天大学 | 一种基于Octree的三维模型压缩编/解码方法 |
US20100082703A1 (en) * | 2008-09-29 | 2010-04-01 | Microsoft Corporation | Octree construction on graphics processing units |
CN102306180A (zh) * | 2011-08-29 | 2012-01-04 | 北京建筑工程学院 | 一种基于海量激光雷达栅格点云数据的建模方法 |
CN106846457A (zh) * | 2016-11-25 | 2017-06-13 | 国家超级计算天津中心 | 一种ct切片数据可视化重构的八叉树并行构造方法 |
US20200042863A1 (en) * | 2017-04-28 | 2020-02-06 | Microsoft Technology Licensing, Llc | Octree-based convolutional neural network |
US20190392102A1 (en) * | 2018-06-22 | 2019-12-26 | Xplicit Computing, Inc. | Unified geometries for dynamic high-performance computing |
CN110910462A (zh) * | 2019-10-14 | 2020-03-24 | 广州南方智能技术有限公司 | 一种基于特征计算的点云轻量化方法及存储介质 |
CN114651192A (zh) * | 2020-08-17 | 2022-06-21 | 腾讯美国有限责任公司 | 用于点云编解码的基于哈希的属性预测 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022141494A1 (zh) * | 2020-12-31 | 2022-07-07 | 深圳元戎启行科技有限公司 | 三维点云聚类方法、装置、计算机设备和存储介质 |
CN112578395A (zh) * | 2021-01-12 | 2021-03-30 | 贵州理工学院 | 一种直升机电力巡线用激光雷达系统 |
CN112578395B (zh) * | 2021-01-12 | 2024-01-26 | 贵州理工学院 | 一种直升机电力巡线用激光雷达系统 |
CN113051270A (zh) * | 2021-03-26 | 2021-06-29 | 合安科技技术有限公司 | 基于异形结构树的分组方法、装置、电子设备及存储介质 |
CN113051270B (zh) * | 2021-03-26 | 2023-05-12 | 合安科技技术有限公司 | 基于异形结构树的分组方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112102467B (zh) | 2024-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112102467B (zh) | 一种基于gpu的并行八叉树生成、装置及电子设备 | |
Vespa et al. | Efficient octree-based volumetric SLAM supporting signed-distance and occupancy mapping | |
US8570322B2 (en) | Method, system, and computer program product for efficient ray tracing of micropolygon geometry | |
CN102682103B (zh) | 一种面向海量激光雷达点云模型的三维空间索引方法 | |
CN104616345B (zh) | 一种基于八叉树森林压缩的三维体素存取方法 | |
US8363049B2 (en) | 3D image processing method and apparatus for enabling efficient retrieval of neighboring point | |
Ernst et al. | Early split clipping for bounding volume hierarchies | |
JP2003077004A (ja) | 3次元の静止した又は動くオブジェクトの階層イメージベース表現並びに該表現をオブジェクトのレンダリングに使用する方法及び装置 | |
WO2014200914A1 (en) | Scalable volumetric 3d reconstruction | |
TW201403542A (zh) | 圖形處理單元中3d加速結構之完全並列原地建構 | |
KR102604737B1 (ko) | 가속 구조를 생성하는 방법 및 장치 | |
JP4199170B2 (ja) | 高次元テクスチャマッピング装置、方法及びプログラム | |
JP2009534759A (ja) | 瞬時光線追跡 | |
CN1226702C (zh) | 用于表示3维情景中基于图像的绘制信息的方法 | |
Vespa et al. | Adaptive-resolution octree-based volumetric SLAM | |
US7209136B2 (en) | Method and system for providing a volumetric representation of a three-dimensional object | |
Catalucci et al. | State-of-the-art in point cloud analysis | |
Yang et al. | A hybrid spatial index for massive point cloud data management and visualization | |
Zhang et al. | A geometry and texture coupled flexible generalization of urban building models | |
CN111402422B (zh) | 三维表面重建方法、装置和电子设备 | |
CN110738726B (zh) | 一种基于八叉树的机器人视觉引导三维物体重建方法 | |
Hu et al. | Parallel BVH construction using locally density clustering | |
CN114049423A (zh) | 一种自动的真实感三维模型纹理映射方法 | |
JP2004272580A (ja) | 高次元テクスチャを合成する装置および方法およびプログラム | |
CN106570934A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |