点云数据存储方法及装置与流程

文档序号:15932741发布日期:2018-11-14 01:54阅读:262来源:国知局

本发明涉及计算机信息技术领域,特别涉及一种点云数据的存储方法及装置。

背景技术

三维激光扫描技术是上世纪九十年代蓬勃发展起来的高精度、快速获取物体三维几何数据的新型技术,通过记录激光脉冲的方向和计算经目标表面反射后反射返回的时间差(或相位差)来获取目标表面的三维坐标,精度一般可以达到毫米级,其特点在于获取速度快,数据精度高。因此,激光扫描得到的点云数据在数字文物、数字城市等领域逐渐得到广泛应用。直接基于采样点的点云数据在三维数据处理中具有独特优势,仅保存采样点不但可以有效的降低存储需求,而且可以避免构网操作以及网络拓扑关系的处理,这对大型复杂场景的数据处理尤为重要。按照三维激光扫描系统依据承载平台的不同进行划分,可分为机载三维激光扫描系统、车载三维激光扫描系统和地面三维激光扫描系统,无论是哪种三维激光扫描系统,在进行扫描时获得的数据会根据扫描的空间大小呈几何增长,所需存储的点云数据的存储量极大,因此,通过计算机进行点云数据的存储、查询、读取等操作时通常需要大量的计算,时效性很差。



技术实现要素:

有鉴于此,本发明提供一种点云数据存储方法及装置,能提高点云数据的处理和存储效率,也为后续点云数据的查询和读取,以及三维建模提高了效率。

本发明的点云数据存储方法,包括:

s1、计算点云数据的包围盒;

s2、按照八叉树结构对所述包围盒进行递归切分,八叉树结构的每个层级对应一个点距;

s3、在每次切分后,根据当前层级的点距判断切分得到的每个子单元空间内的点是否属于当前层级,以文件的形式存储属于当前层级的点的信息,其中,切分得到的每个子单元空间对应当前层级内的一个节点,每个节点对应一个节点文件;

s4、对每一节点文件内所包含的原始点云数据中每个扫描线上的激光点进行三维坐标变换,得到三维坐标变换后每个激光点的坐标值;

s5、在每一节点文件内,将当期所检测的激光点的坐标值与在先所检测的激光点的坐标值进行对比来判断当前所检测的激光点是否为新扫描线的起始点;

s6、在每一节点文件内,在判断当前所检测的激光点不是新扫描线的起始点时,则将三维坐标变换后的当期激光点的坐标值作为当期扫描线上的激光点的坐标数据;而在判断当前所检测的激光点为新扫描线的起始点时,则将三维坐标变换后的当前激光点的坐标值作为新扫描线上起始点的坐标数据,并将当前扫描线上的所有激光点的点云数据存入缓冲区,对缓冲区中当前扫描线上的每个激光点进行三维坐标变换的逆变换并保存,并将新扫描线作为当期扫描线;

s7、在每一节点文件内,将当期扫描线上当期所检测的激光点的下一个激光点作为当前激光点继续执行上述检测和判断步骤,直至节点文件内所有原始激光点云数据保存完毕。

进一步,步骤s2中还包括:

根据点云总数和包围盒的体积确定根节点的点距;

根据根节点的点距逐层确定每个层级的点距,下一层级的点距小于上一层级的点距。

进一步,步骤s4中,对每一节点文件内所包含的原始点云数据中每个扫描线上的激光点进行三维坐标变换包括:

将对应节点文件中的每个激光点的三维直角坐标(x,y,z)转换为以三维激光扫描仪为中心的球面坐标(r,θ,φ),其中r为激光点到扫描仪的距离,θ为激光线与水平面的夹角,φ为扫描仪工作时的水平转动角。

进一步,步骤s5包括:

通过将同一条扫描线的激光点云数据看作平稳的各态历经的时间序列,用算子模板来检测当期所检测的激光点的θ值与上一个激光点的θ值之间的大小关系来判断当期所检测的激光点是否为新扫描线的起始点的预选点;

在判断当期所检测的激光点为新扫描线的起始点的预选点后,再通过检测当前所检测的激光点的后续n个激光点的θ值之间的大小关系来判断当期所检测的激光点是否为新扫描线的起始点,其中n为正整数。

进一步,步骤s6中,将当前扫描线上的所有激光点的点云数据存入缓冲区,对缓冲区中当前扫描线上的每个激光点进行三维坐标变换的逆变换并保存包括:

将当期扫描线上的激光点云数据中的坐标数据和属性数据分别存入缓冲区,然后对缓冲区中当前扫描线上的每个激光点的坐标数据进行三维坐标变换的逆变换;

