变换方法、逆变换方法、编码器、解码器及存储介质与流程

文档序号:29703291发布日期:2022-04-16 15:04阅读:330来源:国知局
变换方法、逆变换方法、编码器、解码器及存储介质与流程
变换方法、逆变换方法、编码器、解码器及存储介质
1.本技术是申请日为2019年06月30日,申请号为2019800967754,发明名称为“变换方法、逆变换方法、编码器、解码器及存储介质”的申请的分案申请。
技术领域
2.本技术实施例涉及视频编解码的技术领域,尤其涉及一种变换方法、逆变换方法、编码器、解码器及存储介质。


背景技术:

3.在基于几何的点云压缩(g-pcc,geometry-based point cloud compression)编码器框架中,点云的几何信息和每个点云所对应的属性信息是分开进行编码的。几何编码完成后,对几何信息进行重建,而属性信息的编码将依赖于重建的几何信息。
4.目前,属性信息编码主要针对颜色信息的编码。首先,将颜色信息从rgb颜色空间转换到yuv颜色空间。然后,利用重建的几何信息对点云重新着色,使得未编码的属性信息与重建的几何信息对应起来。在颜色信息编码中,主要有两种变换方法,一是依赖于细节层次(lod,level of detail,)划分的基于距离的提升变换,另一是直接进行的区域自适应分层变换(raht,region adaptive hierarchal transform),这两种方法都会将颜色信息从空间域转换到频域,通过变换得到高频系数和低频系数,最后对系数进行量化并编码,生成二进制码流。其中,raht变换是在对点云数据进行八叉树划分得到的层级结构基础上进行的,从八叉树的最底层开始一直变换到最高层,循环遍历每一层中的每一个节点。每一个节点的raht变换均按照变换顺序,在三维坐标的x、y和z方向依次进行。
5.然而,由于不同点云具有不同的空间分布,因此,在进行raht变换时,沿用固定的变换顺序所得到的变换系数仍存在较大信息冗余,导致编码效率较差。


技术实现要素:

6.本技术实施例提供了一种变换方法、逆变换方法、编码器、解码器及存储介质,能够减少变换得到的变换系数的冗余度,提高编码效率。
7.本技术实施例的技术方案可以如下实现:
8.第一方面,本技术实施例提供了一种变换方法,应用于编码器,包括:
9.确定待编码点云中的待编码点的法向量;
10.基于所述待编码点的法向量,统计法向量各个坐标分量的总和大小;
11.基于所述法向量各个坐标分量的总和大小,确定变换顺序。
12.第二方面,本技术实施例还提供了一种变换方法,应用于编码器,包括:
13.确定待编码点云中的待编码点在三维空间构成的三个坐标面上的三个二维投影面;
14.基于所述三个二维投影面,统计每个坐标面的投影面积;
15.基于所述投影面积,确定变换顺序。
16.第三方面,本技术实施例还提供了一种逆变换方法,包括:
17.从属性比特流中,解析出变换顺序;
18.在解码时,基于所述变换顺序,进行区域自适应分层变换raht逆变换。
19.第四方面,本技术实施例提供了一种编码器,包括:
20.确定部分,被配置为确定待编码点云中的待编码点的法向量;
21.获取部分,被配置为基于所述待编码点的法向量,统计法向量各个坐标分量的总和大小;
22.所述确定部分,还被配置基于所述法向量各个坐标分量的总和大小,确定变换顺序。
23.第五方面,本技术实施例还提供了一种编码器,包括:
24.确定部分,被配置为确定待编码点云中的待编码点在三维空间构成的三个坐标面上的三个二维投影面;
25.获取部分,被配置为基于所述三个二维投影面,统计每个坐标面的投影面积;
26.所述确定部分,还被配置为基于所述投影面积,确定变换顺序。
27.第六方面,本技术实施例提供了一种解码器,包括:
28.解析部分,被配置为从属性比特流中,解析出变换顺序;
29.解码部分,被配置为在解码时,基于所述变换顺序,进行区域自适应分层变换raht逆变换。
30.第七方面,本技术实施例又提供了一种编码器,包括:
31.第一存储器,用于存储可执行指令;
32.第一处理器,用于执行所述第一存储器中存储的可执行指令时,实现第一方面所述的方法,或者,第二方面项所述的方法。
33.第八方面,本技术实施例又提供了一种解码器,包括:
34.第二存储器,用于存储可执行指令;
35.第二处理器,用于执行所述第二存储器中存储的可执行指令时,实现第三方面所述的方法。
36.第九方面,本技术实施例提供了一种计算机可读存储介质,应用于编码,包括:存储有可执行指令,用于引起第一处理器执行时,实现第一方面所述的方法,或者,第二方面所述的方法。
37.第十方面,本技术实施例提供了一种计算机可读存储介质,应用于解码器,包括:存储有可执行指令,用于引起第二处理器执行时,实现第三方面所述的方法。
38.本技术实施例提供的一种变换方法、逆变换方法、编码器、解码器及存储介质,包括:确定待编码点云中的待编码点的法向量;基于待编码点的法向量,统计法向量各个坐标分量的总和大小;基于法向量各个坐标分量的总和大小,确定变换顺序。采用上述技术实现方案,由于编码器在进行属性编码的过程中,针对raht变换的实现,通过待编码点的法向量,统计出每个坐标分量的法向量各个坐标分量的总和大小,最终是基于法向量各个坐标分量的总和大小来确定进行raht变换的变换顺序的。这样,在考虑到法向量积累,优先进行特征显著的方向上的变换,达到了减少变换得到的变换系数的冗余度,提高编解码效率的目的。
附图说明
39.图1为本技术实施例提供的示例性的编码流程框图;
40.图2为本技术实施例提供的示例性的解码流程框图;
41.图3a为本技术实施例提供的示例性的二维莫顿编码示意图一;
42.图3b为本技术实施例提供的示例性的二维莫顿编码示意图二;
43.图4a为本技术实施例提供的示例性的三维莫顿编码示意图一;
44.图4b为本技术实施例提供的示例性的三维莫顿编码示意图二;
45.图5为本技术实施例提供的示例性的分层raht变换示意图;
46.图6为本技术实施例提供的示例性的分层raht变换的变换系数存储示意图;
47.图7为本技术实施例提供的示例性的分层raht逆变换的变换系数存储示意图;
48.图8a为本技术实施例提供的变换方法的流程图一;
49.图8b为本技术实施例提供的变换方法的流程图二;
50.图9为本技术实施例提供的变换方法的流程图三;
51.图10为本技术实施例提供的示例性的变换顺序的流程示意图;
52.图11为本技术实施例提供的变换方法的流程图四;
53.图12为本技术实施例提供的变换方法的流程图五;
54.图13为本技术实施例提供的变换方法的流程图六;
55.图14为本技术实施例提供的变换方法的流程图七;
56.图15为本技术实施例提供的变换方法的流程图八;
57.图16a为本技术实施例提供的变换方法的流程图九
58.图16b为本技术实施例提供的变换方法的流程图十;
59.图17为本技术实施例提供的变换方法的流程图十一;
60.图18为本技术实施例提供的示例性的空间划分示意图;
61.图19为本技术实施例提供的变换方法的流程图十二;
62.图20为本技术实施例提供的变换方法的流程图十三;
63.图21为本技术实施例提供的变换方法的流程图十四;
64.图22为本技术实施例还提供的逆变换方法的流程图;
65.图23为本技术实施例提供的编码器的结构示意图一;
66.图24为本技术实施例提供的编码器的结构示意图二;
67.图25为本技术实施例提供的解码器的结构示意图一;
68.图26为本技术实施例提供的解码器的结构示意图二。
具体实施方式
69.为了能够更加详尽地了解本技术实施例的特点与技术内容,下面结合附图对本技术实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本技术实施例。
70.在本技术实施例中,在点云g-pcc编码器框架中,将输入三维图像模型的点云进行slice划分后,对每一个slice进行独立编码。
71.如图1所示的g-pcc编码的流程框图中,应用于点云编码器中,针对待编码的点云数据,先通过slice划分,将点云数据划分为多个slice。在每一个slice中,点云的几何信息
和每个点云所对应的属性信息是分开进行编码的。在几何编码过程中,对几何信息进行坐标转换,使点云全都包含在一个bounding box(包围盒)中,然后再进行量化,这一步量化主要起到缩放的作用,由于量化取整,使得一部分点云的几何信息相同,于是在基于参数来决定是否移除重复点,量化和移除重复点这一过程又被称为体素化过程。接着对bounding box进行八叉树划分。在基于八叉树的几何信息编码流程中,将包围盒八等分为8个子立方体,对非空的(包含点云中的点)的子立方体继续进行八等分,直到划分得到的叶子结点为1x1x1的单位立方体时停止划分,对叶子结点中的点进行算术编码,生成二进制的几何比特流,即几何码流。在基于trisoup(triangle soup,三角面片集)的几何信息编码过程中,同样也要先进行八叉树划分,但区别于基于八叉树的几何信息编码,该trisoup不需要将点云逐级划分到边长为1x1x1的单位立方体,而是划分到block(子块)边长为w时停止划分,基于每个block中点云的分布所形成的表面,得到该表面与block的十二条边所产生的至多十二个vertex(交点),对vertex进行算术编码(基于交点进行表面拟合),生成二进制的几何比特流,即几何码流。vertex还用于在几何重建的过程的实现,而重建的几何信息在对点云的属性编码时使用。
72.在属性编码过程中,几何编码完成,对几何信息进行重建后,进行颜色转换,将颜色信息(即属性信息)从rgb颜色空间转换到yuv颜色空间。然后,利用重建的几何信息对点云重新着色,使得未编码的属性信息与重建的几何信息对应起来。在颜色信息编码过程中,主要有两种变换方法,一是依赖于细节层次(level of detail,lod)划分的基于距离的提升变换,二是直接进行区域自适应分层变换(region adaptive hierarchal transform,raht)的变换,这两种方法都会将颜色信息从空间域转换到频域,通过变换得到高频系数和低频系数,最后对系数进行量化(即量化系数),最后,将经过八叉树划分及表面拟合的几何编码数据与量化系数处理属性编码数据进行slice合成后,依次编码每个block的vertex坐标(即算数编码),生成二进制的属性比特流,即属性码流。
73.如图2所示的g-pcc解码的流程框图中,应用于点云解码器中。解码器获取二进制码流,针对二进制码流中的几何比特流和属性比特流分别进行独立解码。在对几何比特流的解码时,通过算术解码-八叉树合成-表面拟合-重建几何-反坐标变换,得到点云的几何信息;在对属性比特流的解码时,通过算术解码-反量化-基于lod的反提升或者基于raht的反变换-反颜色转换,得到点云的属性信息,基于几何信息和属性信息还原待编码的点云数据的三维图像模型。
74.在属性编码过程中,raht变换在点云重新着色之后,这时可以得到点云的几何坐标信息。利用点的坐标信息可以得到对应于点云中每一点的莫顿码。莫顿编码也叫z-order code,因为其编码顺序按照空间z序。具体的计算莫顿码的具体方法描述如下所示,对于每一个分量用d比特二进制数表示的三维坐标,其三个分量的表示通过以下实现:
[0075][0076]
其中,x
l
,y
l
,z
l
∈{0,1}分别是x,y,z的最高位(l=1)到最低位(l=d)对应的二进制数值。莫顿码m是对x,y,z从最高位开始,依次交叉排列x
l
,y
l
,z
l
到最低位,m的计算公式如下所示:
[0077][0078]
其中,m
l

