版权申明
本专利文件披露的内容包含受版权保护的材料。该版权为版权所有人所有。版权所有人不反对任何人复制专利与商标局的官方记录和档案中所存在的该专利文件或者该专利披露。
本申请涉及信息处理领域,并且更具体地,涉及一种对三维数据点集进行编码或解码的方法和设备。
背景技术:
三维数据点集是三维物体或场景的一种表现形式,是由空间中一组无规则分布、表达三维物体或场景的空间结构和表面属性的离散点所构成,一个三维数据集点的数据可以包括描述坐标信息的三维坐标,以及进一步包括该位置坐标的属性。为了准确反映空间中的信息,所需离散点的数目是巨大的。为了减少三维数据点集的数据存储和传输时所占用的带宽,需要对三维数据点集的数据进行编码压缩处理。在三维数据点集编码压缩过程中对位置坐标的编码通常与对属性的编码分开进行。在对属性进行编码时,可以采用分层编码的方法。
然而,这种编码方法需要构建分层结构,为每个三维数据点集的位置选择临近参考点时需要多次遍历全部三维数据点,这种方法在编码和解码的时候都会存在较大的时间开销,尤其是当三维数据点集的数据量较大时,这种时间复杂度所带来的代价尤为明显。并且在编码后的码流中关于属性的头信息需要描述关于分层编码属性的相关信息,这些信息在当三维数据点的数目不是很大的时候,在压缩后的码流的占比就会比较大,从而成为制约压缩率的瓶颈。
技术实现要素:
本申请实施例提供一种对三维数据点集进行编码或解码的方法和设备,可以简化编解码方法并降低编解码的时间开销,并且可以提高压缩率。
第一方面,提供了一种对三维数据点集进行编码的方法,包括:对三维数据点集中的至少一个三维数据点的位置坐标进行位置坐标编码,以得到第一二进制码流;按照所述至少一个三维数据点的位置坐标编码后的位置坐标顺序,对所述至少一个三维数据点的属性进行二值化编码,以得到第二二进制码流;分别对所述第一二进制码流和所述第二二进制码流进行熵编码。
第二方面,提供了一种对三维数据点集进行解码的方法,包括:对三维数据点集的待解码码流进行熵解码,以得到第一二进制码流和第二二进制码流;对所述第一二进制码流,进行位置坐标解码,以得到对三维数据点集中的至少一个三维数据点的位置坐标;按照所述至少一个三维数据点的解码后的位置坐标顺序,对所述第二二进制码流进行二值化解码,以得到所述至少一个三维数据点的属性。
第三方面,提供了一种对三维数据点集进行编码的设备,包括:位置坐标编码单元,用于对三维数据点集中的至少一个三维数据点的位置坐标进行位置坐标编码,以得到第一二进制码流;二值化编码单元,用于按照所述至少一个三维数据点的位置坐标编码后的位置坐标顺序,对所述至少一个三维数据点的属性进行二值化编码,以得到第二二进制码流;熵编码单元,用于分别对所述第一二进制码流和所述第二二进制码流进行熵编码。
第四方面,提供了一种对三维数据点集进行解码的设备,包括:熵解码单元,用于对三维数据点集的待解码码流进行熵解码,以得到第一二进制码流和第二二进制码流;位置坐标解码单元,用于对所述第一二进制码流,进行位置坐标解码,以得到对三维数据点集中的至少一个三维数据点的位置坐标;二值化解码单元,用于按照所述至少一个三维数据点的解码后的位置坐标顺序,对所述第二二进制码流进行二值化解码,以得到所述至少一个三维数据点的属性。
第五方面,提供了一种计算机系统,包括:存储器,用于存储计算机可执行指令;处理器,用于访问该存储器,并执行该计算机可执行指令,以进行上述第一或第二方面的方法中的操作。
第六方面,提供了一种计算机存储介质,该计算机存储介质中存储有程序代码,该程序代码可以用于指示执行上述第一或第二方面的方法。
第七方面,提供了一种计算机程序产品,该程序产品包括程序代码,该程序代码可以用于指示执行上述第一或第二方面的方法。
在本申请实施例中,对三维数据点集中的至少一个三维数据点的属性进行二值化编码,可以避免分层编码方式所带来的编码复杂度较高的问题,从而可以简化编码方法并降低编解码的时间开销,并且二值化编码的方法无需在码流中加入较多的编码信息,从而可以提高压缩率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是一种对三维数据点集进行编码的方法的示意性框图。
图2是另一种对三维数据点集进行编码的方法的示意性框图。
图3是一种对三维数据点集进行解码的方法的示意性框图。
图4是另一种对三维数据点集进行解码的方法的示意性框图。
图5是层次编码方案(levelofdetail,lod)分层结构示意性图。
图6是根据本申请实施例的一种对三维数据点集进行编码的方法的示意性框图。
图7是根据本申请实施例的一种对三维数据点集进行解码的方法的示意性框图。
图8是根据本申请实施例的另一种对三维数据点集进行编码的方法的示意性框图。
图9是根据本申请实施例的另一种对三维数据点集进行编码的方法的示意性框图。
图10是根据本申请实施例的一种对三维数据点集进行编码的方法的示意性框图。
图11是根据本申请实施例的另一种对三维数据点集进行解码的方法的示意性框图。
图12是根据本申请实施例的另一种对三维数据点集进行编码的方法的示意性框图。
图13是根据本申请实施例的另一种对三维数据点集进行解码的方法的示意性框图。
图14是根据本申请实施例的立方体八叉树划分的示意性图。
图15是根据本申请实施例的一种八叉树编码方案的示意性图。
图16是根据本申请实施例的一种测距装置的示意性图。
图17是根据本申请实施例的一种测距装置的示意性图。
图18是根据本申请实施例的一种扫描图案的示意性图。
图19是根据本申请实施例的一种对三维数据点集进行编码的设备的示意性框图。
图20是根据本申请实施例的一种对三维数据点集进行解码的设备的示意性框图。
图21是根据本申请实施例的一种计算机系统的示意性框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
除非另有说明,本申请实施例所使用的所有技术和科学术语与本申请的技术领域的技术人员通常理解的含义相同。本申请中所使用的术语只是为了描述具体的实施例的目的,不是旨在限制本申请的范围。
三维数据点集可以由离散的三维数据点构成,每个三维数据点的数据可以包括描述该三维数据点的位置坐标的信息,以及进一步可以包括属性的信息。其中,三维数据点的位置坐标可以为三维位置坐标(x,y,z)。三维数据点的属性可以包括三维数据点的反射率和/或颜色等。
本申请实施例提到的三维数据点集可以为点云,相应地,三维数据点可以为点云点。本申请实施例提到的三维数据点集可以用于高精3d地图。
为了准确反映空间的信息,三维数据点集包括的三维数据点的数量通常是较大的。为了减少三维数据点集数据存储和传输时所占用的带宽,需要对三维数据点集的数据进行编码压缩处理。以下将结合图1至图2描述如何对三维数据点集进行编码和解码处理。
如图1和2所示的编码方法,在110中,向编码器中输入三维数据点集数据;在120中,对三维数据点集数据中的位置坐标进行量化;在130中,对量化后的位置坐标进行位置坐标编码;在140中,按照位置坐标编码后的位置坐标的顺序,对三维数据点集数据中的属性进行属性编码;在150中,对位置坐标编码后得到的码流以及属性编码后得到的码流进行熵编码;在160中,输出编码后的三维数据点集数据,例如,可以输出到存储器中进行存储,或者,可以传送到解码端。
如图3和4所示的解码方法,在210中,获取三维数据点集数据的待解码码流,例如,可以从存储器中获取该码流,或者获取编码端传送的该码流;在220中,对该码流进行熵解码,可以得到位置坐标对应的码流和属性对应的码流;在230中,对位置坐标对应的码流进行位置坐标解码;在240中,对解码后的位置坐标进行逆量化;在250中,可以按照解码后的位置坐标的顺序,对属性进行解码;260,根据解码后的属性以及位置坐标,得到解码后的三维数据点集的数据。
其中,如图2所示,在140中,对属性的编码操作可以包括142、144和146;在142中,基于位置坐标编码后的位置坐标,生成层次编码方案(levelofdetail,lod);在144中,基于层次编码方案,进行预测编码;在146中,对预测编码的结果进行量化。
如图4所示,在250中,对属性的解码操作可以包括252、254和256;在252中,对解码得到的属性码流进行逆量化;在254中,基于位置坐标解码后的位置坐标,生成层次解码方案;在256中,基于层次编码方案,进行预测解码。
在实际编码过程中,可以根据lod配置的参数来进行lod分层,其中,后面的层会包含有前面层的点。例如,如图5所示,在lod0(层0),包含的三维数据点为p0,p5,p4,p2;在lod1(层1),包含的三维数据点为p0,p5,p4,p2,p1,p6,p3;以及在lod2(层2)包含的三维数据点为p0,p5,p4,p2,p1,p6,p3,p9,p8,p7。
在分层的一个示例中,先选择三维数据点集中的第一个三维数据点,将其放在lod0层的第一个点,接着开始依次遍历三维数据点,计算这个点和当前层里面已经含有的所有点之间的笛卡尔坐标系下的距离,如果最小的距离是大于当前lod层的设置的距离阈值(dist2)时,这个点就会被划入到当前lod层。并且在这个过程中,会将计算得到的距离排序,选择出最小的若干个,这个数目是由预测时相邻点的数量(numberofneighborsinprediction)n确定。其中,一个三维数据点被划入一个lod层后,后续可以不需要再接着判断其是否还属于下一个lod层,因为下一层是包含上一层的所以其一定属于下一个lod层;以及在lod0层的前面几个点,由于在lod内的点数比较少所以选择出的参考点数目有可能小于该数量n。
在划分结束lod层之后,可以利用前面选择的最临近的点来分配预测时的权重。例如,对每个三维数据点,在前面已经得到了按照距离排序的最邻近的n个点之后,接下来可以按照1个参考点,2个参考点一直到n个参考点来分别求出权重分配方案。权重分配方案共有n种,其中,1个参考点时就是距离最小的1个点作为参考点,这时它的权重即为1;2个参考点时就是选择距离最小的2个点作为参考点,这时会根据这两个参考点和待预测点之间的距离来分配权重,具体权重为距离反比,距离越远权重越小,并保证权重和为1;直到n个参考点时,就是选择n个参考点,权重分配方法与前面相同。
在分配完权重后,可以选择参考点数,在这里需要注意的是,对一个预测点可以选择的临近参考点的数目是小于等于n。具体会遍历限定参考点最大为1个时,这时预测值(权重乘以对应位置的属性值)与实际属性值的残差经过量化后的值得和,这个和即为参考点数目最大为1时的代价,接着会遍历限定参考点数目最大为2个时的代价,直至限定参考点数目最大为n时的代价,最终选择一个代价最小的最大参考点数的方案。并进一步编码这个方案下量化后的残差值。
然而,这种编码方法在构建分层结构,为每个三维数据点选择临近参考点时需要多次遍历全部三维数据点,这种方法在编码和解码的时候都会存在较大的时间开销,尤其是当三维数据点集的数据量较大时,这种时间复杂度所带来的代价尤为明显。
并且,在编码后的码流中关于属性的头信息需要描述关于分层编码属性即lod的相关信息,具体包括在每个层进行预测时,选择临近参考点(用于计算残差的位置坐标)的点数(numberofneighborsinprediction),lod的层数(levelofdetailcount),划分lod每一层所依据的距离阈值(dist2),lod每一层量化的步长(quantizationsteps),lod每一层的死区大小(quantizationdeadzonesizes)(也即将残差量化为0的残差区间),其中,后面三个属性分别对lod每层都需要设定,每层的属性都需要写入码流头信息中。这些固定开销在当三维数据点数目不是很大的时候,在压缩后的码流的占比就会比较大,从而成为制约压缩率的瓶颈。
为此,本申请实施例提供了以下的方案,可以简化编解码方法以降低编解码的时间开销,并且可以提高压缩率。
图6是根据本申请实施例的一种对三维数据点集进行编码的方法300。该方法300可以由编码器实现。该方法300包括以下内容中的至少部分内容。
在310中,编码器对三维数据点集中的至少一个三维数据点的位置坐标进行位置坐标编码,以得到第一二进制码流。
在320中,编码器按照所述至少一个三维数据点的位置坐标编码后的位置坐标顺序,对所述至少一个三维数据点的属性进行二值化编码,以得到第二二进制码流。
在330中,编码器分别对所述第一二进制码流和所述第二二进制码流进行熵编码,具体可以为算术编码。进而,编码器可以将熵编码后的码流进行存储或者传送到解码端。
相应地,以下提出了一种对三维数据点集进行解码的方法400。该方法400可以由解码器实现。如图7所示,该方法400包括以下内容中的至少部分内容。
在410中,解码器对三维数据点集的待解码码流进行熵解码,以得到第一二进制码流和第二二进制码流。其中,该待解码码流可以由编码端传送到解码器的,或者由解码器从存储器中读取的。
在420中,解码器对所述第一二进制码流,进行位置坐标解码,以得到对三维数据点集中的至少一个三维数据点的位置坐标。
在430中,按照解码后的位置坐标,解码器对所述第二二进制码流进行二值化解码,以得到所述至少一个三维数据点的属性。
在本申请实施例中,对三维数据点集中的至少一个三维数据点的属性进行二值化编码,可以避免分层编码方式所带来的编码复杂度较高的问题,从而可以简化编码方法并降低编解码的时间开销,并且二值化编码的方法无需在码流中加入较多的编码信息,从而可以提高压缩率。
本申请实施例中的三维数据点集可以是光探测装置对待探测物体进行光探测(例如激光探测)所得到。该光探测装置诸如可以为光电雷达、或激光雷达等。本申请实施例中的编码器可以集成于光探测装置中。
应理解,图6和图7所示的编码方法可以是编码和解码过程的部分步骤,本申请实施例中的编码和解码过程还可以包括其他的步骤。
具体地,如图8至10所示,对位置坐标进行位置坐标编码之前,还可以对位置坐标进行量化。具体地,在510中,向编码器中输入三维数据点集的数据;在520中,对三维数据点集的数据中的位置坐标进行量化;在530中,对量化后的位置坐标进行位置坐标编码;在540中,按照位置坐标编码后的位置坐标的顺序,对三维数据点集的数据中的属性进行二值化编码;在550中,对位置坐标编码后得到的码流以及属性编码后得到的码流进行熵编码;在560中,输出编码后的三维数据点集的数据,例如,可以输出到存储器中进行存储,或者,可以传送到解码端。
以及,如图11所示,对位置坐标进行位置坐标解码之后,还可以对解码后的位置坐标进行逆量化。在610中,获取三维数据点集的数据的待解码码流,例如,可以从存储器中获取该码流,或者获取编码端传送的该码流;在620中,对该码流进行熵解码,可以得到位置坐标对应的码流和属性对应的码流;在630中,对位置坐标对应的码流进行位置坐标解码;在640中,对解码后的位置坐标进行逆量化;在650中,可以按照解码后的位置坐标的顺序,对属性进行二值化解码;660,根据解码后的属性以及位置坐标,得到解码后的三维数据点集的数据。
可选地,在本申请实施例中,编码器在对位置坐标进行量化之后,至少两个位置坐标量化后的位置坐标可能是相同的,而这至少两个位置坐标则对应至少两个属性值,此时,在对量化后的位置坐标进行位置坐标编码之前,可以去除重复坐标(例如,如图9所示的步骤525),也即将该至少两个位置坐标量化后的位置坐标为一个(例如,称为第一位置坐标),相应地,可以对属性的至少两个值进行合并(例如,如图9所示的步骤535)以得到一个取值,例如,可以进行加权合并。解码端在解码时针对该至少两个位置坐标,将会解码出一个位置坐标以及一个属性值。
当然,在本申请实施例中,即使至少两个位置坐标量化后的位置坐标是相同的,也可以不去除重复坐标以及不对至少两个属性值进行合并,则此时一个量化后的位置坐标对应至少两个属性值,解码端进行解码时,可以针对该量化后的位置坐标解码出至少两个属性值,从而可以得到至少两个三维数据点。
其中,由于量化后的不同位置坐标可能会对应不同数量的属性值,则可以在码流中针对各个量化后的位置坐标写入其对应的属性值的数量,则解码端可以根据码流中携带的信息,确定各个位置坐标对应的属性的数量。并且属性的码流是连续的,依次解码每个属性,按照顺序与三维数据点顺序对应上即可实现位置坐标与属性的对应。
当然,也可以只针对特殊的量化后的位置坐标(例如,对应的属性值的数量不是一个而是多个)进行标注。
可选地,在本申请实施例中,编码器是否去除重复坐标和进行属性合并可以是预设在编码器上的,例如,有些编码器预设为去除重复坐标和进行属性合并,有些编码器预设为不去除重复坐标和不进行属性合并。
或者,编码器是否去除重复坐标和进行属性合并也可以是由编码器进行选择的,其中,编码器可以根据当前的编码条件确定是否去除重复坐标和属性合并。例如,如图10所示,在520量化后,可以选择直接进行530中的位置坐标编码,以及不进行535中的属性合并,而直接进行540中的二值化编码。或者,编码器可以选择在520量化后,先进行525中的重复坐标的去除,再进行530中的位置坐标编码,以及先进行535中的属性合并,再进行540中的二值化编码。
具体地,如果当前对编码的损失希望尽量低或者对压缩率要求不高,则不进行重复坐标的去除和属性合并,否则,则进行重复坐标的去除和属性合并。
可选地,在本申请实施例中,可以按包对三维数据点进行编码,相应地,在解码端,可以按包对三维数据点进行解码。
例如,如图12所示,在获取三维数据点集的数据之后,可以在515中对三维数据点进行分包。相应地,如图13所示,在解码端,在对各个三维数据点集包中的三维数据点进行解码之后,可以对各个包进行合并,以得到重建的三维数据点集的数据。
其中,编码端在对三维数据点进行分包时,如果传送的三维数据点的数量达到预设值时,则认为得到一个三维数据点集包,并对该三维数据点集包中的三维数据点集进行编码。三维数据点集包包括的三维数据点的数量可以是基于编码端的处理能力和压缩率要求等确定的,也可以是基于其他因素确定的,本申请实施例对此不做具体限定。
因此,在本申请实施例中,按照三维数据点集包对三维数据点进行处理,可以使得每次处理的三维数据点的数量不超过一定数量,在该种情况下如果使用分层编码方案,关于分层编码属性即lod的相关信息将会占据较大的比例,则会使得压缩率较低,而如果对属性进行二值化编码,则可以避免该种情况,从而可以提高压缩率。
本申请实施例中的属性可以为具有一个分量的属性,例如,该属性可以为反射率。
由于具有一个分量的属性占用较少的信息比特,所以对该类属性采用二值化编码的方法进行编码可以在避免压缩损失的情况下,避免压缩后的码流占用太多的传送带宽或存储空间。当然,本申请实施例中的属性也可以具有多于一个的分量,本申请实施例对此不做具体限定。
在本申请实施例中,二值化编码之后得到的是二进制化码流。其中,二值化编码之前的字符串可以是二进制的,也可以是非二进制的,例如,可以是十进制或八进制的字符串。
相应地,二值化解码的对象可以是二值化码流,二值化解码得到的字符串可以是二进制字符串,也可以是非二进制字符串,例如,可以是十进制或八进制的字符串。
本申请实施例中的二值化编码的编码方式可以为定长码编码方式、截断莱斯编码方式或k阶指数哥伦布编码方式。相应地,二值化解码的解码方式可以为定长码解码方式、截断莱斯解码方式或k阶指数哥伦布解码方式。
为了更加清楚地理解本申请,以下将对上述各个二值化编码的编码方式和对应的解码方式进行描述。
定长码编码方式可以是指将三维数据点集中每个三维数据点的位置坐标对应的属性转换为二进制的数值,该数值占用的比特数量是固定的,也即转换后的数值可以称为定长码,其中,定长码的深度是固定的。在进行定长码编码时,定长码的深度可以写入到码流中,具体,可以写入到码流的头信息中。则解码端可以从该码流的头信息中获取该定长码的深度,并基于该定长码的深度,获取各个位置坐标对应的属性。
或者,定长码的深度对于编码端和解码端而言可以是已知的,例如,定长码的深度分别预设在编码端和解码端,此时,可以无需在码流中写入定长码的深度。
定长码的深度在一定程度上可以是变化的,例如,每个三维数据点集包可以对应一个定长码深度,不同的三维数据点集包对应的定长码的深度可以是不同的。在对某个三维数据点集包中的三维数据点进行的定长码编码的过程中,可以采用该三维数据点集包对应的深度的定长码进行二值化编码,并将该深度可以写入该三维数据点集包对应的码流的头信息中。则相应地,解码端对各个三维数据点集包进行解码时,可以从该三维数据点集包的头信息中获取该三维数据点集包对应的定长码的深度,并基于该定长码的深度,对该三维数据点集包的各个位置坐标对应的属性进行解码。
可选地,在本申请实施例中,定长码的深度可以是基于待编码的三维数据点集来确定的。
具体地,可以根据待编码的三维数据点集中的三维数据点的属性的最大取值和/或所述至少一个三维数据点的属性的取值分布,确定定长码的比特深度。
在一种实现方式中,编码端可以将待编码的三维数据点的属性的最大取值所占用的比特数量,确定为定长码的深度。
例如,三维数据点的属性的最大取值为20(十进制),则在将该取值生成为二进制字符串时需要占用5个比特,则定长码的深度可以为5,如果有些属性的取值小于20,则其对应的二进制字符串实际占用的比特小于5个比特,则可以在高位补0,使得占用的比特的数量达到5。
在另一种实现方式中,编码端可以根据三维数据点的属性的取值分布来确定定长码的深度。具体地,如果属性的取值大部分小于或等于某一数值,则可以将该数值对应的二进制字符串所占用的比特数量,确定为定长码的深度,对于取值大于该数值的属性可以按照该数值进行编码。
例如,存在80%的属性的取值均小于20(十进制),则在将该取值生成为二进制字符串时需要占用5个比特,则定长码的深度可以为5,如果有些属性的取值小于20,则其对应的二进制字符串实际占用的比特小于5个比特,则可以在高位补0,使得占用的比特的数量达到5,如果有些属性的取值大于20,则其对应的二进制字符串实际占用的比特数量大于5比特,则将该属性的取值修正为20,也即占用的比特数统一为5个比特。
在另一种实现方式中,编码端可以根据待编码的三维数据点的属性的最大取值以及三维数据点的属性的取值分布来确定定长码的深度。具体地,如果属性的取值大部分小于或等于某一数值,且该数值与最大值之差小于或等于一定值,则可以将该数值对应的二进制字符串所占用的比特数量,确定为定长码的深度,对于大于该数值的属性可以按照该数值进行编码。
例如,存在80%的属性的取值均小于20十进制,且20与最大值25之差小于等于10,则定长码的深度可以为5,如果有些属性的取值小于20,则其对应的二进制字符串实际占用的比特小于5个比特,则可以在高位补0,使得占用的比特的数量达到5,如果有些属性的取值大于20,则其对应的二进制字符串实际占用的比特数量大于5比特,则将该属性的取值修正为20,也即占用的比特数统一为5个比特。
可选地,在本申请实施例中,编码端也可以基于三维数据点集的数据采集设备工作时的硬件处理能力来,确定定长码的比特深度。
具体地,在三维数据点集的数据采集设备工作时,硬件处理能力可以决定定长码的深度,则编码端可以基于此来确定定长码的深度。例如,硬件处理能力决定了属性的最大取值,则硬件处理能力可以指示该最大取值对应的深度。
可选地,在本申请实施例中,定长码的深度也可以是预设在编码端的,此时,编码端可以利用预设的定长码的深度对属性进行编码,无需考虑编码的码流的特性。此时,定长码的深度也可以预设在解码端,则编码端无需在码流中写入该定长码的深度。
以上介绍了如何利用定长码编码方式进行编码,以下将介绍如何利用截断莱斯编码方式进行编码。
在截断莱斯编码方式中,存在以下参数:门限值cmax、莱斯参数r和属性值ref。截断莱斯码由前缀码p和后缀码s串联而成,前缀码p的计算方法如式1所示:
p=ref>>r式1
若p小于值(cmax>>r),则前缀码由p个1和一个0组成,长度为p 1;若p大于等于值(cmax>>r),则前缀码由(cmax>>r)个1组成,长度为(cmax>>r)。
当属性值ref小于cmax时,其后缀值s如式2所示:
s=ref-(p<<r)式2
其中,后缀码s为二元化串,长度为r。当数值ref大于等于cmax时,无后缀码。
在编码端获取截断莱斯码之后,可以将该截断莱斯码按照位置坐标编码后的顺序依次送入算术编码引擎中进行算术编码,最终得到压缩编码后的码流。解码端在获取到待解码的码流之后,可以依据门限值cmax和莱斯参数r对待解码码流进行解码。
可选地,在本申请实施例中,进行截断莱斯编码所采用的参数门限值cmax和莱斯参数r可以由编码端基于三维数据点集的数据采集设备工作时的硬件处理能力、待编码的属性的最大取值和/或属性的取值的分布区间来确定的,也可以是基于其他参数确定的。
可选地,在本申请实施例中,在对三维数据点集按照三维数据点集包的方式进行编码时,所有的三维数据点集包可以具有相同的参数门限值cmax和/或莱斯参数r,或不同的三维数据点集包可以具有不同的参数门限值cmax和/或莱斯参数r。
可选地,在本申请实施例中,可以将上述门限值cmax和莱斯参数r写入到码流中,具体可以写入到码流的头信息中,由此解码端可以基于该cmax和莱斯参数r进行解码。当然,也可以在码流中写入这两个参数中的其中一个,另一个参数可以是预设在解码端的;或者该两个参数均预设在解码端。
以上介绍了定长码编码方式和截断莱斯编码方式,以下将介绍k阶指数哥伦布编码方式。
其中,k阶指数哥伦布编码方式可以包括以下步骤。
步骤1、将数字n以二进制形式写出,去掉最低的k个比特位,之后加1。
步骤2、计算留下的比特位数,将此数减一,即是需要增加的前缀零的个数。
步骤3、将步骤一中去掉的最低k个比特位补回比特串尾部,也即得到k阶指数哥伦布码。
以下以属性为反射率,且属性值为4,k的取值为1为例说明。
步骤1、4的二进制表示为100,去掉最低1个比特位0变为10,加1后变为11。
步骤2、11的比特数为2,因此前缀中0的个数为1。
步骤3、在比特串最低比特位补上步骤一中去掉的0,最终码字为0110,也即得到1阶指数哥伦布码。
对于k阶指数哥伦布码,前缀由m个连续的0和一个1构成,后缀由m k构成,是n-2k(2m-1)的二进制表示。由此,即可实现对属性的取值的二值化,以得到二进制码流。然后,编码端可以将该二进制码流按照位置坐标编码后的顺序依次送入熵编码引擎中进行算术编码,最终得到压缩编码后的码流。
对于解码端而言,解码端可以按照位置坐标解码后的位置顺序,解码出存储属性信息的k阶哥伦布码。解析k阶指数哥伦布码时,首先从比特流的当前位置开始寻找第一个非零比特,并将找到的零比特个数记为m,第一个非零比特之后m k位二进制比特串的十进制值为value,计算出的解码值codenum如式3所示。
codenum=2m k-2k value式3
解码k阶指数哥伦布码,即可得到重建位置坐标对应的属性信息。按照这个流程即可解码出三维数据点集的数据。
可选地,在本申请实施例中,可以将k的取值写入码流,例如,可以写入码流的头信息中,则解码端可以根据码流中的该k的取值,进行解码。当然,该k的取值也可以是预设在解码端的,此时,则编码端无需在码流中写入该k。
可选地,在本申请实施例中,进行k阶指数哥伦布编码所采用的k的取值可以是编码端基于三维数据点集的数据采集设备工作时的硬件处理能力、待编码的属性的最大值和/或属性的值的分布区间来确定的,也可以是基于其他参数确定的。
可选地,在本申请实施例中,在对三维数据点集按照三维数据点集包的方式进行编码时,所有的三维数据点集包可以具有相同取值的k,或不同的三维数据点集包可以具有不同取值的k。
以上分别介绍了定长码编码方式、截断莱斯编码方式和k阶指数哥伦布编码方式,但应理解,本申请实施例中的二值化编码还可以采用其他的编码方式,本申请实施例对此不做具体限定。
以上对属性编码进行了描述,以下将对位置坐标编码进行描述。
本申请实施例中的位置坐标编码可以采用八叉树编码的方式。在八叉树编码过程中,可以初始化八叉树的最大立方块;基于所述最大立方块,递归进行八叉树划分,其中所述八叉树划分包括:利用当前层的当前块的中心点的位置坐标进行八个子块的划分,判断每个子块内是否存在三维数据点,对存在三维数据点的子块进一步进行子块的划分,直至子块的边长小于等于预设值;根据每一层的各个块中包括三维数据点的情况,生成所述第一二进制码流。可选地,所述最大立方块的边长为2的整数次幂,且是2的整数次幂中最接近并且是大于等于第一值的值,其中,所述第一值为三个最大值中的最大值,所述三个最大值分别为所述三维数据点集中所有三维数据点的位置坐标分别在三个轴上的最大值。
具体地,针对三维数据点集的位置坐标的压缩,首先对位置坐标进行量化,也即将位置坐标转换为大于等于零的整数坐标,接着可以选择是否进行去除重复坐标的操作,如果不需要去除重复坐标,则可以直接进行八叉树编码,如果需要去除重复坐标,则可以先去除重复坐标,然后八叉树编码。八叉树编码具体可以是利用八叉树划分来压缩坐标位置的方法。每层八叉树的划分可以利用当前块的中心点的坐标进行子块划分,通过中心点将当前块划分为八个小的子块,具体如图14所示。得到子块划分后,会判断每个子块内是否存在三维数据点,对存在三维数据点的子块会再进一步进行划分,直至子块划分至最小时,即子块边长为1时停止划分,八叉树递归划分的示意图可以如图15所示。
对于解码端而言,可以初始化八叉树的最大立方块;根据所述最大立方块的大小,逐字节对所述第一二进制码流进行解码,所述解码包括:根据当前字节中各个比特的取值,以及当前块的大小,确定是否对当前块进行进一步的划分,其中如果比特的取值为1,则对当前块进一步划分为子块,直到子块的边长小于等于预设值;根据边长小于或等于预设值且对应的比特取值为1的子块,确定所述三维数据点的位置坐标。
具体地,一个字节包括8个比特,该八个比特中的取值可以获知对应的子块是否被继续划分,如果比特的取值为1,则需要对对应的子块继续进行划分,直到一个子块边长为1,从而根据边长等于1且对应的比特的取值为1,确定三维数据点的位置坐标。
其中,在码流中还可以存储每个边长为1的块对应的三维数据点的数目,解码这些数目就知道一个量化后的位置坐标对应有有几个三维数据点。并且属性的码流是连续的,依次解码每个属性,按照顺序与前面的三维数据点顺序对应上即可实现位置坐标与属性的对应。
一些示例中,上文中的三维数据点可以是测距装置所获取到的点云数据中的任意一个点云点。其中,该测距装置可以是激光雷达、激光测距设备等电子设备。在一种实施方式中,测距装置用于感测外部环境信息,例如,环境目标的距离信息、方位信息、反射强度信息、速度信息等。一个点云点可以包括测距装置所测到的外部环境信息中的至少一种。一些示例中,测距装置每获取到一定数量的三维数据点时,根据该一定数量的三维数据点生成数据包。本发明中提供的三维数据点集的编/解码方法可以应用于对一个数据包内的三维数据点进行编/解码。
一种实现方式中,测距装置可以通过测量测距装置和探测物之间光传播的时间,即光飞行时间(time-of-flight,tof),来探测探测物到测距装置的距离。或者,测距装置也可以通过其他技术来探测探测物到测距装置的距离,例如基于相位移动(phaseshift)测量的测距方法,或者基于频率移动(frequencyshift)测量的测距方法,在此不做限制。
一些示例中,测距装置的扫描轨迹随着时间改变,这样,随着扫描时间的积累,测距装置在视场内扫描得到的三维数据点在视场内的分布越来越密。
为了便于理解,以下将结合图16所示的测距装置1100对产生本文中提到的三维数据点的测距装置举例描述。
如图16所示,测距装置1100可以包括发射电路1110、接收电路1120、采样电路1130和运算电路1140。
发射电路1110可以发射光脉冲序列(例如激光脉冲序列)。接收电路1120可以接收经过被探测物反射的光脉冲序列,并对该光脉冲序列进行光电转换,以得到电信号,再对电信号进行处理之后可以输出给采样电路1130。采样电路1130可以对电信号进行采样,以获取采样结果。运算电路1140可以基于采样电路1130的采样结果,以确定测距装置1100与被探测物之间的距离。
可选地,该测距装置1100还可以包括控制电路1150,该控制电路150可以实现对其他电路的控制,例如,可以控制各个电路的工作时间和/或对各个电路进行参数设置等。
应理解,虽然图16示出的测距装置中包括一个发射电路、一个接收电路、一个采样电路和一个运算电路,用于出射一路光束进行探测,但是本申请实施例并不限于此,发射电路、接收电路、采样电路、运算电路中的任一种电路的数量也可以是至少两个,用于沿相同方向或分别沿不同方向出射至少两路光束;其中,该至少两束光路可以是同时出射,也可以是分别在不同时刻出射。一个示例中,该至少两个发射电路中的发光芯片封装在同一个模块中。例如,每个发射电路包括一个激光发射芯片,该至少两个发射电路中的激光发射芯片中的die封装到一起,容置在同一个封装空间中。
一些实现方式中,除了图16所示的电路,测距装置1100还可以包括扫描模块1160,用于将发射电路出射的至少一路激光脉冲序列改变传播方向出射。
其中,可以将包括发射电路1110、接收电路1120、采样电路1130和运算电路1140的模块,或者,包括发射电路1110、接收电路1120、采样电路1130、运算电路1140和控制电路1150的模块称为测距模块,该测距模块1150可以独立于其他模块,例如,扫描模块1160。
测距装置中可以采用同轴光路,也即测距装置出射的光束和经反射回来的光束在测距装置内共用至少部分光路。例如,发射电路出射的至少一路激光脉冲序列经扫描模块改变传播方向出射后,经探测物反射回来的激光脉冲序列经过扫描模块后入射至接收电路。或者,测距装置也可以采用异轴光路,也即测距装置出射的光束和经反射回来的光束在测距装置内分别沿不同的光路传输。图17示出了本发明的测距装置采用同轴光路的一种实施例的示意图。
测距装置1200包括测距模块1201,测距模块1210包括发射器1203(可以包括上述的发射电路)、准直元件1204、探测器1205(可以包括上述的接收电路、采样电路和运算电路)和光路改变元件1206。测距模块1210用于发射光束,且接收回光,将回光转换为电信号。其中,发射器1203可以用于发射光脉冲序列。在一个实施例中,发射器1203可以发射激光脉冲序列。可选的,发射器1203发射出的激光束为波长在可见光范围之外的窄带宽光束。准直元件1204设置于发射器的出射光路上,用于准直从发射器1203发出的光束,将发射器1203发出的光束准直为平行光出射至扫描模块。准直元件还用于会聚经探测物反射的回光的至少一部分。该准直元件204可以是准直透镜或者是其他能够准直光束的元件。
在图17所示实施例中,通过光路改变元件1206来将测距装置内的发射光路和接收光路在准直元件1204之前合并,使得发射光路和接收光路可以共用同一个准直元件,使得光路更加紧凑。在其他的一些实现方式中,也可以是发射器1203和探测器1205分别使用各自的准直元件,将光路改变元件1206设置在准直元件之后的光路上。
在图17所示实施例中,由于发射器1203出射的光束的光束孔径较小,测距装置所接收到的回光的光束孔径较大,所以光路改变元件可以采用小面积的反射镜来将发射光路和接收光路合并。在其他的一些实现方式中,光路改变元件也可以采用带通孔的反射镜,其中该通孔用于透射发射器1203的出射光,反射镜用于将回光反射至探测器1205。这样可以减小采用小反射镜的情况中小反射镜的支架会对回光的遮挡。
在图17所示实施例中,光路改变元件偏离了准直元件1204的光轴。在其他的一些实现方式中,光路改变元件也可以位于准直元件204的光轴上。
测距装置200还包括扫描模块1202。扫描模块1202放置于测距模块1201的出射光路上,扫描模块1202用于改变经准直元件1204出射的准直光束1219的传输方向并投射至外界环境,并将回光投射至准直元件1204。回光经准直元件1204汇聚到探测器1205上。
在一个实施例中,扫描模块1202可以包括至少一个光学元件,用于改变光束的传播路径,其中,该光学元件可以通过对光束进行反射、折射、衍射等等方式来改变光束传播路径。例如,扫描模块202包括透镜、反射镜、棱镜、振镜、光栅、液晶、光学相控阵(opticalphasedarray)或上述光学元件的任意组合。一个示例中,至少部分光学元件是运动的,例如通过驱动模块来驱动该至少部分光学元件进行运动,该运动的光学元件可以在不同时刻将光束反射、折射或衍射至不同的方向。在一些实施例中,扫描模块1202的多个光学元件可以绕共同的轴1209旋转或振动,每个旋转或振动的光学元件用于不断改变入射光束的传播方向。在一个实施例中,扫描模块1202的多个光学元件可以以不同的转速旋转,或以不同的速度振动。在另一个实施例中,扫描模块1202的至少部分光学元件可以以基本相同的转速旋转。在一些实施例中,扫描模块的多个光学元件也可以是绕不同的轴旋转。在一些实施例中,扫描模块的多个光学元件也可以是以相同的方向旋转,或以不同的方向旋转;或者沿相同的方向振动,或者沿不同的方向振动,在此不作限制。
在一个实施例中,扫描模块1202包括第一光学元件1214和与第一光学元件1214连接的驱动器1216,驱动器1216用于驱动第一光学元件1214绕转动轴1209转动,使第一光学元件1214改变准直光束1219的方向。第一光学元件1214将准直光束1219投射至不同的方向。在一个实施例中,准直光束1219经第一光学元件改变后的方向与转动轴109的夹角随着第一光学元件1214的转动而变化。在一个实施例中,第一光学元件1214包括相对的非平行的一对表面,准直光束1219穿过该对表面。在一个实施例中,第一光学元件1214包括厚度沿至少一个径向变化的棱镜。在一个实施例中,第一光学元件1214包括楔角棱镜,对准直光束1219进行折射。
在一个实施例中,扫描模块1202还包括第二光学元件1215,第二光学元件1215绕转动轴1209转动,第二光学元件1215的转动速度与第一光学元件1214的转动速度不同。第二光学元件1215用于改变第一光学元件1214投射的光束的方向。在一个实施例中,第二光学元件1215与另一驱动器1217连接,驱动器1217驱动第二光学元件1215转动。第一光学元件1214和第二光学元件1215可以由相同或不同的驱动器驱动,使第一光学元件1214和第二光学元件1215的转速和/或转向不同,从而将准直光束1219投射至外界空间不同的方向,可以扫描较大的空间范围。在一个实施例中,控制器1218控制驱动器1216和1217,分别驱动第一光学元件1214和第二光学元件1215。第一光学元件1214和第二光学元件1215的转速可以根据实际应用中预期扫描的区域和样式确定。驱动器1216和1217可以包括电机或其他驱动器。
在一个实施例中,第二光学元件1215包括相对的非平行的一对表面,光束穿过该对表面。在一个实施例中,第二光学元件1215包括厚度沿至少一个径向变化的棱镜。在一个实施例中,第二光学元件1215包括楔角棱镜。
一个实施例中,扫描模块1202还包括第三光学元件(图未示)和用于驱动第三光学元件运动的驱动器。可选地,该第三光学元件包括相对的非平行的一对表面,光束穿过该对表面。在一个实施例中,第三光学元件包括厚度沿至少一个径向变化的棱镜。在一个实施例中,第三光学元件包括楔角棱镜。第一、第二和第三光学元件中的至少两个光学元件以不同的转速和/或转向转动。
扫描模块1202中的各光学元件旋转可以将光投射至不同的方向,例如方向1211和1213,如此对测距装置1200周围的空间进行扫描。如图18所示,图18为测距装置1200的一种扫描图案的示意图。可以理解的是,扫描模块内的光学元件的速度变化时,扫描图案也会随之变化。
当扫描模块1202投射出的光1211打到探测物1201时,一部分光被探测物1201沿与投射的光1211相反的方向反射至测距装置1200。探测物1201反射的回光1212经过扫描模块1202后入射至准直元件1204。
探测器1205与发射器1203放置于准直元件1204的同一侧,探测器1205用于将穿过准直元件1204的至少部分回光转换为电信号。
一个实施例中,各光学元件上镀有增透膜。可选的,增透膜的厚度与发射器1203发射出的光束的波长相等或接近,能够增加透射光束的强度。
一个实施例中,测距装置中位于光束传播路径上的一个元件表面上镀有滤光层,或者在光束传播路径上设置有滤光器,用于至少透射发射器所出射的光束所在波段,反射其他波段,以减少环境光给接收器带来的噪音。
在一些实施例中,发射器1203可以包括激光二极管,通过激光二极管发射纳秒级别的激光脉冲。进一步地,可以确定激光脉冲接收时间,例如,通过探测电信号脉冲的上升沿时间和/或下降沿时间确定激光脉冲接收时间。如此,测距装置1200可以利用脉冲接收时间信息和脉冲发出时间信息计算tof,从而确定探测物1201到测距装置1200的距离。
测距装置1200探测到的距离和方位可以用于遥感、避障、测绘、建模、导航等。在一种实施方式中,本发明实施方式的测距装置可应用于移动平台,测距装置可安装在移动平台的平台本体。具有测距装置的移动平台可对外部环境进行测量,例如,测量移动平台与障碍物的距离用于避障等用途,和对外部环境进行二维或三维的测绘。在某些实施方式中,移动平台包括无人飞行器、汽车、遥控车、机器人、相机中的至少一种。当测距装置应用于无人飞行器时,平台本体为无人飞行器的机身。当测距装置应用于汽车时,平台本体为汽车的车身。该汽车可以是自动驾驶汽车或者半自动驾驶汽车,在此不做限制。当测距装置应用于遥控车时,平台本体为遥控车的车身。当测距装置应用于机器人时,平台本体为机器人。当测距装置应用于相机时,平台本体为相机本身。
以上介绍了本申请实施例中的对三维数据点集进行编码和解码的方法,以下将介绍对三维数据点集进行编码和解码的设备。
图19是根据本申请实施例的对三维数据点集进行编码的设备700的示意性框图。该设备700包括:
位置坐标编码单元710,用于对三维数据点集中的至少一个三维数据点的位置坐标进行位置坐标编码,以得到第一二进制码流;
二值化编码单元720,用于按照所述至少一个三维数据点的位置坐标编码后的位置坐标顺序,对所述至少一个三维数据点的属性进行二值化编码,以得到第二二进制码流;
熵编码单元730,用于分别对所述第一二进制码流和所述第二二进制码流进行熵编码。
可选地,在本申请实施例中,如图19所示,该设备700还包括获取单元740,用于在所述位置坐标编码单元进行所述位置坐标编码之前,获取目标三维数据点集包,所述三维数据点集包含在所述目标三维数据点集包中。
可选地,在本申请实施例中,所述获取单元740进一步用于:
在从传送入的原始三维数据点集数据流获取到的三维数据点的数量达到预设值时,将获取到的三维数据点组成的包确定为所述目标三维数据点集包。
可选地,在本申请实施例中,所述属性具有一个分量。
可选地,在本申请实施例中,所述属性用于表征所述三维数据点集中对应的位置坐标处的反射率。
可选地,在本申请实施例中,所述二值化编码单元720进一步用于:
利用定长码编码方式、截断莱斯编码方式、或k阶指数哥伦布编码方式,对所述至少一个三维数据点的属性进行二值化编码。
可选地,在本申请实施例中,所述二值化编码单元720进一步用于:
根据所述至少一个三维数据点的属性的最大取值和/或所述至少一个三维数据点的属性的取值分布,确定定长码的比特深度;
按照所述定长码的比特深度,将所述至少一个三维数据点的属性进行二值化编码。
可选地,在本申请实施例中,所述二值化编码单元720进一步用于:
确定三维数据点集数据采集设备工作时的硬件处理能力指示的定长码的比特深度;
按照所述定长码的比特深度,将所述至少一个三维数据点的属性进行二值化编码。
可选地,在本申请实施例中,所述二值化编码单元720进一步用于:
在利用定长码编码方式对所述至少一个三维数据点的属性进行二值化编码的情况下,将所述定长码的比特深度写入码流中;或者,
在利用截断莱斯编码方式对所述至少一个三维数据点的属性进行二值化编码的情况下,将截断莱斯的门限值和/或用于移位的莱斯参数写入码流中;或者,
在利用k阶指数哥伦布编码方式对所述至少一个三维数据点的属性进行二值化编码的情况下,将k的取值写入码流中。
可选地,在本申请实施例中,所述位置坐标编码单元710进一步用于:
对所述至少一个三维数据点的位置坐标进行八叉树编码。
可选地,在本申请实施例中,所述位置坐标编码单元710进一步用于:
初始化八叉树的最大立方块;
基于所述最大立方块,递归进行八叉树划分,其中所述八叉树划分包括:利用当前层的当前块的中心点的位置坐标进行八个子块的划分,判断每个子块内是否存在三维数据点,对存在三维数据点的子块进一步进行子块的划分,直至子块的边长小于等于预设值;
根据每一层的各个块中包括三维数据点的情况,生成所述第一二进制码流。
可选地,在本申请实施例中,所述最大立方块的边长为2的整数次幂,且是2的整数次幂中最接近且大于等于第一值的值,其中,所述第一值为三个最大值中的最大值,所述三个最大值分别为所述三维数据点集中所有三维数据点的位置坐标分别在三个轴上的最大值。
可选地,在本申请实施例中,如图19所示,该设备700还包括量化单元750,用于:
对所述至少一个三维数据点的位置坐标进行量化。
可选地,在本申请实施例中,如图19所示,该设备700还包括去除单元760,用于:
对量化后的位置坐标去除重复位置坐标。
可选地,在本申请实施例中,所述去除单元760进一步用于:
在根据编码条件确定需要去除重复位置坐标时,对量化后的位置坐标去除重复位置坐标。
可选地,在本申请实施例中,如图19所示,该设备700还包括合并单元770,用于:
如果在对所述至少一个三维数据点的位置坐标进行量化和去除重复位置坐标之后,其中的第一位置坐标对应至少两个属性,则将所述至少两个属性进行合并。
可选地,在本申请实施例中,所述位置坐标编码单元进一步710用于:
如果在对所述至少一个三维数据点的位置坐标进行量化后未去除重复坐标的情况下,在码流中写入各个位置坐标对应的属性的数量。
应理解,该设备700可以用于实现上述方法中由编码端实现的相应操作,为了简洁,在此不再赘述。
图20是根据本申请实施例的对三维数据点集进行解码的设备800。该设备800包括:
熵解码单元810,用于对三维数据点集的待解码码流进行熵解码,以得到第一二进制码流和第二二进制码流;
位置坐标解码单元820,用于对所述第一二进制码流,进行位置坐标解码,以得到对三维数据点集中的至少一个三维数据点的位置坐标;
二值化解码单元830,用于按照所述至少一个三维数据点的解码后的位置坐标顺序,对所述第二二进制码流进行二值化解码,以得到所述至少一个三维数据点的属性。
可选地,在本申请实施例中,如图20所示,该设备800还包括获取单元840,用于:
基于所述至少一个三维数据点的位置坐标和所述至少一个三维数据点的属性,获取目标三维数据点集包,所述三维数据点集包含在所述目标三维数据点集包中。
可选地,在本申请实施例中,如图20所示,该设备800还包括合并单元850,用于:
对获取的多个所述目标三维数据点集包进行合并,以得到重建的三维数据点集数据。
可选地,在本申请实施例中,所述属性具有一个分量。
可选地,在本申请实施例中,所述属性用于表征所述三维数据点集中对应的位置坐标处的反射率。
可选地,在本申请实施例中,所述二值化解码单元830进一步用于:
利用定长码解码方式、截断莱斯解码方式、或k阶指数哥伦布解码方式,对所述第二二进制码流进行二值化解码。
可选地,在本申请实施例中,所述二值化解码单元830进一步用于:
确定三维数据点集数据采集设备工作时的硬件处理能力指示的定长码的比特深度;
按照所述定长码的比特深度,对所述第二二进制码流进行二值化解码。
可选地,在本申请实施例中,所述二值化解码单元830进一步用于:
在利用定长码解码方式对所述第二二进制码流进行二值化解码的情况下,从所述待解码码流中获取所述定长码的比特深度;或者,
在利用截断莱斯解码方式对所述第二二进制码流进行二值化解码的情况下,从所述待解码码流中获取截断莱斯的门限值和/或用于移位的莱斯参数;或者,
在利用k阶指数哥伦布解码方式对对所述第二二进制码流进行二值化解码的情况下,从所述待解码码流中获取k的取值。
可选地,在本申请实施例中,所述位置坐标解码单元820进一步用于:
对所述第一二进制码流,进行八叉树解码。
可选地,在本申请实施例中,所述位置坐标解码单元820进一步用于:
初始化八叉树的最大立方块;
根据所述最大立方块的大小,逐字节对所述第一二进制码流进行解码,所述解码包括:根据当前字节中各个比特的取值,以及当前块的大小,确定是否对当前块进行进一步的划分,其中如果比特的取值为1,则对当前块进一步划分为子块,直到子块的边长小于等于预设值;根据边长小于或等于预设值且对应的比特取值为1的子块,确定所述三维数据点的位置坐标。
可选地,在本申请实施例中,所述二值化解码单元830进一步用于:
从码流中获取单个位置坐标对应的所述属性的数量;
按照所述数量,对所述单个位置坐标对应的属性进行二值化解码。
可选地,在本申请实施例中,如图20所示,该设备800还包括逆量化单元860,用于:
对解码后的位置坐标进行逆量化。
应理解,该设备800可以用于实现上述方法中由解码端实现的相应操作,为了简洁,在此不再赘述。
图21示出了本申请实施例的计算机系统900的示意性框图。
如图21所示,该计算机系统900可以包括处理器910,进一步地可以包括存储器920。
应理解,该计算机系统900还可以包括其他计算机系统中通常所包括的部件,例如,输入输出设备、通信接口等,本申请实施例对此并不限定。
存储器920用于存储计算机可执行指令。
存储器920可以是各种种类的存储器,例如可以包括高速随机存取存储器(randomaccessmemory,ram),还可以包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器,本申请实施例对此并不限定。
处理器910用于访问该存储器920,并执行该计算机可执行指令,以进行上述本申请实施例的对三维数据点集进行编码或解码的方法中的操作。
处理器910可以包括微处理器,现场可编程门阵列(field-programmablegatearray,fpga),中央处理器(centralprocessingunit,cpu),图形处理器(graphicsprocessingunit,gpu)等,本申请实施例对此并不限定。
本申请实施例的对三维数据点集进行编码或解码的设备和计算机系统可对应于本申请实施例的对三维数据点集进行编码或解码的方法的执行主体,并且用于对三维数据点集进行编码或解码的设备和计算机系统中的各个模块的上述和其它操作和/或功能分别为了实现前述各个方法的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种电子设备,该电子设备可以包括上述本申请各种实施例的对三维数据点集进行编码或解码的设备或者计算机系统。
本申请实施例还提供了一种计算机存储介质,该计算机存储介质中存储有程序代码,该程序代码可以用于指示执行上述本申请实施例的对三维数据点集进行编码或解码的方法。
应理解,在本申请实施例中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本申请实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
1.一种对三维数据点集进行编码的方法,其特征在于,包括:
对三维数据点集中的至少一个三维数据点的位置坐标进行位置坐标编码,以得到第一二进制码流;
按照所述至少一个三维数据点的位置坐标编码后的位置坐标顺序,对所述至少一个三维数据点的属性进行二值化编码,以得到第二二进制码流;
分别对所述第一二进制码流和所述第二二进制码流进行熵编码。
2.根据权利要求1所述的方法,其特征在于,在所述对三维数据点集中的至少一个三维数据点的位置坐标进行位置坐标编码之前,所述方法还包括:
获取目标三维数据点集包,所述三维数据点集包含在所述目标三维数据点集包中。
3.根据权利要求2所述的方法,其特征在于,所述获取目标三维数据点集包,包括:
在从传送入的原始三维数据点集数据流获取到的三维数据点的数量达到预设值时,将获取到的三维数据点组成的包确定为所述目标三维数据点集包。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述属性具有一个分量。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述属性用于表征所述三维数据点集中对应的位置坐标处的反射率。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述对所述至少一个三维数据点的属性进行二值化编码,包括:
利用定长码编码方式、截断莱斯编码方式、或k阶指数哥伦布编码方式,对所述至少一个三维数据点的属性进行二值化编码。
7.根据权利要求6所述的方法,其特征在于,利用定长码编码方式,对所述至少一个三维数据点的属性进行二值化编码,包括:
根据所述至少一个三维数据点的属性的最大取值和/或所述至少一个三维数据点的属性的取值分布,确定定长码的比特深度;
按照所述定长码的比特深度,将所述至少一个三维数据点的属性进行二值化编码。
8.根据权利要求6所述的方法,其特征在于,利用定长码编码方式,对所述至少一个三维数据点的属性进行二值化编码,包括:
确定三维数据点集数据采集设备工作时的硬件处理能力指示的定长码的比特深度;
按照所述定长码的比特深度,将所述至少一个三维数据点的属性进行二值化编码。
9.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在利用定长码编码方式对所述至少一个三维数据点的属性进行二值化编码的情况下,将所述定长码的比特深度写入码流中;或者,
在利用截断莱斯编码方式对所述至少一个三维数据点的属性进行二值化编码的情况下,将截断莱斯的门限值和/或用于移位的莱斯参数写入码流中;或者,
在利用k阶指数哥伦布编码方式对所述至少一个三维数据点的属性进行二值化编码的情况下,将k的取值写入码流中。
10.根据权利要求1至9中任一项所述的方法,其特征在于,所述对三维数据点集中的至少一个三维数据点的位置坐标进行位置坐标编码,包括:
对所述至少一个三维数据点的位置坐标进行八叉树编码。
11.根据权利要求10所述的方法,其特征在于,所述对所述至少一个三维数据点的位置坐标进行八叉树编码,包括:
初始化八叉树的最大立方块;
基于所述最大立方块,递归进行八叉树划分,其中所述八叉树划分包括:利用当前层的当前块的中心点的位置坐标进行八个子块的划分,判断每个子块内是否存在三维数据点,对存在三维数据点的子块进一步进行子块的划分,直至子块的边长小于等于预设值;
根据每一层的各个块中包括三维数据点的情况,生成所述第一二进制码流。
12.根据权利要求11所述的方法,其特征在于,所述最大立方块的边长为2的整数次幂,且是2的整数次幂中最接近且大于等于第一值的值,其中,所述第一值为三个最大值中的最大值,所述三个最大值分别为所述三维数据点集中所有三维数据点的位置坐标分别在三个轴上的最大值。
13.根据权利要求1至12中任一项所述的方法,其特征在于,在所述对三维数据点集中的至少一个三维数据点的位置坐标进行位置坐标编码之前,所述方法还包括:
对所述至少一个三维数据点的位置坐标进行量化。
14.根据权利要求13所述的方法,其特征在于,所述方法还包括:
对量化后的位置坐标去除重复位置坐标。
15.根据权利要求14所述的方法,其特征在于,所述对量化后的位置坐标去除重复位置坐标,包括:
在根据编码条件确定需要去除重复位置坐标时,对量化后的位置坐标去除重复位置坐标。
16.根据权利要求1至15中任一项所述的方法,其特征在于,在所述对所述至少一个三维数据点的属性进行二值化编码之前,所述方法还包括:
如果在对所述至少一个三维数据点的位置坐标进行量化和去除重复位置坐标之后,其中的第一位置坐标对应至少两个属性,则将所述至少两个属性进行合并。
17.根据权利要求1至15中任一项所述的方法,其特征在于,所述方法还包括:
如果在对所述至少一个三维数据点的位置坐标进行量化后未去除重复坐标的情况下,在码流中写入各个位置坐标对应的属性的数量。
18.一种对三维数据点集进行解码的方法,其特征在于,包括:
对三维数据点集的待解码码流进行熵解码,以得到第一二进制码流和第二二进制码流;
对所述第一二进制码流,进行位置坐标解码,以得到对三维数据点集中的至少一个三维数据点的位置坐标;
按照所述至少一个三维数据点的解码后的位置坐标顺序,对所述第二二进制码流进行二值化解码,以得到所述至少一个三维数据点的属性。
19.根据权利要求18所述的方法,其特征在于,所述方法还包括:
基于所述至少一个三维数据点的位置坐标和所述至少一个三维数据点的属性,获取目标三维数据点集包,所述三维数据点集包含在所述目标三维数据点集包中。
20.根据权利要求19所述的方法,其特征在于,所述方法包括:
对获取的多个所述目标三维数据点集包进行合并,以得到重建的三维数据点集数据。
21.根据权利要求18至20中任一项所述的方法,其特征在于,所述属性具有一个分量。
22.根据权利要求18至21中任一项所述的方法,其特征在于,所述属性用于表征所述三维数据点集中对应的位置坐标处的反射率。
23.根据权利要求18至22中任一项所述的方法,其特征在于,所述对所述第二二进制码流进行二值化解码,包括:
利用定长码解码方式、截断莱斯解码方式、或k阶指数哥伦布解码方式,对所述第二二进制码流进行二值化解码。
24.根据权利要求23所述的方法,其特征在于,利用定长码解码方式,对所述第二二进制码流进行二值化解码,包括:
确定三维数据点集数据采集设备工作时的硬件处理能力指示的定长码的比特深度;
按照所述定长码的比特深度,对所述第二二进制码流进行二值化解码。
25.根据权利要求23所述的方法,其特征在于,所述方法还包括:
在利用定长码解码方式对所述第二二进制码流进行二值化解码的情况下,从所述待解码码流中获取所述定长码的比特深度;或者,
在利用截断莱斯解码方式对所述第二二进制码流进行二值化解码的情况下,从所述待解码码流中获取截断莱斯的门限值和/或用于移位的莱斯参数;或者,
在利用k阶指数哥伦布解码方式对对所述第二二进制码流进行二值化解码的情况下,从所述待解码码流中获取k的取值。
26.根据权利要求18至25中任一项所述的方法,其特征在于,所述对所述第一二进制码流,进行位置坐标解码,包括:
对所述第一二进制码流,进行八叉树解码。
27.根据权利要求26所述的方法,其特征在于,所述进行八叉树解码,包括:
初始化八叉树的最大立方块;
根据所述最大立方块的大小,逐字节对所述第一二进制码流进行解码,所述解码包括:根据当前字节中各个比特的取值,以及当前块的大小,确定是否对当前块进行进一步的划分,其中如果比特的取值为1,则对当前块进一步划分为子块,直到子块的边长小于等于预设值;根据边长小于或等于预设值且对应的比特取值为1的子块,确定所述三维数据点的位置坐标。
28.根据权利要求18至27中任一项所述的方法,其特征在于,所述对所述第二二进制码流进行二值化解码,包括:
从码流中获取单个位置坐标对应的所述属性的数量;
按照所述数量,对所述单个位置坐标对应的属性进行二值化解码。
29.根据权利要求18至28中任一项所述的方法,其特征在于,在所述对所述第一二进制码流,进行位置坐标解码之后,所述方法还包括:
对解码后的位置坐标进行逆量化。
30.一种对三维数据点集进行编码的设备,其特征在于,包括:
位置坐标编码单元,用于对三维数据点集中的至少一个三维数据点的位置坐标进行位置坐标编码,以得到第一二进制码流;
二值化编码单元,用于按照所述至少一个三维数据点的位置坐标编码后的位置坐标顺序,对所述至少一个三维数据点的属性进行二值化编码,以得到第二二进制码流;
熵编码单元,用于分别对所述第一二进制码流和所述第二二进制码流进行熵编码。
31.根据权利要求30所述的设备,其特征在于,还包括:
获取单元,用于在所述位置坐标编码单元进行所述位置坐标编码之前,获取目标三维数据点集包,所述三维数据点集包含在所述目标三维数据点集包中。
32.根据权利要求31所述的设备,其特征在于,所述获取单元进一步用于:
在从传送入的原始三维数据点集数据流获取到的三维数据点的数量达到预设值时,将获取到的三维数据点组成的包确定为所述目标三维数据点集包。
33.根据权利要求30至32中任一项所述的设备,其特征在于,所述属性具有一个分量。
34.根据权利要求30至33中任一项所述的设备,其特征在于,所述属性用于表征所述三维数据点集中对应的位置坐标处的反射率。
35.根据权利要求30至34中任一项所述的设备,其特征在于,所述二值化编码单元进一步用于:
利用定长码编码方式、截断莱斯编码方式、或k阶指数哥伦布编码方式,对所述至少一个三维数据点的属性进行二值化编码。
36.根据权利要求35所述的设备,其特征在于,所述二值化编码单元进一步用于:
根据所述至少一个三维数据点的属性的最大取值和/或所述至少一个三维数据点的属性的取值分布,确定定长码的比特深度;
按照所述定长码的比特深度,将所述至少一个三维数据点的属性进行二值化编码。
37.根据权利要求35所述的设备,其特征在于,所述二值化编码单元进一步用于:
确定三维数据点集数据采集设备工作时的硬件处理能力指示的定长码的比特深度;
按照所述定长码的比特深度,将所述至少一个三维数据点集的属性进行二值化编码。
38.根据权利要求35所述的设备,其特征在于,所述二值化编码单元进一步用于:
在利用定长码编码方式对所述至少一个三维数据点的属性进行二值化编码的情况下,将所述定长码的比特深度写入码流中;或者,
在利用截断莱斯编码方式对所述至少一个三维数据点的属性进行二值化编码的情况下,将截断莱斯的门限值和/或用于移位的莱斯参数写入码流中;或者,
在利用k阶指数哥伦布编码方式对所述至少一个三维数据点的属性进行二值化编码的情况下,将k的取值写入码流中。
39.根据权利要求30至38中任一项所述的设备,其特征在于,所述位置坐标编码单元进一步用于:
对所述至少一个三维数据点的位置坐标进行八叉树编码。
40.根据权利要求39所述的设备,其特征在于,所述位置坐标编码单元进一步用于:
初始化八叉树的最大立方块;
基于所述最大立方块,递归进行八叉树划分,其中所述八叉树划分包括:利用当前层的当前块的中心点的位置坐标进行八个子块的划分,判断每个子块内是否存在三维数据点,对存在三维数据点的子块进一步进行子块的划分,直至子块的边长小于等于预设值;
根据每一层的各个块中包括三维数据点的情况,生成所述第一二进制码流。
41.根据权利要求40所述的设备,其特征在于,所述最大立方块的边长为2的整数次幂,且是2的整数次幂中最接近且大于等于第一值的值,其中,所述第一值为三个最大值中的最大值,所述三个最大值分别为所述三维数据点集中所有三维数据点的位置坐标分别在三个轴上的最大值。
42.根据权利要求30至41中任一项所述的设备,其特征在于,还包括量化单元,用于:
对所述至少一个三维数据点的位置坐标进行量化。
43.根据权利要求42所述的设备,其特征在于,还包括去除单元,用于:
对量化后的位置坐标去除重复位置坐标。
44.根据权利要求43所述的设备,其特征在于,所述去除单元进一步用于:
在根据编码条件确定需要去除重复位置坐标时,对量化后的位置坐标去除重复位置坐标。
45.根据权利要求30至44中任一项所述的设备,其特征在于,还包括合并单元,用于:
如果在对所述至少一个三维数据点的位置坐标进行量化和去除重复位置坐标之后,其中的第一位置坐标对应至少两个属性,则将所述至少两个属性进行合并。
46.根据权利要求30至44中任一项所述的设备,其特征在于,所述位置坐标编码单元进一步用于:
如果在对所述至少一个三维数据点的位置坐标进行量化后未去除重复坐标的情况下,在码流中写入各个位置坐标对应的属性的数量。
47.一种对三维数据点集进行解码的设备,其特征在于,包括:
熵解码单元,用于对三维数据点集的待解码码流进行熵解码,以得到第一二进制码流和第二二进制码流;
位置坐标解码单元,用于对所述第一二进制码流,进行位置坐标解码,以得到对三维数据点集中的至少一个三维数据点的位置坐标;
二值化解码单元,用于按照所述至少一个三维数据点的解码后的位置坐标顺序,对所述第二二进制码流进行二值化解码,以得到所述至少一个三维数据点的属性。
48.根据权利要求47所述的设备,其特征在于,还包括获取单元,用于:
基于所述至少一个三维数据点的位置坐标和所述至少一个三维数据点的属性,获取目标三维数据点集包,所述三维数据点集包含在所述目标三维数据点集包中。
49.根据权利要求48所述的设备,其特征在于,还包括合并单元,用于:
对获取的多个所述目标三维数据点集包进行合并,以得到重建的三维数据点集数据。
50.根据权利要求47至49中任一项所述的设备,其特征在于,所述属性具有一个分量。
51.根据权利要求47至50中任一项所述的设备,其特征在于,所述属性用于表征所述三维数据点集中对应的位置坐标处的反射率。
52.根据权利要求47至51中任一项所述的设备,其特征在于,所述二值化解码单元进一步用于:
利用定长码解码方式、截断莱斯解码方式、或k阶指数哥伦布解码方式,对所述第二二进制码流进行二值化解码。
53.根据权利要求52所述的设备,其特征在于,所述二值化解码单元进一步用于:
确定三维数据点集数据采集设备工作时的硬件处理能力指示的定长码的比特深度;
按照所述定长码的比特深度,对所述第二二进制码流进行二值化解码。
54.根据权利要求52所述的设备,其特征在于,所述二值化解码单元进一步用于:
在利用定长码解码方式对所述第二二进制码流进行二值化解码的情况下,从所述待解码码流中获取所述定长码的比特深度;或者,
在利用截断莱斯解码方式对所述第二二进制码流进行二值化解码的情况下,从所述待解码码流中获取截断莱斯的门限值和/或用于移位的莱斯参数;或者,
在利用k阶指数哥伦布解码方式对对所述第二二进制码流进行二值化解码的情况下,从所述待解码码流中获取k的取值。
55.根据权利要求47至54中任一项所述的设备,其特征在于,所述位置坐标解码单元进一步用于:
对所述第一二进制码流,进行八叉树解码。
56.根据权利要求55所述的设备,其特征在于,所述位置坐标解码单元进一步用于:
初始化八叉树的最大立方块;
根据所述最大立方块的大小,逐字节对所述第一二进制码流进行解码,所述解码包括:根据当前字节中各个比特的取值,以及当前块的大小,确定是否对当前块进行进一步的划分,其中如果比特的取值为1,则对当前块进一步划分为子块,直到子块的边长小于等于预设值;根据边长小于或等于预设值且对应的比特取值为1的子块,确定所述三维数据点的位置坐标。
57.根据权利要求47至56中任一项所述的设备,其特征在于,所述二值化解码单元进一步用于:
从码流中获取单个位置坐标对应的所述属性的数量;
按照所述数量,对所述单个位置坐标对应的属性进行二值化解码。
58.根据权利要求47至57中任一项所述的设备,其特征在于,还包括逆量化单元,用于:
对解码后的位置坐标进行逆量化。
59.一种对三维数据点集进行编码的设备,其特征在于,包括处理器,所述处理器用于处理根据权利要求1至17中任一项所述的方法。
60.一种对三维数据点集进行解码的设备,其特征在于,包括处理器,所述处理器用于处理根据权利要求18至29中任一项所述的方法。
61.一种计算机可读存储介质,其特征在于,用于存储代码,所述代码用于使得处理器执行根据权利要求1至29中任一项所述的方法。
技术总结