对缓冲区中进行三维坐标变换的逆变换后的坐标数据和属性数据进行压缩;

对缓冲区中的坐标数据和属性数据进行压缩后,给当前扫描线进行编码,当前扫描线对应唯一的一个编号;

为进行编号的当前扫描线建立空间索引表,空间索引表的关键字为当前扫描线的编号,空间索引表中与关键字对应的索引项值为当前扫描线上激光点云数据的存储地址;

对当前扫描线建立空间索引表后,将当期扫描线上进行压缩后的缓冲区的坐标数据和属性数据进行写回并按当前扫描线所对应的空间索引表中的存储地址进行保存。

进一步,步骤s3中,根据当前层级的点距判断切分得到的每个子单元空间内的点是否属于当前层级,包括:

对切分得到的每个子单元空间分别进行如下操作:

根据当前层级的点距将子单元空间网格化;

遍历子单元空间内的点,根据点的位置信息判断点所处的网格,若网格未被占据,则确定该点属于当前层级且标记网格被占据;若网格已被占据则该点放到下一层级进行判断。

本发明还公开了一种利用的点云数据存储方法的存储装置,包括:

包围盒计算单元,用于计算点云数据的包围盒;

递归切分单元,用于按照八叉树结构对包围盒进行递归切分,八叉树结构的每个层级对应一个点距;

层级确定单元,用于在每次切分后,根据当前层级的点距判断切分得到的每个子单元空间内的点是否属于当前层级,并以文件的形式存储属于当前层级的点的信息,其中,切分得到的每个子单元空间对应当前层级内的一个节点,每个节点对应一个文件;

坐标变换单元,用于对每一节点文件内所包含的原始点云数据中每个扫描线上的激光点进行三维坐标变换,得到三维坐标变换后每个激光点的坐标值;

检测判断单元,用于在每一节点文件内,将当期所检测的激光点的坐标值与在先所检测的激光点的坐标值进行对比来判断当前所检测的激光点是否为新扫描线的起始点;

缓冲单元,用于对每一节点文件内的扫描线上的激光点云数据存入缓冲区并对缓冲区中扫描线上的每个激光点进行三维坐标变换的逆变换;

数据存储单元,用于进行三维坐标变换的逆变换后对扫描线上的激光点云数据进行保存。

本发明的有益效果:本发明的点云数据存储方法及装置,其将所有的原始点云数据按照八叉树结构进行递归切分,每一层级形成一个节点文件,然后再对每一节点文件内的点云数据进行三维坐标解析与存储,大大降低了同时进行的数据处理量,并降低了数据存储的冗余量,节省了存储空间,能提高点云数据的处理和存储效率,也为后续点云数据的查询和读取,以及三维建模效率的提高创造了条件。

附图说明

下面结合附图和实施例对本发明作进一步描述。

图1为本发明中的点云数据存储方法步骤流程图。

具体实施方式

下面将结合本发明实施例中的附图对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明,本发明实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

另外,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围内。

本发明提出一种点云数据存储方法。

参照图1,图1为本发明方法步骤流程图,如图所示:本实施例的点云数据存储方法,包括以下步骤:

s1、计算点云数据的包围盒;

s2、按照八叉树结构对所述包围盒进行递归切分,八叉树结构的每个层级对应一个点距;

s3、在每次切分后,根据当前层级的点距判断切分得到的每个子单元空间内的点是否属于当前层级,以文件的形式存储属于当前层级的点的信息,其中,切分得到的每个子单元空间对应当前层级内的一个节点,每个节点对应一个节点文件;并且,在每次切分后,还包括:判断当前层级是否小于预设的最大分割深度;若当前层级大于等于预设的最大分割深度,则终止切分;若当前层级小于预设的最大分割深度,则对切分得到的每个子单元空间分别进行如下操作:判断子单元空间内的点的数量是否小于预设的最少包含点数,若小于,则终止对所述子单元空间的切分。

s4、对每一节点文件内所包含的原始点云数据中每个扫描线上的激光点进行三维坐标变换,得到三维坐标变换后每个激光点的坐标值;

s5、在每一节点文件内,将当期所检测的激光点的坐标值与在先所检测的激光点的坐标值进行对比来判断当前所检测的激光点是否为新扫描线的起始点;