∈{0,1}分别是m的最高位(l

=1)到最低位(l

=3d)的值。在得到点云中每个点的莫顿码m后,将点云中的点按莫顿码由小到大的顺序进行排列,并将每个点的权值w设为1。表示为计算机语言,类似于z|(y《《1)|(x《《2)的组合。
[0079]
结合图3a和3b进行说明,以高低位排列顺序这里是z、y、x(x|(y《《1)|(z《《2))为例进行说明。
[0080]
图3a展示了8*8的图像每个像素的空间编码,从000000到111111,用一维二进制数,编码了x,y值在0-7的位置坐标。交错二进制坐标值,获得二进制z值图。沿着数值方向连接z型,产生递归的z形曲线。图中每个位置上就按连接顺序放上了z值。实际上,上图就是按z方向迭代产生的,从00-11(整个图一个z),再从0000-1111(之前的z的每个点放一个z),再从000000-111111(之前的z的每个点放一个z),每次增加两位,递归升高。
[0081]
示例性的,如图3b示出了2x2,4x4,8x8和16x16空间编码顺序,从中可以看出,莫顿码的编码顺序按照空间z序实现的。
[0082]
上升到3维情况,其递归过程如图4a和图4b所示,其实现了坐标交错,整体在做的就是不断地将坐标值分散开。x|(y《《1)|(z《《2);即每个坐标值分散开,各位依次交错,先z后y最后x。
[0083]
解码过程就就是聚合过程。)
[0084]
raht变换是在对点云数据进行八叉树划分得到的层级结构基础上进行的,从八叉树的底层开始,分层进行变换。如图5所示,在八叉树划分结束后得到体素块1(即图5中三种颜色深度相间的几何体,每个方块都代表点云中的点)。从最底层开始进行raht变换,以变换顺序xyz为例,如下图5所示先沿x方向进行raht变换。若x方向上存在相邻的体素块,则二者进行raht,得到相邻两点属性值的平均(dc系数)与细节(ac系数)。其中,得到的dc系数作为父节点的体素块2的属性信息存在,并进行下一层的raht变换;而ac系数保留起来,用于最后的编码。若不存在相邻点,则将该体素块的属性值直接传递给第二层父节点。第二层raht变换时,沿y方向进行,若y方向上存在相邻体素块,二者进行raht,并得到相邻两点属性值的平均(dc系数)与细节(ac系数)。之后,第三层raht变换沿z方向进行,并得到三种颜色深度相间的父节点体素块3作为八叉树中下一层的子节点,再沿x、y、z方向循环进行raht变换,直至整个点云只存在一个父节点为止。
[0085]
在实际中进行点云中的点的遍历时,利用经过排序的点云的莫顿码进行,这样便于进行如图所示的八叉树中相邻点的结合。
[0086]
对于相邻两点的属性值c1,c2具体的raht变换过程如下所示:
[0087][0088]
其中,w=w1+w2,luma为传入的量化参数配置得到的,w为dc系数所对应的权重,是计算得到的。dc系数为属性的加权平均值,ac系数为相邻两点的属性残差。c1,c2在第一层为属性值对应w1和w2,用于在其他层为计算获得的dc系数值。
[0089]
在本技术实施例中,raht变换的具体步骤如下:
[0090]
(1)、将点云中的点的属性值作为第一层dc系数并将它们的权重全部设为1,开始进行raht变换。
[0091]
(2)、这一层的dc系数和ac系数按照对应的索引填入下一层双亲层,父节点。若无ac系数则不填。
[0092]
(3)、按照莫顿码排序后的索引,遍历索引所对应的dc系数。
[0093]
(4)、将所有dc系数对应的莫顿码右移一位,这时每个dc系数的莫顿码表示其父节点的莫顿码。
[0094]
(5)、如图6所示,判断两个dc系数的莫顿码是否相同,若相同,则表示在相同父节点下,二者进行raht,将得到的dc系数填入下一层父节点的dc系数处、ac系数填入下一层最后的dc系数处并将两个dc系数加和的权重赋给父节点的dc系数;若不同,则将此dc系数和其权重直接填入下一层。
[0095]
(6)、重复2)-5)直到某一层只有一个dc系数为止。
[0096]
(7)、最后,对dc系数进行量化,并对这一层的dc系数和ac系数属性值进行编码。
[0097]
相应的,在解码器框图中,raht的变换顺序也是需要在raht逆变换中使用。
[0098]
下面介绍下raht的解码过程。
[0099]
raht解码过程是raht编码过程的逆变换,同编码过程相同,在逆变换之前,先对点云中计算每个点莫顿码,得到每个点的莫顿码m后,将点云中的点按由小到大的顺序进行排列,并将每个点的权值设为1,raht逆过程依照莫顿码排序后的顺序遍历点云中所有的点。
[0100]
由于raht变换是通过分层进行的,由底层开始,一层一层进行点云中相邻点的判断,依据权重对属性值进行raht变换。而raht逆变换的过程是由顶层开始,由上往下进行raht的逆变换,因此raht逆变换前需要得到每一层的权重信息,。
[0101]
在做逆raht变换前,利用得到的莫顿码信息,由底层开始,做一次编码端中对每一层raht相邻节点的判断,可以得到每一层的权重信息和ac系数的相应位置,每做一层raht,将相应的莫顿码左移一位。将权重信息和每一层中节点对应的莫顿码信息记录到buffer中,方便之后的使用。
[0102]
raht逆变换时,从顶层开始,依据每一层的莫顿码信息来进行相邻节点的判断,利用得到的权重信息和解码得到的属性信息进行raht的逆变换。如图7所示,raht逆变换相当于第k+1层到第k层的过程。当判断出相邻节点时,取遍历到的dc系数和相应的ac系数进行raht的逆变换。
[0103]
更详细的,对于相邻两点的属性值c1,c2具体的raht逆变换过程如下所示:
[0104][0105]
基于上述介绍的背景下,下面介绍本技术实施例提供的变换方法,主要针对在编码器框架中,raht变换时的变换顺序进行确定的方式不同,应用于编码器(点云编码器)中。
[0106]
如图8a所示,本技术实施例提供了一种变换方法,该方法可以包括:
[0107]
s101、确定待编码点云中的待编码点的法向量。
[0108]
s102、基于待编码点的法向量,统计法向量各个坐标分量的总和大小。
[0109]
s103、基于法向量各个坐标分量的总和大小,确定变换顺序。
[0110]
在本技术的一些实施例中,如图8b所示,在s103之后,还包括:s104-105。
[0111]
s104、基于变换顺序,进行raht变换。
[0112]
s105、将变换顺序编码,写入属性比特流。
[0113]
本技术实施例提供的变换方法考虑点云空间的分布和表面朝向的raht变换方法,不再采用固定的变换顺序,而是在进行raht变换之前分析待变换块及预设邻域范围内包含的点云的空间分布情况,根据该分析所得结果确定raht变换顺序,从而得到较好的编码性能。
[0114]
在本技术实施例中,待编码点云为本技术中的待编码点云对待编码对象的点云数据,针对一个待编码点云,其可以包含n个点,即n个待编码点。其中,n大于等于1。编码器通过确定待编码点云中的待编码点的法向量,就可以基于待编码点的法向量,统计三维空间中的法向量各个坐标分量的总和的大小,这里的法向量各个坐标分量的总和的大小表征了待编码点云在三维空间的主要分布集中的特点。由于不同点云具有不同的空间分布,在进行raht变换之前,编码器可以针对每个待编码点云自身的空间分布特性,确定适合自身分布特点的变换顺序,这样编码器基于变换顺序,进行的raht变换,得到的变换系数冗余小,进而可以提高编码效率。
[0115]
需要说明的是,在本技术实施例中,由于每个待编码点云的变换顺序确定的可能不一样,那么在确定出变换顺序时,就需要编码器在编码过程中将变换顺序与写进属性码流,属性比特流。例如可以将此顺序用3位比特流传到解码器,便于解码器在解码时可以直接解析出raht的变换顺序。
[0116]
在本技术实施例中,待编码点是待编码点云中的多个对象,编码器可以基于每个待编码点的法向量,统计出多个待编码点在x坐标分量上的x轴法向量各个坐标分量的总和的大小,多个待编码点在y坐标分量上的y轴法向量各个坐标分量的总和的大小,以及多个待编码点在z坐标分量上的z轴法向量各个坐标分量的总和的大小;然后,根据x轴法向量各个坐标分量的总和的大小、y轴法向量各个坐标分量的总和的大小和z轴法向量各个坐标分量的总和的大小的分布密集或分布大小,确定密集度或者法向量积累较多的顺序,从而得到变换顺序,其中,变换顺序与由多到小的法向量分布顺序对应。
[0117]
在本技术实施例中,一种确定变换顺序的方式为:编码器基于待编码点的法向量,统计法向量各个坐标分量的绝对值之和;绝对值之和表征法向量各个坐标分量的总和的大小;并将绝对值之和按照由大到小的顺序进行排列,确定变换顺序。
[0118]
需要说明的是,在本技术实施例中,编码器统计法向量各个坐标分量的绝对值之和的实现,是先统计出每个坐标分量的所有法向量,再进行归一化后才进行的绝对值之和的,本技术实施例中的法向量都是采用经过归一化后的法向量进行使用的。
[0119]
示例性的,编码器针对n个各待编码点各自的法向量,统计在x轴,y轴和z轴的法向量的投影的绝对值之和,若x轴绝对值之和为∑x;y轴绝对值之和为∑|y|;z轴绝对值之和为∑|z|。
[0120]
那么,当∑|x|>∑|y|>∑|z|时,变换顺序为xyz;
[0121]
当∑|x|>∑|z|>∑|y|时,变换顺序为xzy;
[0122]
当∑|y|>∑|z|>∑|x|时,变换顺序为yzx;
[0123]
当∑|y|>∑|x|>∑|z|时,变换顺序为yxz;
[0124]
当∑|z|>∑|y|>∑|x|时,变换顺序为zyx;
[0125]
当∑|z|>∑|x|>∑|y|时,变换顺序为zxy。
[0126]
可以理解的是,编码器采用法向量估计的方法获取每点的法向量信息。根据得到的不同方向的法向量总和的大小,从而对raht变换方向顺序进行判断,即通过分析待编码点云的空间分布情况,对待编码点云进行法向量预估和沿每个方向进行求和计算得到raht变换顺序,改善了g-pcc属性编码部分的编码效率和编码性能。
[0127]
在本技术的一些实施例中,基于图8b,如图9所示,s101的具体实现包括:s1011-s1014。
[0128]
如下:
[0129]
s1011、获取待编码点云的属性信息。
[0130]
s1012、判断待编码点云的属性信息中是否存在待编码点的法向量。
[0131]
s1013、若存在,则直接获取待编码点的法向量。
[0132]
s1014、若不存在,则基于待编码点的预设邻域范围内的邻域点的几何信息,确定待编码点的法向量。
[0133]
在本技术实施例中,编码器在进行属性编码的时候,可以通过待编码点云的头信息来获取属性信息,并且这里的属性信息可以包括点的颜色信息和附加的法向量信息的。也就是说,在本技术实施例中,针对待编码点云中的待编码点,编码器解析出来的属性信息中是可能包含一些待编码点云中的待编码点的法向量,也可以能全都包含,也可能部分包含,还可能都不包含。针对这些情况,编码器可以对获取的待编码点云的属性信息进行检测,针对每个待编码点,判断待编码点云的属性信息中是否存在待编码点的法向量中是否存在这个待编码点的法向量了。若存在,则直接从属性信息中,获取待编码点的法向量;同时,编码器也可以获取到待编码点云几何信息,即获取到待编码点的空间坐标信息。若不存在,则基于待编码点的预设邻域范围内的邻域点的几何信息,确定待编码点的法向量。
[0134]
也就是说,在属性信息中没有找到自己对应的法向量的待编码点,是需要进行法向量估计来得到的。
[0135]
示例性的,如图10所示,待编码点云包含n个点,每点对应的属性信息为an,n=1,2,...n。编码器从属性信息遍历确定是否存在待编码点云中的待编码点的法向量,完成对点云是否存在每一点的法向量的判断。若存在,直接获取法向量,针对不存在法向量的,就通过法向量估计来获取法向量,对每个编码点的法向量进行归一化后,就直接针对所有法向量,统计在x轴,y轴和z轴的法向量的投影的绝对值之和,若x轴绝对值之和为∑x;y轴绝对值之和为∑|y|;z轴绝对值之和为∑|z|,对绝对值之和从大到小排序,那么,当∑|x|>∑|y|>∑|z|时,变换顺序为xyz;当∑|x|>∑|z|>∑|y|时,变换顺序为xzy;当∑|y|>∑|z|>∑|x|时,变换顺序为yzx;当∑|y|>∑|x|>∑|z|时,变换顺序为yxz;当∑|z|>∑|y|>∑|x|时,变换顺序为zyx;当∑|z|>∑|x|>∑|y|时,变换顺序为zxy。
[0136]
示例性的,本技术实施例提到的法向量的表示方式可以为:normn=(normxn,normyn,normzn)。若待编码点云包含每点的法向量,则对normn,n=1,2,3...n分别作归一化操作,即:
[0137]
其中,这样就表示出了一个待编码点的法向量。
[0138]
需要说明的是,若待编码点云本身不包含每点的法向量,则采用法向量估计的方法计算每点的法向量信息。根据得到的不同方向的法向量总和的大小,从而对raht变换顺序进行判断。
[0139]
在本技术的一些实施例中,几何信息包括:空间坐标信息;对于本身不包含每点法向量的点云,编码器获取预设邻域范围内,与待编码点最近的至少一个邻域点;获取至少一个邻域点的几何信息;根据至少一个邻域点的几何信息和预设拟合曲面方程,确定出至少一个邻域点到拟合平面的至少一个距离;依据至少一个距离的平方和的最小化,得到预设拟合曲面方程对应的系统特征向量;系统特征向量作为待编码点的法向量。
[0140]
在本技术的一些实施例中,编码器还基于待编码点的预设邻域范围内的邻域点的属性信息,确定待编码点的法向量。例如,属性信息中包含有至少一个邻域点的法向量的时候,编码器可以从属性信息中获取至少一个邻域点的法向量;再基于至少一个邻域点的法向量,确定待编码点的法向量。
[0141]
需要说明的是,当编码器从属性信息中只找到一个邻域点的法向量时,将这个邻域点的法向量确定为待编码点的法向量;当编码器从属性信息中只找到多个邻域点的法向量时,将这多个邻域点的法向量的均值确定为待编码点的法向量。
[0142]
可以理解的是,编码器可以利用每点法线方向求解点云空间分布,都是为了确定raht沿x,y,z三个方向的最优的raht变换顺序,优化ac变换系数的分布,去除ac系数的冗余,从而提升编码效率。
[0143]
如图11所示,本技术实施例提供了一种变换方法,该方法可以包括:
[0144]
s201、获取待编码点云的属性信息。
[0145]
s202、判断待编码点云的属性信息中是否存在待编码点的法向量。
[0146]
s203、若存在,则直接获取待编码点的法向量。
[0147]
需要说明的是,这里的s201-s203的实现与前述实施例中的s1011-s1013的实现描述一致,此处不再赘述。
[0148]
s204、若不存在,则按照莫顿码的顺序遍历待编码点云,在待编码点在预设邻域范围内的选取最近的至少一个邻域点。
[0149]
s205、获取至少一个邻域点的几何信息。
[0150]
s206、根据至少一个邻域点的几何信息和预设拟合曲面方程,确定出至少一个邻域点到拟合平面的至少一个距离。
[0151]
s207、依据至少一个距离的平方和的最小化,得到预设拟合曲面方程对应的系统特征向量;系统特征向量作为待编码点的法向量。
[0152]
在本技术实施例中,对于本身不包含每点法向量的点云,可以采用的法向量估计方法为基于局部表面拟合的pca主成分分析法获取法向量的方法,还可以采用svd法向量估计方法。
[0153]
其中,预设拟合曲面方程包括:不过原点的平面方程和过原点的平面方程。编码器采用的预设拟合曲面方程为不过原点的平面方程时,实现通过pca主成分分析法对法向量
的估计。编码器采用的预设拟合曲面方程为过原点的平面方程时,实现通过svd法向量估计。
[0154]
针对pca主成分分析法,在进行待编码点云中每个待编码点的法向量估计时,需要利用到该点预设邻域范围内其他点的空间坐标信息,即邻域点的空间坐标信息,而邻域点的空间坐标信息可以从几何信息中获取到。采用一种快速的k近邻搜索方法,对待编码点云计算每个点的莫顿码,将待编码点云中的待编码点的莫顿码按照由小到大的顺序排列,得到莫顿码的顺序,根据莫顿码的顺序对每个点在排序周围的一定范围点内(预设邻域范围内)选取最近的k个点,作为其k最近邻点。
[0155]
需要说明的是,预设邻域范围本技术实施例不作限制,以实际设置范围为准。至少一个邻域点k的选取可以不同,k越小,计算的复杂度越小,同时得到的法向量的误差会大。k越大则求解法线方向时的计算复杂度越大,但求得的法线方向误差较小。
[0156]
示例性的,对选取的k邻域点,其空间坐标信息为:(xi,yi,zi),i=1,2,3...k,假设预设拟合曲面方程为x+by+cz=d(d>0),其中,a2+b2+c2=1。编码器根据至少一个邻域点的空间坐标信息和预设拟合曲面方程,确定出至少一个邻域点到拟合平面的至少一个距离,其中,任意一点(xi,yi,zi)到平面的距离为di=|axi+byi+cz
i-d|。
[0157]
为了获取最佳的拟合曲面,使至少一个距离的平方和的最小化,即具体的求解过程转化为:设时,求f的极值。求解过程如下:
[0158]
编码器通过简单运算可知,局部拟合的曲面经过k邻域的质心为:则
[0159]
为了求得f的极值,对f求偏导如(4、(5)和(6)所示:
[0160][0161][0162][0163]
其中,
[0164]
根据公式(4)、(5)和(6)的合并,得到协方差矩阵(7):
[0165][0166]
这样,通过求解协方差矩阵的特征值和特征向量,得到了特征向量为(a,b,c)
t
,那么,待编码点云中的待编码点n对应的法向量可以表示为:normn=(normxn,normyn,normzn)=(a,b,c)。
[0167]
通过这种主成分分析法pca得到待编码点云中所有待编码点的法向量后,将x,y,z每一个方向的所有法向量投影的绝对值进行求和,然后将求和得到的值进行由大到小排
序,就得到的是变换顺序。
[0168]
针对svd法向量估计方法,k邻域内选点,本示例中k的选取可以为20。选取k邻域点的空间坐标信息为:(xi,yi,zi),i=1,2,3...k。预设拟合曲面方程过原点,为ax+by+cz=0,a2+b2+c2=1。编码器根据至少一个邻域点的空间坐标信息和预设拟合曲面方程,确定出至少一个邻域点到拟合平面的至少一个距离,其中,任意一点(xi,yi,zi)到平面的距离为di=|axi+byi+czi|。
[0169]
为了获取最佳的拟合曲面,使至少一个距离的平方和的最小化,即具体的求解过程转化为:设求f的极值。求解过程如下:
[0170]
为了求得f的极值,对f求偏导(8)、(9)和(10)所示:
[0171][0172][0173][0174]
其中,
[0175]
根据公式(8)、(9)和(10)的合并,得到协方差矩阵(11):
[0176][0177]
这样,通过求解协方差矩阵的特征值和特征向量,得到了特征向量为(a,b,c)
t
,那么,待编码点云中的待编码点n对应的法向量可以表示为:normn=(normxn,normyn,normzn)=(a,b,c)。
[0178]
可以理解的是,编码器通过尽可能的使拟合曲线与平面接近,提出来采用过原点平面和不过原点平面等方式进行法向量的估计,使得法向量估计在各个情况下都能准确得到,提高了法向量的估计准确性,进而提高变换顺序的最优性,最终提升编码性能。
[0179]
s208、基于待编码点的法向量,统计法向量各个坐标分量的总和的大小。
[0180]
s209、基于法向量各个坐标分量的总和的大小,确定变换顺序。
[0181]
s210、基于变换顺序,进行变换。
[0182]
s211、将变换顺序编码,写入属性比特流。
[0183]
需要说明的是,这里的s208-s211的实现过程与前面描述的s102-105的实现过程一致,此处不再赘述。
[0184]
在本技术的一些实施例中,如图12所示,与s204的实现可替换的实现为:s214。如下:
[0185]
s214、若不存在,则按照空间距离遍历待编码点云,在待编码点在预设邻域范围内的选取最近的至少一个邻域点。
[0186]
在本技术实施例中,对于本身不包含每点法向量的点云,编码器在进行k近邻搜索时,可以采用基于空间距离的搜索方法,找到空间距离最近的k近邻域点(至少一个邻域点)。为准确的找到每个点的邻域点,可以遍历待编码点云所有的点来进行k近邻的搜索。
[0187]
详细的,遍历待编码点云所有的点,确定所有的点与当前待编码点空间距离,从中找出空间距离最小的一个或多个,即确定出k近邻域点。
[0188]
在本技术的一些实施例中,如图13所示,与s204的实现可替换的实现为:s215-s216。如下:
[0189]
s215、若不存在,则对待编码点云,进行k-d树划分,得到层级结构。
[0190]
s216、遍历层级结构,获取与待编码点属于同一层级的点作为至少一个邻域点。
[0191]
在本技术实施例中,对于本身不包含每点法向量的点云,基于多维二叉树树(k-d,k-dimension binary tree)进行遍历,这样以便于搜索邻域点。
[0192]
在本技术实施例中,编码器对待编码点云,进行k-d树划分,得到层级结构。也就是说,编码器对点云中的点先进行k-d树的划分,即首先沿x方向将点云中的点按坐标的大小排序,并找到中间的点第一个根节点的坐标将点云划分为点数相同的两部分的中位数,之后依次沿不同的坐标轴(x、y、z的顺序)的两个叶子节点将点云进行划分,直到划分到点数为不超过p(p为整数)的最后一层,得到层级结构。遍历层级结构,获取与待编码点属于同一层级的点作为至少一个邻域点,即以子树为单位进行法向量的计算。
[0193]
可以理解的是,采用k-d划分时,每个节点都是待编码点,相比八叉树的父节点是结合后的点而言,直接对待编码点进行判断,进而得到变换顺序的方式更为精度,使得编码准确度提高。
[0194]
如图14所示,本技术实施例提供了一种变换方法,该方法可以包括:
[0195]
s301、从待编码点云中选取特征点。
[0196]
s302、对特征点进行法向量估计,得到特征点的法向量。
[0197]
s303、判断待编码点与其在空间距离上最近的邻域点是否连续。
[0198]
s304、若连续,且邻域点属于特征点,则将邻域点的法向量作为待编码点的法向量。
[0199]
s305、若不连续,则基于待编码点的预设邻域范围内的邻域点的几何信息,确定待编码点的法向量。
[0200]
在本技术实施例中,编码器还可以先从待编码点云中选取一些点作为特征点,先通过前述实施例中的法向量估计方法计算出每个特征点的法向量,这样,再进行其他待编码点的法向量的确定时,编码器在判断出在空间距离上最近的邻域点是不是连续后,若连续,表征可以采用邻域点法向量来表征当前的待编码点,若不连续,那么表征没有与当前待编码点连续的邻域点,就直接依据前述实施例的法向量的估计方法得到。但是若可以找到邻域点,且邻域点属于特征点,那么邻域点的法向量已知,编码器就可以将邻域点的法向量作为待编码点的法向量了。
[0201]
需要说明的是,编码器是按照莫顿码的顺序,在预设邻域范围内回溯,判断待编码点与其在空间距离上最近的邻域点是否连续的。
[0202]
需要说明的是,这里的s304-305的实现与前述实施例中的s1013-s1014的实现描述一致,此处不再赘述。
[0203]
可以理解的是,编码器可以通过寻找待编码点在空间上距离最近的邻域和莫顿码也连续的邻域,即保证了编码顺序上的邻近,又保证了空间实际位置的邻近,这样才可以用邻域点的法向量正确的表示待编码点,提高了法向量的估计准确性,进而提高变换顺序的最优性,最终提升编码性能。
[0204]
s306、基于待编码点的法向量,统计法向量各个坐标分量的总和的大小。
[0205]
s307、基于法向量各个坐标分量的总和的大小,确定变换顺序。
[0206]
s308、基于变换顺序,进行raht变换。
[0207]
s309、将变换顺序编码,写入属性比特流。
[0208]
需要说明的是,这里的s306-309的实现与前述实施例中的s102-s105的实现描述一致,此处不再赘述。
[0209]
如图15所示,本技术实施例提供了一种变换方法,该方法可以包括:
[0210]
s401、将待编码点云进行预设块划分,得到n个预设块。
[0211]
s402、确定对n个预设块中的每个预设块中的待编码点的法向量。
[0212]
s403、基于待编码点的法向量,统计每个预设块中的法向量各个坐标分量的总和的大小。
[0213]
s404、基于每个预设块对应的法向量各个坐标分量的总和的大小,确定每个预设块对应的变换顺序。
[0214]
s405、基于变换顺序,对每个预设块进行raht变换。
[0215]
s406、将每个预设块对应的变换顺序编码,写入属性比特流。
[0216]
在本技术实施例中,编码器可以进行预设块划分,得到n个预设块,确定对n个预设块中的每个预设块中的待编码点的法向量,以一个预设块为单位,基于待编码点的法向量,统计每个预设块中的法向量各个坐标分量的总和的大小,再基于每个预设块对应的法向量各个坐标分量的总和的大小,确定每个预设块对应的变换顺序,直接就针对每个预设块和其自己的每个预设块对应的变换顺序,各自对每个预设块进行raht变换,将每个预设块对应的变换顺序编码,写入属性比特流。
[0217]
需要说明的是,在进行点云属性的raht变换时,可对待编码点云进行划分,对划分得到的不同区域对应的不同点云分别进行raht三个方向顺序判断。具体的划分区域方式可以不同,本示例介绍采用slice划分方案,即按照mpeg g-pcc中的点云slice划分方法,将点云分割成不同的slice(即预设块),每一slice包含的点云再用法向量估计的方法做一次raht变换方向顺序的判断,即不同slice可能使用不同的raht变换顺序。
[0218]
例如,预设块也可以是比slice小,比八叉树叶子结点大的block等,本技术实施例不作限制。
[0219]
可以理解的是,采用slice划分时,基于每个slice可以并行进行编码,还提高了容错能力和编码速度。
[0220]
如图16a所示,本技术实施例提供了一种变换方法,该方法可以包括:
[0221]
s601、确定待编码点云中的待编码点在三维空间构成的三个坐标面上的三个二维投影面。
[0222]
s602、基于三个二维投影面,统计每个坐标面的投影面积。
[0223]
s603、基于投影面积,确定变换顺序。
[0224]
如图16b所示,本技术实施例提供了一种变换方法,s603之后,还包括:s604-605。如下:
[0225]
s604、基于变换顺序,进行raht变换。
[0226]
s605、将变换顺序编码,写入属性比特流。
[0227]
在本技术实施例中,编码器将三维点云(即待编码点云)中的每一点(待编码点)分别投影到三维空间构成的三个坐标面(x,y,z坐标轴所构成的的三个面),即xoy平面,yoz平面和xoz平面,最终得到待编码点的三个二维投影,即三个二维投影面。编码器计算每个二维投影面的面积,统计每个坐标面的投影面积,这里的投影面积表征了待编码点云在三维空间的主要分布集中的特点。基于投影面积,确定变换顺序。由于不同点云具有不同的空间分布,在进行raht变换之前,编码器可以针对每个待编码点云自身的空间分布特性,确定适合自身分布特点的变换顺序,这样编码器基于变换顺序,进行的raht变换,得到的变换系数冗余小,进而可以提高编码效率。
[0228]
需要说明的是,在本技术实施例中,基于投影面积,确定变换顺序可以为:统计每个投影面上的投影点的数量,基于投影面的数量越多,变换顺序越优先的原则,确定出raht的变换顺序。
[0229]
可以理解的是,由于不同点云具有不同的空间分布,在进行raht变换之前,编码器可以针对每个待编码点云自身的空间分布特性,确定适合自身分布特点的变换顺序,这样编码器基于变换顺序,进行的raht变换,得到的变换系数冗余小,进而可以提高编码效率。
[0230]
需要说明的是,在本技术实施例中,由于每个待编码点云的变换顺序确定的可能不一样,那么在确定出变换顺序时,就需要编码器在编码过程中将变换顺序与写进属性码流,属性比特流。例如可以将此顺序用3位比特流传到解码器,便于解码器在解码时可以直接解析出raht的变换顺序。
[0231]
在本技术实施例中,投影面的面积可以用在每个投影平面上的投影点的个数来表示。
[0232]
示例性的,将平面xoy上的投影点数记为num(xoy),平面yoz上的投影点数记为num(yoz),平面zox上的投影点数记为num(zox)。当投影面积为num(xoy)>num(yoz)>num(zox)时,确定变换顺序为yxz;当投影面积为num(xoy)>num(zox)>num(yoz)时,确定变换顺序为xyz;当投影面积为num(yoz)>num(xoy)>num(zox)时,确定变换顺序为yzx;当投影面积为num(yoz)>num(zox)>num(xoy)时,确定变换顺序为zyx;当投影面积为num(zox)>num(yoz)>num(xoy)时,确定变换顺序为zxy;当投影面积为num(zox)>num(xoy)>num(yoz)时,确定变换顺序为xzy。
[0233]
如图17所示,本技术实施例提供了一种变换方法,该方法可以包括:
[0234]
s701、基于预设立方体边长,将待编码点云划分成至少一个立方体子块。
[0235]
s702、对至少一个立方体子块的每个立方体子块中的待编码体素点确定在三维空间构成的三个坐标面上的三个二维投影面;待编码体素点表征待编码点。
[0236]
s703、基于三个二维投影面,统计每个立方体子块对应的每个坐标面的投影面积。
[0237]
s704、将每个立方体子块对应的每个坐标面的投影面积按照从大到小排列,垂直于每个坐标轴面的坐标轴顺序,确定为每个立方体子块的变换顺序。
[0238]
s705、基于每个立方体子块的变换顺序,进行raht变换。
[0239]
s706、将每个立方体子块的变换顺序编码,写入属性比特流。
[0240]
在本技术实施例中,编码器可以对待编码点云所在空间进行block划分,得到n个block。采用用每个block在x、y、z三个坐标轴两两构成的平面上的投影大小或投影面积来判断raht的变换顺序。
[0241]
需要说明的是,raht变换是在对点云数据(待编码点云)进行八叉树划分得到的层级结构基础上进行的,从八叉树的底层开始,分层进行变换。编码器在待编码点云所在空间进行block划分,得到n个block的实现过程为:如图18所示,编码器将点云用八叉树的方式划分成若干相同大小的n x n x n的block,其中n可以设定为固定值或根据不同点云分别设定,本技术实施例不作限制。即每个block包含n x n x n个体素,或称为体素点(voxel)。体素单位为1,表示待编码点云中的一个待编码点。
[0242]
在本技术实施例中,编码器对至少一个立方体子块的每个立方体子块中的待编码体素点确定在三维空间构成的三个坐标面上的三个二维投影面;待编码体素点表征待编码点,基于三个二维投影面,统计每个立方体子块对应的每个坐标面的投影面积,再将每个立方体子块对应的每个坐标面的投影面积按照从大到小排列,垂直于每个坐标轴面的坐标轴顺序,确定为每个立方体子块的变换顺序,基于每个立方体子块的变换顺序,进行raht变换,将每个立方体子块对应的变换顺序编码,写入属性比特流。
[0243]
示例性的,每个block中,编码器计算其在xoy,xoz和yoz平面上的投影面积,编码器统计在三个投影面中的投影总数,将投影总数认为是投影面积,将投影面积按从大到小排序后,将垂直于该投影面的坐标轴方向的顺序作为block中raht变换的顺序,如xoy投影面积大于xoz投影面积,xoz投影面积大于yoz投影面积,这时投影面积排序为:xoy、xoz和yoz,那么,垂直于该投影面的坐标轴方向xoy投影面的坐标轴方向为z,垂直于该投影面的坐标轴方向xoz投影面的坐标轴方向为y,垂直于该投影面的坐标轴方向yoz投影面的坐标轴方向为x,那么基于xoy、xoz和yoz这个顺序,确定出的变换顺序为zyx。
[0244]
需要说明的是,在进行点云属性的raht变换时,可对待编码点云进行划分,对划分得到的不同区域对应的不同点云分别进行raht三个方向顺序判断。具体的划分区域方式可以不同,本示例介绍采用block划分方案,即按照mpeg g-pcc中的点云block划分方法,将点云分割成block,每一block包含的点云再用投影面积统计的方法做一次raht变换顺序的判断,即不同block可能使用不同的raht变换顺序。
[0245]
例如,划分的大小也可以是slice等,本技术实施例不作限制。
[0246]
s707、按照每个立方体子块的变换顺序,对每个立方体子块的待编码体素点进行raht变换,得到每个立方体子块的子体素点。
[0247]
s708、根据每个立方体子块对应的每个坐标面的投影面积,统计出每个坐标面对应的投影面积绝对值之和。
[0248]
s709、对投影面积绝对值之和按照从大到小排序,得到变换顺序。
[0249]
s710、根据变换顺序,对每个立方体子块的子体素点进行raht变换。
[0250]
s711、将每个立方体子块的变换顺序写入属性比特流。
[0251]
在本技术实施例中,编码器在确定了每个立方体子块的变换顺序之后,编码器可以按照每个立方体子块的变换顺序,对每个立方体子块的待编码体素点进行raht变换,得到每个立方体子块的子体素点,根据每个立方体子块对应的每个坐标面的投影面积,统计
出每个坐标面对应的投影面积绝对值之和,对投影面积绝对值之和按照从大到小排序,得到变换顺序,最后,根据变换顺序,对每个立方体子块的子体素点进行raht变换。
[0252]
也就是说,编码器在获取了每个block的变换顺序后,基于这个变换顺序进行一个block内部的raht变换,得到每个立方体子块的子体素点,在block中raht变换结束后,将所有block中的各个方向的投影面积进行求和,并由大到小排序,得到一个总的raht变换顺序,然后基于这个总的raht变换顺序,对得到每个立方体子块的子体素点之间进行raht变换,最终需要将每个立方体子块的变换顺序写入属性比特流,便于解码器解码时使用。
[0253]
可以理解的是,通过待编码点的投影面积,统计出每个坐标分量的投影面积,最终是基于每个坐标分量的投影面积的大小排序,来确定进行raht变换的变换顺序的。这样,在考虑到投影面积积累,即空间分布特性,优先进行特征显著的方向上的变换,达到了减少变换得到的变换系数的冗余度,提高编解码效率的目的。
[0254]
在本技术的一些实施例中,图19所示,s707之后,s710之前,该方法还包括:
[0255]
s712、根据每个立方体子块对应的变换顺序,获取每个立方体子块对应的主投影方向。
[0256]
s713、根据每个立方体子块对应的主投影方向,统计每个坐标分量的主投影方向的数量。
[0257]
s714、对每个坐标分量的主投影方向的数量按照从大到小排序,得到变换顺序。
[0258]
在本技术实施例中,编码器判断每个block的变换顺序的方式还可以在按照每个立方体子块的变换顺序,对每个立方体子块的待编码体素点进行raht变换,得到每个立方体子块的子体素点之后,获取每个立方体子块的变换顺序中的主投影方向,基于每个立方体子块的主投影方向,统计每个坐标分量的主投影方向的数量,对每个坐标分量的主投影方向的数量按照从大到小排序,得到变换顺序,基于该变换顺序,就可以对整个待编码点云进行raht变换了。
[0259]
需要说明的是,在本技术实施例中,每个立方体子块对应的主投影方向就是每个立方体子块对应的变换顺序中的第一个坐标方向。
[0260]
示例性的,假设编码器将待编码点云划分为3个block。其中,block1的变换顺序为xyz,block2的变换顺序为zyx,block3的变换顺序为zxy,那么编码器获取到block1的主投影方向为x,block2的主投影方向为z,block3的的主投影方向为z,获取了3个主投影方向后,根据每个立方体子块对应的主投影方向,统计x量的主投影方向的数量为1,统计y量的主投影方向的数量为0,统计z量的主投影方向的数量为2,由于2>1>0,对每个坐标分量的主投影方向的数量按照从大到小排序,得到变换顺序为zxy。
[0261]
如图20所示,s713的实现过程可以包括s7131-s7132。
[0262]
s7131、从每个立方体子块对应的主投影方向中,选出预设比例的子立方体子块对应的主投影方向。
[0263]
s7132、根据子立方体子块对应的主投影方向,统计每个坐标分量的主投影方向的数量。
[0264]
在本技术实施例中,编码器将待编码点云所在空间划分为n个block,可以从n个block,选取出预设比例的子立方体块,采用子立方体子块对应的主投影方向来统计每个坐标分量的主投影方向的数量,进而得到变换顺序。
[0265]
其中,预设比例可以为10%,这是基于实际的需求和设计决定的,本技术实施例不做限制。
[0266]
示例性的,编码器将待编码点云所在空间划分为100个block,有100个主投影方向,预设比例为10%时,编码器可以从100个block选取10个block,根据其三维主投影方向,来统计每个坐标分量的主投影方向的数量。
[0267]
可以理解的是,采用部分block来做统计,提高了处理速度,降低了运算量。
[0268]
如图21所示,在本技术的一些实施例中,s702之前,方法还包括:s715。如下:
[0269]
s715、将待编码点云中的待编码点为中心,构建至少一个立方体子块。
[0270]
在本技术实施例中,编码器将待编码点云所在空间进行块划分的方式还可以采用以每个待编码点为中心,或中心轴,构建出以每个待编码点作为体素中心,构建的一个长度为nxnxn体素的立方体子块。
[0271]
这与直接进行block划分的区别为,每个block中的体素块是以block为中心进行划分的,每个体素中的点的分布是看点落入哪个体素来决定的。而这里的立方体子块中的每个体素的划分则是以每个待编码点为中心,以单位1划分出来的,体素与体素之间还可能存在重叠。
[0272]
在本技术实施例中,采用确定一种较优的raht变换顺序的确定方法可以为重建点云带来性能的增益。如下表1所示,重建点云的psnr降低,且bd-rate也有较为明显的提升。(psnr是一种图像评价的客观标准,psnr越大则图像的质量越好。bd-rate是用来衡量性能的好坏的参数,bd-rate为负时表示性能变好,在此基础上bd-rate的绝对值越大,则性能的增益越大。)
[0273]
表1
[0274][0275]
由表1可知,针对4个点云,采用各自不同的变换顺序进行raht变换,得到的average平均增益均很显著,编码器性能上得到了很大的提高。
[0276]
可以理解的是,采用这种实现方案,由于每个体素是以待编码点为中心的,这样获得的体素的投影面积作为待编码点的投影面积的话会更准确。
[0277]
基于前述介绍的背景下,下面介绍本技术实施例提供的变换方法,主要针对在解码器框架中,raht逆变换时的获取变换顺序的过程,应用于解码器(点云解码器)中。
[0278]
如图22所示,本技术实施例提供了一种逆变换方法,应用于解码器中,包括:
[0279]
s801、从属性比特流中,解析出变换顺序。
[0280]
s802、在解码时,基于变换顺序,进行raht逆变换。
[0281]
在本技术实施例中,编码比特流传输到解码器,该解码器就可以从编码比特流中的属性比特流中,解析出变换顺序,那么在解码器进行raht逆变换时,就可以使用变换顺序来实现。
[0282]
可以理解的是,编码器基于通过待编码点云的空间分布特点,来每个待编码点云对应的最优的raht变换的变换顺序。这样,在考虑到法向量积累,优先进行特征显著的方向上的变换,达到了减少变换得到的变换系数的冗余度,提高编解码效率的目的,由于,每个待编码点云对应的变换顺序可能不同,因此,需要在编码的时候,将变换顺序也编码写入属性比特流中,便于解码器解码进行raht逆变换时使用。
[0283]
基于前述实施例的实现基础,如图23所示,本技术实施例提供了本技术实施例提供了一种编码器1,包括:
[0284]
确定部分10,被配置为确定待编码点云中的待编码点的法向量;
[0285]
获取部分11,被配置为基于所述待编码点的法向量,统计法向量各个坐标分量的总和的大小;
[0286]
所述确定部分10,还被配置基于所述法向量各个坐标分量的总和的大小,确定变换顺序。
[0287]
在本技术的一些实施例中,所述编码器还包括:变换部分和编码部分。
[0288]
所述变换部分12,被配置为基于变换顺序,进行raht变换;
[0289]
所述编码部分13,被配置为将所述变换顺序编码,写入属性比特流。
[0290]
在本技术的一些实施例中,所述编码器还包括:判断部分14;
[0291]
所述获取部分11,还被配置为获取待编码点云的属性信息;
[0292]
所述判断部分14,还被配置为判断所述待编码点云的属性信息中是否存在所述待编码点的法向量;
[0293]
所述获取部分11,还被配置为若存在,则直接获取所述待编码点的法向量;
[0294]
所述确定部分10,还被配置为若不存在,则基于所述待编码点的预设邻域范围内的邻域点的属性信息,确定所述待编码点的法向量。
[0295]
在本技术的一些实施例中,所述获取部分11,还被配置为获取所述预设邻域范围内,与所述待编码点最近的至少一个邻域点;获取所述至少一个邻域点的几何信息;
[0296]
所述确定部分10,还被配置根据所述至少一个邻域点的几何信息和预设拟合曲面方程,确定出所述至少一个邻域点到拟合平面的至少一个距离;
[0297]
所述获取部分11,还被配置为依据所述至少一个距离的平方和的最小化,得到所述预设拟合曲面方程对应的系统特征向量;所述系统特征向量作为所述待编码点的法向量。
[0298]
在本技术的一些实施例中,所述预设拟合曲面方程包括:不过原点的平面方程和过原点的平面方程。
[0299]
在本技术的一些实施例中,所述获取部分11,还被配置为按照莫顿码的顺序遍历所述待编码点云,在所述待编码点在预设邻域范围内的选取最近的所述至少一个邻域点。
[0300]
在本技术的一些实施例中,所述获取部分11,还被配置为按照空间距离遍历所述待编码点云,在所述待编码点在预设邻域范围内的选取最近的所述至少一个邻域点。
[0301]
在本技术的一些实施例中,所述获取部分11,还被配置为所述获取所述预设邻域
范围内,与所述待编码点最近的至少一个邻域点之后,获取所述至少一个邻域点的法向量;对所述特征点进行法向量估计,得到所述特征点的法向量。
[0302]
在本技术的一些实施例中,所述编码器还包括:判断部分14;
[0303]
所述确定部分10,还被配置为从所述待编码点云中选取特征点;对所述特征点进行法向量估计,得到所述特征点的法向量;
[0304]
所述判断部分14,被配置为判断所述待编码点与其在空间距离上最近的邻域点是否连续;
[0305]
所述确定部分10,还被配置为若连续,且所述邻域点属于所述特征点,则将邻域点的法向量作为所述待编码点的法向量;以及若不连续,则基于所述待编码点的预设邻域范围内的邻域点的几何信息,确定所述待编码点的法向量。
[0306]
在本技术的一些实施例中,所述判断部分14,还被配置为按照莫顿码的顺序,在预设邻域范围内回溯,判断所述待编码点与其在空间距离上最近的邻域点是否连续。
[0307]
在本技术的一些实施例中,所述获取部分11,还被配置为将所述待编码点云进行预设块划分,得到n个预设块;
[0308]
所述确定部分10,还被配置为确定对所述n个预设块中的每个预设块中的待编码点的法向量;
[0309]
所述获取部分11,还被配置为基于所述待编码点的法向量,统计每个预设块中的法向量各个坐标分量的总和的大小。
[0310]
在本技术的一些实施例中,所述确定部分10,还被配置为基于所述每个预设块对应的所述法向量各个坐标分量的总和的大小,确定所述每个预设块对应的变换顺序。
[0311]
在本技术的一些实施例中,所述获取部分11,还被配置为基于所述待编码点的法向量,统计法向量各个坐标分量的绝对值之和;所述绝对值之和表征所述法向量各个坐标分量的总和的大小。
[0312]
在本技术的一些实施例中,所述确定部分10,还被配置为将所述绝对值之和按照由大到小的顺序进行排列,确定所述变换顺序。
[0313]
本技术实施例还提供了一种编码器1,包括:
[0314]
确定部分10,被配置为确定待编码点云中的待编码点在三维空间构成的三个坐标面上的三个二维投影面;
[0315]
获取部分11,被配置为基于所述三个二维投影面,统计每个坐标面的投影面积;
[0316]
所述确定部分10,还被配置为基于所述投影面积,确定变换顺序;
[0317]
在本技术的一些实施例中,所述编码器还包括:变换部分和编码部分。
[0318]
所述变换部分,12被配置为基于变换顺序,进行raht变换;
[0319]
所述编码部分13,被配置为将所述变换顺序编码,写入属性比特流。
[0320]
在本技术的一些实施例中,所述获取部分11,还被配置为基于预设立方体边长,将所述待编码点云划分成至少一个立方体子块;对所述至少一个立方体子块的每个立方体子块中的待编码体素点确定在三维空间构成的三个坐标面上的三个二维投影面;所述待编码体素点表征所述待编码点;基于所述三个二维投影面,统计所述每个立方体子块对应的每个坐标面的投影面积。
[0321]
在本技术的一些实施例中,所述确定部分10,还被配置为将所述每个立方体子块
对应的每个坐标面的投影面积按照从大到小排列,垂直于每个坐标轴面的坐标轴顺序,确定为每个立方体子块的变换顺序。
[0322]
在本技术的一些实施例中,所述变换部分12,还被配置为所述将所述每个立方体子块对应的每个坐标面的投影面积按照从大到小排列,垂直于每个坐标轴面的坐标轴顺序,确定为每个立方体子块的变换顺序之后,按照所述每个立方体子块的变换顺序,对所述每个立方体子块的待编码体素点进行raht变换,得到每个立方体子块的子体素点;
[0323]
所述获取部分11,还被配置为根据所述每个立方体子块对应的每个坐标面的投影面积,统计出每个坐标面对应的投影面积绝对值之和;对所述投影面积绝对值之和按照从大到小排序,得到所述变换顺序;
[0324]
所述变换部分12,还被配置为根据所述变换顺序,对每个立方体子块的子体素点进行raht变换;
[0325]
所述编码部分13,还被配置为将所述每个立方体子块的变换顺序写入属性比特流。
[0326]
在本技术的一些实施例中,所述获取部分11,还被配置为所述按照所述每个立方体子块的变换顺序,对所述每个立方体子块的待编码体素点进行raht变换,得到每个立方体子块的子体素点之后,且所述根据所述变换顺序,对每个立方体子块的子体素点进行raht变换之前,根据所述每个立方体子块对应的变换顺序,获取每个立方体子块对应的主投影方向;以及根据每个立方体子块对应的主投影方向,统计每个坐标分量的主投影方向的数量;对所述每个坐标分量的主投影方向的数量按照从大到小排序,得到所述变换顺序。
[0327]
在本技术的一些实施例中,所述获取部分11,还被配置为从所述每个立方体子块对应的主投影方向中,选出预设比例的子立方体子块对应的主投影方向;以及根据所述子立方体子块对应的主投影方向,统计所述每个坐标分量的主投影方向的数量。
[0328]
在本技术的一些实施例中,所述获取部分11,还被配置为所述对所述至少一个立方体子块的每个立方体子块中的待编码体素点确定在三维空间构成的三个坐标面上的三个二维投影面之前,将所述待编码点云中的待编码点为中心,构建所述至少一个立方体子块。
[0329]
在本技术的一些实施例中,所述确定部分10,还被配置为当所述投影面积为num(xoy)>num(yoz)>num(zox)时,确定变换顺序为yxz;当所述投影面积为num(xoy)>num(zox)>num(yoz)时,确定变换顺序为xyz;当所述投影面积为num(yoz)>num(xoy)>num(zox)时,确定变换顺序为yzx;当所述投影面积为num(yoz)>num(zox)>num(xoy)时,确定变换顺序为zyx;当所述投影面积为num(zox)>num(yoz)>num(xoy)时,确定变换顺序为zxy;当所述投影面积为num(zox)>num(xoy)>num(yoz)时,确定变换顺序为xzy。
[0330]
在实际应用中,如图24所示,本技术实施例还提供了一种编码器,包括:
[0331]
第一存储器15,用于存储可执行指令;
[0332]
第一处理器16,用于执行所述第一存储器15中存储的可执行指令时,实现编码器侧的变换方法。
[0333]
其中,处理器可以通过软件、硬件、固件或者其组合实现,可以使用电路、单个或多个专用集成电路(application specific integrated circuits,asic)、单个或多个通用集成电路、单个或多个微处理器、单个或多个可编程逻辑器件、或者前述电路或器件的组
合、或者其他适合的电路或器件,从而使得该处理器可以执行前述实施例中的变换方法的相应步骤。
[0334]
本技术实施例提供了一种计算机可读存储介质,包括:存储有可执行指令,用于引起第一处理器执行时,实现编码器侧的变换方法。
[0335]
在本技术实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0336]
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:磁性随机存取存储器(fram,ferromagnetic random access memory)、只读存储器(rom,read only memory)、可编程只读存储器(prom,programmable read-only memory)、可擦除可编程只读存储器(eprom,erasable programmable read-only memory)、电可擦除可编程只读存储器(eeprom,electrically erasable programmable read-only memory)、快闪存储器(flash memory)、磁表面存储器、光盘、或只读光盘(cd-rom,compact disc read-only memory)等各种可以存储程序代码的介质,本公开实施例不作限制。
[0337]
如图25所示,本技术实施例提供了一种解码器2,包括:
[0338]
解析部分20,被配置为从属性比特流中,解析出变换顺序;
[0339]
解码部分21,被配置为在解码时,基于所述变换顺序,进行raht逆变换。
[0340]
在实际应用中,如图26所示,本技术实施例还提供了一种解码器,包括:
[0341]
第二存储器22,用于存储可执行指令;
[0342]
第二处理器23,用于执行所述第二存储器22中存储的可执行指令时,实现解码器侧的变换方法。
[0343]
本技术实施例提供了一种计算机可读存储介质,包括:存储有可执行指令,用于引起第二处理器执行时,实现解码器侧的变换方法。
[0344]
可以理解的是,由于编码器在进行属性编码的过程中,针对raht变换的实现,通过待编码点的法向量,统计出法向量各个坐标分量的总和的大小,最终是基于法向量各个坐标分量的总和的大小来确定进行raht变换的变换顺序的。这样,在考虑到法向量积累,优先进行特征显著的方向上的变换,达到了减少变换得到的变换系数的冗余度,提高编解码效率的目的。
[0345]
工业实用性
[0346]
本技术实施例提供了一种变换方法、编码器、解码器及计算机可读存储介质,包括:确定待编码点云中的待编码点的法向量;基于待编码点的法向量,统计法向量各个坐标分量的总和的大小;基于法向量各个坐标分量的总和的大小,确定变换顺序;基于变换顺序,进行raht变换;将变换顺序编码,写入属性比特流。由于编码器在进行属性编码的过程中,针对raht变换的实现,通过待编码点的法向量,统计出法向量各个坐标分量的总和的大
小,最终是基于法向量各个坐标分量的总和的大小来确定进行raht变换的变换顺序的。这样,在考虑到法向量积累,优先进行特征显著的方向上的变换,达到了减少变换得到的变换系数的冗余度,提高编解码效率的目的。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1