一种点云数据的存储处理方法和装置与流程

文档序号:30600296发布日期:2022-07-01 21:31阅读:202来源:国知局

1.本发明涉及点云数据处理技术领域,尤其涉及一种点云数据的存储处理方法和装置。


背景技术:

2.近年来,随着激光雷达技术的快速发展和日益广泛的应用,极大地增强了人们获取真实世界三维数据的能力,通过激光雷达可以获取丰富的反映真实世界的点云数据,推动了三维重建、虚拟现实等技术迅速发展。
3.三维点云数据是用三维坐标数据表征的许多点的集合。激光雷达获取三维点云数据后,设计算法用计算机对点云数据进行处理,便可以得到所需要的数字产品。高效地组织和管理点云数据是高效地处理和应用点云数据的基础,不同的处理和应用要求,会采用不同的点云数据组织方法,通常有网格化、四叉树、八叉树数据组织形式。
4.然而,通过三维激光雷达获取大面积的地形地物数据时,往往会得到海量的激光点云数据。当计算机采用上述传统方法加载这些点云数据时,内存开销会很大,并且会存在延时和卡顿现象。尤其当点云数据的大小超过了计算机内存时,会出现计算机无法加载这些点云数据的现象。


技术实现要素:

5.本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明第一方面提出一种点云数据的存储处理方法,所述方法包括:确定待处理的点云数据的数据量与计算机有效内存之间的大小关系;当确定所述数据量大于所述有效内存时,将所述点云数据按照第一边长划分为多个第一点云网格,其中,每个所述第一点云网格中包括的点云数据的数据量均小于所述有效内存;将所述点云数据划分为目标数量个第一点云网格组合,其中,每个所述第一点云网格组合包括多个所述第一点云网格,每个所述第一点云网格组合中包括的点云数据的数据量均小于所述有效内存,所述目标数量为所述点云数据能划分的第一点云网格组合的最小数量;从存储所述点云数据的第一存储文件中,按照每个所述第一点云网格组合中的点云数据的数据量分次读取所述点云数据,并将每次读取的所述点云数据填充到第二存储文件的对应存储空间中。
6.可选的,所述将所述点云数据按照第一边长划分为多个第一点云网格,包括:根据所述点云数据中的点的位置坐标,确定所述点云数据的边界点的坐标;根据所述边界点坐标构建覆盖所述点云数据的边界框;确定使得每个第一点云网格中包括的点云数据的数据量均小于所述有效内存的第一边长;
按照所述第一边长将所述边界框包含的区域划分为多个网格,得到所述点云数据对应的多个第一点云网格。
7.可选的,所述确定所述点云数据的边界点坐标,包括:获取所述点云数据中包括的点的最小坐标值(xmin,ymin,zmin)和最大坐标值(xmax,ymax,zmax),得到所述点云数据的边界点坐标。
8.可选的,所述根据所述边界点坐标构建覆盖所述点云数据的边界框,包括:在所述最小坐标值的基础上减去第一预设值s,得到边界基准点(xmin-s,ymin-s,zmin-s);以所述边界基准点为坐标系的原点,以所述xmin指向所述xmax的方向为x轴方向,以所述ymin指向所述ymax的方向为y轴方向构建坐标系,得到由所述坐标系的x轴和y轴围成的覆盖所述点云数据的边界框。
9.可选的,在将所述点云数据按照坐标位置划分为多个第一点云网格之后,还包括:对所述第一点云网格中的点云数据进行重新随机排序。
10.可选的,所述将所述点云数据划分为目标数量个第一点云网格组合,包括:根据所述第一点云网格中包含的所述点的个数和单个点对应的数据量,确定每个所述第一点云网格包含的点云数据的数据量,得到各个所述第一点云网格对应的数据量的集合;对所述集合中的第一点云网格按照所述数据量递增的原则进行重排序,得到数据量递增序列,并得到与所述数据量递增序列对应的网格编号序列;根据所述数据量递增序列,确定第一点云网格组合,所述第一点云网格组合由多个第一点云网格组成,所述多个第一点云网格的数据量的总和小于所述有效内存。
11.可选的,所述根据所述数据量递增序列,确定第一点云网格组合,包括:对所述数据量递增序列按照首尾组合交叉求和的方法,累计求解多个第一点云网格的数据量的和,将使所述数据量的和小于所述有效内存且所述数据量的和最大的多个第一点云网格确定为一个第一点云网格组合;按照上述方法对所述数据量递增序列中的剩余第一点云网格依次求解,直到所述数据量递增序列中的所有第一点云网格均有对应的第一点云网格组合,得到第一点云网格组合序列。
12.可选的,在得到所述点云数据对应的多个第一点云网格之后,还包括:以所述边界基准点为起始,对所述第一点云网格依次进行编号,得到网格编号;确定所述点云数据中的每个点所属的网格编号;根据所述每个点对应的网格编号,统计每个所述第一点云网格中包含的所述点的数量,以及确定每个所述第一点云网格中最大的网格编号。
13.可选的,在确定每个所述第一点云网格中最大的网格编号之后,还包括:将所述边界基准点的坐标值、所述第一边长、所述点云数据在z轴上的最大坐标、所述最大的网格编号作为所述点云数据的第一索引信息;将所述第一点云网格的网格编号和所述第一点云网格中包含的所述点的数量作为所述第一点云网格的第一索引信息。
14.可选的,在将所述第一点云网格的网格编号和所述第一点云网格中包含的所述点
的数量作为所述第一点云网格的第一索引信息之后,还包括:将所述点云数据的第一索引信息输出到第一索引文件中;将所述第一点云网格的第一索引信息按照所述第一点云网格组合序列的排序,依次输出到所述第一索引文件中。
15.可选的,所述从存储所述点云数据的第一存储文件中,按照每个所述第一点云网格组合中的点云数据的数据量分次读取所述点云数据,包括:从存储所述点云数据的第一存储文件中,按照所述第一索引文件的顺序,以及所述第一点云网格组合中的点云数据的数据量分次读取所述点云数据。
16.可选的,在确定待处理的点云数据的数据量与计算机有效内存之间的大小关系之后,还包括:当确定所述数据量小于所述有效内存时,将所述点云数据从所述第一存储文件中读取出来,并加载到所述计算机的内存中;将所述点云数据按照第二边长划分为多个第二点云网格;对所述第二点云网格中的点云数据进行重新随机排序;确定所述第二点云网格的网格编号,并统计每个所述第二点云网格中包含的点的数量,以及确定每个所述第二点云网格中最大的网格编号。
17.可选的,在确定每个所述第二点云网格中最大的网格编号之后,还包括:根据所述第二点云网格的网格编号、每个所述第二点云网格中包含的所述点的数量、每个所述第二点云网格中最大的网格编号,确定所述点云数据的第二索引信息以及所述第二点云网格的第二索引信息。
18.将所述点云数据的第二索引信息输出到第二索引文件中;将所述第二点云网格的第二索引信息按照所述第二点云网格的网格编号的行主序递增的原则,依次输出到所述第二索引文件中。
19.可选的,所述将所述第二点云网格的第二索引信息按照所述第二点云网格的网格编号的行主序递增的原则,依次输出到所述第二索引文件中之后,还包括:从所述计算机的内存中,按照所述第二索引文件的顺序,分次读取所述点云数据,并将每次读取的所述点云数据填充到第三存储文件的对应存储空间中。
20.本发明第二方面提出一种点云数据的存储处理装置,所述装置包括:数据量确定模块,用于确定待处理的点云数据的数据量与计算机有效内存之间的大小关系;第一点云网格划分模块,用于当确定所述数据量大于所述有效内存时,将所述点云数据按照第一边长划分为多个第一点云网格,其中,每个所述第一点云网格中包括的点云数据的数据量均小于所述有效内存;网格组合划分模块,用于将所述点云数据划分为目标数量个第一点云网格组合,其中,每个所述第一点云网格组合包括多个所述第一点云网格,每个所述第一点云网格组合中包括的点云数据的数据量均小于所述有效内存,所述目标数量为所述点云数据能划分的第一点云网格组合的最小数量;第一存储模块,用于从存储所述点云数据的第一存储文件中,按照每个所述第一点云网格组合中的点云数据的数据量分次读取所述点云数据,并将每次读取的所述点云数
据填充到第二存储文件的对应存储空间中。
21.可选的,所述第一点云网格划分模块具体用于:根据所述点云数据中的点的位置坐标,确定所述点云数据的边界点的坐标;根据所述边界点坐标构建覆盖所述点云数据的边界框;确定使得每个第一点云网格中包括的点云数据的数据量均小于所述有效内存的第一边长;按照所述第一边长将所述边界框包含的区域划分为多个网格,得到所述点云数据对应的多个第一点云网格。
22.可选的,所述第一点云网格划分模块进一步用于:获取所述点云数据中包括的点的最小坐标值(xmin,ymin,zmin)和最大坐标值(xmax,ymax,zmax),得到所述点云数据的边界点坐标。
23.可选的,所述第一点云网格划分模块进一步用于:在所述最小坐标值的基础上减去第一预设值s,得到边界基准点(xmin-s,ymin-s,zmin-s);以所述边界基准点为坐标系的原点,以所述xmin指向所述xmax的方向为x轴方向,以所述ymin指向所述ymax的方向为y轴方向构建坐标系,得到由所述坐标系的x轴和y轴围成的覆盖所述点云数据的边界框。
24.可选的,所述装置还包括:第一随机排序模块,用于对所述第一点云网格中的点云数据进行重新随机排序。
25.可选的,所述网格组合划分模块具体用于:根据所述第一点云网格中包含的所述点的个数和单个点对应的数据量,确定每个所述第一点云网格包含的点云数据的数据量,得到各个所述第一点云网格对应的数据量的集合;对所述集合中的第一点云网格按照所述数据量递增的原则进行重排序,得到数据量递增序列,并得到与所述数据量递增序列对应的网格编号序列;根据所述数据量递增序列,确定第一点云网格组合,所述第一点云网格组合由多个第一点云网格组成,所述多个第一点云网格的数据量的总和小于所述有效内存。
26.可选的,所述网格组合划分模块进一步用于:对所述数据量递增序列按照首尾组合交叉求和的方法,累计求解多个第一点云网格的数据量的和,将使所述数据量的和小于所述有效内存且所述数据量的和最大的多个第一点云网格确定为一个第一点云网格组合;按照上述方法对所述数据量递增序列中的剩余第一点云网格依次求解,直到所述数据量递增序列中的所有第一点云网格均有对应的第一点云网格组合,得到第一点云网格组合序列。
27.可选的,所述装置还包括:第一编号模块,用于以所述边界基准点为起始,对所述第一点云网格依次进行编号,得到网格编号;编号确定模块,用于确定所述点云数据中的每个点所属的网格编号;统计模块,用于根据所述每个点对应的网格编号,统计每个所述第一点云网格中
包含的所述点的数量,以及确定每个所述第一点云网格中最大的网格编号。
28.可选的,所述装置还包括:数据第一索引模块,用于将所述边界基准点的坐标值、所述第一边长、所述点云数据在z轴上的最大坐标、所述最大的网格编号作为所述点云数据的第一索引信息;网格第一索引模块,用于将所述第一点云网格的网格编号和所述第一点云网格中包含的所述点的数量作为所述第一点云网格的第一索引信息。
29.可选的,所述装置还包括:数据输出模块,用于将所述点云数据的第一索引信息输出到第一索引文件中;网格输出模块,用于将所述第一点云网格的第一索引信息按照所述第一点云网格组合序列的排序,依次输出到所述第一索引文件中。
30.可选的,所述第一存储模块具体用于:从存储所述点云数据的第一存储文件中,按照所述第一索引文件的顺序,以及所述第一点云网格组合中的点云数据的数据量分次读取所述点云数据。
31.可选的,所述装置还包括:加载模块,用于当确定所述数据量小于所述有效内存时,将所述点云数据从所述第一存储文件中读取出来,并加载到所述计算机的内存中;第二网格划分模块,用于将所述点云数据按照第二边长划分为多个第二点云网格;第二随机排序模块,用于对所述第二点云网格中的点云数据进行重新随机排序;第二编号确定模块,用于确定所述第二点云网格的网格编号,并统计每个所述第二点云网格中包含的点的数量,以及确定每个所述第二点云网格中最大的网格编号。
32.可选的,所述装置还包括:第二索引信息确定模块,用于根据所述第二点云网格的网格编号、每个所述第二点云网格中包含的所述点的数量、每个所述第二点云网格中最大的网格编号,确定所述点云数据的第二索引信息以及所述第二点云网格的第二索引信息。
33.第二数据输出模块,用于将所述点云数据的第二索引信息输出到第二索引文件中;第二网格输出模块,用于将所述第二点云网格的第二索引信息按照所述第二点云网格的网格编号的行主序递增的原则,依次输出到所述第二索引文件中。
34.可选的,所述装置还包括:填充模块,用于从所述计算机的内存中,按照所述第二索引文件的顺序,分次读取所述点云数据,并将每次读取的所述点云数据填充到第三存储文件的对应存储空间中。
35.本发明第三方面提出一种电子设备,所述电子设备包括处理器和存储器,所述存储器种存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如第一方面所述的点云数据的存储处理方法。
36.本发明第四方面提出一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如第一方面所述的点云数据的存储处理方法。
37.本发明实施例具有以下有益效果:在本发明实施例中,确定待处理的点云数据的数据量与计算机有效内存之间的大小关系;当确定所述数据量大于所述有效内存时,将所述点云数据按照第一边长划分为多个第一点云网格,其中,每个所述第一点云网格中包括的点云数据的数据量均小于所述有效内存;确定各个所述第一点云网格所属的第一点云网格组合,其中,每个所述第一点云网格组合中包括的点云数据的数据量均小于所述有效内存;从存储所述点云数据的第一存储文件中,按照每个所述第一点云网格组合中的点云数据的数据量分次读取所述点云数据,并将每次读取的所述点云数据填充到第二存储文件的对应存储空间中。在上述方法中,按照每个第一点云网格组合中的点云数据的数据量分次读取点云数据,因为每个第一点云网格组合中包括的点云数据的数据量均小于有效内存,所以计算机内存每次读取的数据量都小于有效内存,这样,计算机就可以顺利加载比有效内存大的点云数据,不会出现延时和卡顿现象。
38.本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
39.为了更清楚地说明本发明的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还能够根据这些附图获得其它附图。
40.图1为本发明实施例提供的第一种点云数据的存储处理方法的步骤流程图;图2为本发明实施例提供的第二种点云数据的存储处理方法的步骤流程图;图3为本发明实施例提供的第一点云网格的示意图;图4为本发明实施例提供的第三种点云数据的存储处理方法的步骤流程图;图5为本发明实施例提供的一种点云数据的存储处理装置的结构框图。
具体实施方式
41.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
42.本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或无创造性的劳动可以包括更多或者更少的操作步骤。在实际中的系统或服务器产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
43.图1为本发明实施例提供的第一种点云数据的存储处理方法的步骤流程图。该方法可以包括如下步骤:步骤101、确定待处理的点云数据的数据量与计算机有效内存之间的大小关系。
44.待处理的点云数据是指由激光雷达获取的,待加载和待处理的点云数据。海量点
云数据对计算机硬件的内存要求很高,本发明实施例首先对待处理的点云数据的数据量与计算机有效内存进行比较,根据比较结果确定对点云数据的读取和存储方案。
45.具体地,验证点云存储文件a(例如a.las)的数据量a与计算机硬件有效运行内存b之间的大小关系。
46.步骤102、当确定所述数据量大于所述有效内存时,将所述点云数据按照第一边长划分为多个第一点云网格,其中,每个所述第一点云网格中包括的点云数据的数据量均小于所述有效内存。在点云数据的数据量大于有效内存的情况下,计算机内存不能直接读取点云数据并进行处理,此时可以将点云数据划分为点云网格进行分块处理。
47.首先可以确定点云数据的几何边界,根据几何边界得到覆盖点云数据的外包框,然后选取合适的第一边长,将第一边长作为正方形网格的边长,将外包框划分为多个点云网格,得到第一点云网格。
48.具体地,可以根据经验和需求设置点云网格的边长的第一试验值,根据该第一试验值将点云数据划分为多个试验点云网格。然后,统计每个试验点云网格中的点的数据量,若该数据量小于有效运行内存,则将该第一试验值作为第一边长。若该数据量大于有效运行内存,则将第一试验值相应减小,得到第二试验值,确定根据第二试验值重新得到的试验点云网格的数据量,若该数据量小于有效运行内存,则将该第二试验值作为第一边长。若数据量仍大于有效运行内存,则将第二实验值相应减小进行点云网格的重新划分,直到第一点云网格包括的点云数据的数据量小于有效内存,从而得到第一边长。
49.步骤103、将所述点云数据划分为目标数量个第一点云网格组合,其中,每个所述第一点云网格组合包括多个所述第一点云网格,每个所述第一点云网格组合中包括的点云数据的数据量均小于所述有效内存,所述目标数量为所述点云数据能划分的第一点云网格组合的最小数量。
50.获取步骤102中得到的每个第一点云网格中的点云数据的数据量,确定多个第一点云网格的数据量的总和,将可使总和小于有效内存且数据量的和最大的多个第一点云网格作为一个组合,得到第一点云网格组合。
51.这样,可将点云数据划分为目标数量个第一点云网格组合。因为是将总和小于有效内存且数据量的和最大的多个第一点云网格作为一个组合,所以,目标数量为点云数据能划分的第一点云网格组合的最小数量。
52.步骤104、从存储所述点云数据的第一存储文件中,按照每个所述第一点云网格组合中的点云数据的数据量分次读取所述点云数据,并将每次读取的所述点云数据填充到第二存储文件的对应存储空间中。
53.本方案中点云数据的原始存储位置为第一存储文件,计算机要处理和显示点云数据,需从第一存储文件中读取点云数据。在点云数据的数据量大于计算机有效内存的情况下,无法一次性读取和加载点云数据。
54.为了顺利读取和加载这些点云数据,可以按照第一点云网格组合中点云数据的数据量分次读取点云数据,即总共分目标数量次读取点云数据。为了方便下一次按照第一点云网格组合对点云数据进行渲染和显示,可以将每次读取的点云数据填充到第二存储文件的对应存储空间中。其中,第二存储文件可以是位于计算机硬盘的存储空间。
55.这样,每次按照第一点云网格组合读取点云数据,使得每次读取的数据量小于计
算机有效内存,可以保证计算机能够顺利读取。同时,将读取的点云数据分次填充到硬盘的对应存储空间中,使得从第二存储空间中加载和显示点云数据时,按照对应存储空间位置进行加载,保证每次加载显示的点云数据的数据量小于计算机有效内存,这样就避免了延时和卡顿现象。
56.综上,本发明实施例提供的点云数据的存储处理方法,确定待处理的点云数据的数据量与计算机有效内存之间的大小关系;当确定所述数据量大于所述有效内存时,将所述点云数据按照第一边长划分为多个第一点云网格,其中,每个所述第一点云网格中包括的点云数据的数据量均小于所述有效内存;将所述点云数据划分为目标数量个第一点云网格组合,其中,每个所述第一点云网格组合包括多个所述第一点云网格,每个所述第一点云网格组合中包括的点云数据的数据量均小于所述有效内存,所述目标数量为所述点云数据能划分的第一点云网格组合的最小数量;从存储所述点云数据的第一存储文件中,按照每个所述第一点云网格组合中的点云数据的数据量分次读取所述点云数据,并将每次读取的所述点云数据填充到第二存储文件的对应存储空间中。这样,每次按照第一点云网格组合读取点云数据,使得每次读取的数据量小于计算机有效内存,可以保证计算机能够顺利读取。同时,将读取的点云数据分次填充到硬盘的对应存储空间中,使得从第二存储空间中加载和显示点云数据时,按照对应存储空间位置进行加载,保证每次加载显示的点云数据的数据量小于计算机有效内存,这样就避免了延时和卡顿现象。
57.图2为本发明实施例提供的第二种点云数据的存储处理方法的步骤流程图。该方法可以包括如下步骤:步骤201、确定待处理的点云数据的数据量与计算机有效内存之间的大小关系。
58.在本发明实施例中,步骤201可以参照步骤101,此处不再赘述。
59.步骤202、当确定所述数据量大于所述有效内存时,根据所述点云数据中的点的位置坐标,确定所述点云数据的边界点的坐标。
60.点云数据是用三维坐标(x,y,z)数据表征的点的集合。获取点云数据中每个点的位置坐标,并分别获取x方向、y方向、z方向的最小值和最大值,从而可以得到点云数据的极值边界。
61.可选的,所述确定所述点云数据的边界点坐标,包括:分别获取所述点云数据中的点在x方向、y方向、z方向的最小值xmin、ymin、zmin和最大值xmax、ymax、zmax,得到所述点云数据的极值边界。
62.具体地,点云数据的极值边界由x方向的最小值和最大值,y方向的最小值、最大值,z方向的最小值、最大值共同确定。
63.步骤203、根据所述边界点坐标构建覆盖所述点云数据的边界框。
64.具体地,根据x方向的最小值和最大值,y方向的最小值、最大值,z方向的最小值、最大值构建覆盖点云数据的边界框。
65.可选的,所述根据所述边界点坐标构建覆盖所述点云数据的边界框,包括以下步骤2031-步骤2032:步骤2031、在所述最小坐标值的基础上减去第一预设值s,得到边界基准点(xmin-s,ymin-s,zmin-s);步骤2032、以所述边界基准点为坐标系的原点,以所述xmin指向所述xmax的方向
为x轴方向,以所述ymin指向所述ymax的方向为y轴方向构建坐标系,得到由所述坐标系的x轴和y轴围成的覆盖所述点云数据的边界框。
66.在步骤2031-步骤2032中,在坐标最小值的基础上再减少第一预设值s得到边界基准点p0(x0,y0,z0),其中,x0=xmin-s,y0=ymin-s,z0=ymin-s。然后以p0为原点,以xmin指向xmax的方向为x轴方向,以ymin指向ymax的方向为y轴方向,构建全局坐标系,形成在x方向和y方向上对所有点云数据全包含的平面边界框。
67.步骤204、确定使得每个第一点云网格中包括的点云数据的数据量均小于所述有效内存的第一边长。
68.具体地,可以根据经验和需求设置点云网格的边长的第一试验值,根据该第一试验值将点云数据划分为多个试验点云网格。然后,统计每个试验点云网格中的点的数据量,若该数据量小于有效运行内存,则将该第一试验值作为第一边长。若该数据量大于有效运行内存,则将第一试验值相应减小,得到第二试验值,确定根据第二试验值重新得到的试验点云网格的数据量,若该数据量小于有效运行内存,则将该第二试验值作为第一边长。若数据量仍大于有效运行内存,则将第二实验值相应减小进行点云网格的重新划分,直到第一点云网格包括的点云数据的数据量小于有效内存,从而得到第一边长。
69.步骤205、按照所述第一边长将所述边界框包含的区域划分为多个网格,得到所述点云数据对应的多个第一点云网格。将第一边长作为正方形网格的边长,将外包框划分为多个这样的正方形网格,得到第一点云网格。
70.图3为本发明实施例提供的第一点云网格的示意图。
71.参照图3,p0为边界基准点(xmin-s,ymin-s,zmin-s),由坐标系的x轴和y轴围成覆盖所有点云数据的边界框。将边界框包含的区域按照第一边长划分为多个正方形网格,即为图3中的多个第一点云网格。
72.步骤206、对所述第一点云网格中的点云数据进行重新随机排序。
73.由于三维激光雷达采集的点云数据是序列点云,原始点云数据的存储顺序和空间位置具有连续性,不利于点云全局快速高效的处理和渲染。
74.因此,可以对各个第一点云网格中的点云数据进行重新随机排序,改变原始点云数据在网格中的存储顺序。这样,当点云数据需要渲染和处理时,网格中的点云数据可以采用分批次渲染和处理的方法,使得点云数据的存储顺序和空间位置关系是不连续的,从而加快点云数据的渲染和处理效率。
75.步骤207、根据所述第一点云网格中包含的所述点的个数和单个点对应的数据量,确定每个所述第一点云网格包含的点云数据的数据量,得到各个所述第一点云网格对应的数据量的集合。
76.目前,一个点数据的内存大小c和每个点云网格内的点云个数n已知,将网格中点云数量为0的网格舍弃,则可按照式(1)可计算单个点云网格内所有点云数据的数据量c,式(1)如下所示: (1)计算各个点云网格的数据量c,将数据量c存入集合ca中,得到第一点云网格对应的数据量的集合:ca{c(0,0),c(0,1),...,c(i,j)}。其中,c(i,j)为一个第一点云网格。
77.步骤208、对所述集合中的第一点云网格按照所述数据量递增的原则进行重排序,
得到数据量递增序列,并得到与所述数据量递增序列对应的网格编号序列。
78.根据第一点云网格中点云数据的数据量递增原则对ca进行重排序,得到数据量递增序列cb{c[1],c[2],...,c[n]},同时得到与数据量递增序列cb对应的网格编号序列gb{g[1],g[2],...,g[n]}。在网格编号序列gb中,数据量较小的点云网格的排在前面,数据量较大的点云网格排在后面。
[0079]
网格编号是指第一点云网格对应的编号,可以预先按照一定的规则对每个第一点云网格进行编号,以作为第一点云网格的标识。
[0080]
步骤209、根据所述数据量递增序列,确定第一点云网格组合,所述第一点云网格组合由多个第一点云网格组成,所述多个第一点云网格的数据量的总和小于所述有效内存。
[0081]
获取每个第一点云网格中的点云数据的数据量,确定多个第一点云网格的数据量的总和,将可使总和小于有效内存且数据量的和最大的多个第一点云网格作为一个组合,得到第一点云网格组合。
[0082]
因为数据量递增序列cb是按照第一点云网格的数据量递增排序的,因此,根据数据量递增序列cb,可以更快速准确的获得可使数据量的总和小于有效内存的多个第一点云网格。
[0083]
可选的,所述根据所述数据量递增序列,确定第一点云网格组合,包括以下步骤2091-步骤2092:步骤2091、对所述数据量递增序列按照首尾组合交叉求和的方法,累计求解多个第一点云网格的数据量的和,将使所述数据量的和小于所述有效内存且所述数据量的和最大的多个第一点云网格确定为一个第一点云网格组合;步骤2092、按照上述方法对所述数据量递增序列中的剩余第一点云网格依次求解,直到所述数据量递增序列中的所有第一点云网格均有对应的第一点云网格组合,得到第一点云网格组合序列。
[0084]
在步骤2091-步骤2092中,为了更快速准确的获得第一点云网格组合,可以按照首尾组合交叉求和的方法对第一点云网格的数据量进行求和。
[0085]
例如c[1]+c[n]+c[2]+c[n-1]+...,其中,c[n]表示第一点云网格组合的数据量。累计求解第一点云网格组合的数据量的和cd,要求cd小于计算机硬件有效运行内存b,并且第一点云网格组合中包括的第一点云网格的个数尽可能多。那么这样的一次累计求解与组合过程中对应的网格编号组成一个单元网格组gc。
[0086]
例如第一次累计数据量求和为cc=c[1]+c[n]+c[2]+c[n-1]《b,但是cc+c[3]》=b,则c[3]不可以加入当前的第一点云网格组合。那么第一次得到的第一点云网格组合为gc[1]{g[1],g[2],g[n-1],g[n]}。第一点云网格组合中的网格编号也按照点云网格的数据量大小升序方式排序。
[0087]
剩下的第一点云网格按照上面的方法继续累计组合确定剩余的第一点云网格组合,直到所有第一点云网格全部形成点云网格组合。
[0088]
这样,将得到的各个第一点云网格组合加入集合gc中,得到第一点云网格组合序列gc{gc[1],gc[2],...,gc[f]}。
[0089]
步骤210-步骤216为对点云数据创建索引信息的过程,具体如下。
[0090]
步骤210、以所述边界基准点为起始,对所述第一点云网格依次进行编号,得到网
格编号。
[0091]
从点云数据整个边界框的最小坐标的边界基准点p0开始,对每个第一点云网格以(xi,yj)的形式进行编号。例如从边界基准点p0开始,x轴方向上的第一个点云网格的网格编号是(0,0),第二个点云网格的网格编号是(1,0)。
[0092]
步骤211、确定所述点云数据中的每个点所属的网格编号。
[0093]
从存储点云数据的第一存储文件中逐个读取点数据p(x,y,z),根据式(2)和式(3)计算每个点所属的网格编号。
[0094]
式(2)和式(3)如下所示:其中,(x-x0)除以h的结果取整数为m,(y-y0)除以h的结果取整数为n,则(m,n)即为该点p所属的网格编号。
[0095]
步骤212、根据所述每个点对应的网格编号,统计每个所述第一点云网格中包含的所述点的数量,以及确定每个所述第一点云网格中最大的网格编号。
[0096]
根据每个点对应的网格编号,将同属一个第一点云网格的点云数据存储在一个网格集合中,得到集合q{k1,k2,...,kn},其中,q是包含所有点云数据的集合,k是第一点云网格中点的集合。
[0097]
统计每个第一点云网格中点的数量n,同时确定第一点云网格的最大编号(cmax,rmax)。
[0098]
步骤213、将所述边界基准点的坐标值、所述第一边长、所述点云数据在z轴上的最大坐标、所述最大的网格编号作为所述点云数据的第一索引信息。
[0099]
具体地,整个点云数据的第一索引信息为:边界基准点的坐标值p0(x0,y0,z0)、第一边长h、点云数据在z轴上的最大坐标zmax、最大的网格编号(cmax,rmax)。
[0100]
步骤214、将所述第一点云网格的网格编号和所述第一点云网格中包含的所述点的数量作为所述第一点云网格的第一索引信息。每个包含点云数据的数据量不为0的第一点云网格对应一条索引信息。具体地,每个第一点云网格的第一索引信息为:该第一点云网格的网格编号(m,n)和第一点云网格中包含的点的数量n。
[0101]
步骤215、将所述点云数据的第一索引信息输出到第一索引文件中。
[0102]
具体地,将步骤214中得到的点云数据的第一索引信息输出到第一索引文件中。
[0103]
步骤216、将所述第一点云网格的第一索引信息按照所述第一点云网格组合序列的排序,依次输出到所述第一索引文件中。
[0104]
按照第一点云网格组合序列gc的排序,将第一点云网格的第一索引信息依次输出到所述第一索引文件中。
[0105]
步骤217、从存储所述点云数据的第一存储文件中,按照所述第一索引文件的顺序,以及所述第一点云网格组合中的点云数据的数据量分次读取所述点云数据,并将每次读取的所述点云数据填充到第二存储文件的对应存储空间中。
[0106]
具体地,根据gc中第一点云网格组合gc的数量f,按照第一索引文件的顺序,对第一点云存储文件a进行f次读取,依次填充和输出第一点云网格组合中的点云数据到新的点
云存储文件——第二存储文件d中。
[0107]
例如第f(1≦f≦f,f为整数)次读取a中的数据用来填充gc里面gc[f]中的点云网格,按照gc[f]中网格的顺序依次将对应网格中重排序后的点云数据输出到第二存储文件d中,再进行第f+1次读取a中数据,填充gc[f+1]中的点云网格并输出到第二存储文件d中,直到所有的第一点云网格组合全部处理完成。
[0108]
在这个过程中,在填充gc[f]之后,确认gc[f]中每个第一点云网格中的点云数量r与对应网格在第一索引文件中的数量n是否相等,若相等,才进行第f+1次的读取操作。
[0109]
综上,图3中的点云数据存储处理方法,除具有图1中的方法的有益效果外,还对各个第一点云网格中的点云数据进行重新随机排序,改变原始点云数据在网格中的存储顺序。这样,当点云数据需要渲染和处理时,网格中的点云数据可以采用分批次渲染和处理的方法,使得点云数据的存储顺序和空间位置关系是不连续的,从而加快点云数据的渲染和处理效率。
[0110]
并且,创建所述点云数据的第一索引信息,并创建第一点云网格的第一索引信息,并将第一索引信息输出到第一索引文件中,可以方便后续对点云数据和第一点云网格按照第一索引文件的顺序进行查找和存储。
[0111]
图4为本发明实施例提供的第三种点云数据的存储处理方法的步骤流程图。该方法可以包括如下步骤:步骤301、确定待处理的点云数据的数据量与计算机有效内存之间的大小关系。
[0112]
在本发明实施例中,步骤301可以参照不走101,此处不再赘述。
[0113]
步骤302、当确定所述数据量小于所述有效内存时,将所述点云数据从所述第一存储文件中读取出来,并加载到所述计算机的内存中。
[0114]
由于点云数据的数据量小于计算机有效内存,因此,可以直接将点云数据读取出来并加载到计算机的内存中。
[0115]
步骤303、将所述点云数据按照第二边长划分为多个第二点云网格。
[0116]
可以按照第二边长将点云数据划分为多个第二点云网格,划分方法与第一点云网格的划分方法类似,此处不再赘述。
[0117]
步骤304、对所述第二点云网格中的点云数据进行重新随机排序。
[0118]
由于三维激光雷达采集的点云数据是序列点云,原始点云数据的存储顺序和空间位置具有连续性,不利于点云全局快速高效的处理和渲染。
[0119]
因此,可以对各个第二点云网格中的点云数据进行重新随机排序,改变原始点云数据在网格中的存储顺序。这样,当点云数据需要渲染和处理时,网格中的点云数据可以采用分批次渲染和处理的方法,使得点云数据的存储顺序和空间位置关系是不连续的,从而加快点云数据的渲染和处理效率。
[0120]
步骤305、确定所述第二点云网格的网格编号,并统计每个所述第二点云网格中包含的点的数量,以及确定每个所述第二点云网格中最大的网格编号。
[0121]
确定第二点云网格的网格编号和包含的点的数量的方法和第一点云网格的方法类似,此处不再赘述。
[0122]
步骤306、根据所述第二点云网格的网格编号、每个所述第二点云网格中包含的所述点的数量、每个所述第二点云网格中最大的网格编号,确定所述点云数据的第二索引信
息以及所述第二点云网格的第二索引信息。
[0123]
确定第二索引信息的方法和确定第一索引信息的方法类似,此处不再赘述。
[0124]
步骤307、将所述点云数据的第二索引信息输出到第二索引文件中。
[0125]
步骤308、将所述第二点云网格的第二索引信息按照所述第二点云网格的网格编号的行主序递增的原则,依次输出到所述第二索引文件中。
[0126]
在步骤307和步骤308中,将第二索引信息输出到第二索引文件中的方法和第一索引文件输出到第一索引文件中的方法类似,此处不再赘述。
[0127]
步骤309、从所述计算机的内存中,按照所述第二索引文件的顺序,分次读取所述点云数据,并将每次读取的所述点云数据填充到第三存储文件的对应存储空间中。
[0128]
将计算机内存中的点云数据,按照第二索引文件的顺序,将第二点云网格中的重排序后的点云数据依次输出到新的点云数据存储文件——第三存储文件e中,例如e.las文件。
[0129]
综上,在本发明实施例中,当确定所述数据量小于所述有效内存时,将所述点云数据从所述第一存储文件中读取出来,并加载到所述计算机的内存中;将所述第二点云网格的第二索引信息按照所述第二点云网格的网格编号的行主序递增的原则,依次输出到所述第二索引文件中。从所述计算机的内存中,按照所述第二索引文件的顺序,分次读取所述点云数据,并将每次读取的所述点云数据填充到第三存储文件的对应存储空间中。这样,按照第二点云网格的第二索引信息分次读取点云数据,可以保证计算机能够按照数据量进行均匀读取,使得从第三存储空间中加载和显示点云数据时,按照对应存储空间位置进行加载,避免了延时和卡顿现象。
[0130]
图5为本发明实施例提供的一种点云数据的存储处理装置的结构框图。该装置400包括:数据量确定模块401,用于确定待处理的点云数据的数据量与计算机有效内存之间的大小关系;第一点云网格划分模块402,用于当确定所述数据量大于所述有效内存时,将所述点云数据按照第一边长划分为多个第一点云网格,其中,每个所述第一点云网格中包括的点云数据的数据量均小于所述有效内存;网格组合划分模块403,用于将所述点云数据划分为目标数量个第一点云网格组合,其中,每个所述第一点云网格组合包括多个所述第一点云网格,每个所述第一点云网格组合中包括的点云数据的数据量均小于所述有效内存,所述目标数量为所述点云数据能划分的第一点云网格组合的最小数量;第一存储模块404,用于从存储所述点云数据的第一存储文件中,按照每个所述第一点云网格组合中的点云数据的数据量分次读取所述点云数据,并将每次读取的所述点云数据填充到第二存储文件的对应存储空间中。
[0131]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0132]
在本发明提供的又一实施例中,还提供了一种设备,所述设备包括处理器和存储器,所述存储器种存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现本发明实施
例中所述的点云数据的存储处理方法。
[0133]
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现本发明实施例中所述的点云数据的存储处理方法。
[0134]
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk (ssd))等。
[0135]
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
[0136]
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0137]
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1