s6、在每一节点文件内,在判断当前所检测的激光点不是新扫描线的起始点时,则将三维坐标变换后的当期激光点的坐标值作为当期扫描线上的激光点的坐标数据;而在判断当前所检测的激光点为新扫描线的起始点时,则将三维坐标变换后的当前激光点的坐标值作为新扫描线上起始点的坐标数据,并将当前扫描线上的所有激光点的点云数据存入缓冲区,对缓冲区中当前扫描线上的每个激光点进行三维坐标变换的逆变换并保存,并将新扫描线作为当期扫描线;

s7、在每一节点文件内,将当期扫描线上当期所检测的激光点的下一个激光点作为当前激光点继续执行上述检测和判断步骤,直至节点文件内所有原始激光点云数据保存完毕。

本实施例中,步骤s2中还包括:

根据点云总数和包围盒的体积确定根节点的点距;

根据根节点的点距逐层确定每个层级的点距,下一层级的点距小于上一层级的点距。

本实施例中,步骤s4中,对每一节点文件内所包含的原始点云数据中每个扫描线上的激光点进行三维坐标变换包括:

将对应节点文件中的每个激光点的三维直角坐标(x,y,z)转换为以三维激光扫描仪为中心的球面坐标(r,θ,φ),其中r为激光点到扫描仪的距离,θ为激光线与水平面的夹角,φ为扫描仪工作时的水平转动角。

本实施例中,步骤s5包括:

通过将同一条扫描线的激光点云数据看作平稳的各态历经的时间序列,用算子模板来检测当期所检测的激光点的θ值与上一个激光点的θ值之间的大小关系来判断当期所检测的激光点是否为新扫描线的起始点的预选点;

在判断当期所检测的激光点为新扫描线的起始点的预选点后,再通过检测当前所检测的激光点的后续n个激光点的θ值之间的大小关系来判断当期所检测的激光点是否为新扫描线的起始点,其中n为正整数。

本实施例中,步骤s6中,将当前扫描线上的所有激光点的点云数据存入缓冲区,对缓冲区中当前扫描线上的每个激光点进行三维坐标变换的逆变换并保存包括:

将当期扫描线上的激光点云数据中的坐标数据和属性数据分别存入缓冲区,然后对缓冲区中当前扫描线上的每个激光点的坐标数据进行三维坐标变换的逆变换;

对缓冲区中进行三维坐标变换的逆变换后的坐标数据和属性数据进行压缩;

对缓冲区中的坐标数据和属性数据进行压缩后,给当前扫描线进行编码,当前扫描线对应唯一的一个编号;

为进行编号的当前扫描线建立空间索引表,空间索引表的关键字为当前扫描线的编号,空间索引表中与关键字对应的索引项值为当前扫描线上激光点云数据的存储地址;

对当前扫描线建立空间索引表后,将当期扫描线上进行压缩后的缓冲区的坐标数据和属性数据进行写回并按当前扫描线所对应的空间索引表中的存储地址进行保存。

本实施例中,步骤s3中,根据当前层级的点距判断切分得到的每个子单元空间内的点是否属于当前层级,包括:

对切分得到的每个子单元空间分别进行如下操作:

根据当前层级的点距将子单元空间网格化;

遍历子单元空间内的点,根据点的位置信息判断点所处的网格,若网格未被占据,则确定该点属于当前层级且标记网格被占据;若网格已被占据则该点放到下一层级进行判断。

本发明还公开了一种利用的点云数据存储方法的存储装置,包括:

包围盒计算单元,用于计算点云数据的包围盒;

递归切分单元,用于按照八叉树结构对包围盒进行递归切分,八叉树结构的每个层级对应一个点距;

层级确定单元,用于在每次切分后,根据当前层级的点距判断切分得到的每个子单元空间内的点是否属于当前层级,并以文件的形式存储属于当前层级的点的信息,其中,切分得到的每个子单元空间对应当前层级内的一个节点,每个节点对应一个文件;

坐标变换单元,用于对每一节点文件内所包含的原始点云数据中每个扫描线上的激光点进行三维坐标变换,得到三维坐标变换后每个激光点的坐标值;

检测判断单元,用于在每一节点文件内,将当期所检测的激光点的坐标值与在先所检测的激光点的坐标值进行对比来判断当前所检测的激光点是否为新扫描线的起始点;

缓冲单元,用于对每一节点文件内的扫描线上的激光点云数据存入缓冲区并对缓冲区中扫描线上的每个激光点进行三维坐标变换的逆变换;

数据存储单元,用于进行三维坐标变换的逆变换后对扫描线上的激光点云数据进行保存。

另外,本发明的存储装置还包括:

点距计算单元,用于根据点云总数和包围盒的体积确定根节点的点距;并根据根节点的点距逐层确定每个层级的点距,下一层级的点距小于上一层级的点距。

最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1