CN114419291A - 一种点云数据压缩和解压方法及装置 - Google Patents
一种点云数据压缩和解压方法及装置 Download PDFInfo
- Publication number
- CN114419291A CN114419291A CN202210049984.7A CN202210049984A CN114419291A CN 114419291 A CN114419291 A CN 114419291A CN 202210049984 A CN202210049984 A CN 202210049984A CN 114419291 A CN114419291 A CN 114419291A
- Authority
- CN
- China
- Prior art keywords
- subcube
- cube
- determining
- compressed data
- dimensional point
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本说明书公开了一种点云数据压缩和解压方法及装置,先根据包围点云数据的立方体以及预设的层数,对该立方体进行体素划分确定各第一子立方体,以根据各层预设的精度,对各层对应的各第一子立方体进行体素划分,确定各第二子立方体。再根据预设的遍历顺序,确定与各第一子立方体对应的第一标识以及与各第二子立方体对应的第二标识。使得能够根据点云数据中各三维点在其落入的第一子立方体中落入的第二子立方体,分别确定与各三维点对应的第一标识以及第二标识,并根据此确定各三维点对应的压缩数据。由于该立方体、层数以及精度都可以预先确定,因此在压缩时,可根据各三维点的坐标确定其对应的压缩数据,降低了算法的空间复杂度,提高了压缩效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种点云数据压缩和解压方法及装置。
背景技术
目前,随着计算机技术的发展,对点云技术的应用也在兴起。由于原始的点云数据量很大,为了满足传输或存储的需求,往往需要对原始的点云数据进行压缩。
现有技术一般在压缩时,会预先设定一个包括所有点云数据的立方体,然后根据预设的最大递归深度,以八叉树的方式对该立方体递归的进行体素划分,直到满足划分停止条件为止。最后,根据预设的编码规则,为所有划分得到的立方体编码,并以包括原始点云数据中各点的最小的各立方体的编码表示各点的位置。其中,划分停止条件可以是,划分达到递归深度,或某个小立方体不包括任何点云数据。
但是,基于八叉树递归划分的方式因为算法的空间复杂度较高,所以压缩速度较慢,导致难以适应需要对点云数据进行快速实时压缩的场景。可见,目前亟需一种能够快速压缩点云数据的方法,以提高压缩效率。
发明内容
本说明书实施例提供的一种点云数据压缩和解压方法及装置,用于至少部分的解决现有技术中存在的问题。
本说明书采用下述技术方案:
本说明书提供了一种点云数据压缩方法,包括:
获取点云数据,确定包围所述点云数据的立方体;
根据预设的层数,从所述立方体中心向外对所述立方体进行体素划分,确定各层对应的各第一子立方体,并根据各层预设的精度,对所述各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体;
根据预设的遍历三维空间的顺序,确定与所述各第一子立方体对应的各第一标识以及与所述各第二子立方体对应的各第二标识;
根据所述点云数据中各三维点的坐标、所述立方体的边长以及所述层数,分别确定各三维点落入的第一子立方体以及第一标识;
根据所述各三维点的坐标、所述各三维点落入的第一子立方体、所述立方体的边长以及所述各层预设的精度,分别确定各三维点落入的第二子立方体以及第二标识;
根据所述各三维点对应的第一标识以及第二标识,确定与各三维点分别对应的压缩数据,并存储。
可选地,根据各层预设的精度,对各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体,具体包括:
根据各层预设的精度,确定各层对应的各第一子立方体的划分份数;
根据所述各层对应的划分份数,对各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体;
其中,越接近所述立方体中心,预设的精度越高。
可选地,所述根据预设的遍历三维空间的顺序,确定与所述各第一子立方体对应的各第一标识以及与所述各第二子立方体对应的各第二标识,具体包括:
根据预设的遍历三维空间的顺序,确定各子立方体组成的各遍历行以及各遍历行的遍历顺序;
以按照所述遍历顺序依次遍历各遍历行,以及按照行方向顺序确定单个遍历行中子立方体对应的标识的方法,确定所述各第一子立方体对应的各第一标识,以及确定各第二子立方体对应的各第二标识。
可选地,根据所述点云数据中各三维点的坐标、所述立方体的边长以及所述层数,分别确定各三维点落入的第一子立方体,具体包括:
根据所述点云数据中各三维点的坐标以及所述立方体的边长,确定所述各三维点基于所述立方体的坐标系进行坐标转换后的坐标;
根据所述立方体的边长以及所述层数,确定所述第一子立方体的边长;
根据所述各三维点转换后的坐标以及所述第一子立方体的边长,分别确定各三维点落入的第一子立方体。
可选地,根据所述各三维点的坐标、所述各三维点落入的第一子立方体、所述立方体的边长以及所述各层预设的精度,分别确定各三维点落入的第二子立方体,具体包括:
根据所述各三维点的坐标以及所述各三维点落入的第一子立方体,确定所述各三维点基于所述第一子立方体的坐标系进行坐标转换后的坐标;
针对每个三维点的坐标,根据该三维点落入的第一子立方体、所述第一子立方体所在层预设的精度以及所述立方体的边长,确定所述第一子立方体对应的第二子立方体的边长;
根据该三维点转换后的坐标以及所述第二子立方体的边长,确定该三维点在其落入的第一子立方体中落入的第二子立方体。
可选地,根据所述各三维点对应的第一标识以及第二标识,确定与各三维点对应的压缩数据,具体包括:
针对每个三维点,根据该三维点对应的第一标识以及第二标识,确定该三维点的压缩数据;
根据已存储的各压缩数据,判断该三维点的压缩数据与已存储的压缩数据是否一致;
若是,则不存储该三维点的压缩数据;
若否,则存储该三维点的压缩数据。
本说明说提供了一种点云数据解压方法,包括:
获取存储的点云数据中各三维点分别对应的压缩数据,以及确定预设的包围所述点云数据的立方体和层数;
针对每个压缩数据,确定该压缩数据包含的第一标识以及第二标识;
根据所述第一标识、所述立方体的边长以及所述层数,确定该压缩数据对应的第一子立方体的坐标;
根据所述第二标识、所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定该压缩数据对应的第二子立方体的坐标;
根据该压缩数据对应的所述第一子立方体的坐标以及所述第二子立方体的坐标,确定该压缩数据对应的三维点的坐标。
可选地,根据所述第一标识、所述立方体的边长以及所述层数,确定该压缩数据对应的第一子立方体的坐标,具体包括:
根据所述第一标识以及预设的遍历三维空间的顺序,确定该压缩数据对应的第一子立方体在所述立方体内的位置;
根据所述立方体的边长以及所述层数,确定所述第一子立方体的边长;
根据该压缩数据对应的第一子立方体的位置以及所述第一子立方体的边长,确定该压缩数据对应的第一子立方体的坐标。
可选地,根据所述第二标识、所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定该压缩数据对应的第二子立方体的坐标,具体包括:
根据所述第二标识以及预设的遍历三维空间的顺序,确定该压缩数据对应的第二子立方体在所述第一子立方体内的位置;
根据所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定所述第二子立方体的边长;
根据该压缩数据对应的第二子立方体的位置以及所述第二子立方体的边长,确定该压缩数据对应的第二子立方体的坐标。
本说明书提供了一种点云数据压缩装置,包括:
获取模块,用于获取点云数据,确定包围所述点云数据的立方体;
划分模块,用于根据预设的层数,从所述立方体中心向外对所述立方体进行体素划分,确定各层对应的第一子立方体,并根据各层预设的精度,对所述各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体;
遍历模块,用于根据预设的遍历三维空间的顺序,确定与所述各第一子立方体对应的各第一标识以及与所述各第二子立方体对应的各第二标识;
第一标识确定模块,用于根据所述点云数据中各三维点的坐标、所述立方体的边长以及所述层数,分别确定各三维点落入的第一子立方体以及第一标识;
第二标识确定模块,用于根据所述各三维点的坐标、所述各三维点落入的第一子立方体、所述立方体的边长以及所述各层预设的精度,分别确定各三维点落入的第二子立方体以及第二标识;
压缩模块,用于根据所述各三维点对应的第一标识以及第二标识,确定与各三维点分别对应的压缩数据,并存储。
本说明书提供了一种点云数据解压装置,包括:
获取模块,用于获取存储的点云数据中各三维点分别对应的压缩数据,以及确定预设的包围所述点云数据的立方体和层数;
标识确定模块,用于针对每个压缩数据,确定该压缩数据包含的第一标识以及第二标识;
第一坐标确定模块,用于根据所述第一标识、所述立方体的边长以及所述层数,确定该压缩数据对应的第一子立方体的坐标;
第二坐标确定模块,用于根据所述第二标识、所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定该压缩数据对应的第二子立方体的坐标;
解压模块,用于根据该压缩数据对应的所述第一子立方体的坐标以及所述第二子立方体的坐标,确定该压缩数据对应的三维点的坐标。
本说明书提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述点云数据压缩方法或点云数据解压方法。
本说明书提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述点云数据压缩方法或点云数据解压方法。
本说明书采用的上述至少一个技术方案能够达到以下有益效果:
在本说明书提供的点云数据压缩和解压方法,先根据包围点云数据的立方体以及预设的层数,从该立方体中心向外进行体素划分确定各层对应的第一子立方体,以根据各层预设的精度,对各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体。再根据预设的遍历顺序,确定与各第一子立方体对应的第一标识以及与各第二子立方体对应的第二标识。使得能够根据点云数据中各三维点落入的第一子立方体,以及在其落入的第一子立方体中落入的第二子立方体,分别确定与各三维点对应的第一标识以及第二标识,并根据此确定各三维点对应的压缩数据。由于该立方体、层数以及精度都可以预先确定,因此实际压缩时,可直接根据各三维点的坐标确定其对应的压缩数据,降低了算法的空间复杂度,提高了压缩效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本说明书提供的一种点云数据压缩方法流程示意图;
图2为本说明书提供的一种第一子立方体划分示意图;
图3为本说明书提供的一种第二子立方体划分示意图;
图4为本说明书提供的一种三维空间遍历顺序示意图;
图5为本说明书提供的一种坐标转换示意图;
图6为本说明书提供的另一种坐标转换示意图;
图7为本说明书提供的一种点云数据解压方法流程示意图;
图8为本说明书提供的一种点云数据压缩装置示意图;
图9为本说明书提供的一种点云数据解压装置示意图;
图10为本说明书提供的一种实现点云数据压缩方法或点云数据解压方法的电子设备示意图。
具体实施方式
为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前,随着对点云数据应用的兴起,许多领域都能够通过不同的方式采集点云数据并加以应用。例如,可以通过机载或车载等方式采集点云数据,并根据点云数据进行三维重建、测绘等。通常,采集点云数据的传感器会将采集的数据回传给服务器。而为了减轻传输压力,传感器会在回传点云数据前,先对点云数据进行压缩。
一般的,是基于八叉树递归划分对点云数据进行压缩。首先,确定包围该点云数据的立方体。然后,根据最大递归深度,以八叉树的方式对该立方体递归的进行体素划分,直到达到最大递归深度或某个小立方体内不包括任何点云数据为止。最后,根据遍历三维空间的顺序,确定划分得到的各小立方体的编码,并以最小的各立方体的编码表示各点的位置。
但是,基于八叉树压缩点云数据的方式,需要递归的去划分立方体,导致压缩速度较慢,容易限制传感器采集点云数据的频率。此外,在服务器需要实时获取点云数据的场景,在数据传输速率稳定的情况下,传感器对点云数据的压缩速度会影响到该服务器获取的点云数据的实时性。
通常,为了降低成本,采集点云数据的传感器会搭载在无人机或无人车等无人驾驶设备上,并将采集的点云数据经压缩后回传给服务器。因此,为了方便描述,本说明书后续以无人驾驶设备对点云数据进行压缩,服务器对点云数据进行解压为例进行说明。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1为本说明书中一种点云数据压缩方法流程示意图,具体包括以下步骤:
S100:获取点云数据,确定包围所述点云数据的立方体。
在实际应用中,无人驾驶设备在行驶过程中,需要不断的通过传感器感知周围的行驶环境,并根据业务需求,将感知到的数据信息传回服务器。而点云数据量往往很大,因此为了减轻传输压力,无人驾驶设备需要对点云数据进行压缩。类似的,本说明一个或多个实施例中,该点云数据压缩过程也可由无人驾驶设备执行。
具体的,在压缩点云数据前,无人驾驶设备可通过传感器先获取点云数据。由于点云数据一般是大量三维点组成的离散点集,难以直接进行压缩处理,因此该无人驾驶设备可以确定包围该点云数据的立方体,使得后续步骤可以借助该立方体对该点云数据进行压缩。
其中,无人驾驶设备具体通过何种传感器以何种方式获取点云数据,本说明书不做限制。例如,无人驾驶设备可以使用激光雷达,以预设的时间间隔扫描周围环境,获取点云数据。
另外,包围该点云数据的立方体的尺寸,可以根据实际情况或业务需求确定,本说明书对立方体的尺寸不做限制。
具体的,该无人驾驶设备可以根据预先存储的该传感器的数据采集半径,确定该立方体的尺寸。例如,当无人驾驶设备的传感器的采集半径为180米时,可以确定一个以传感器为中心、边长为360米的立方体。
或者,该无人驾驶设备可根据业务需求,确定预设的数据获取半径,再确定该立方体的尺寸。例如,假设三维重构业务,仅需重构无人驾驶设备周围100米内的环境,则可以确定一个以传感器为中心、边长为200米的立方体。当然,由于通常来说传感器采集的数据距离该传感器越远,其精度越低,因此通过设置预设的数据获取半径,也可筛选掉精度较低的三维点,进一步降低点云数据压缩的数据量。
本说明书中提到的无人驾驶设备包括无人乘用车、无人配送设备、无人机、无人船等能够实现自动驾驶的设备。为了方便说明,下面仅以无人驾驶设备为执行主体进行说明。
S102:根据预设的层数,从所述立方体中心向外对所述立方体进行体素划分,确定各层对应的各第一子立方体,并根据各层预设的精度,对所述各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体。
在本说明书一个或多个实施例中,通过上述确定出包围点云数据的立方体后,无人驾驶设备可以根据预设的层数,从该立方体中心向外对该立方体进行体素划分,确定各层对应的各第一子立方体,并根据各层预设的精度,对各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体。则后续该无人驾驶设备,可根据该第一子立方体及该第二子立方体的空间位置表示点云数据中的各三维点,实现对三维点坐标的压缩。
具体的,该无人驾驶设备,首先可基于步骤S100确定出的立方体,根据预设的层数,从该立方体中心向外对该立方体进行体素划分,确定各层对应的第一子立方体。其中,预设的层数可以视业务需求确定,本说明书对层数的具体数值不做限制。例如,假设确定出的立方体边长为360米,该无人驾驶设备重点根据半径60米内的三维点,确定运动决策,则该层数可预设为2。使得距离无人驾驶设备半径60米内为一层第一子立方体,半径60米以外为另一层第一子立方体,层数为2的示例如图2所示。
图2为本说明书提供的一种第一子立方体划分示意图,图2中最大的立方体为包围点云数据的立方体。在该立方体中心,虚线构成的小立方体为第一层的第一子立方体,为方便描述,图2只示例性的画出了第一层的第一子立方体,对第二层的划分情况进行了省略,实际该立方体的第二层也进行了划分,划分后两层可得到27个尺寸相同的第一子立方体。
其次,该无人驾驶设备在划分出各第一子立方体后,可继续根据各层预设的精度,对各层对应的各第一子立方体进行体素划分。
具体的,该无人驾驶设备可以先根据各层预设的精度,确定各层对应的各第一子立方体的划分份数,再根据各层对应的划分份数,对各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体。
其中,越接近所述立方体中心,预设的精度越高。当然,各层预设的精度可以视具体情况及业务需求确定,本说明书对各层预设的精度的具体数值不做限制。划分份数是指对各层对应的各第一子立方体进行体素划分时,在每个维度上划分的份数。具体确定划分份数时,可以根据层数、立方体的边长以及各层预设的精度,确定各层对应的各第一子立方体的划分份数。
例如,以立方体边长为360米、层数为2、第一层精度为毫米、第二层精度为分米为例,则划分第一子立方体时,该立方体的每个维度都被划分为3份(即,2×2-1),则第一立方的边长为120米,根据第一层的精度为毫米可知,第一层的第一子立方体的划分份数至少为12000(即,120/0.01),同理,根据第二层的精度为分米可知,第二层的第一子立方体的划分份数至少为120。
图3为本说明书提供的一种第二子立方体划分示意图,图3展示包围点云数据的立方体的一部分。图3中“第一层”所指的子立方体表示第一层的第一子立方体,剩余8个子立方体为第二层的第一子立方体。由上述内容可知,该第一层的精度要高于该第二层的精度,因此,图3中,对该第一层的第一子立方体按较大的划分份数进行了较多的划分,对该第二层右上角的第一子立方体按较小的划分份数进行了较少的划分。当然了,图3只是给出一种示例,实际应用中,具体的划分份数可以根据具体情况确定。同时,为了方便描述,图3只是示例性的画出了该第一层的第一子立方体以及该第二层右上角的第一子立方体的划分情况,对剩余各第一子立方体的划分情况进行了省略。
S104:根据预设的遍历三维空间的顺序,确定与所述各第一子立方体对应的各第一标识以及与所述各第二子立方体对应的各第二标识。
通过上述确定各层对应的各第一子立方体,及各第一子立方体对应的各第二子立方体后,无人驾驶设备可以按照预设的规则,为各第一子立方体赋予针对所有第一子立方体的唯一标识,以及为各第二子立方体赋予针对其所在的第一子立方体包含的所有第二子立方体的唯一标识。则该标识能够表示该第一子立方体或第二子立方体在包括点云数据的立方体中的空间位置信息,因此,后续可使用各标识表示点云数据中各三维点的坐标,以完成对点云数据的压缩。
具体的,在本说明书一个或多个实施例中,该无人驾驶设备可以根据预设的遍历三维空间的顺序,确定所各第一子立方体对应的各第一标识以及与各第二子立方体对应的各第二标识。其中,具体根据何种遍历三维空间的顺序,本说明书不做限制,所说的第一标识及第二标识可以是遍历的次序。例如,可以根据从左到右、从前到后、从上到下的顺序遍历各第一子立方体及各第二子立方体,并以遍历的次序作为对应标识,如图4所示。
图4为本说明书提供的一种三维空间遍历顺序示意图,图4中最大的立方体为包围点云数据的立方体,为方便描述,图4只示例性的画出了第二层顶部的9个第一子立方体,对顶部以下的各第一子立方体进行了省略,实际该立方体包括27个第一子立方体。顶部该9个第一子立方体上的数字表示各第一子立方体经遍历后对应的第一标识,根据各第一标识的分布可知,遍历顺序是从顶部的左下角开始,从左到右,从前到后,至顶部的右上角结束对顶部的第一子立方体的遍历,后续还包括对顶部以下省略画出的第一子立方体进行遍历,遍历方式同上,即,整体为从上到下进行遍历。
该无人驾驶设备对各第一子立方体中的各第二子立方体进行遍历时,可按照遍历各第一子立方体的顺序进行遍历,也可以采用其他遍历顺序进行遍历,具体与遍历各第一子立方体的过程类似,此处不再赘述。
S106:根据所述点云数据中各三维点的坐标、所述立方体的边长以及所述层数,分别确定各三维点落入的第一子立方体以及第一标识。
S108:根据所述各三维点的坐标、所述各三维点落入的第一子立方体、所述立方体的边长以及所述各层预设的精度,分别确定各三维点落入的第二子立方体以及第二标识。
通过上述确定出各第一子立方体及各第二子立方体的各标识后,无人驾驶设备可以进一步确定点云数据中各三维点落入的第一子立方体,以及在落入的第一子立方体中落入的第二子立方体,以使得能够通过对应标识,表示该三维点的位置信息。
因此,该无人驾驶设备可以先根据该点云数据中各三维点的坐标、立方体的边长以及预设的层数,分别确定各三维点落入的第一子立方体以及第一标识。
具体的,在本说明书一个或多个实施例中,首先,该无人驾驶设备可以根据该点云数据中各三维点的坐标以及该立方体的边长,确定各三维点基于该立方体的坐标系进行坐标转换后的坐标。
然后,根据该立方体的边长以预设的层数,确定第一子立方体的边长。
之后,根据各三维点转换后的坐标以及该第一子立方体的边长,分别确定各三维点落入的第一子立方体,以确定该三维点对应的第一标识。
其中,点云数据中各三维点的坐标可以是,以传感器为坐标原点的相对位置坐标,假设传感器的采集半径为s米时,则各三维点在每个维度的取值范围为[-s,s]。所说的该立方体的坐标系,可以是将该立方体置于三维坐标系中的第一象限,如图5所示。
图5为本说明书提供的一种坐标转换示意图,原点云数据中各三维点的坐标是以传感器,即,立方体中心为坐标原点的相对位置坐标,则若将该立方体置于三维坐标系中的第一象限后,各三维点的每个维度都应加上s。换句话说,各三维点在每个维度的取值范围转换为了[0,2s]。
可采用下述公式计算三维点落入的第一子立方体以及第一标识:
式中,L1表示坐标为(x,y,z)的三维点对应的第一标识,n表示根据预设的层数,从该立方体中心向外对该立方体进行体素划分,确定各层对应的第一子立方体时的划分份数,当该层数为m时,n=2m-1。即,当该立方体从中心向外被划分为m层时,该立方体也在每个维度上被划分为2m-1份。2s表示该立方体的边长,则表示划分得到的各第一子立方体的边长。
以z轴方向的维度为例,z+s表示该三维点基于该立方体经坐标转换后的z轴坐标,通过转换后的坐标值与该第一子立方体的边长的比值(即,)可得到在z轴方向的维度上,该三维点落入的第一子立方体在该立方体的份数,表示对份数取整,因为划分第一子立方体时划分份数从零开始,所以最后对得到的份数减一。其余两个维度的计算与此同理,此处不再一一赘述。当得到该三维点在每个维度上,落入的第一子立方体处在该立方体的份数后,即可确定该三维点落入的第一子立方体。每个维度对应的份数后的乘数(即,n2,n,1)以及各乘积的相加表示遍历三维空间的顺序对应的编码规则,本说明书中所有的都表示向下取整,后续不再一一进行说明。
例如,图5中,以坐标为(s,s,0)的三维点为例、层数为2时,带入后可得该三维点落入的第一子立方体在立方体的x轴和y轴方向的维度上,都是第二份,在z轴方向的维度上是第0份(即,对应数字8所标识的第一子立方体)。图5中底部的9个第一子立方体上的数字表示经遍历后确定的第一标识,具体为,优先遍历x轴方向,再遍历y轴方向,最后遍历z轴方向。为了方便描述,图5对底部之上的各第一子立方体进行省略。基于该遍历顺序对应的编码规则进行计算后,可得该三维点对应的第一标识为8。
在该无人驾驶设备确定各三维点落入的第一子立方体以及第一标识后,可以再根据各三维点的坐标、各三维点落入的第一子立方体、该立方体的边长以及各层预设的精度,分别确定各三维点在其落入的第一子立方体中落入的第二子立方体以及第二标识。
具体的,在本说明书一个或多个实施例中,首先,无人驾驶设备可以根据所述各三维点的坐标以及所述各三维点落入的第一子立方体,确定所述各三维点基于所述第一子立方体的坐标系进行坐标转换后的坐标。
然后,针对每个三维点的坐标,根据该三维点落入的第一子立方体、所述第一子立方体所在层预设的精度以及所述立方体的边长,确定所述第一子立方体对应的第二子立方体的边长。
最后,根据该三维点转换后的坐标以及所述第二子立方体的边长,确定该三维点在其落入的第一子立方体中落入的第二子立方体,以确定该三维点对应的第二标识。
图6为本说明书提供的另一种坐标转换示意图,原点云数据中各三维点的坐标是以传感器,即,立方体中心为坐标原点的相对位置坐标,若将点云数据落入的第一子立方体置于三维坐标系中的第一象限后,各三维点的每个维度都应加上s并减去该第一子立方体每个维度的最小边界值。换句话说,各三维点在每个维度的取值范围转换为了
可采用下述公式计算三维点落入的第二子立方体以及第二标识:
L2=l1+l2+l3
式中,L2表示坐标为(x,y,z)的三维点对应的第二标识,n表示根据预设的层数,从该立方体中心向外对该立方体进行体素划分,确定各层对应的第一子立方体时的划分份数。2s表示该立方体的边长,p表示该三维点落入的第一子立方体所在层预设的精度,表示该第一子立方体的边长,表示对该第一子立方体进行体素划分,确定该第一子立方体对应的第二子立方体时的划分份数,则表示该三维点在其落入的第一子立方体中落入的第二子立方体的边长。
以x轴方向的维度为例,表示该三维点基于该第一子立方体的坐标系经坐标转换后的x轴坐标,其中,表示该三维点落入的第一子立方体的最小边界值。通过转换后的坐标值与该第二子立方体的边长的比值(即,)可得到在x轴方向的维度上,该三维点在其落入的第一子立方体中落入的第二子立方体在该第一子立方体的份数,表示对份数取整,因为划分第二子立方体时划分份数从零开始,所以最后对得到的份数减一。其余两个维度的计算与此同理,此处不再一一赘述。当得到该三维点在每个维度上,在其落入的第一子立方体中落入的第二子立方体在该第一子立方体的份数后,即可确定该三维点落入的第二子立方体。每个维度对应的份数后的乘数(即,1,)以及最后各乘积的相加表示遍历三维空间的顺序对应的编码规则。
例如,图6中,以坐标为(s,s,0)的三维点为例、层数为2、精度为时,带入后可得该三维点落入的第一子立方体在立方体的x轴和y轴方向的维度上,都是第二份,在z轴方向的维度上是第0份(即,对应数字8所标识的第二子立方体)。图6中底部的9个第二子立方体上的数字表示经遍历后确定的第二标识,具体为,优先遍历x轴方向,再遍历y轴方向,最后遍历z轴方向。为了方便描述,图6对底部之上的各第二子立方体进行省略。基于该遍历顺序对应的编码规则进行计算后,可得该三维点对应的第二标识为8。
当然了,上述的举例只是为了方便描述,在实际应用中,可以根据业务需求确定更高的精度。另外,本说明书对第一标识以及第二标识的计算方法不做限定,换句话说,计算标识的方法可以根据具体遍历三维空间的顺序对应调整,此处不再一一举例了。
S110:根据所述各三维点对应的第一标识以及第二标识,确定与各三维点分别对应的压缩数据,并存储。
根据上述确定出的各三维点对应的第一标识以及第二标识,无人驾驶设备可以基于各标识对应的各第一子立方体以及各第二子立方体的空间位置,确定各三维点的空间位置坐标,因此,可以基于该第一标识以及该第二标识,确定与各三维点分别对应的压缩数据,并存储。
在本说明书一个或多个实施例中,具体的,针对每个三维点,该无人驾驶设备可以根据该三维点对应的第一标识以及第二标识,确定该三维点的压缩数据。并根据已存储的各压缩数据,判断该三维点的压缩数据与已存储的压缩数据是否一致,若是,则不存储该三维点的压缩数据,若否,则存储该三维点的压缩数据。
其中,压缩数据可以是指该三维点对应的第一标识以及第二标识组成的标识对,例如,(第一标识,第二标识)。另外,由于划分各第一子立方体以及各第二子立方体的过程中,可能有多个点位于同一个第二子立方体中,则在计算取整时,这些点会得到相同的第一标识以及第二标识,因此,为了节省空间提高压缩率,这些点对应的存储数据只存储一个即可,具体在存储时,可以判断该三维点的压缩数据与已存储的压缩数据是否相同,若不存在相同的压缩数据,则使用预设的字节数存储该压缩数据对应的二进制编码。所说的预设的字节数可以根据业务需求确定。例如,对接近传感器中心的数据,精度要求较高时,压缩数据的二进制编码也会相应增多,则可采用较多的字节数来存储压缩数据。对接近传感器采集半径的数据,精度要求较低时,压缩数据的二进制编码也会相应减少,则可采用较少的字节数来存储压缩数据。
例如,预设层数为2时,从立方体的中心向外,当第一层的精度需要达到毫米时,可采用5个字节或6个字节来存储该标识对,当第二层的精度需要达到分米时,可采用4个字节来存储该标识对。
基于图1所示的点云数据压缩方法,先根据包围点云数据的立方体以及预设的层数,从该立方体中心向外进行体素划分确定各层对应的第一子立方体,以根据各层预设的精度,对各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体。再根据预设的遍历顺序,确定与各第一子立方体对应的第一标识以及与各第二子立方体对应的第二标识。使得能够根据点云数据中各三维点落入的第一子立方体,以及在其落入的第一子立方体中落入的第二子立方体,分别确定与各三维点对应的第一标识以及第二标识,并根据此确定各三维点对应的压缩数据。由于该立方体、层数以及精度都可以预先确定,因此实际压缩时,可直接根据各三维点的坐标确定其对应的压缩数据,降低了算法的空间复杂度,提高了压缩效率。
此外,在本说明书一个或多个实施例中,步骤S102中,确定各层对应的各第一子立方体的划分份数时,还可以根据各层预设的精度以及用于存储压缩数据预设的字节数确定。例如,以立方体边长为360米、层数为2、第二层精度为分米、预设字节数为4字节为例,可知第一立方的边长为120米,第二层的第一子立方体的划分份数至少为120。由于层数m为2,则对立方体的划分份数为n=2m-1=3,将立方体从中心向外进行体素划分时,会得到27个尺寸相同的第一子立方体,则第一标识的取值范围为[0,26],存储时占用5(即,)个比特(bit)位,则4个字节还剩余27个bit位,可知最多可存储划分份数为512时各第二子立方体对应的第二标识。划分份数为512时,满足精度需求,且充分利用了存储空间。因此,可确定第二层对应的各第一子立方体的划分份数为512。
此外,在本说明书一个或多个实施例中,步骤S104中,确定与各第一子立方体对应的各第一标识以及与各第二子立方体对应的各第二标识时,无人驾驶设备还可以先根据预设的遍历三维空间的顺序,确定各子立方体组成的各遍历行以及各遍历行的遍历顺序。再以按照遍历顺序依次遍历各遍历行,以及按照行方向顺序确定单个遍历行中子立方体对应的标识的方法,确定各第一子立方体对应的各第一标识,以及确定各第二子立方体针对其所在的第一子立方体包含的所有第二子立方体对应的各第二标识。
其中,本说明书对遍历三维空间的顺序不做限制。以三维坐标系的各坐标轴为例,可以根据从x轴方向到y轴方向再到z轴方向的顺序,确定各子立方体组成的各遍历行。以上述顺序为例,这里的遍历行是指子立方体中,中心点在一条直线上且该中心点所在直线与x轴平行的所有子立方体组成的行。各遍历行的遍历顺序可以按照对y轴方向以及z轴方向的遍历顺序确定。行方向顺序可以是按照x轴从负方向到正方向的顺序,也可以是由正方向到负方向的顺序,本说明书对此不做限制。
例如,以图4所示为例进行说明,由于优先遍历x轴方向,因此,标识为“0”、“1”、“2”的三个第一子立方体即组成一个遍历行,标识为“3”、“4”、“5”的三个第一子立方体即组成另一个遍历行,其余同理。
图4中展示的各遍历行的遍历顺序为,按照z轴从负方向到正方向的顺序,先遍历顶层的9个第一子立方体组成的3个遍历行。对于该3个遍历行,按照y轴从负方向到正方向的顺序依次进行遍历。即,先遍历标识为“0”、“1”、“2”的三个第一子立方体组成的遍历行,其次遍历标识为“3”、“4”、“5”的三个第一子立方体组成的遍历行。再遍历标识为“6”、“7”、“8”的三个第一子立方体组成的遍历行。然后再对顶层之下的各遍历行进行遍历,直至确定所有第一子立方体的标识为止。
图4中展示的行方向顺序为按照x轴从负方向到正方向的顺序。当然了,对遍历的第一遍历行之外的其他遍历行进行遍历确定单个遍历行中子立方体对应的标识时,需要延续上一遍历行最后一个子立方体的标识。
该无人驾驶设备对各第二子立方体针对其所在的第一子立方体包含的所有第二子立方体进行遍历时,可按照遍历各第一子立方体的顺序进行遍历,也可以采用其他遍历顺序进行遍历,具体与遍历各第一子立方体的过程类似,此处不再赘述。
另外,在本说明书一个或多个实施例中,步骤S106和S108中,本说明书对各三维点对应的第一标识以及第二标识的计算方式不做限制,所说的公式也只是给出的一种遍历顺序下的示例性公式,对本说明书不构成限制。
进一步的,在本说明书一个或多个实施例中,步骤S106和S108中,由各三维点对应的第一标识以及第二标识的计算公式可知,本说明书中的点云数据压缩方法可直接根据各三维点的坐标以及其他预设量,确定各三维点对应的第一标识以及第二标识。因此步骤S100~S104中的各步骤,可以由无人驾驶设备预先完成,并将相关预设量存储在存储设备中,当对点云数据进行压缩时,可直接调用所需的预设量,以根据各三维点的坐标计算得到各三维点对应的第一标识以及第二标识,进而确定各三维点对应的压缩数据。
更进一步的,在本说明书一个或多个实施例中,无人驾驶设备在存储点云数据中各三维点对应的压缩数据时,还可以将该次压缩对应的步骤S100~S104中的各预设量一并存储,并向服务器回传该压缩数据时一并回传。当然了,由于有不同的业务需求,可能会根据不同的预设量来确定各三维点对应的压缩数据,此时,可以预先确定不同情况下预设量对应的全局的唯一标识,并在回传该压缩数据时将该次压缩对应的唯一标识一并回传,以使得服务器能够根据该唯一标识,确定无人驾驶设备具体采用了何种预设量对点云数据进行压缩。服务器还可以将相关的预设量预先存储在存储设备中,则当服务器进行解压时,可直接调用各预设量。
另外,在本说明书一个或多个实施例中,步骤S110中,存储每个三维点的压缩数据时,无人驾驶设备还可以通过下述方法确定预设的字节数:
首先,根据立方体的边长以及层数,确定该立方体经体素划分后,得到的第一子立方体的数量。
然后,根据该三维点落入的第一子立方体所在层预设的精度、该立方体的边长以及层数,确定该第一子立方体经体素划分后,得到的第二子立方体的数量。
最后,根据该第一子立方体的数量以及该第二子立方体的数量,确定存储该三维点的压缩数据所需的比特位数,进一步确定预设的字节数。
例如,假设立方体边长为120米,预设层数为2时,可知该立方体经体素划分后得到的第一子立方体的数量为9。对应的,存储该三维点的压缩数据中第一标识所需的比特位数至少为4位。继续假设从立方体的中心向外,当该三维点落入的第一子立方体所在层为第一层,且第一层的预设精度为厘米时,可知,该第一子立方体对应的划分份数至少为400,则该第一子立方体经体素划分后得到的第二子立方体的数量至少为64000000。对应的,存储该三维点的压缩数据中第二标识所需的比特位数至少为26位。因此,存储该三维点的压缩数据所需的比特位数至少为31位,即,可确定预设的字节数为4个字节。
此外,在本说明书一个或多个实施例中,当无人驾驶设备为无人车或无人船时,为了提高压缩率,该无人驾驶设备可以确定以传感器为中心的立方体并从该立方体中心向外对该立方体进行体素划分,确定各层对应的各第一子立方体后,可以弃用传感器所在的第一层的第一子方体以下的各第一子立方体。换句话说,在步骤S104中,该无人驾驶设备可以根据预设的遍历三维空间的顺序,从该第一层的第一子方体所在的水平层的各第一子立方体开始确定各第一子立方体的各第一标识。
需要说明的是,上述压缩内容均是以无人驾驶设备为例进行说明的,但是前述也提及了多种可能的应用场景(如,由载人设备上的点云数据采集设备采集点云数据),实际上均可适用本说明书提供的点云数据压缩方法,提高压缩效率。
图7为本说明书中一种点云数据解压方法流程示意图,具体包括以下步骤:
S700:获取存储的点云数据中各三维点分别对应的压缩数据,以及确定预设的包围所述点云数据的立方体和层数。
在实际应用中,服务器可以接收无人驾驶设备回传的点云数据对应的压缩数据,并根据具体业务解压后进行使用。在本说明书一个或多个实施例中,服务器在解压压缩数据前,需要先获取存储的点云数据中各三维点分别对应的压缩数据,以及确定预设的包围该点云数据的立方体和层数。
其中,服务器具体以何种方式获取压缩数据,本说明书不做限制,例如,服务器可以通过无线通信实时接收无人驾驶设备回传的压缩数据,等等。所说的压缩数据、立方体以及层数可参考解压方法中的相应描述,此处不再赘述。预设的包围该点云数据的立方体和层数,可由无人驾驶设备在回传压缩数据时,将相应数据一并回传,或者可以预先存储在服务器的存储设备中,解压时调取相应数据即可,本说明书对此不做限制。
本说明书中提到的服务器可以是指设置于业务平台的服务器,或能够执行本说明书方案的诸如台式机、笔记本电脑等设备。为了方便说明,下面仅以服务器为执行主体进行说明。
S702:针对每个压缩数据,确定该压缩数据包含的第一标识以及第二标识。
针对上述获取的每个压缩数据,服务器可以先确定该压缩数据包含的第一标识以及第二标识,以基于该第一标识以及该第二标识,确定该压缩数据对应的三维点的空间位置。其中,所说的第一标识以及第二标识可以参考压缩方法中的相应描述,此处不再赘述。
具体的,服务器可以根据压缩数据的字节数以及确定的层数,确定该压缩数据包含的第一标识以及第二标识。例如,以该压缩数据占用4个字节、层数为2为例,可知该第一标识占用5个bit位,因此,可确定该压缩数据前5个bit位组成的编码为第一标识,剩余27个bit位组成的编码为第二标识。
S704:根据所述第一标识、所述立方体的边长以及所述层数,确定该压缩数据对应的第一子立方体的坐标。
S706:根据所述第二标识、所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定该压缩数据对应的第二子立方体的坐标。
S708:根据该压缩数据对应的所述第一子立方体的坐标以及所述第二子立方体的坐标,确定该压缩数据对应的三维点的坐标。
根据上述得到的第一标识以及第二标识,服务器可以进一步确定该压缩数据对应的第一子立方体的坐标以及对应的第二子立方体的坐标,以确定该压缩数据对应的三维点的坐标。
因此,该服务器可先根据立方体的边长以及层数,确定该压缩数据对应的第一子立方体的坐标。
在本说明书一个或多个实施例中,具体的,在确定压缩数据对应的第一子立方体的坐标时,服务器可以先根据该第一标识以及预设的遍历三维空间的顺序,确定该压缩数据对应的第一子立方体在所述立方体内的位置。再根据该立方体的边长以及该层数,确定该第一子立方体的边长。最后,根据该压缩数据对应的第一子立方体的位置以及该第一子立方体的边长,确定该压缩数据对应的第一子立方体的坐标。
在服务器确定该压缩数据对应的第一子立方体的坐标后,可以再根据该第二标识以及预设的遍历三维空间的顺序、该第一子立方体所在层预设的精度、该层数以及该立方体的边长,确定该压缩数据对应的第二子立方体的坐标。
在本说明书一个或多个实施例中,具体的,在确定压缩数据对应的第二子立方体的坐标时,服务器可以先根据该第二标识,确定该压缩数据对应的第二子立方体在所述第一子立方体内的位置。再根据该第一子立方体所在层预设的精度、该层数以及该立方体的边长,确定该第二子立方体的边长。最后,根据该压缩数据对应的第二子立方体的位置以及该第二子立方体的边长,确定该压缩数据对应的第二子立方体的坐标。
当确定该压缩数据对应的第一子立方体的坐标以及对应的第二子立方体的坐标后,服务器可以根据该压缩数据对应的该第一子立方体的坐标以及该第二子立方体的坐标,确定该压缩数据对应的三维点的坐标。
可采用下述公式计算压缩数据对应的坐标:
式中,x、y、z表示该压缩数据解压后得到的各个维度的坐标值,以x轴方向的维度为例,d表示第一标识,n表示根据预设的层数,从该立方体中心向外对该立方体进行体素划分,确定各层对应的第一子立方体时的划分份数。2s表示该立方体的边长,则第一项中,d%n表示该第一标识对应的第一子立方体在该立方体的份数,即,x轴方向上该第一子立方体在该立方体的位置,表示划分得到的各第一子立方体的边长。根据步骤S106和步骤S108中描述可知,在计算份数时进行了减1,因此,实际上该份数与该第一子立方体的边长的乘积表示,该压缩数据对应的第一子立方体在x轴方向的最小边界值。
第二项中,e表示第二标识,p表示该压缩数据对应的第一子立方体所在层的预设精度。根据步骤S106和步骤S108中描述可知,表示对该第一子立方体进行体素划分,确定该第一子立方体对应的第二子立方体时的划分份数,则e%表示该第二标识对应的第二子立方体在该第一子立方体的份数,即,x轴方向上该第二子立方体在该第一子立方体的位置。表示该第一子立方体的边长,则表示该三维点在其落入的第一子立方体中落入的第二子立方体的边长。根据步骤S106和步骤S108中描述可知,在计算份数时进行了减1,因此,实际上该份数与该第二子立方体的边长的乘积表示,该压缩数据对应的第二子立方体在x轴方向的最小边界值。
最后,该压缩数据对应的第一子立方体在x轴方向的最小边界值与对应的第二子立方体在x轴方向的最小边界值相加,即可得到该压缩数据对应的三维点基于该立方体的坐标系的x轴坐标值,第三项中,减去s表示坐标转换,即转换为点云数据以传感器,即,该立方体中心为坐标原点的坐标系下的坐标。
y轴方向的维度的坐标计算以及z轴方向的维度的坐标计算与上述同理,此处不再一一赘述。当然了,也可以先计算得到该压缩数据对应的第一子立方体在x轴方向的最小边界值、在y轴方向的最小边界值以及在z轴方向的最小边界值,并组成该压缩数据对应的第一子立方体在各个维度的最小边界坐标,再计算得到该压缩数据对应的第二子立方体在x轴方向的最小边界值、在y轴方向的最小边界值以及在z轴方向的最小边界值,并组成该压缩数据对应的第二子立方体在各个维度的最小边界坐标,最后,将该第一子立方体的坐标与该第二子立方体的坐标相加,并在每个维度上减去s进行坐标转换,得到该压缩数据对应的三维点的坐标。本说明书对压缩数据对应的三维点的坐标的计算方式不做限制,所说的公式也只是给出的示例性公式,对本说明书不构成限制。
另外,在本说明书一个或多个实施例中,点云数据中各三维点的坐标是以传感器为坐标原点的相对位置坐标,因此,在实际应用中,可以将每一帧点云数据对应的传感器的地理坐标进行对应存储,并在发送该帧点云数据对应的压缩数据时,将对应的传感器的地理坐标一并发送。则后续服务器进行解压时,可以在得到各压缩数据对应的各三维点的相对坐标时,基于对应的传感器的地理坐标,确定各三维点的实际地理坐标,并根据此进行实际应用。
需要说明的是,上述解压内容均是以服务器为执行主体进行说明的,但是本说明书对执行解压方法的执行主体不做限制。解压内容的执行主体也可以为能够执行解压方案的其他装置,等等,本说明书不做限制。
本说明书还提供了相应的点云数据压缩装置,如图8所示。
图8为本说明书提供的一种点云数据压缩装置示意图,包括:
获取模块800,用于获取点云数据,确定包围所述点云数据的立方体;
划分模块802,用于根据预设的层数,从所述立方体中心向外对所述立方体进行体素划分,确定各层对应的各第一子立方体,并根据各层预设的精度,对所述各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体;
遍历模块804,用于根据预设的遍历三维空间的顺序,确定与所述各第一子立方体对应的各第一标识以及与所述各第二子立方体对应的各第二标识;
第一标识确定模块806,用于根据所述点云数据中各三维点的坐标、所述立方体的边长以及所述层数,分别确定各三维点落入的第一子立方体以及第一标识;
第二标识确定模块808,用于根据所述各三维点的坐标、所述各三维点落入的第一子立方体、所述立方体的边长以及所述各层预设的精度,分别确定各三维点落入的第二子立方体以及第二标识;
压缩模块810,用于根据所述各三维点对应的第一标识以及第二标识,确定与各三维点分别对应的压缩数据,并存储。
可选地,所述划分模块802,根据各层预设的精度,确定各层对应的各第一子立方体的划分份数,根据所述各层对应的划分份数,对各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体,其中,越接近所述立方体中心,预设的精度越高。
可选地,所述遍历模块804,根据预设的遍历三维空间的顺序,确定各子立方体组成的各遍历行以及各遍历行的遍历顺序,以按照所述遍历顺序依次遍历各遍历行,以及按照行方向顺序确定单个遍历行中子立方体对应的标识的方法,确定所述各第一子立方体对应的各第一标识,以及确定各第二子立方体对应的各第二标识。
可选地,所述第一标识确定模块806,根据所述点云数据中各三维点的坐标以及所述立方体的边长,确定所述各三维点基于所述立方体的坐标系进行坐标转换后的坐标,根据所述立方体的边长以及所述层数,确定所述第一子立方体的边长,根据所述各三维点转换后的坐标以及所述第一子立方体的边长,分别确定各三维点落入的第一子立方体。
可选地,所述第二标识确定模块808,根据所述各三维点的坐标以及所述各三维点落入的第一子立方体,确定所述各三维点基于所述第一子立方体的坐标系进行坐标转换后的坐标,针对每个三维点的坐标,根据该三维点落入的第一子立方体、所述第一子立方体所在层预设的精度以及所述立方体的边长,确定所述第一子立方体对应的第二子立方体的边长,根据该三维点转换后的坐标以及所述第二子立方体的边长,确定该三维点在其落入的第一子立方体中落入的第二子立方体。
可选地,所述压缩模块810,针对每个三维点,根据该三维点对应的第一标识以及第二标识,确定该三维点的压缩数据,根据已存储的各压缩数据,判断该三维点的压缩数据与已存储的压缩数据是否一致,若是,则不存储该三维点的压缩数据,若否,则存储该三维点的压缩数据。
本说明书还提供了相应的点云数据解压装置,如图9所示。
图9为本说明书提供的一种点云数据解压装置示意图,包括:
获取模块900,用于获取存储的点云数据中各三维点分别对应的压缩数据,以及确定预设的包围所述点云数据的立方体和层数;
标识确定模块902,用于针对每个压缩数据,确定该压缩数据包含的第一标识以及第二标识;
第一坐标确定模块904,用于根据所述第一标识、所述立方体的边长以及所述层数,确定该压缩数据对应的第一子立方体的坐标;
第二坐标确定模块906,用于根据所述第二标识、所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定该压缩数据对应的第二子立方体的坐标;
解压模块908,用于根据该压缩数据对应的所述第一子立方体的坐标以及所述第二子立方体的坐标,确定该压缩数据对应的三维点的坐标。
可选地,所述第一坐标确定模块904,根据所述第一标识以及预设的遍历三维空间的顺序,确定该压缩数据对应的第一子立方体在所述立方体内的位置,根据所述立方体的边长以及所述层数,确定所述第一子立方体的边长,根据该压缩数据对应的第一子立方体的位置以及所述第一子立方体的边长,确定该压缩数据对应的第一子立方体的坐标。
可选地,所述第二坐标确定模块906,根据所述第二标识以及预设的遍历三维空间的顺序,确定该压缩数据对应的第二子立方体在所述第一子立方体内的位置,根据所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定所述第二子立方体的边长,根据该压缩数据对应的第二子立方体的位置以及所述第二子立方体的边长,确定该压缩数据对应的第二子立方体的坐标。
本说明书还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图1提供的点云数据压缩方法或执行上图7提供的点云数据解压方法。
本说明书还提供了图10所示的电子设备的结构示意图。如图10所述,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述图1提供的点云数据压缩方法或执行上图7提供的点云数据解压方法。
当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件异或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
在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),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。
Claims (13)
1.一种点云数据压缩方法,其特征在于,包括:
获取点云数据,确定包围所述点云数据的立方体;
根据预设的层数,从所述立方体中心向外对所述立方体进行体素划分,确定各层对应的各第一子立方体,并根据各层预设的精度,对所述各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体;
根据预设的遍历三维空间的顺序,确定与所述各第一子立方体对应的各第一标识以及与所述各第二子立方体对应的各第二标识;
根据所述点云数据中各三维点的坐标、所述立方体的边长以及所述层数,分别确定各三维点落入的第一子立方体以及第一标识;
根据所述各三维点的坐标、所述各三维点落入的第一子立方体、所述立方体的边长以及所述各层预设的精度,分别确定各三维点落入的第二子立方体以及第二标识;
根据所述各三维点对应的第一标识以及第二标识,确定与各三维点分别对应的压缩数据,并存储。
2.如权利要求1所述的方法,其特征在于,根据各层预设的精度,对各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体,具体包括:
根据各层预设的精度,确定各层对应的各第一子立方体的划分份数;
根据所述各层对应的划分份数,对各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体;
其中,越接近所述立方体中心,预设的精度越高。
3.如权利要求1所述的方法,其特征在于,根据预设的遍历三维空间的顺序,确定与所述各第一子立方体对应的各第一标识以及与所述各第二子立方体对应的各第二标识,具体包括:
根据预设的遍历三维空间的顺序,确定各子立方体组成的各遍历行以及各遍历行的遍历顺序;
以按照所述遍历顺序依次遍历各遍历行,以及按照行方向顺序确定单个遍历行中子立方体对应的标识的方法,确定所述各第一子立方体对应的各第一标识,以及确定各第二子立方体对应的各第二标识。
4.如权利要求1所述的方法,其特征在于,根据所述点云数据中各三维点的坐标、所述立方体的边长以及所述层数,分别确定各三维点落入的第一子立方体,具体包括:
根据所述点云数据中各三维点的坐标以及所述立方体的边长,确定所述各三维点基于所述立方体的坐标系进行坐标转换后的坐标;
根据所述立方体的边长以及所述层数,确定所述第一子立方体的边长;
根据所述各三维点转换后的坐标以及所述第一子立方体的边长,分别确定各三维点落入的第一子立方体。
5.如权利要求1所述的方法,其特征在于,根据所述各三维点的坐标、所述各三维点落入的第一子立方体、所述立方体的边长以及所述各层预设的精度,分别确定各三维点落入的第二子立方体,具体包括:
根据所述各三维点的坐标以及所述各三维点落入的第一子立方体,确定所述各三维点基于所述第一子立方体的坐标系进行坐标转换后的坐标;
针对每个三维点的坐标,根据该三维点落入的第一子立方体、所述第一子立方体所在层预设的精度以及所述立方体的边长,确定所述第一子立方体对应的第二子立方体的边长;
根据该三维点转换后的坐标以及所述第二子立方体的边长,确定该三维点在其落入的第一子立方体中落入的第二子立方体。
6.如权利要求1所述的方法,其特征在于,根据所述各三维点对应的第一标识以及第二标识,确定与各三维点对应的压缩数据,具体包括:
针对每个三维点,根据该三维点对应的第一标识以及第二标识,确定该三维点的压缩数据;
根据已存储的各压缩数据,判断该三维点的压缩数据与已存储的压缩数据是否一致;
若是,则不存储该三维点的压缩数据;
若否,则存储该三维点的压缩数据。
7.一种点云数据解压方法,其特征在于,包括:
获取存储的点云数据中各三维点分别对应的压缩数据,以及确定预设的包围所述点云数据的立方体和层数;
针对每个压缩数据,确定该压缩数据包含的第一标识以及第二标识;
根据所述第一标识、所述立方体的边长以及所述层数,确定该压缩数据对应的第一子立方体的坐标;
根据所述第二标识、所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定该压缩数据对应的第二子立方体的坐标;
根据该压缩数据对应的所述第一子立方体的坐标以及所述第二子立方体的坐标,确定该压缩数据对应的三维点的坐标。
8.如权利要求7所述的方法,其特征在于,根据所述第一标识、所述立方体的边长以及所述层数,确定该压缩数据对应的第一子立方体的坐标,具体包括:
根据所述第一标识以及预设的遍历三维空间的顺序,确定该压缩数据对应的第一子立方体在所述立方体内的位置;
根据所述立方体的边长以及所述层数,确定所述第一子立方体的边长;
根据该压缩数据对应的第一子立方体的位置以及所述第一子立方体的边长,确定该压缩数据对应的第一子立方体的坐标。
9.如权利要求7所述的方法,其特征在于,根据所述第二标识、所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定该压缩数据对应的第二子立方体的坐标,具体包括:
根据所述第二标识以及预设的遍历三维空间的顺序,确定该压缩数据对应的第二子立方体在所述第一子立方体内的位置;
根据所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定所述第二子立方体的边长;
根据该压缩数据对应的第二子立方体的位置以及所述第二子立方体的边长,确定该压缩数据对应的第二子立方体的坐标。
10.一种点云数据压缩装置,其特征在于,包括:
获取模块,用于获取点云数据,确定包围所述点云数据的立方体;
划分模块,用于根据预设的层数,从所述立方体中心向外对所述立方体进行体素划分,确定各层对应的第一子立方体,并根据各层预设的精度,对所述各层对应的各第一子立方体进行体素划分,确定各第一子立方体对应的各第二子立方体;
遍历模块,用于根据预设的遍历三维空间的顺序,确定与所述各第一子立方体对应的各第一标识以及与所述各第二子立方体对应的各第二标识;
第一标识确定模块,用于根据所述点云数据中各三维点的坐标、所述立方体的边长以及所述层数,分别确定各三维点落入的第一子立方体以及第一标识;
第二标识确定模块,用于根据所述各三维点的坐标、所述各三维点落入的第一子立方体、所述立方体的边长以及所述各层预设的精度,分别确定各三维点落入的第二子立方体以及第二标识;
压缩模块,用于根据所述各三维点对应的第一标识以及第二标识,确定与各三维点分别对应的压缩数据,并存储。
11.一种点云数据解压装置,其特征在于,包括:
获取模块,用于获取存储的点云数据中各三维点分别对应的压缩数据,以及确定预设的包围所述点云数据的立方体和层数;
标识确定模块,用于针对每个压缩数据,确定该压缩数据包含的第一标识以及第二标识;
第一坐标确定模块,用于根据所述第一标识、所述立方体的边长以及所述层数,确定该压缩数据对应的第一子立方体的坐标;
第二坐标确定模块,用于根据所述第二标识、所述第一子立方体所在层预设的精度、所述层数以及所述立方体的边长,确定该压缩数据对应的第二子立方体的坐标;
解压模块,用于根据该压缩数据对应的所述第一子立方体的坐标以及所述第二子立方体的坐标,确定该压缩数据对应的三维点的坐标。
12.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1~6或7~9任一项所述的方法。
13.一种电子设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述权利要求1~6或7~9任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210049984.7A CN114419291A (zh) | 2022-01-17 | 2022-01-17 | 一种点云数据压缩和解压方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210049984.7A CN114419291A (zh) | 2022-01-17 | 2022-01-17 | 一种点云数据压缩和解压方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114419291A true CN114419291A (zh) | 2022-04-29 |
Family
ID=81273363
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210049984.7A Pending CN114419291A (zh) | 2022-01-17 | 2022-01-17 | 一种点云数据压缩和解压方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114419291A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115421161A (zh) * | 2022-11-03 | 2022-12-02 | 上海伯镭智能科技有限公司 | 基于激光雷达测距的无人驾驶矿车控制方法 |
CN116051755A (zh) * | 2023-04-03 | 2023-05-02 | 芯知科技(江苏)有限公司 | 三维数据压缩传输方法及装置 |
-
2022
- 2022-01-17 CN CN202210049984.7A patent/CN114419291A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115421161A (zh) * | 2022-11-03 | 2022-12-02 | 上海伯镭智能科技有限公司 | 基于激光雷达测距的无人驾驶矿车控制方法 |
CN116051755A (zh) * | 2023-04-03 | 2023-05-02 | 芯知科技(江苏)有限公司 | 三维数据压缩传输方法及装置 |
CN116051755B (zh) * | 2023-04-03 | 2023-06-16 | 芯知科技(江苏)有限公司 | 三维数据压缩传输方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111090712B (zh) | 一种数据处理方法、装置、设备及计算机存储介质 | |
CN114419291A (zh) | 一种点云数据压缩和解压方法及装置 | |
CN111553946B (zh) | 用于去除地面点云的方法及装置、障碍物检测方法及装置 | |
CN111275633A (zh) | 基于图像分割的点云去噪方法、系统、装置和存储介质 | |
CN111238450B (zh) | 视觉定位方法及装置 | |
CN116740361B (zh) | 一种点云分割方法、装置、存储介质及电子设备 | |
CN110709829A (zh) | 一种数据处理的系统和方法 | |
CN109997123B (zh) | 用于改进空间-时间数据管理的方法、系统和装置 | |
CN112764004A (zh) | 一种点云处理方法、装置、设备及存储介质 | |
CN116012483A (zh) | 一种图像渲染的方法、装置、存储介质及电子设备 | |
CN115858709A (zh) | 多尺度空间数据的处理方法、电子设备及存储介质 | |
CN118053153B (zh) | 一种点云数据的识别方法、装置、存储介质及电子设备 | |
CN111858789B (zh) | 路网数据处理方法、装置、电子设备和存储介质 | |
CN116107636B (zh) | 一种硬件加速方法、装置、存储介质及电子设备 | |
CN113239216A (zh) | 点云的处理方法、装置、设备及存储介质 | |
CN117974990A (zh) | 一种基于注意力机制和特征增强结构的点云目标检测方法 | |
CN115827918B (zh) | 一种执行业务的方法、装置、存储介质及电子设备 | |
CN115809696B (zh) | 虚拟形象模型训练方法及装置 | |
CN116402963A (zh) | 车道线矢量模型构建方法、装置、电子设备和存储介质 | |
CN113589802B (zh) | 栅格地图处理方法、装置、系统、电子设备和计算机介质 | |
CN112669196B (zh) | 一种硬件加速引擎中因子图优化数据的方法和设备 | |
CN116883586A (zh) | 一种基于双目相机的地形语义地图构建方法、系统及产品 | |
CN113704374B (zh) | 空间飞行器轨迹拟合方法、装置及终端 | |
CN111552477B (zh) | 数据处理方法和装置 | |
CN113077551A (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 |