CN116530021A - 点云编解码方法、编码器、解码器以及计算机存储介质 - Google Patents
点云编解码方法、编码器、解码器以及计算机存储介质 Download PDFInfo
- Publication number
- CN116530021A CN116530021A CN202080107662.2A CN202080107662A CN116530021A CN 116530021 A CN116530021 A CN 116530021A CN 202080107662 A CN202080107662 A CN 202080107662A CN 116530021 A CN116530021 A CN 116530021A
- Authority
- CN
- China
- Prior art keywords
- value
- node
- determining
- nodes
- context model
- 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
- 238000000034 method Methods 0.000 title claims abstract description 218
- 238000004590 computer program Methods 0.000 claims description 20
- 230000008569 process Effects 0.000 description 22
- 230000003044 adaptive effect Effects 0.000 description 20
- 230000006835 compression Effects 0.000 description 14
- 238000007906 compression Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 14
- 230000003068 static effect Effects 0.000 description 14
- 238000004422 calculation algorithm Methods 0.000 description 8
- 238000005259 measurement Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000010276 construction Methods 0.000 description 7
- 238000005192 partition Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000009466 transformation Effects 0.000 description 5
- 238000013139 quantization Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000007654 immersion Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000008447 perception Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- KLDZYURQCUYZBL-UHFFFAOYSA-N 2-[3-[(2-hydroxyphenyl)methylideneamino]propyliminomethyl]phenol Chemical compound OC1=CC=CC=C1C=NCCCN=CC1=CC=CC=C1O KLDZYURQCUYZBL-UHFFFAOYSA-N 0.000 description 1
- 101000638069 Homo sapiens Transmembrane channel-like protein 2 Proteins 0.000 description 1
- 241000023320 Luma <angiosperm> Species 0.000 description 1
- 102100032054 Transmembrane channel-like protein 2 Human genes 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 201000001098 delayed sleep phase syndrome Diseases 0.000 description 1
- 208000033921 delayed sleep phase type circadian rhythm sleep disease Diseases 0.000 description 1
- 230000009365 direct transmission Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000002310 reflectometry Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000011426 transformation method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/001—Model-based coding, e.g. wire frame
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/40—Tree coding, e.g. quadtree, octree
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
Abstract
一种点云编解码方法、编码器、解码器以及计算机存储介质,该方法包括:获取当前节点的邻居节点的占位比特信息(S401);根据所述邻居节点的占位比特信息,确定上下文模型(S402);利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流(S403);其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
Description
本申请实施例涉及编解码技术领域,尤其涉及一种点云编解码方法、编码器、解码器以及计算机存储介质。
在基于几何的点云压缩(Geometry-based Point Cloud Compression,G-PCC)编码器框架中,点云的几何信息和每个点云所对应的属性信息是分开进行编码的。几何编码完成后,会对几何信息进行重建,而属性信息的编码将依赖于重建的几何信息。其中,属性信息编码主要针对颜色信息的编码,以将颜色信息从空间域变换到频域,得到高频系数和低频系数,最后对系数进行量化和熵编码,生成二进制码流。
然而,目前的相关技术在构建上下文模型时并没有充分利用空间相关性,降低了点云的编解码效率。
发明内容
本申请实施例提供一种点云编解码方法、编码器、解码器以及计算机存储介质,可以充分利用点云的空间相关性,从而能够提高编解码效率。
本申请实施例的技术方案可以如下实现:
第一方面,本申请实施例提供了一种点云编码方法,应用于编码器,该方法包括:
获取当前节点的邻居节点的占位比特信息;
根据所述邻居节点的占位比特信息,确定上下文模型;
利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
第二方面,本申请实施例提供了一种点云解码方法,应用于解码器,该方法包括:
获取当前节点的邻居节点的占位比特信息;
根据所述邻居节点的占位比特信息,确定上下文模型;
利用所述上下文模型解析码流,获取所述当前节点的相关信息;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
第三方面,本申请实施例提供了一种编码器,该编码器包括第一获取单元、第一确定单元和编码单元;其中,
所述第一获取单元,配置为获取当前节点的邻居节点的占位比特信息;
所述第一确定单元,配置为根据所述邻居节点的占位比特信息,确定上下文模型;
所述编码单元,配置为利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
第四方面,本申请实施例提供了一种编码器,该编码器包括第一存储器和第一处理器;其中,
第一存储器,用于存储能够在第一处理器上运行的计算机程序;
第一处理器,用于在运行计算机程序时,执行如第一方面所述的方法。
第五方面,本申请实施例提供了一种解码器,该解码器包括第二获取单元、第二确定单元和解码单元;其中,
所述第二获取单元,配置为获取当前节点的邻居节点的占位比特信息;
所述第二确定单元,配置为根据所述邻居节点的占位比特信息,确定上下文模型;
所述解码单元,配置为利用所述上下文模型解析码流,获取所述当前节点的相关信息;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
第六方面,本申请实施例提供了一种解码器,该解码器包括第二存储器和第二处理器;其中,
第二存储器,用于存储能够在第二处理器上运行的计算机程序;
第二处理器,用于在运行计算机程序时,执行如第二方面所述的方法。
第七方面,本申请实施例提供了一种计算机存储介质,该计算机存储介质存储有计算机程序,所述计算机程序被第一处理器执行时实现如第一方面所述的方法、或者被第二处理器执行时实现如第二方面所述的方法。
本申请实施例提供了一种点云编解码方法、编码器、解码器以及计算机存储介质,在编码器侧,获取当前节点的邻居节点的占位比特信息;根据所述邻居节点的占位比特信息,确定上下文模型;利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。在解码器侧,获取当前节点的邻居节点的占位比特信息;根据所述邻居节点的占位比特信息,确定上下文模型;利用所述上下文模型解析码流,获取所述当前节点的相关信息;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。这样,由于利用邻居节点的占位比特信息来构建上下文模型,如此基于所构建的上下文模型对单一子节点的标识信息和坐标信息进行熵编码,能够充分利用点云的空间相关性,从而能够提高点云的编解码效率。
图1A为相关技术提供的一种G-PCC编码器的框架组成示意图;
图1B为相关技术提供的一种G-PCC解码器的框架组成示意图;
图2为相关技术提供的一种邻居配置数的结构示意图;
图3为相关技术提供的一种子节点被占据数的结构示意图;
图4为本申请实施例提供的一种点云编码方法的流程示意图;
图5为本申请实施例提供的一种根据邻居节点预测标识信息的流程示意图;
图6为本申请实施例提供的一种当前节点与26个邻居节点的位置结构示意图;
图7为本申请实施例提供的一种根据邻居节点预测坐标信息的流程示意图;
图8为本申请实施例提供的另一种根据邻居节点预测坐标信息的流程示意图;
图9为本申请实施例提供的一种点云编码方法的详细流程示意图;
图10为本申请实施例提供的一种点云解码方法的流程示意图;
图11为本申请实施例提供的一种点云解码方法的详细流程示意图;
图12为本申请实施例提供的一种编码器的组成结构示意图;
图13为本申请实施例提供的一种编码器的具体硬件结构示意图;
图14为本申请实施例提供的一种解码器的组成结构示意图;
图15为本申请实施例提供的一种解码器的具体硬件结构示意图。
为了能够更加详尽地了解本申请实施例的特点与技术内容,下面结合附图对本申请实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本申请实施例。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
需要指出,本申请实施例所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)点云压缩(Point Cloud Compression,PCC)
2)基于几何的点云压缩(Geometry-based Point Cloud Compression,G-PCC)
3)片(slice)
4)包围盒(bounding box)
5)八叉树(octree)
6)帧内预测(intra prediction)
7)三角面片集(triangle soup,trisoup)
8)基于上下文模型的自适应二进制算术编码(Context-based Adaptive Binary Arithmetic Coding,CABAC)
9)块(block)
10)交点(vertex)
11)红绿蓝(Red-Green-Blue,RGB)
12)亮度色度(Luminance-Chrominance,YUV)
13)细节层次(Level of Detail,LOD)
14)区域自适应分层变换(Region Adaptive Hierarchal Transform,RAHT)
15)查找表(Look Up Table,LUT)
16)动态图像专家组(Moving Picture Experts Group,MPEG)
17)国际标准化组织(International Standardization Organization,ISO)
18)国际电工委员会(International Electrotechnical Commission,IEC)
19)邻居节点中占据节点个数(Number of occupied neighbours,No)
这里,点云是物体表面的三维表现形式,通过光电雷达、激光雷达、激光扫描仪、多视角相机等采集设备,可以采集得到物体表面的点云(数据)。
点云(Point Cloud)是指海量三维点的集合,点云中的点可以包括点的位置信息和点的属性信息。例如,点的位置信息可以是点的三维坐标信息。点的位置信息也可称为点的几何信息。例如,点的属性信息可包括颜色信息和/或反射率等等。例如,颜色信息可以是任意一种色彩空间上的信息。例如,颜色信息可以是RGB信息。其中,R表示红色(Red,R),G表示绿色(Green,G),B表示蓝色(Blue,B)。再如,颜色信息可以是亮度色度(YcbCr,YUV)信息。其中,Y表示明亮度(Luma),Cb(U)表示蓝色色差,Cr(V)表示红色色差。
根据激光测量原理得到的点云,点云中的点可以包括点的三维坐标信息和点的激光反射强度(reflectance)。再如,根据摄影测量原理得到的点云,点云中的点可以可包括点的三维坐标信息和点的颜色信息。再如,结合激光测量和摄影测量原理得到点云,点云中的点可以可包括点的三维坐标信息、点的激光反射强度(reflectance)和点的颜色信息。
点云可以按获取的途径分为:
第一类静态点云:即物体是静止的,获取点云的设备也是静止的;
第二类动态点云:物体是运动的,但获取点云的设备是静止的;
第三类动态获取点云:获取点云的设备是运动的。
例如,按点云的用途分为两大类:
类别一:机器感知点云,其可以用于自主导航系统、实时巡检系统、地理信息系统、视觉分拣机器人、抢险救灾机器人等场景;
类别二:人眼感知点云,其可以用于数字文化遗产、自由视点广播、三维沉浸通信、三维沉浸交互等点云应用场景。
由于点云是海量点的集合,存储点云不仅会消耗大量的内存,而且不利于传输,也没有这么大的带宽可以支持将点云不经过压缩直接在网络层进行传输,因此,需要对点云进行压缩。
截止目前,可对点云进行压缩的点云编码框架可以是运动图象专家组(Moving Picture Experts Group,MPEG)提供的基于几何的点云压缩(Geometry Point Cloud Compression,G-PCC)编解码框架或基于视频的点云压缩(Video Point Cloud Compression,V-PCC)编解码框架,也可以是音视频编码标准(Audio Video Standard,AVS)提供的AVS-PCC编解码框架。G-PCC编解码框架可用于针对第一类静态点云和第三类动态获取点云进行压缩,V-PCC编解码框架可用于针对第二类动态点云进行压缩。G-PCC编解码框架也称为点云编解码器TMC13,V-PCC编解码框架也称为点云编解码器TMC2。
可以理解,在点云G-PCC编码器框架中,将输入点云进行slice划分后,再对slice进行独立编码。
如图1A所示的G-PCC编码器的框架中,将输入点云进行slice划分后,对slice进行独立编码。在slice中,点云的几何信息和点云中的点所对应的属性信息是分开进行编码的。G-PCC编码器首先对几何信息进行编码。编码器对几何信息进行坐标转换,使点云全都包含在一个bounding box中;然后再进行量化,这一步量化主要起到缩放的作用,由于量化取整,使得一部分点的几何信息相同,根据参数来决定是否移除重复点,量化和移除重复点这一过程又被称为体素化过程。接下来,对bounding box进行基于八叉树的划分。根据八叉树划分层级深度的不同,几何信息的编码又分为基于八叉树和三角面片集的两种框架。
在基于八叉树的几何信息编码框架中,将包围盒八等分为8个子立方体,并记录子立方体的占位比 特(其中,1为非空,0为空),对非空的子立方体继续进行八等分,通常划分得到的叶子节点为1×1×1的单位立方体时停止划分。在这个过程中,利用节点(node)与周围节点的空间相关性,对占位比特进行帧内预测,最后进行算术编码(CABAC),生成二进制的几何比特流,即几何码流。
在基于三角面片集的几何信息编码框架中,同样也要先进行八叉树划分,但区别在于基于八叉树的几何信息编码,该方法不需要将点云逐级划分到边长为1×1×1的单位立方体,而是划分到block的边长为W时停止划分,基于每个block中点云的分布所形成的表面,得到该表面与block的十二条边产生的至多十二个vertex。最后依次编码每个block的vertex坐标,生成二进制的几何比特流,即几何码流。
G-PCC编码器在完成几何信息编码后,对几何信息进行重建,并使用重建的几何信息对点云的属性信息进行编码。目前,点云的属性编码主要是对点云中点的颜色信息进行编码。首先,编码器可以对点的颜色信息进行颜色空间转换,例如,当输入点云中点的颜色信息使用RGB颜色空间表示时,编码器可以将颜色信息从RGB颜色空间转换到YUV颜色空间。然后,利用重建的几何信息对点云重新着色,使得未编码的属性信息与重建的几何信息对应起来。在颜色信息编码中,主要有两种变换方法,一种方法是依赖于LOD划分的基于距离的提升变换,另一种方法是直接进行RAHT变换,这两种方法都会将颜色信息从空间域变换到频域,得到高频系数和低频系数,最后对系数进行量化和算术编码,生成二进制的属性比特流,即属性码流。
基于图1A所示的G-PCC编码器的框架,可以基于点云邻居节点的几何信息进行熵编码。这里,根据当前节点的6个邻居节点的占位比特构建上下文模型,以用于进行CABAC。
一种具体的示例中,在G-PCC编码器侧的具体实施描述如下:
(1)获取当前节点的6个邻居节点的占位比特(occupancy bit)。其中,占位比特表示邻居节点内有无点占据。如果邻居节点内有点占据,那么占位比特为1,否则占位比特则为0。根据邻居节点的占位比特可以计算得出邻居配置数(Neighbouring configuration number,NC)。其中,NC的取值可以为0到63,即二进制的000000到111111,如图2所示,其示出了相关技术提供的一种邻居配置数的结构示意图。在图2中,黑色填充的节点表示当前节点,该当前节点具有6个邻居节点,如果右侧的邻居节点有点占据,那么邻居配置数为1;如果左侧的邻居节点有点占据,那么邻居配置数为2;如果上侧的邻居节点有点占据,那么邻居配置数为4;如果下侧的邻居节点有点占据,那么邻居配置数为8;如果后侧的邻居节点有点占据,那么邻居配置数为16;如果前侧的邻居节点有点占据,那么邻居配置数为32。
(2)获取当前节点的8个子节点的占位比特,即如果子节点内有点占据,那么占位比特为1;否则,如果子节点内无点占据,那么占位比特则为0。根据子节点的占位比特计算得出子节点被占据数(Number of occupied child nodes,N
oc)。其中,N
oc的取值可以为1到8,如图3所示,其示出了相关技术提供的一种子节点被占据数的结构示意图。一个当前节点可以被划分为8个子节点。在图3中,N
oc=1,即当前节点的8个子节点中,只有一个子节点(用黑色填充表示,该子节点简称为单一子节点)内有点占据。
(3)当NC==0时(邻居配置数为0,即6个邻居节点中无邻居节点被占据),这时候如果标志位(flag)的赋值为1,那么代表N
oc等于1的情况(即8个子节点中仅有1个子节点被占据);如果flag的赋值为0,那么代表N
oc不等于1的情况(即8个子节点中不只1个子节点被占据),并对该flag进行自适应二进制算术编码,写入码流。
(4)当NC==0且flag==1时(6个邻居节点中无邻居节点被占据,且8个子节点中仅有1个子节点被占据),这时候先根据当前节点的8个子节点的占位比特算出其唯一被占据的子节点在当前节点内部的坐标信息(即XYZ坐标值,分别可取值为0、1,以图3为例,XYZ坐标值为(1,0,0)),并分别对XYZ坐标值进行等概率静态二进制算术编码,写入码流。
(5)当NC==0且flag==0时(6个邻居节点中无邻居节点被占据,且8个子节点中不只1个子节点被占据)或者当NC>0时(6个邻居节点中有邻居节点被占据),则对当前节点的8个子节点的占位比特进行CABAC,写入码流。
如图1B所示的G-PCC解码器的框架中,获取二进制码流后,针对二进制码流中的几何比特流和属性比特流分别进行独立解码。在对几何比特流的解码时,通过算术解码-八叉树合成-表面拟合-重建几何-反坐标变换,得到点云的几何信息;在对属性比特流的解码时,通过算术解码-反量化-基于LOD的反提升或者基于RAHT的反变换-反颜色转换,得到点云的属性信息,基于几何信息和属性信息还原待编码的点云数据的三维图像模型。
其中,基于图1B所示的G-PCC解码器的框架,也可以基于点云邻居节点的几何信息进行熵解码。这里,仍然根据当前节点的6个邻居节点的占位比特构建上下文模型,以用于进行CABAC解码。
一种具体的示例中,在G-PCC解码器侧的具体实施描述如下:
(1)获取当前节点的6个邻居节点的占位比特,即如果邻居节点内有点占据,则占位比特为1, 否则为0,以此计算得出NC。
(2)当NC==0时(邻居配置数为0,即6个邻居节点中无邻居节点被占据),用自适应二进制算术解码获得flag。
(3)当NC==0且flag==1时(6个邻居节点中无邻居节点被占据,且8个子节点中仅有1个子节点被占据),则用等概率静态二进制算术解码获得该唯一被占据的子节点在当前节点内部的XYZ坐标值,并还原出8个子节点的占位比特。
(4)当NC==0且flag==0时(6个邻居节点中无邻居节点被占据,且8个子节点中不只1个子节点被占据)或者当NC>0时(6个邻居节点中有邻居节点被占据),则用CABAC来解码获得当前节点的8个子节点的占位比特。
以八叉树节点的几何语法为例,表1给出了相关技术提供的一种语法元素以及语义描述的示例。其具体描述如下。
表1
在G-PCC国际标准草案(Draft International Standards,DIS)中,语法描述为“The variable OccupancyIdxMaybePresent specifies when single_occupancy_flag is present in the octree node syntax”。
在本申请实施例中,标识信息OccupancyIdxMaybePresent指示在码流中是否存在语法元素 single_child_flag对应的比特字段。一种具体的实施方式是,标识信息OccupancyIdxMaybePresent指示在码流的八叉树节点对应的数据单元中,是否存在语法元素single_child_flag对应的比特字段。当标识信息OccupancyIdxMaybePresent的取值等于1时,码流中存在语法元素single_child_flag对应的比特字段。这里,确定标识信息OccupancyIdxMaybePresent取值的一种方法如下伪代码所示:
numPlanarAxes=IsPlanar[0]+IsPlanar[1]+IsPlanar[2];
numNonPlanarAxes=IsNotPlanar[0]+IsNotPlanar[1]+IsNotPlanar[2];
OccupancyIdxMaybePresent=numPlanarAxes<3||(!NeighPattern&&!numNonPlanarAxes);
其中,对于IsPlanar[k]而言,k取值为0、1、2,其分别代表x、y、z坐标轴方向。具体地,IsPlanar[k]为1表示在平面编码模式条件合格的情况下,且当前节点划分的子节点位置形成一个垂直于该坐标轴的平面,采用了平面编码模式;IsPlanar[k]为0表示其他情况,包括:在平面编码模式条件合格的情况下,当前节点划分的子节点位置占据了两个垂直于该坐标轴的平面,或者平面编码模式条件不合格。这里,numPlanarAxes则表示平面编码模式条件合格的情况下,采用平面编码模式的坐标轴方向的个数。
对于IsNotPlanar[k]而言,k取值为0、1、2,其分别代表x、y、z坐标轴方向。具体地,IsNotPlanar[k]为1表示在平面编码模式条件合格的情况下,且当前节点的子节点位置占据了两个垂直于该坐标轴的平面,没有采用平面编码模式;IsNotPlanar[k]为0表示其他情况,包括:在平面编码模式条件合格的情况下,当前节点的子节点位置形成一个垂直于该坐标轴的平面,或者平面编码模式条件不合格。这里,numNonPlanarAxes表示平面编码模式条件合格的情况下,没有采用平面编码模式的坐标轴方向的个数。
另外,numPlanarAxes<3表示平面编码模式条件合格的情况下,不是所有x、y、z坐标轴方向都采用了平面编码模式;(!NeighPattern&&!numNonPlanarAxes)表示邻居配置数为0,即6个邻居节点中无邻居节点被占据,且x、y、z坐标轴方向平面编码模式条件合格的情况下,当前节点划分的子节点位置形成一个垂直于该坐标轴的平面,或者平面编码模式条件不合格。这里,“numPlanarAxes<3”和“(!NeighPattern&&!numNonPlanarAxes)”两者进行或运算,即可确定出标识信息OccupancyIdxMaybePresent的取值。
示例性地,编码器使用上述方法,确定标识信息OccupancyIdxMaybePresent的取值。编码器判断OccupancyIdxMaybePresent的取值等于1时,使用ae(v)对应的熵编码方法,将single_child_flag的取值写入码流中的数据单元中;当编码器判断OccupancyIdxMaybePresent的取值等于0时,编码器不将single_child_flag的取值写入码流中的数据单元中。其中,ae(v)表示使用上下文自适应的算术熵编码方法对语法单元进行编码,这里的数据单元可以是八叉树节点对应的数据单元,例如,八叉树节点的几何信息数据单元。编码器根据single_child_flag对点云码流进行解码,例如,编码八叉树节点的几何信息;例如,编码点云数据的属性信息。
示例性地,解码器使用上述方法,确定标识信息OccupancyIdxMaybePresent的取值。解码器判断OccupancyIdxMaybePresent的取值等于1时,使用ae(v)对应的熵解码方法,从码流的数据单元中解析single_child_flag对应的比特字段,确定single_child_flag的取值;当解码器判断OccupancyIdxMaybePresent的取值等于0时,解码器确定码流的数据单元中不存在single_child_flag对应的比特字段,这种情况下,解码器不需要通过解析码流single_child_flag的取值,可选择地,解码器将single_child_flag的取值设置为默认值0。其中,ae(v)表示使用上下文自适应的算术熵解码方法对语法单元在码流中对应的比特字段进行解析;这里所述数据单元可以是八叉树节点对应的数据单元,例如,八叉树节点的几何信息数据单元。解码器根据single_child_flag对点云码流进行解码,例如,解码八叉树节点的几何信息;例如,解码点云数据的属性信息。
另外,对于语法元素single_child_flag而言,当single_child_flag的取值等于1时,表示当前节点仅包括有一个子节点被占据;当single_child_flag的取值等于0时,表示当前节点可以包括多个子节点被占据。另外,当前节点内不存在子节点被占据时,这时候single_child_flag的取值将被推断为0。也就是说,flag为1代表N
oc等于1的情况(即8个子节点中仅有1个子节点被占据),flag为0代表N
oc不等于1的情况(即8个子节点中不只1个子节点被占据)。
对于语法元素occupancy_idx[i]而言,occupancy_idx[i]表示当前节点中单一子节点在八叉树子节点遍历顺序索引的第i个比特。其中,第0个比特代表了单一子节点在当前节点中z方向的坐标值(0或1),第1个比特代表了单一子节点在当前节点中y方向的坐标值(0或1),第2个比特代表了单一子节点在当前节点中x方向的坐标值(0或1)。
然而,目前的相关技术中,仅有当NC==0且N
oc==1时(6个邻居节点中无邻居节点被占据,且8个子节点中仅有1个子节点被占据),则采用编解码当前节点中唯一被占据的子节点(可简称为“单一子节点”)在当前节点内的XYZ坐标值(分别可取值为0、1,以图3为例,XYZ坐标值为(1,0,0)) 的方法,本申请实施例可将其称为“单一子节点的坐标值编解码方法”。由于该方法没有充分利用空间相关性,从而降低了编解码效率。
本申请一实施例提供一种点云编码方法,该方法的基本思想是:获取当前节点的邻居节点的占位比特信息;根据所述邻居节点的占位比特信息,确定上下文模型;利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。这样,由于利用邻居节点的占位比特信息来构建上下文模型,如此基于所构建的上下文模型对单一子节点的标识信息和坐标信息进行熵编码,能够充分利用点云的空间相关性,从而能够提高点云的编解码效率。
下面将结合附图对本申请各实施例进行详细阐述。
本申请的一实施例中,本申请实施例提供的点云编码方法应用于视频编码设备,即G-PCC编码器,也可简称为编码器。该方法所实现的功能可以通过编码器中的第一处理器调用计算机程序来实现,当然计算机程序可以保存在第一存储器中,可见,编码器至少包括第一处理器和第一存储器。
参见图4,其示出了本申请实施例提供的一种点云编码方法的流程示意图。如图4所示,该方法可以包括:
S401:获取当前节点的邻居节点的占位比特信息。
需要说明的是,在点云中,点可以是点云中的所有点,也可以是点云中的部分点,这些点在空间上相对集中。这里,当前节点也可以称为当前点或者当前块,具体是指点云中当前待编码的点或者块。
还需要说明的是,基于图1A所示的G-PCC编码器的框架,本申请实施例的方法主要应用于“上下文建模”部分,针对目前的相关技术中基于点云邻居节点的几何信息熵编码进行优化,以提升对空间相关性的利用程度。
可以理解,邻居节点的占位比特信息是根据该邻居节点内有无点占据确定的。在一些实施例中,所述获取当前节点的邻居节点的占位比特信息,可以包括:
若所述邻居节点内有点占据,则确定所述邻居节点的占位比特信息等于第一值;
若所述邻居节点内无点占据,则确定所述邻居节点的占位比特信息等于第二值。
在本申请实施例中,所述邻居节点包括下述至少之一:与所述当前节点共面的邻居节点、与所述当前节点共线的邻居节点和与所述当前节点共点的邻居节点。
也就是说,通过对点云进行空间划分,可以得到至少一个点;根据当前节点的几何位置,从这至少一个点中确定当前节点的邻居节点。通常情况下,当前节点的邻居节点数量总共为26个。其中,与当前节点共面的邻居节点数量有6个,与当前节点共线的邻居节点数量有12个,与当前节点共点的邻居节点数量有8个。
在本申请实施例中,第一值可以为1,第二值可以为0;或者,第一值可以为0,第二值可以为1。在一种具体的示例中,第一值可设置为1,第二值可设置为0,但是不作具体限定。
也就是说,以第一值为1,第二值为0为例,如果某邻居节点内有点占据,那么该邻居节点的占位比特信息等于1;如果某邻居节点内无点占据,那么该邻居节点的占位比特信息等于0。反之,如果某邻居节点的占位比特信息等于1,那么说明该邻居节点内有点占据;如果某邻居节点的占位比特信息等于0,那么说明该邻居节点内无点占据。
S402:根据所述邻居节点的占位比特信息,确定上下文模型。
S403:利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流。
在本申请实施例中,所述相关信息可以包括至少之一:单一子节点的标识信息和单一子节点的坐标信息。相应地,上下文模型可以包括第一上下文模型和第二上下文模型。其中,第一上下文模型用于对单一子节点的标识信息进行预测,第二上下文模型用于对单一子节点的坐标信息进行预测。
在一种可能的实施方式中,当相关信息为单一子节点的标识信息时,这时候对于S402来说,在一些实施例中,所述根据所述邻居节点的占位比特信息,确定上下文模型,可以包括:
根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息;
根据所述当前节点的预测标识信息,确定所述第一上下文模型。
需要说明的是,根据当前节点的预测标识信息,可以确定出第一上下文模型的索引序号值,然后根据该第一上下文模型的索引序号值,进而可以确定出第一上下文模型。因此,在一些实施例中,所述根据所述当前节点的预测标识信息,确定所述第一上下文模型,可以包括:
根据所述当前节点的预测标识信息,获得第一上下文模型的索引序号值;
根据所述第一上下文模型的索引序号值,确定所述第一上下文模型。
在一种具体的实施例中,该方法还可以包括:构建至少一个第一候选上下文模型;其中,不同的第一候选上下文模型对应不同的索引序号。
相应地,所述根据所述第一上下文模型的索引序号值,确定所述第一上下文模型,可以包括:
根据所述第一上下文模型的索引序号值,从所述至少一个第一候选上下文模型中选择所述索引序号值对应的第一候选上下文模型,将所选择的第一候选上下文模型确定为所述第一上下文模型。
也就是说,本申请实施例可以预先构建出至少一个第一候选上下文模型,而且不同的第一候选上下文模型输出不同的标识信息,同时不同的第一候选上下文模型对应不同的索引序号。如此,根据不同的标识信息就可以确定出不同的索引序号。这样,在根据当前节点的预测标识信息确定出第一上下文模型的索引序号值之后,然后可以从这至少一个第一候选上下文模型中选择索引序号值对应的第一候选上下文模型,以将其确定为第一上下文模型。
进一步地,对于S403来说,在一些实施例中,所述利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流,可以包括:
确定当前节点的子节点被占据数;
根据所述子节点被占据数,确定所述单一子节点的标识信息;
利用所述第一上下文模型对所述单一子节点的标识信息进行熵编码,并写入码流。
需要说明的是,子节点被占据数(Number of occupied child nodes,N
oc)用于表示当前节点的多个子节点中有无子节点被占据。这里,在一些实施例中,所述确定当前节点的子节点被占据数,可以包括:
获取所述当前节点划分的子节点的占位比特信息;
根据所述子节点的占位比特信息,确定所述子节点被占据数。
这里,当前节点划分的子节点通常包括8个子节点,即针对当前节点进行划分,可以将其划分为8个子节点,具体如图3所示。
还需要说明的是,子节点的占位比特信息是根据子节点内有无点占据确定的。在一种具体的实施例中,所述获取所述当前节点划分的子节点的占位比特信息,可以包括:
若所述子节点内有点占据,则确定所述子节点的占位比特信息等于第一值;
若所述子节点内无点占据,则确定所述子节点的占位比特信息等于第二值。
在本申请实施例中,第一值可以为1,第二值可以为0;或者,第一值可以为0,第二值可以为1。在一种具体的示例中,第一值可设置为1,第二值可设置为0,但是不作具体限定。
也就是说,以第一值为1,第二值为0为例,如果某子节点内有点占据,那么该子节点的占位比特信息等于1;如果某子节点内无点占据,那么该子节点的占位比特信息等于0。这样,针对当前节点的8个子节点的占位比特信息,可以计算得到子节点被占据数。例如,如果8个子节点中仅有一个子节点被占据,那么计算得到的子节点被占据数等于1;反之,如果8个子节点中不只有一个子节点被占据,这时候计算得到的子节点被占据数不等于1。
换言之,根据子节点被占据数,可以反映当前节点中有无子节点被占据。在一些实施例中,该方法还可以包括:
若子节点被占据数等于1,则确定当前节点划分的子节点中仅包括一个被占据子节点;
若子节点被占据数不等于1,则确定当前节点划分的子节点中包括至少两个被占据子节点。
在本申请实施例中,子节点被占据数的取值范围为1~8。也就是说,如果子节点被占据数等于1,那么可以表明当前节点中仅有一个子节点被占据,即当前节点划分的子节点中仅包括一个被占据子节点,这时候的被占据子节点即为本申请实施例所述的单一子节点;如果子节点被占据数不等于1,那么可以表明当前节点中不只有一个子节点被占据,即当前节点划分的子节点中包括至少两个被占据子节点。
进一步地,在一些实施例中,单一子节点的标识信息(如标志位,flag)的确定,其主要是和子节点被占据数有关。因此,在一种具体的实施例中,所述根据所述子节点被占据数,确定所述单一子节点的标识信息,可以包括:
若所述子节点被占据数等于1,则确定所述单一子节点的标识信息的取值为第一标识值;
若所述子节点被占据数不等于1,则确定所述单一子节点的标识信息的取值为第二标识值。
在另一种具体的实施例中,所述根据子节点被占据数,确定所述单一子节点的标识信息,可以包括:
若所述当前节点划分的子节点中仅一个子节点被占据,则确定所述单一子节点的标识信息的取值为第一标识值;
若所述当前节点划分的子节点中至少两个子节点被占据,则确定所述单一子节点的标识信息的取值为第二标识值。
在本申请实施例中,第一标识值可以为1,第二标识值可以为0;或者,第一标识值可以为0,第二标识值可以为1。在一种具体的示例中,第一标识值可设置为1,第二标识值可设置为0,但是不作具体限定。
需要说明的是,标识信息的取值也可以是被占据子节点的个数。例如,如果当前节点划分的子节点 中无被占据子节点,那么标识信息的取值等于0;如果当前节点划分的子节点中仅包括一个被占据子节点,那么标识信息的取值等于1;如果当前节点划分的子节点中包括至少两个被占据子节点,那么标识信息的取值大于或等于2。
这样,在确定出标识信息的取值后,可以利用第一上下文模型对标识信息的取值进行熵编码,并写入码流。
在另一种可能的实施方式中,当相关信息为单一子节点的坐标信息时,这时候对于S402来说,在一些实施例中,所述根据所述邻居节点的占位比特信息,确定上下文模型,可以包括:
根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息;
根据所述当前节点的预测坐标信息,确定所述第二上下文模型。
需要说明的是,根据当前节点的预测坐标信息,可以确定出第二上下文模型的索引序号值,然后根据该第二上下文模型的索引序号值,进而可以确定出第二上下文模型。因此,在一些实施例中,所述根据所述当前节点的预测坐标信息,确定所述第二上下文模型,可以包括:
根据所述当前节点的预测坐标信息,获得第二上下文模型的索引序号值;
根据所述第二上下文模型的索引序号值,确定所述第二上下文模型。
在一种具体的实施例中,该方法还可以包括:构建至少一个第二候选上下文模型;其中,不同的第二候选上下文模型对应不同的索引序号。
相应地,所述根据所述第二上下文模型的索引序号值,确定所述第二上下文模型,可以包括:
根据所述第二上下文模型的索引序号值,从所述至少一个第二候选上下文模型中选择所述索引序号值对应的第二候选上下文模型,将所选择的第二候选上下文模型确定为所述第二上下文模型。
也就是说,本申请实施例可以预先构建出至少一个第二候选上下文模型,而且不同的第二候选上下文模型输出不同的坐标信息,同时不同的第二候选上下文模型也对应不同的索引序号。如此,根据不同的标识信息也可以确定出不同的索引序号。这样,在根据当前节点的预测坐标信息确定出第二上下文模型的索引序号值之后,然后可以从这至少一个第二候选上下文模型中选择索引序号值对应的第二候选上下文模型,以将其确定为第二上下文模型。
进一步地,对于S403来说,在一些实施例中,所述利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流,可以包括:
当所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,确定所述单一子节点的坐标信息;以及利用所述第二上下文模型对所述单一子节点的坐标信息进行熵编码,并写入码流。
需要说明的是,在标识信息的取值指示当前节点划分的子节点中仅一个子节点被占据时,这时候需要确定唯一被占据的子节点(可简称为“单一子节点”)的坐标信息,以便对单一子节点的坐标信息进行熵编码,并写入码流。
在本申请实施例中,由于邻居配置数的不同,对于单一子节点的坐标信息所采用的熵编码方式可能不同。因此,在一些实施例中,该方法还可以包括:确定当前节点的邻居配置数。
这样,根据当前节点的邻居配置数,可以确定当前节点中是否有邻居节点被占据,然后能够进一步确定出对于单一子节点的坐标信息所采用的熵编码方式,比如利用第二上下文模型对单一子节点的坐标信息进行熵编码方式,或者对单一子节点的坐标信息进行等概率静态二进制算术编码方式。
在一些实施例中,对于S403来说,所述利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流,可以包括:
若所述邻居配置数指示所述当前节点中有邻居节点被占据,则在所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,确定所述单一子节点的坐标信息;以及利用所述第二上下文模型对所述单一子节点的坐标信息进行熵编码,并写入码流。
进一步地,在一些实施例中,该方法还可以包括:
若所述邻居配置数指示所述当前节点中无邻居节点被占据,则在所述单一子节点的标识信息指示所述当前节点划分的子节点中仅包括一个被占据子节点时,确定所述单一子节点的坐标信息;以及对所述单一子节点的坐标信息进行等概率静态二进制算术编码,并写入码流。
需要说明的是,邻居配置数(Neighbouring configuration number,NC)用于表示与当前节点共面的邻居节点中有无邻居节点被占据。具体地,在一些实施例中,所述确定当前节点的邻居配置数,包括:
获取与所述当前节点共面的邻居节点的占位比特信息;
根据所述与所述当前节点共面的邻居节点的占位比特信息,确定所述邻居配置数。
这里,与当前节点共面的邻居节点可以包括下述至少之一:与所述当前节点左侧面相接的邻居节点、与所述当前节点右侧面相接的邻居节点、与所述当前节点上侧面相接的邻居节点、与所述当前节点下侧 面相接的邻居节点、与所述当前节点后侧面相接的邻居节点、与所述当前节点前侧面相接的邻居节点。也就是说,与当前节点共面的邻居节点通常包括有6个,具体如图2所示。
还需要说明的是,邻居节点的占位比特信息是根据邻居节点内有无点占据确定的。在一种具体的实施例中,所述获取所述当前节点的邻居节点的占位比特信息,可以包括:
若所述邻居节点内有点占据,则确定所述邻居节点的占位比特信息等于第一值;
若所述邻居节点内无点占据,则确定所述邻居节点的占位比特信息等于第二值。
在本申请实施例中,第一值可以为1,第二值可以为0;或者,第一值可以为0,第二值可以为1。在一种具体的示例中,第一值可设置为1,第二值可设置为0,但是不作具体限定。
也就是说,以第一值为1,第二值为0为例,在与当前节点共面的6个邻居节点中,如果某邻居节点内有点占据,那么该邻居节点的占位比特信息等于1;如果某邻居节点内无点占据,那么该邻居节点的占位比特信息等于0。这样,针对当前节点的6个邻居节点的占位比特信息,可以计算得到邻居配置数。例如,如果6个邻居节点中无邻居节点被占据,用二进制表示为000000,这时候计算得到的邻居配置数等于0;反之,如果6个邻居节点中有邻居节点被占据,用二进制表示为000001~111111,这时候计算得到的邻居配置数为1~63,即这时候的邻居配置数大于0。
换言之,根据邻居配置数,可以反映当前节点中有无邻居节点被占据。在一些实施例中,该方法还可以包括:
若所述邻居配置数大于0,则确定所述当前节点中有邻居节点被占据;
若所述邻居配置数等于0,则确定所述当前节点中无邻居节点被占据。
在本申请实施例中,邻居配置数的取值范围为0~63。也就是说,如果邻居配置数大于0,那么表明当前节点中有邻居节点被占据;如果邻居配置数等于0,那么表明当前节点中无邻居节点被占据。
进一步地,在一些实施例中,所述确定所述单一子节点的坐标信息,可以包括:
获取所述当前节点划分的子节点的占位比特信息;
根据所述子节点的占位比特信息,计算所述单一子节点的坐标信息。
也就是说,在获取到当前节点划分的8个子节点的占位比特信息之后,可以根据这8个子节点的占位比特信息计算得到单一子节点的坐标信息。然后当邻居配置数指示所述当前节点中有邻居节点被占据且单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,这时候可以利用第二上下文模型对单一子节点的坐标信息进行熵编码,并写入码流。
可以理解地,在S402之前,还需要确定单一子节点使能变量的取值。因此,在一些实施例中,该方法还可以包括:
确定单一子节点使能变量的取值;
相应地,对于S402来说,所述根据所述邻居节点的占位比特信息,确定上下文模型,可以包括:
在所述单一子节点使能变量的取值指示所述当前节点处于单一子节点使能状态时,根据所述邻居节点的占位比特信息,确定上下文模型。
需要说明的是,本申请实施例引入了一个新的变量,即单一子节点使能变量(可以用ctxSingleChildEnabled表示)。其中,当单一子节点使能变量的取值指示当前节点处于单一子节点使能状态时,这时候需要确定上下文模型,比如第一上下文模型和第二上下文模型,以便后续利用第一上下文模型和第二上下文模型对当前节点的相关信息进行熵编码。
还需要说明的是,单一子节点使能变量与节点数量(用N
all表示)和单一子节点数量(用N
singe表示)有关。具体地,在一些实施例中,所述确定单一子节点使能变量的取值,可以包括:
确定节点数量以及单一子节点数量;
对所述单一子节点数量和所述节点数量进行除法运算,得到第一比例值;
将所述第一比例值和第一阈值进行比较;
根据所述第一比例值和所述第一阈值的比较结果,确定所述单一子节点使能变量的取值。
在一种具体的实施例中,所述根据所述第一比例值和所述第一阈值的比较结果,确定所述单一子节点使能变量的取值,可以包括:
若所述第一比例值大于所述第一阈值,则确定所述单一子节点使能变量的取值为第三值;
若所述第一比例值小于或等于所述第一阈值,则确定所述单一子节点使能变量的取值为第四值。
在本申请实施例中,第三值可以为1,第四值可以为0;或者,第三值可以为0,第四值可以为1。在一种具体的示例中,第三值可设置为1,第四值可设置为0,但是不作具体限定。
需要说明的是,第一阈值可以作为判断单一子节点使能变量取值的衡量指标。在本申请实施例中,第一阈值可以表示预先设定的固定值(比如根据经验值得到),也可以表示通过自适应算法确定的值,甚至还可以表示由编码器写入码流以使得在解码器中能够通过解析码流获得的值。这里,第一阈值的取 值范围为[0,1]之内,根据实际情况进行具体调整。在本申请的一种具体示例中,第一阈值可以设置为0.8,但是不作具体限定。
还需要说明的是,单一子节点使能变量可以用ctxSingleChildEnabled表示。针对单一子节点使能变量的确定,可以根据下式实现,具体如下所示,
其中,N
singe÷N
all表示第一比例值。这时候如果第一比例值大于0.8,那么ctxSingleChildEnabled的取值为1;否则,如果第一比例值小于或等于0.8,那么ctxSingleChildEnabled的取值为0。
进一步地,在一些实施例中,该方法还可以包括:
若单一子节点使能变量的取值为1,则确定所述当前节点处于单一子节点使能状态;
若单一子节点使能变量的取值为0,则确定所述当前节点处于单一子节点不使能状态。
也就是说,如果ctxSingleChildEnabled=1,那么当前节点处于单一子节点使能状态,这时候可以执行本申请实施例所述的点云编码方法;如果ctxSingleChildEnabled=0,那么当前节点处于单一子节点不使能状态,这时候可以执行相关技术的点云编码方法,即对当前节点的8个子节点的占位比特进行CABAC,并写入码流。
还需要说明的是,本申请实施例中的N
singe和N
all是不断更新的。在一些实施例中,该方法还可以包括:
对输入点云进行八叉树划分,得到K层的八叉树;
在进入所述八叉树的第i层时,设置所述节点数量的初始值为0,所述单一子节点数量的初始值为0,所述单一子节点使能变量的初始值为0;其中,i为大于或等于0且小于K的整数。
这里,K表示八叉树的层数,K为大于0的整数。其中,针对八叉树的每一层,当进入该层时,首先需要初始化节点数量、单一子节点数量和单一子节点使能变量的取值,即节点数量的初始值赋值为0,单一子节点数量的初始值赋值为0,单一子节点使能变量的初始值赋值为0。
进一步地,当所述当前节点处于第i层时,所述确定节点数量以及单一子节点数量,可以包括:
基于所述第i层中的已编码节点,获得所述节点数量;
从所述已编码节点中确定仅包括一个被占据子节点的已编码节点,获得所述单一子节点数量。
需要说明的是,节点数量和单一子节点数量都是第i层中的已编码节点。对于单一子节点数量而言,所述从已编码节点中确定仅包括一个被占据子节点的已编码节点,获得所述单一子节点数量,可以包括:
在所述已编码节点中,判断所述已编码节点划分的子节点是否仅包括一个被占据子节点;
若判断结果为是,则对所述单一子节点数量执行加1操作,更新所述单一子节点数量;
若判断结果为否,则维持所述单一子节点数量不变。
换句话说,在对输入点云进行八叉树划分后,可以得到K层的八叉树。在进入八叉树的第i层时,初始化节点数量(N
all)、单一子节点数量(N
singe)和单一子节点使能变量(ctxSingleChildEnabled)的值,即赋值N
all=0,N
singe=0,ctxSingleChildEnabled=0。然后针对第i层,在第i层的第j个节点已经完成点云编码后,可以更新N
all=N
all+1,即节点数量表示已编码节点的数量。若第j个节点划分的子节点中仅包括一个被占据子节点(即N
oc=1)时,则更新N
singe=N
singe+1,也即单一子节点数量表示已编码节点中确定仅包括一个被占据子节点的已编码节点的数量。在j小于N时,则更新j=j+1,继续执行读取所述第i层的第j个节点的步骤,直至第i层中所有节点均已经处理,j为大于或等于0且小于N的整数,N为第i层中的节点总数量;然后再进入八叉树的第i+1层,直至八叉树的K层全部已处理。
这样,在确定出N
singe和N
all之后,结合式(1)可以计算得到单一子节点使能变量(ctxSingleChildEnabled)的取值,以便确定后续是否需要利用上下文模型进行熵编码。
具体来讲,在本申请实施例中,如果邻居配置数指示当前节点中有邻居节点被占据,那么表示NC>0;如果单一子节点使能变量的取值指示当前节点处于单一子节点使能状态,那么表示ctxSingleChildEnabled=1。也就是说,本申请实施例提出了一种新的基于点云邻居节点的几何信息熵编码,以扩大使用单一子节点的坐标信息编码到N
oc==1时(8个子节点中仅有1个子节点被占据)但NC>0(6个邻居节点中有邻居节点被占据)的情况,在邻居节点的子节点不用于构建上下文模型(即adjacent_child_contextualization_enabled_flag==0)的情况下,这时候采用的构建上下文模型的方式。
换言之,本申请实施例是在邻居节点的子节点不用于构建上下文模型(adjacent_child_contextualization_enabled_flag==0)的情况下,可以利用邻居节点的占位比特信息来构建上下文模型,然后再利用CABAC进行单一子节点的坐标信息编码,可以进一步提高编码效率。
在语法描述中,“adjacent_child_contextualization_enabled_flag equal to 1 indicates that the adjacent children of neighbouring octree nodes are used for bit-wise occupancy contextualization”表示语法元素adjacent_child_contextualization_enabled_flag为1时,邻居节点的子节点可以用于占位比特信息编码的上下文模型构建;“adjacent_child_contextualization_enabled_flag equal to 0 indicates that the children of neighbouring octree nodes are is not used for the occupancy contextualization”表示语法元素adjacent_child_contextualization_enabled_flag为0时,邻居节点的子节点不可以用于占位比特信息编码的上下文模型构建。
下面将针对利用邻居节点的占位比特信息来构建第一上下文模型和第二上下文模型的具体过程进行详细描述。
在一些实施例中,在单一子节点使能变量的取值指示当前节点处于单一子节点使能状态时,对于第一上下文模型,所述根据所述邻居节点的占位比特信息,确定上下文模型,可以包括:
根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息;
根据所述当前节点的预测标识信息,确定所述第一上下文模型。
需要说明的是,第一上下文模型的确定与当前节点的预测标识信息有关,而当前节点的预测标识信息是由邻居节点的占位比特信息确定的。在一种具体的实施例中,所述根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息,可以包括:
根据所述邻居节点的占位比特信息,确定与当前节点共面的邻居节点中有点占据的第一节点数量;
根据所述第一节点数量,确定所述当前节点的预测标识信息。
还需要说明的是,这里的第一节点数量是指与当前节点共面的邻居节点中有点占据的节点数量。具体如图2所示,与当前节点共面的邻居节点总共有6个,分别为:与当前节点左侧面相接的邻居节点、与当前节点右侧面相接的邻居节点、与当前节点上侧面相接的邻居节点、与当前节点下侧面相接的邻居节点、与当前节点后侧面相接的邻居节点、与当前节点前侧面相接的邻居节点;然后从这6个邻居节点中确定出第一节点数量的取值。
在本申请实施例中,第一节点数量可以用N
on表示,N
on表示与当前节点共面的6个邻居节点中有点占据的邻居节点数量,N
on可取值为0到6。
进一步地,在得到第一节点数量后,可以用以确定当前节点的预测标识信息。在一些实施例中,所述根据所述第一节点数量,确定所述当前节点的预测标识信息,可以包括:
将所述第一节点数量与第二阈值进行比较;
根据所述第一节点数量与所述第二阈值的比较结果,确定所述当前节点的预测标识信息。
在一种具体的实施例中,所述根据所述第一节点数量与所述第二阈值的比较结果,确定所述当前节点的预测标识信息,可以包括:
若所述第一节点数量小于所述第二阈值,则确定所述当前节点的预测标识信息等于第五值;
若所述第一节点数量大于或等于所述第二阈值,则确定所述当前节点的预测标识信息等于第六值。
在本申请实施例中,第五值可以为1,第六值可以为0;或者,第五值可以为0,第六值可以为1。在一种具体的示例中,第五值可设置为1,第六值可设置为0,但是不作具体限定。。
另外,第二阈值可以作为判断当前节点的预测标识信息取值的衡量指标。在本申请实施例中,第二阈值可以表示预先设定的固定值,也可以表示通过自适应算法确定的值,甚至还可以表示由编码器写入码流以使得在解码器中能够通过解析码流获得的值。这里,第二阈值的取值范围为[0,6]之内,根据实际情况进行具体调整。在本申请的一种具体示例中,第二阈值可以设置为3,但是不作具体限定。
在一种具体的实现方式中,通过N
on对标识信息(如标志位,flag)的预测,可以构建出2种上下文模型,具体如下所示,
针对语法元素single_child_flag:
参见图5,其示出了本申请实施例提供的一种根据邻居节点预测标识信息的流程示意图。如图5所示,该流程可以包括:
S501:获取与当前节点相接的6个邻居节点的占位比特信息;
S502:确定N
on;
S503:判断N
on是否小于3;
S504:若判断结果为否,则flag=0;
S505:若判断结果为是,则flag=1。
需要说明的是,标识信息(flag)的预测,对于S503来说,判断是否N
on<3,如果判断结果为否, 则执行S504;如果判断结果为是,则执行S505。
也就是说,在得到N
on之后,可以根据N
on可以确定出标识信息的预测值,进而确定出第一上下文模型的索引序号值,然后根据式(2)所示的两个第一候选上下文模型中选择索引序号值对应的第一候选上下文模型,以将其确定为第一上下文模型。
在一些实施例中,在单一子节点使能变量的取值指示当前节点处于单一子节点使能状态时,对于第二上下文模型,所述根据所述邻居节点的占位比特信息,确定上下文模型,可以包括:
根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息;
根据所述当前节点的预测坐标信息,确定所述第二上下文模型。
需要说明的是,第二上下文模型的确定与当前节点的预测坐标信息有关,而当前节点的预测坐标信息是由邻居节点的占位比特信息确定的。在一种具体的实施例中,所述根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息,可以包括:
根据所述邻居节点的占位比特信息,确定第一方向坐标值为第七值对应的第一平面内邻居节点中有点占据的第二节点数量,以及第二方向坐标值为第七值对应的第二平面内邻居节点中有点占据的第三节点数量,以及第三方向坐标值为第七值对应的第三平面内邻居节点中有点占据的第四节点数量;
将所述第二节点数量与第三阈值进行比较,根据比较结果确定第一坐标方向的第一一预测值;
将所述第三节点数量与第三阈值进行比较,根据比较结果确定第二坐标方向的第二一预测值;
将所述第四节点数量与第三阈值进行比较,根据比较结果确定第三坐标方向的第三一预测值;
根据第一一预测值、第二一预测值和第三一预测值,得到当前节点的第一组预测坐标信息。
这里,第七值可以为-1,或者第七值可以为1。在一种具体的示例中,第七值可以为-1,但是不作具体限定。
另外,第三阈值可以作为判断当前节点的预测坐标信息取值的衡量指标。在本申请实施例中,第三阈值可以表示预先设定的固定值,也可以表示通过自适应算法确定的值,甚至还可以表示由编码器写入码流以使得在解码器中能够通过解析码流获得的值。在本申请实施例中,第三阈值可以根据实际情况进行具体调整,这里不作具体限定。在一种具体的示例中,第三阈值可以设置为0。
需要说明的是,坐标信息包括有第一方向坐标值、第二方向坐标值和第三方向坐标值。这里,第一方向可以为水平坐标轴(x轴)方向,第二方向可以为垂直坐标轴(y轴)方向,第三方向可以为第三坐标轴(z轴)方向。
还需要说明的是,第二节点数量可以用N
x=-1表示,N
x=-1表示x轴方向坐标值为-1的yz平面上9个邻居节点中有点占据的节点数量,N
x=-1可取值为0到9。第三节点数量可以用N
y=-1表示,N
y=-1表示y轴方向坐标值为-1的xz平面上9个邻居节点中有点占据的节点数量,N
y=-1可取值为0到9。第四节点数量可以用N
z=-1表示,N
z=-1表示z轴方向坐标值为-1的xy平面上9个邻居节点中有点占据的节点数量,N
z=-1可取值为0到9。
示例性地,如图6所示,当前节点用黑色填充表示,与当前节点相接的邻居节点有26个。假定第七值等于-1,可以定义N
x=-1为x轴方向坐标值为-1的yz平面上9个邻居节点中有点占据的节点数量,通过N
x=-1可以预测当前节点中单一子节点的x轴方向的坐标值(即第一一预测值,用X
0表示),据此可以构建出2种上下文模型,具体如下所示,
针对语法元素occupancy_idx[2]:
假定第七值等于-1,可以定义N
y=-1为y轴方向坐标值为-1的xz平面上9个邻居节点中有点占据的节点数量,通过N
y=-1可以预测当前节点中单一子节点的y轴方向的坐标值(即第二一预测值,用Y
0表示),据此可以构建出2种上下文模型,具体如下所示,
针对语法元素occupancy_idx[1]:
假定第七值等于-1,可以定义N
z=-1为z轴方向坐标值为-1的xy平面上9个邻居节点中有点占据的节点数量,通过N
z=-1可以预测当前节点中单一子节点的z轴方向的坐标值(即第三一预测值,用Z
0表示),据此可以构建出2种上下文模型,具体如下所示,
针对语法元素occupancy_idx[0]:
参见图7,其示出了本申请实施例提供的一种根据邻居节点预测坐标信息的流程示意图。如图7所示,该流程可以包括:
S701:获取与当前节点相接的26个邻居节点的占位比特信息;
S702:确定N
x=-1、N
y=-1和N
z=-1;
S703:判断N
x=-1>0;
S704:若判断结果为否,则X
0=1;
S705:若判断结果为是,则X
0=0;
S706:判断N
y=-1>0;
S707:若判断结果为否,则Y
0=1;
S708:若判断结果为是,则Y
0=0;
S709:判断N
z=-1>0;
S710:若判断结果为否,则Z
0=1;
S711:若判断结果为是,则Z
0=0。
需要说明的是,对于S703来说,判断N
x=-1是否大于0,如果判断结果为否,则执行S704;如果判断结果为是,则执行S705。对于S706来说,判断N
y=-1是否大于0,如果判断结果为否,则执行S707;如果判断结果为是,则执行S708。对于S709来说,判断N
z=-1是否大于0,如果判断结果为否,则执行S710;如果判断结果为是,则执行S711。
还需要说明的是,在另一种具体的实施例中,所述根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息,可以包括:
根据所述邻居节点的占位比特信息,确定第一方向坐标值为第八值对应的第一平面内邻居节点中有点占据的第五节点数量,以及第二方向坐标值为第八值对应的第二平面内邻居节点中有点占据的第六节点数量,以及第三方向坐标值为第八值对应的第三平面内邻居节点中有点占据的第七节点数量;
将所述第五节点数量与第四阈值进行比较,根据比较结果确定第一坐标方向的第一二预测值;
将所述第六节点数量与第四阈值进行比较,根据比较结果确定第二坐标方向的第二二预测值;
将所述第七节点数量与第四阈值进行比较,根据比较结果确定第三坐标方向的第三二预测值;
根据第一二预测值、第二二预测值和第三二预测值,得到当前节点的第二组预测坐标信息。
在本申请实施例中,第七值可以为-1,第八值可以为1;或者,第七值可以为1,第八值可以为-1。在一种具体的示例中,第七值可以为-1,第八值可以为1,但是不作具体限定。
另外,第四阈值也可以作为判断当前节点的预测坐标信息取值的衡量指标。在本申请实施例中,第四阈值可以表示预先设定的固定值,也可以表示通过自适应算法确定的值,甚至还可以表示由编码器写入码流以使得在解码器中能够通过解析码流获得的值。在本申请实施例中,第四阈值可以与第三阈值相同,也可以不相同,根据实际情况进行具体调整,这里不作具体限定。在一种具体的示例中,第四阈值也可以设置为0。
还需要说明的是,第五节点数量可以用N
x=1表示,N
x=1表示x轴方向坐标值为1的yz平面上9个邻居节点中有点占据的节点数量,N
x=1可取值为0到9。第六节点数量可以用N
y=1表示,N
y=1表示y轴方向坐标值为1的xz平面上9个邻居节点中有点占据的节点数量,N
y=1可取值为0到9。第七节点数量可以用N
z=1表示,N
z=1表示z轴方向坐标值为1的xy平面上9个邻居节点中有点占据的节点数量,N
z=1可取值为0到9。
示例性地,仍以图6为例,假定第八值等于1,可以定义N
x=1为x轴方向坐标值为1的yz平面上9个邻居节点中有点占据的节点数量,通过N
x=1可以预测当前节点中单一子节点的x轴方向的坐标值(即第一二预测值,用X
1表示),据此可以构建出2种上下文模型,具体如下所示,
针对语法元素occupancy_idx[2]:
假定第八值等于1,可以定义N
y=1为y轴方向坐标值为1的xz平面上9个邻居节点中有点占据的节点数量,通过N
y=1可以预测当前节点中单一子节点的y轴方向的坐标值(即第二二预测值,用Y
1表示),据此可以构建出2种上下文模型,具体如下所示,
针对语法元素occupancy_idx[1]:
假定第八值等于1,可以定义N
z=1为z轴方向坐标值为1的xy平面上9个邻居节点中有点占据的 节点数量,通过N
z=1可以预测当前节点中单一子节点的z轴方向的坐标值(即第三二预测值,用Z
1表示),据此可以构建出2种上下文模型,具体如下所示,
针对语法元素occupancy_idx[0]:
参见图8,其示出了本申请实施例提供的另一种根据邻居节点预测坐标信息的流程示意图。如图8所示,该流程可以包括:
S801:获取与当前节点相接的26个邻居节点的占位比特信息;
S802:确定N
x=1、N
y=1和N
z=1;
S803:判断N
x=1>0;
S804:若判断结果为否,则X
1=0;
S805:若判断结果为是,则X
1=1;
S806:判断N
y=1>0;
S807:若判断结果为否,则Y
1=0;
S808:若判断结果为是,则Y
1=1;
S809:判断N
z=1>0;
S810:若判断结果为否,则Z
1=0;
S811:若判断结果为是,则Z
1=1。
需要说明的是,对于S803来说,判断N
x=1是否大于0,如果判断结果为否,则执行S804;如果判断结果为是,则执行S805。对于S806来说,判断N
y=1是否大于0,如果判断结果为否,则执行S807;如果判断结果为是,则执行S808。对于S809来说,判断N
z=1是否大于0,如果判断结果为否,则执行S810;如果判断结果为是,则执行S811。
这样,根据图7所示的流程,可以得到当前节点的第一值预测坐标信息;根据图8所示的流程,可以得到当前节点的第二值预测坐标信息;根据这两组预测坐标信息,可以确定第二上下文模型。具体地,在一些实施例中,所述根据所述当前节点的预测坐标信息,确定所述第二上下文模型,可以包括:
获取所述当前节点的第一组预测坐标信息和第二组预测坐标信息;
根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第二上下文模型的索引序号值;
根据所述第二上下文模型的索引序号值,确定所述第二上下文模型。
进一步地,所述根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第二上下文模型的索引序号值,可以包括:
根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第一坐标方向的第一一预测值和第二一预测值、第二坐标方向的第二一预测值和第二二预测值、第三坐标方向的第三一预测值和第三二预测值;
根据所述第一坐标方向的第一一预测值和第一二预测值,确定所述第一坐标方向的所述第二上下文模型的索引序号值;
根据所述第二坐标方向的第二一预测值和第二二预测值,确定所述第二坐标方向的所述第二上下文模型的索引序号值;
根据所述第三坐标方向的第三一预测值和第三二预测值,确定所述第三坐标方向的所述第二上下文模型的索引序号值。
也就是说,在得到第一坐标方向的第一一预测值和第二一预测值之后,可以据此确定出第一坐标方向的所述第二上下文模型的索引序号值;在得到第二坐标方向的第二一预测值和第二二预测值之后,可以据此确定出第二坐标方向的所述第二上下文模型的索引序号值;在得到第三坐标方向的第三一预测值和第三二预测值之后,可以据此确定出第三坐标方向的所述第二上下文模型的索引序号值;从而确定出第二上下文模型的索引序号值,然后从式(3)~式(8)等多个第二候选上下文模型中选择索引序号值对应的第二候选上下文模型,以将其确定为第二上下文模型。
在本申请实施例中,用于预测标识信息(flag)的上下文模型,可以共有2种上下文模型的数量。在编码过程中,根据当前节点的邻居节点的占位比特信息,可得预测出标识信息的唯一上下文索引序号,根据索引序号选择2种当中的1种上下文模型以便后续对标识信息进行CABAC。针对三个坐标方向(x/y/z坐标方向)分别构建预测坐标信息的上下文模型,每个坐标方向上共有2×2=4种上下文模型的数量,那么三个坐标方向上总共有12种上下文模型。在编码过程中,根据当前节点的邻居节点的占 位比特信息,可得唯一的上下文索引序号,根据索引序号选择12种当中的1种上下文模型以便后续对预测坐标值进行CABAC。
除此之外,在另一可能的实施方式中,对于上下文模型的构建,如图6所示,获取当前节点的26个邻居节点的占位比特信息(occupancy bit),即邻居节点内有点占据,则占位比特信息为1,否则占位比特信息为0。如此,可以计算得出邻居配置数(Neighbouring configuration number,NC),NC的取值范围可以为0到2
26,即二进制的“26个0”到“26个1”。这样,根据NC可以构建最多2
26种上下文数量的上下文模型,也可任意合并其中的n个上下文模型,即可以构建x个数量的上下文模型,其中,x可取值为1到2
26。
简言之,上述所构建的上下文模型均可用于编码坐标信息和标识信息。一句话概括为:利用当前节点的26个邻居节点的占位比特信息,可以构建上下文模型对当前节点中的单一子节点的坐标信息及所需标识信息(flag)进行CABAC。
本实施例提供了一种点云编码方法,通过获取当前节点的邻居节点的占位比特信息;根据所述邻居节点的占位比特信息,确定上下文模型;利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流;其中,相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。这样,由于利用邻居节点的占位比特信息来构建上下文模型,如此基于所构建的上下文模型对单一子节点的标识信息和坐标信息进行熵编码,能够充分利用点云的空间相关性,从而能够提高点云的编解码效率。
本申请的另一实施例中,参见图9,其示出了本申请实施例提供的一种点云编码方法的详细流程示意图。如图9所示,该详细流程可以包括:
S901:i=0;
S902:进入八叉树的第i层;
这里,i为大于或等于0且小于K的整数,K表示八叉树的划分层数。需要说明的是,该详细流程首次为进入八叉树的第0层。
S903:设置j=0,N
all=0,N
singe=0,ctxSingleChildEnabled=0;
S904:读取第j个节点;
这里,j为大于或等于0且小于N的整数,N为第i层中的节点总数量。
S905:根据当前节点的6个邻居节点的占位比特信息,计算邻居配置数NC;
S906:根据当前节点划分的8个子节点的占位比特信息,计算子节点被占据数N
oc;
S907:判断是否ctxSingleChildEnabled==1;
S908:确定第一组坐标信息的预测值(X
0、Y
0、Z
0);
S909:确定第二组坐标信息的预测值(X
1、Y
1、Z
1);
S910:确定标识信息的预测值;
需要说明的是,对于步骤S907而言,如果判断结果为是,那么执行S908~S909,然后再执行S910;如果判断结果为否,那么将直接执行S910。
S911:判断是否NC==0;
S912:若判断结果为否,则判断是否ctxSingleChildEnabled==1;
S913:若判断结果为是,则判断是否N
oc==1;
S914:若判断结果为否,则确定flag=0;
S915:若判断结果为是,则确定flag=1;
需要说明的是,对于步骤S913而言,判断N
oc是否等于1,如果判断结果为否,那么执行S914;如果判断结果为是,那么将直接执行S915。在S914和S915之后,均将执行S916。
S916:对flag进行基于预测flag的上下文模型的CABAC;
S917:判断是否flag==1;
S918:若判断结果为是,则根据当前节点的8个子节点的占位比特信息计算唯一被占据子节点的坐标信息X、Y、Z;
S919:对坐标信息X、Y、Z进行基于预测坐标信息的上下文模型的CABAC;
需要说明的是,对于步骤S917而言,判断flag是否等于1,如果判断结果为是,则执行S918~S919;如果判断结果为否,则执行S927。
还需要说明的是,对于步骤S911而言,如果判断结果为否,则执行S912;如果判断结果为是,则执行S920。而对于步骤S912而言,如果判断结果为是,则执行S913;如果判断结果为否,则执行S927。
S920:若判断结果为是,则判断是否N
oc==1;
S921:若判断结果为否,则确定flag=0;
S922:若判断结果为是,则确定flag=1;
S923:对flag进行基于预测flag的上下文模型的CABAC;
需要说明的是,对于步骤S920而言,判断N
oc是否等于1,如果判断结果为否,那么执行S921;如果判断结果为是,那么将直接执行S922。在S921和S922之后,均将执行S923。
S924:判断是否flag==1;
S925:若判断结果为是,则根据当前节点的8个子节点的占位比特信息计算唯一被占据子节点的坐标信息X、Y、Z;
S926:对坐标信息X、Y、Z进行等概率静态算术编码;
S927:若判断结果为否,则对当前节点的8个子节点的占位比特信息进行基于NC上下文的CABAC;
S928:N
all=N
all+1;
需要说明的是,对于S912、S917和S924而言,如果判断结果为否,那么均将执行S927。在S927、S919和S926之后,则均将执行S928。
S929:判断是否N
oc==1;
S930:若判断结果为是,则N
singe=N
singe+1;
S931:判断是否N
singe/N
all>0.8;
S932:若判断结果为否,则ctxSingleChildEnabled=0;
S933:若判断结果为是,则ctxSingleChildEnabled=1;
S934:判断当前第j层内所有节点是否已处理;
S935:若判断结果为否,则j=j+1,返回执行S904;
S936:若判断结果为是,则判断八叉树的所有层是否已处理;
S937:若判断结果为否,则i=i+1,返回执行S902;
S938:若判断结果为是,则结束流程。
需要说明的是,首先,进入八叉树的第i层(i的最小值为0),赋值节点数量N
all=0,单一子节点数量N
singe=0,单一子节点使能变量ctxSingleChildEnabled=0。
其次,读取第j个节点(j的最小值为0),根据该当前节点的6个邻居节点的占位比特信息(或称为占位比特模式),计算得出NC。然后根据当前节点划分的8个子节点的占位比特信息,计算得出N
oc。
再次,当ctxSingleChildEnabled==1时,根据与当前节点相接的6个邻居节点的占位比特信息,计算得出N
on,最后预测出flag。根据当前节点的26个邻居节点的占位比特信息,计算得出N
x=-1、N
y=-1和N
z=-1,可以预测出第一组坐标信息X
0、Y
0和Z
0;计算得出N
x=1,N
y=1和N
z=1,可以预测出第二组坐标信息X
1、Y
1和Z
1。其中,当ctxSingleChildEnabled==0时,也可以根据与当前节点相接的6个邻居节点的占位比特信息,用以预测出flag。
再次,当NC==0时(邻居配置数为0,即6个邻居节点中无邻居节点被占据),赋值flag为1代表N
oc等于1的情况(即8个子节点中仅有1个子节点被占据),赋值flag为0代表N
oc不等于1的情况(即8个子节点中不只1个子节点被占据)。由于已经得到预测flag,这时候可以对该flag进行基于上下文“预测flag”的自适应二进制算术编码,写入码流。当flag等于1时,先根据当前节点的8个子节点的占位比特信息计算出其单一子节点的坐标信息(X/Y/Z坐标值),并分别对X/Y/Z坐标值进行等概率静态二进制算术编码,写入码流。
当NC>0(6个邻居节点中有邻居节点被占据)且ctxSingleChildEnabled==1时,赋值flag为1代表N
oc等于1的情况(即8个子节点中仅有1个子节点被占据),赋值flag为0代表N
oc不等于1的情况(即8个子节点中不只1个子节点被占据),并对该flag进行基于上下文“预测flag”的自适应二进制算术编码,写入码流。当flag等于1时,先根据当前节点的8个子节点的占位比特信息计算出其单一子节点的坐标信息(X/Y/Z坐标值),并分别对X/Y/Z坐标值进行基于上下文“预测坐标信息”的自适应二进制算术编码,写入码流。
当flag==0(8个子节点中不只1个子节点被占据)或者,NC>0(6个邻居节点中有邻居节点被占据)且ctxSingleChildEnabled==0时,则对当前节点的8个子节点的占位比特信息进行CABAC,写入码流。
最后,更新N
all=N
all+1,当N
oc=1时,更新N
singe=N
singe+1。计算出ctxSingleChildEnabled,具体如下所示,
如果当前第i层内所有节点已处理,那么i=i+1,并返回到步骤S902处理八叉树下一层;否则,j=j+1,返回到步骤S904处理第i层的下一个节点。如果所有层已处理,那么可以结束流程。
简言之,本申请技术方案的保护点在于针对单一子节点编码构建了“预测flag”和“预测坐标信息”的上下文模型,通过CABAC提高压缩效率。并通过有单一子节点的节点在所有节点中的比例来控制该点云编码方法是否使能。
也就是说,本申请技术方案更加充分的利用了点云的空间相关性,在邻居节点的子节点不用于上下文模型构建的情况下(adjacent_child_contextualization_enabled_flag==0),能够使得G-PCC的编码效率进一步提高。如下表2所示的几何信息有损压缩条件下的BD-Rate,其示出了与相关技术相比,在获得相同编码质量的情况下,本申请实施例的编码码率比相关技术的编码码率节省(BD-Rate为负值)或增加(BD-Rate为正值)的百分比。如下表3所示的几何信息无损压缩条件下的Bpip Ratio,其示出了在点云质量无损失的情况下,本申请实施例的编码码率占相关技术编码码率的百分比,这里,数值越低,本申请实施例节省的码率越大。
表2
表3
本实施例提供了一种点云编码方法,通过上述实施例对前述实施例的具体实现进行了详细阐述,从中可以看出,由于针对单一子节点的标识信息和坐标信息分别构建了上下文模型,如此基于所构建的上下文模型对标识信息和坐标信息进行熵编码,能够充分利用点云的空间相关性,从而能够提高点云的编码效率。
本申请的又一实施例中,本申请实施例提供的点云解码方法应用于视频解码设备,即G-PCC解码器,也可简称为解码器。该方法所实现的功能可以通过解码器中的第二处理器调用计算机程序来实现,当然计算机程序可以保存在第二存储器中,可见,解码器至少包括第二处理器和第二存储器。
参见图10,其示出了本申请实施例提供的一种点云解码方法的流程示意图。如图10所示,该方法可以包括:
S1001:获取当前节点的邻居节点的占位比特信息。
需要说明的是,在点云中,点可以是点云中的所有点,也可以是点云中的部分点,这些点在空间上相对集中。这里,当前节点也可以称为当前点或者当前块,具体是指点云中当前待解码的点或者块。
还需要说明的是,基于图1B所示的G-PCC解码器的框架,本申请实施例的方法主要应用于“上下文建模”部分,针对目前的相关技术中基于点云邻居节点的几何信息熵解码进行优化,以提升对空间相关性的利用程度。
可以理解,邻居节点的占位比特信息是根据该邻居节点内有无点占据确定的。在一些实施例中,所述获取当前节点的邻居节点的占位比特信息,可以包括:
若所述邻居节点内有点占据,则确定所述邻居节点的占位比特信息等于第一值;
若所述邻居节点内无点占据,则确定所述邻居节点的占位比特信息等于第二值。
在本申请实施例中,所述邻居节点包括下述至少之一:与所述当前节点共面的邻居节点、与所述当前节点共线的邻居节点和与所述当前节点共点的邻居节点。
也就是说,通过对点云进行空间划分,可以得到至少一个点;根据当前节点的几何位置,从这至少一个点中确定当前节点的邻居节点。通常情况下,当前节点的邻居节点数量总共为26个。其中,与当前节点共面的邻居节点数量有6个,与当前节点共线的邻居节点数量有12个,与当前节点共点的邻居节点数量有8个。
在本申请实施例中,第一值可以为1,第二值可以为0;或者,第一值可以为0,第二值可以为1。在一种具体的示例中,第一值可设置为1,第二值可设置为0,但是不作具体限定。
也就是说,以第一值为1,第二值为0为例,如果某邻居节点内有点占据,那么该邻居节点的占位比特信息等于1;如果某邻居节点内无点占据,那么该邻居节点的占位比特信息等于0。反之,如果某邻居节点的占位比特信息等于1,那么说明该邻居节点内有点占据;如果某邻居节点的占位比特信息等于0,那么说明该邻居节点内无点占据。
S1002:根据所述邻居节点的占位比特信息,确定上下文模型。
S1003:利用所述上下文模型解析码流,获取所述当前节点的相关信息。
在本申请实施例中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。相应地,上下文模型可以包括第一上下文模型和第二上下文模型。其中,第一上下文模型用于对单一子节点的标识信息进行预测,第二上下文模型用于对单一子节点的坐标信息进行预测。
在一种可能的实施方式中,当相关信息为单一子节点的标识信息时,这时候对于S1002来说,在一些实施例中,所述根据所述邻居节点的占位比特信息,确定上下文模型,可以包括:
根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息;
根据所述当前节点的预测标识信息,确定所述第一上下文模型。
需要说明的是,根据当前节点的预测标识信息,可以确定出第一上下文模型的索引序号值,然后根据该第一上下文模型的索引序号值,进而可以确定出第一上下文模型。因此,在一些实施例中,所述根据所述当前节点的预测标识信息,确定所述第一上下文模型,可以包括:
根据所述当前节点的预测标识信息,获得第一上下文模型的索引序号值;
根据所述第一上下文模型的索引序号值,确定所述第一上下文模型。
在一种具体的实施例中,该方法还可以包括:构建至少一个第一候选上下文模型;其中,不同的第一候选上下文模型对应不同的索引序号。
相应地,所述根据所述第一上下文模型的索引序号值,确定所述第一上下文模型,可以包括:
根据所述第一上下文模型的索引序号值,从所述至少一个第一候选上下文模型中选择所述索引序号值对应的第一候选上下文模型,将所选择的第一候选上下文模型确定为所述第一上下文模型。
也就是说,本申请实施例可以预先构建出至少一个第一候选上下文模型,而且不同的第一候选上下文模型输出不同的标识信息,同时不同的第一候选上下文模型对应不同的索引序号。如此,根据不同的标识信息就可以确定出不同的索引序号。这样,在根据当前节点的预测标识信息确定出第一上下文模型的索引序号值之后,然后可以从这至少一个第一候选上下文模型中选择索引序号值对应的第一候选上下文模型,以将其确定为第一上下文模型。
需要注意的是,第一上下文模型的索引序号值也可以在编码器侧确定之后,将其写入码流,这样解码器通过解析码流可以直接获得第一上下文模型的索引序号值,进而确定出第一上下文模型;但是这种情况下将会增加码率,降低编码效率。
进一步地,对于S1003来说,在一些实施例中,所述利用所述上下文模型解析码流,获取所述当前节点的相关信息,可以包括:
利用所述第一上下文模型解析码流,获取所述单一子节点的标识信息;其中,所述单一子节点的标识信息用于指示所述当前节点划分的子节点中是否仅一个子节点被占据。
需要说明的是,在解码获取到单一子节点的标识信息(如标志位,flag)的取值之后,可以确定出当前节点划分的子节点中被占据子节点的个数。具体地,在一些实施例中,该方法还可以包括:
若所述单一子节点的标识信息的取值等于第一标识值,则确定所述当前节点划分的子节点中仅一个子节点被占据;
若所述单一子节点的标识信息的取值等于第二标识值,则确定所述当前节点划分的子节点中至少两个子节点被占据。
在本申请实施例中,第一标识值可以为1,第二标识值可以为0;或者,第一标识值可以为0,第二标识值可以为1。在一种具体的示例中,第一标识值可设置为1,第二标识值可设置为0,但是不作具体限定。
需要说明的是,标识信息的取值也可以是被占据子节点的个数。例如,如果标识信息的取值等于0,那么当前节点划分的子节点中无被占据子节点;如果标识信息的取值等于1,那么当前节点划分的子节点中仅包括一个被占据子节点;如果标识信息的取值大于或等于2,那么当前节点划分的子节点中包括至少两个被占据子节点。
在另一种可能的实施方式中,当相关信息为单一子节点的坐标信息时,这时候对于S1002来说,在一些实施例中,所述根据所述邻居节点的占位比特信息,确定上下文模型,可以包括:
根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息;
根据所述当前节点的预测坐标信息,确定所述第二上下文模型。
需要说明的是,根据当前节点的预测坐标信息,可以确定出第二上下文模型的索引序号值,然后根据该第二上下文模型的索引序号值,进而可以确定出第二上下文模型。因此,在一些实施例中,所述根据所述当前节点的预测坐标信息,确定所述第二上下文模型,可以包括:
根据所述当前节点的预测坐标信息,获得第二上下文模型的索引序号值;
根据所述第二上下文模型的索引序号值,确定所述第二上下文模型。
在一种具体的实施例中,该方法还可以包括:构建至少一个第二候选上下文模型;其中,不同的第二候选上下文模型对应不同的索引序号。
相应地,所述根据所述第二上下文模型的索引序号值,确定所述第二上下文模型,可以包括:
根据所述第二上下文模型的索引序号值,从所述至少一个第二候选上下文模型中选择所述索引序号值对应的第二候选上下文模型,将所选择的第二候选上下文模型确定为所述第二上下文模型。
也就是说,本申请实施例可以预先构建出至少一个第二候选上下文模型,而且不同的第二候选上下文模型输出不同的坐标信息,同时不同的第二候选上下文模型也对应不同的索引序号。如此,根据不同的标识信息也可以确定出不同的索引序号。这样,在根据当前节点的预测坐标信息确定出第二上下文模型的索引序号值之后,然后可以从这至少一个第二候选上下文模型中选择索引序号值对应的第二候选上下文模型,以将其确定为第二上下文模型。
需要注意的是,第二上下文模型的索引序号值也可以在编码器侧确定之后,将其写入码流,这样解码器通过解析码流可以直接获得第二上下文模型的索引序号值,进而确定出第二上下文模型;但是这种情况下同样会增加码率,降低编码效率。
进一步地,对于S1003来说,在一些实施例中,所述利用所述上下文模型解析码流,获取所述当前节点的相关信息,可以包括:
当所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,利用第二上下文模型解析码流,获取所述单一子节点的坐标信息。
需要说明的是,在标识信息的取值指示当前节点划分的子节点中仅一个子节点被占据时,这时候可以通过解析码流,以确定唯一被占据的子节点(可简称为“单一子节点”)的坐标信息。然而由于邻居配置数的不同,对于单一子节点的坐标信息所采用的熵编码方式可能不同,这时候对单一子节点的坐标信息所采用的熵解码方式也可能不同。因此,本申请实施例还需要确定当前节点的邻居配置数。在一些实施例中,该方法还可以包括:确定当前节点的邻居配置数。
这样,根据当前节点的邻居配置数,可以确定当前节点中是否有邻居节点被占据,然后能够进一步确定出对于单一子节点的坐标信息所采用的熵解码方式,比如利用第二上下文模型解析码流的方式,或者利用等概率静态二进制算术解析码流的方式。
在一些实施例中,对于S1003来说,所述利用所述上下文模型解析码流,获取所述当前节点的相关信息,可以包括:
确定所述当前节点的邻居配置数;
若所述邻居配置数指示所述当前节点中有邻居节点被占据,则在所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,利用第二上下文模型解析码流,获取所述单一子节点的坐标信息。
进一步地,在一些实施例中,该方法还可以包括:
若所述邻居配置数指示所述当前节点中无邻居节点被占据,则在所述单一子节点的标识信息指示所述当前节点划分的子节点中仅包括一个被占据子节点时,利用等概率静态二进制算术解析码流,获取所述单一子节点的坐标信息。
在本申请实施例中,邻居配置数(Neighbouring configuration number,NC)用于表示与当前节点共面的邻居节点中有无邻居节点被占据。具体地,在一些实施例中,所述确定当前节点的邻居配置数,可以包括:
获取与所述当前节点共面的邻居节点的占位比特信息;
根据所述与所述当前节点共面的邻居节点的占位比特信息,确定所述邻居配置数。
这里,与当前节点共面的邻居节点可以包括下述至少之一:与所述当前节点左侧面相接的邻居节点、与所述当前节点右侧面相接的邻居节点、与所述当前节点上侧面相接的邻居节点、与所述当前节点下侧面相接的邻居节点、与所述当前节点后侧面相接的邻居节点、与所述当前节点前侧面相接的邻居节点。也就是说,与当前节点共面的邻居节点通常包括有6个,具体如图2所示。
还需要说明的是,邻居节点的占位比特信息是根据邻居节点内有无点占据确定的。在一种具体的实施例中,所述获取所述当前节点的邻居节点的占位比特信息,可以包括:
若所述邻居节点内有点占据,则确定所述邻居节点的占位比特信息等于第一值;
若所述邻居节点内无点占据,则确定所述邻居节点的占位比特信息等于第二值。
在本申请实施例中,第一值可以为1,第二值可以为0;或者,第一值可以为0,第二值可以为1。在一种具体的示例中,第一值可设置为1,第二值可设置为0,但是不作具体限定。
也就是说,以第一值为1,第二值为0为例,如果某邻居节点内有点占据,那么该邻居节点的占位比特信息等于1;如果某邻居节点内无点占据,那么该邻居节点的占位比特信息等于0。这样,针对当前节点的6个邻居节点的占位比特信息,可以计算得到邻居配置数。
另外,根据邻居配置数,可以反映当前节点中有无邻居节点被占据。在一些实施例中,该方法还可以包括:
若所述邻居配置数大于0,则确定所述当前节点中有邻居节点被占据;
若所述邻居配置数等于0,则确定所述当前节点中无邻居节点被占据。
在本申请实施例中,邻居配置数的取值范围为0~63。也就是说,如果邻居配置数大于0,那么表明当前节点中有邻居节点被占据;如果邻居配置数等于0,那么表明当前节点中无邻居节点被占据。
可以理解地,本申请实施例还引入了一个新的变量,即单一子节点使能变量(可以用ctxSingleChildEnabled表示)。因此,在一些实施例中,在S1002之前,该方法还可以包括:确定单一子节点使能变量的取值;
相应地,对于S1002来说,所述根据所述邻居节点的占位比特信息,确定上下文模型,可以包括:
在所述单一子节点使能变量的取值指示所述当前节点处于单一子节点使能状态时,根据所述邻居节点的占位比特信息,确定上下文模型。
也就是说,当单一子节点使能变量(即ctxSingleChildEnabled)的取值指示当前节点处于单一子节点使能状态时,这时候需要确定上下文模型,比如第一上下文模型和第二上下文模型,以便后续利用第一上下文模型和第二上下文模型对当前节点的相关信息进行熵解码。
这里,单一子节点使能变量的取值与节点数量(用N
all表示)和单一子节点数量(用N
singe表示)有关。具体地,在一些实施例中,所述确定单一子节点使能变量的取值,可以包括:
确定节点数量以及单一子节点数量;
对所述单一子节点数量和所述节点数量进行除法运算,得到第一比例值;
将所述第一比例值和第一阈值进行比较;
根据所述第一比例值和所述第一阈值的比较结果,确定所述单一子节点使能变量的取值。
在一种具体的实施例中,所述根据所述第一比例值和所述第一阈值的比较结果,确定所述单一子节点使能变量的取值,可以包括:
若所述第一比例值大于所述第一阈值,则确定所述单一子节点使能变量的取值为第三值;
若所述第一比例值小于或等于所述第一阈值,则确定所述单一子节点使能变量的取值为第四值。
在本申请实施例中,第三值可以为1,第四值可以为0;或者,第三值可以为0,第四值可以为1。在一种具体的示例中,第三值可设置为1,第四值可设置为0,但是不作具体限定。
需要说明的是,第一阈值可以作为判断单一子节点使能变量取值的衡量指标。在本申请实施例中,第一阈值可以表示预先设定的固定值(比如根据经验值得到),也可以表示通过自适应算法确定的值,甚至还可以表示由编码器写入码流以使得在解码器中能够通过解析码流获得的值。这里,第一阈值的取值范围为[0,1]之内,根据实际情况进行具体调整。在本申请的一种具体示例中,第一阈值可以设置为0.8,但是不作具体限定。
在本申请实施例中,单一子节点使能变量可以用ctxSingleChildEnabled表示。针对单一子节点使能变量的确定,可以上述的式(1)实现。
进一步地,在一些实施例中,该方法还可以包括:
若单一子节点使能变量的取值为1,则确定所述当前节点处于单一子节点使能状态;
若单一子节点使能变量的取值为0,则确定所述当前节点处于单一子节点不使能状态。
也就是说,如果ctxSingleChildEnabled=1,那么当前节点处于单一子节点使能状态,这时候可以 执行本申请实施例所述的点云解码方法;如果ctxSingleChildEnabled=0,那么当前节点处于单一子节点不使能状态,这时候可以执行相关技术的点云解码方法,即基于NC上下文的CABAC解码得到当前节点的8个子节点的占位比特信息。
还需要说明的是,本申请实施例中的N
singe和N
all是不断更新的。在一些实施例中,该方法还可以包括:
解析码流,在确定进入所述八叉树的第i层时,设置所述节点数量的初始值为0,所述单一子节点数量的初始值为0,所述单一子节点使能变量的初始值为0;其中,i为大于或等于0且小于K的整数,K表示所述八叉树的层数,K为大于0的整数。
这里,K表示八叉树的层数,K为大于0的整数。其中,针对八叉树的每一层,当第一次进入该层时,这时候首先需要初始化节点数量、单一子节点数量和单一子节点使能变量的取值,即节点数量的初始值赋值为0,单一子节点数量的初始值赋值为0,单一子节点使能变量的初始值赋值为0。
进一步地,所述确定节点数量以及单一子节点数量,可以包括:
解析码流,在确定所述当前节点处于八叉树的第i层时,基于所述第i层中的已解码节点,获得所述节点数量;
从所述已解码节点中确定仅一个子节点被占据的已解码节点,获得所述单一子节点数量。
需要说明的是,节点数量和单一子节点数量都是第i层中的已解码节点。对于单一子节点数量而言,所述从已解码节点中确定仅包括一个被占据子节点的已解码节点,获得所述单一子节点数量,可以包括:
在所述已解码节点中,判断所述已解码节点划分的子节点是否仅包括一个被占据子节点;
若判断结果为是,则对所述单一子节点数量执行加1操作,更新所述单一子节点数量;
若判断结果为否,则维持所述单一子节点数量不变。
换句话说,解析码流,在确定进入所述八叉树的第i层时,初始化节点数量(N
all)、单一子节点数量(N
singe)和单一子节点使能变量(ctxSingleChildEnabled)的值,即赋值N
all=0,N
singe=0,ctxSingleChildEnabled=0。然后解析码流,在确定当前节点(即第i层的第j个节点)处于第i层时,针对第i层,在第i层的第j个节点已经完成点云解码后,可以更新N
all=N
all+1,即节点数量表示已解码节点的数量。若第j个节点划分的子节点中仅包括一个被占据子节点(即N
oc=1)时,则更新N
singe=N
singe+1,也即单一子节点数量表示已解码节点中确定仅包括一个被占据子节点的已解码节点的数量。在j小于N时,则更新j=j+1,继续执行读取所述第i层的第j个节点的步骤,直至第i层中所有节点均已经处理,j为大于或等于0且小于N的整数,N为第i层中的节点总数量;然后再进入八叉树的第i+1层,直至八叉树的K层全部已处理。
这样,在确定出N
singe和N
all之后,结合式(1)可以计算得到单一子节点使能变量(ctxSingleChildEnabled)的取值,以便确定后续是否需要利用上下文模型进行熵解码。
具体来讲,在本申请实施例中,如果邻居配置数指示当前节点中有邻居节点被占据,那么表示NC>0;如果单一子节点使能变量的取值指示当前节点处于单一子节点使能状态,那么表示ctxSingleChildEnabled=1。也就是说,在邻居配置数指示当前节点中有邻居节点被占据(即NC>0)且ctxSingleChildEnabled=1时,这时候需要构建上下文模型,而且本申请实施例是在邻居节点的子节点不用于构建上下文模型(adjacent_child_contextualization_enabled_flag==0)的情况下,可以利用邻居节点的占位比特信息来构建上下文模型,然后再利用所构建的上下文模型来对单一子节点的坐标信息进行解码,用以提高解码效率。
下面将针对利用邻居节点的占位比特信息来构建第一上下文模型和第二上下文模型的具体过程进行详细描述。
在一些实施例中,在单一子节点使能变量的取值指示当前节点处于单一子节点使能状态时,对于第一上下文模型,所述根据所述邻居节点的占位比特信息,确定上下文模型,可以包括:
根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息;
根据所述当前节点的预测标识信息,确定所述第一上下文模型。
需要说明的是,第一上下文模型的确定与当前节点的预测标识信息有关,而当前节点的预测标识信息是由邻居节点的占位比特信息确定的。在一种具体的实施例中,所述根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息,可以包括:
根据所述邻居节点的占位比特信息,确定与当前节点共面的邻居节点中有点占据的第一节点数量;
根据所述第一节点数量,确定所述当前节点的预测标识信息。
在本申请实施例中,第一节点数量可以用N
on表示,N
on表示与当前节点共面的6个邻居节点中有点占据的邻居节点数量,N
on可取值为0到6。
进一步地,在得到第一节点数量后,可以用以确定当前节点的预测标识信息。在一些实施例中,所 述根据所述第一节点数量,确定所述当前节点的预测标识信息,可以包括:
将所述第一节点数量与第二阈值进行比较;
根据所述第一节点数量与所述第二阈值的比较结果,确定所述当前节点的预测标识信息。
在一种具体的实施例中,所述根据所述第一节点数量与所述第二阈值的比较结果,确定所述当前节点的预测标识信息,可以包括:
若所述第一节点数量小于所述第二阈值,则确定所述当前节点的预测标识信息等于第五值;
若所述第一节点数量大于或等于所述第二阈值,则确定所述当前节点的预测标识信息等于第六值。
在本申请实施例中,第五值可以为1,第六值可以为0;或者,第五值可以为0,第六值可以为1。在一种具体的示例中,第五值可设置为1,第六值可设置为0,但是不作具体限定。。
另外,第二阈值可以作为判断当前节点的预测标识信息取值的衡量指标。在本申请实施例中,第二阈值可以表示预先设定的固定值,也可以表示通过自适应算法确定的值,甚至还可以表示由编码器写入码流以使得在解码器中能够通过解析码流获得的值。这里,第二阈值的取值范围为[0,6]之内,根据实际情况进行具体调整。在本申请的一种具体示例中,第二阈值可以设置为3,但是不作具体限定。
在一种具体的实现方式中,通过N
on对标识信息(如标志位,flag)的预测,可以构建出2种上下文模型,具体如上述式(2)所示。
这样,在得到N
on之后,可以根据N
on可以确定出标识信息的预测值,进而确定出第一上下文模型的索引序号值,然后根据式(2)所示的两个第一候选上下文模型中选择索引序号值对应的第一候选上下文模型,以将其确定为第一上下文模型。
在一些实施例中,在单一子节点使能变量的取值指示当前节点处于单一子节点使能状态时,对于第二上下文模型,所述根据所述邻居节点的占位比特信息,确定上下文模型,可以包括:
根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息;
根据所述当前节点的预测坐标信息,确定所述第二上下文模型。
需要说明的是,第二上下文模型的确定与当前节点的预测坐标信息有关,而当前节点的预测坐标信息是由邻居节点的占位比特信息确定的。在一种具体的实施例中,所述根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息,可以包括:
根据所述邻居节点的占位比特信息,确定第一方向坐标值为第七值对应的第一平面内邻居节点中有点占据的第二节点数量,以及第二方向坐标值为第七值对应的第二平面内邻居节点中有点占据的第三节点数量,以及第三方向坐标值为第七值对应的第三平面内邻居节点中有点占据的第四节点数量;
将所述第二节点数量与第三阈值进行比较,根据比较结果确定第一坐标方向的第一一预测值;
将所述第三节点数量与第三阈值进行比较,根据比较结果确定第二坐标方向的第二一预测值;
将所述第四节点数量与第三阈值进行比较,根据比较结果确定第三坐标方向的第三一预测值;
根据第一一预测值、第二一预测值和第三一预测值,得到当前节点的第一组预测坐标信息。
这里,第七值可以为-1,或者第七值可以为1。在一种具体的示例中,第七值可以为-1,但是不作具体限定。
另外,第三阈值可以作为判断当前节点的预测坐标信息取值的衡量指标。在本申请实施例中,第三阈值可以表示预先设定的固定值,也可以表示通过自适应算法确定的值,甚至还可以表示由编码器写入码流以使得在解码器中能够通过解析码流获得的值。在本申请实施例中,第三阈值可以根据实际情况进行具体调整,这里不作具体限定。在一种具体的示例中,第三阈值可以设置为0。
需要说明的是,第二节点数量可以用N
x=-1表示,N
x=-1表示x轴方向坐标值为-1的yz平面上9个邻居节点中有点占据的节点数量,N
x=-1可取值为0到9。第三节点数量可以用N
y=-1表示,N
y=-1表示y轴方向坐标值为-1的xz平面上9个邻居节点中有点占据的节点数量,N
y=-1可取值为0到9。第四节点数量可以用N
z=-1表示,N
z=-1表示z轴方向坐标值为-1的xy平面上9个邻居节点中有点占据的节点数量,N
z=-1可取值为0到9。
示例性地,以如图6为例,假定第七值等于-1,可以定义N
x=-1为x轴方向坐标值为-1的yz平面上9个邻居节点中有点占据的节点数量,通过N
x=-1可以预测当前节点中单一子节点的x轴方向的坐标值(即第一一预测值,用X
0表示),据此可以构建出2种上下文模型,具体如上述式(3)所示。
假定第七值等于-1,可以定义N
y=-1为y轴方向坐标值为-1的xz平面上9个邻居节点中有点占据的节点数量,通过N
y=-1可以预测当前节点中单一子节点的y轴方向的坐标值(即第二一预测值,用Y
0表示),据此可以构建出2种上下文模型,具体如上述式(4)所示。
假定第七值等于-1,可以定义N
z=-1为z轴方向坐标值为-1的xy平面上9个邻居节点中有点占据的节点数量,通过N
z=-1可以预测当前节点中单一子节点的z轴方向的坐标值(即第三一预测值,用Z
0表示),据此可以构建出2种上下文模型,具体如上述式(5)所示。
在另一种具体的实施例中,所述根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息,可以包括:
根据所述邻居节点的占位比特信息,确定第一方向坐标值为第八值对应的第一平面内邻居节点中有点占据的第五节点数量,以及第二方向坐标值为第八值对应的第二平面内邻居节点中有点占据的第六节点数量,以及第三方向坐标值为第八值对应的第三平面内邻居节点中有点占据的第七节点数量;
将所述第五节点数量与第四阈值进行比较,根据比较结果确定第一坐标方向的第一二预测值;
将所述第六节点数量与第四阈值进行比较,根据比较结果确定第二坐标方向的第二二预测值;
将所述第七节点数量与第四阈值进行比较,根据比较结果确定第三坐标方向的第三二预测值;
根据第一二预测值、第二二预测值和第三二预测值,得到当前节点的第二组预测坐标信息。
在本申请实施例中,第七值可以为-1,第八值可以为1;或者,第七值可以为1,第八值可以为-1。在一种具体的示例中,第七值可以为-1,第八值可以为1,但是不作具体限定。
另外,第四阈值也可以作为判断当前节点的预测坐标信息取值的衡量指标。在本申请实施例中,第四阈值可以表示预先设定的固定值,也可以表示通过自适应算法确定的值,甚至还可以表示由编码器写入码流以使得在解码器中能够通过解析码流获得的值。在本申请实施例中,第四阈值可以与第三阈值相同,也可以不相同,根据实际情况进行具体调整,这里不作具体限定。在一种具体的示例中,第四阈值也可以设置为0。
还需要说明的是,第五节点数量可以用N
x=1表示,N
x=1表示x轴方向坐标值为1的yz平面上9个邻居节点中有点占据的节点数量,N
x=1可取值为0到9。第六节点数量可以用N
y=1表示,N
y=1表示y轴方向坐标值为1的xz平面上9个邻居节点中有点占据的节点数量,N
y=1可取值为0到9。第七节点数量可以用N
z=1表示,N
z=1表示z轴方向坐标值为1的xy平面上9个邻居节点中有点占据的节点数量,N
z=1可取值为0到9。
示例性地,仍以图6为例,假定第八值等于1,可以定义N
x=1为x轴方向坐标值为1的yz平面上9个邻居节点中有点占据的节点数量,通过N
x=1可以预测当前节点中单一子节点的x轴方向的坐标值(即第一二预测值,用X
1表示),据此可以构建出2种上下文模型,具体如上述式(6)所示。
假定第八值等于1,可以定义N
y=1为y轴方向坐标值为1的xz平面上9个邻居节点中有点占据的节点数量,通过N
y=1可以预测当前节点中单一子节点的y轴方向的坐标值(即第二二预测值,用Y
1表示),据此可以构建出2种上下文模型,,具体如上述式(7)所示。
假定第八值等于1,可以定义N
z=1为z轴方向坐标值为1的xy平面上9个邻居节点中有点占据的节点数量,通过N
z=1可以预测当前节点中单一子节点的z轴方向的坐标值(即第三二预测值,用Z
1表示),据此可以构建出2种上下文模型,具体如上述式(8)所示。
这样,在得到当前节点的第一值预测坐标信息和当前节点的第二值预测坐标信息之后,可以根据这两组预测坐标信息,确定出第二上下文模型。具体地,在一些实施例中,所述根据所述当前节点的预测坐标信息,确定所述第二上下文模型,可以包括:
获取所述当前节点的第一组预测坐标信息和第二组预测坐标信息;
根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第二上下文模型的索引序号值;
根据所述第二上下文模型的索引序号值,确定所述第二上下文模型。
进一步地,所述根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第二上下文模型的索引序号值,可以包括:
根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第一坐标方向的第一一预测值和第二一预测值、第二坐标方向的第二一预测值和第二二预测值、第三坐标方向的第三一预测值和第三二预测值;
根据所述第一坐标方向的第一一预测值和第一二预测值,确定所述第一坐标方向的所述第二上下文模型的索引序号值;
根据所述第二坐标方向的第二一预测值和第二二预测值,确定所述第二坐标方向的所述第二上下文模型的索引序号值;
根据所述第三坐标方向的第三一预测值和第三二预测值,确定所述第三坐标方向的所述第二上下文模型的索引序号值。
也就是说,在得到第一坐标方向的第一一预测值和第二一预测值之后,可以据此确定出第一坐标方向的所述第二上下文模型的索引序号值;在得到第二坐标方向的第二一预测值和第二二预测值之后,可以据此确定出第二坐标方向的所述第二上下文模型的索引序号值;在得到第三坐标方向的第三一预测值和第三二预测值之后,可以据此确定出第三坐标方向的所述第二上下文模型的索引序号值;从而确定出第二上下文模型的索引序号值,然后从式(3)~式(8)等多个第二候选上下文模型中选择索引序号值 对应的第二候选上下文模型,以将其确定为第二上下文模型。
在本申请实施例中,用于预测标识信息(flag)的上下文模型,可以共有2种上下文模型的数量。在解码过程中,根据当前节点的邻居节点的占位比特信息,可得预测出标识信息的唯一上下文索引序号,根据索引序号选择2种当中的1种上下文模型以便后续对标识信息进行CABAC。针对三个坐标方向(x/y/z坐标方向)分别构建预测坐标信息的上下文模型,每个坐标方向上共有2×2=4种上下文模型的数量,那么三个坐标方向上总共有12种上下文模型。在编码过程中,根据当前节点的邻居节点的占位比特信息,可得唯一的上下文索引序号,根据索引序号选择12种当中的1种上下文模型以便后续对预测坐标值进行CABAC。
除此之外,在另一可能的实施方式中,对于上下文模型的构建,如图6所示,获取当前节点的26个邻居节点的占位比特信息(occupancy bit),即邻居节点内有点占据,则占位比特信息为1,否则占位比特信息为0。如此,可以计算得出邻居配置数(Neighbouring configuration number,NC),NC的取值范围可以为0到2
26,即二进制的“26个0”到“26个1”。这样,根据NC可以构建最多2
26种上下文数量的上下文模型,也可任意合并其中的n个上下文模型,即可以构建x个数量的上下文模型,其中,x可取值为1到2
26。
简言之,上述所构建的上下文模型均可用于解码坐标信息和标识信息。一句话概括为:利用当前节点的26个邻居节点的占位比特信息,可以构建上下文模型,然后通过所构建的上下文模型进行解码获得所需标识信息(flag)以及确定出当前节点中的被占据子节点的坐标信息。
进一步地,在一些实施例中,在获得单一子节点的坐标信息之后,该方法还可以包括:
基于所述单一子节点的坐标信息,确定所述当前节点划分的子节点的占位比特信息。
需要说明的是,基于被占据子节点的坐标信息,可以确定出当前节点划分的子节点的占位比特信息。在一些实施例中,在确定所述当前节点划分的子节点的占位比特信息之后,该方法还可以包括:
若所述子节点的占位比特信息等于第一值,则确定所述子节点内有点占据;
若所述子节点的占位比特信息等于第二值,则确定所述子节点内无点占据。
还需要说明的是,基于被占据子节点的坐标信息,可以确定出当前节点划分的子节点的占位比特信息。在一些实施例中,在确定所述当前节点划分的子节点的占位比特信息之后,该方法还可以包括:根据所述子节点的占位比特信息,确定所述子节点被占据数(N
oc)。
在本申请实施例中,第一值可以为1,第二值可以为0;或者,第一值可以为0,第二值可以为1。在一种具体的示例中,第一值可设置为1,第二值可设置为0,但是不作具体限定。
也就是说,以第一值为1,第二值为0为例,如果某子节点的占位比特信息等于1,那么该子节点内有点占据;如果某子节点的占位比特信息等于0,那么该子节点内无点占据。
这样,在解码得到被占据子节点的坐标信息之后,根据被占据子节点的坐标信息,就可以还原出当前节点划分的子节点的占位比特信息。
本实施例提供了一种点云解码方法,通过获取当前节点的邻居节点的占位比特信息;根据所述邻居节点的占位比特信息,确定上下文模型;利用所述上下文模型解析码流,获取所述当前节点的相关信息;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。这样,由于利用邻居节点的占位比特信息来构建上下文模型,如此基于所构建的上下文模型对单一子节点的标识信息和坐标信息进行熵解码,能够充分利用点云的空间相关性,从而能够提高点云的解码效率。
本申请的再一实施例中,参见图11,其示出了本申请实施例提供的一种点云解码方法的详细流程示意图。如图11所示,该详细流程可以包括:
S1101:i=0;
S1102:进入八叉树的第i层;
这里,i为大于或等于0且小于K的整数,K表示八叉树的划分层数。需要说明的是,该详细流程首次为进入八叉树的第0层。
S1103:设置j=0,N
all=0,N
singe=0,ctxSingleChildEnabled=0;
S1104:读取第j个节点;
这里,j为大于或等于0且小于N的整数,N为第i层中的节点总数量。
S1105:根据当前节点的6个邻居节点的占位比特信息,计算邻居配置数NC;
S1106:判断是否ctxSingleChildEnabled==1;
S1107:确定第一组坐标信息的预测值(X
0、Y
0、Z
0);
S1108:确定第二组坐标信息的预测值(X
1、Y
1、Z
1);
S1109:确定标识信息的预测值;
需要说明的是,对于步骤S1106而言,如果判断结果为是,那么执行S1107~S1108,然后再执行S1109;如果判断结果为否,那么将直接执行S1109。
S1110:判断是否NC==0;
S1111:若判断结果为否,则判断是否ctxSingleChildEnabled==1;
S1112:若判断结果为是,则利用第一上下文模型进行CABAC解码获得flag;
S1113:判断是否flag==1;
S1114:若判断结果为是,则利用第二上下文模型进行CABAC解码获得唯一被占据子节点的坐标信息X、Y、Z;
S1115:还原当前节点划分的8个子节点的占位比特信息;
在本申请实施例中,第一上下文模型用于对标识信息(如flag)进行预测;第二上下文模型用于对坐标信息(如X/Y/Z坐标值)进行预测。
需要说明的是,对于步骤S1113而言,如果判断结果为是,则执行S1114~S1115;如果判断结果为否,则执行S1120。
还需要说明的是,对于步骤S1110而言,如果判断结果为否,则执行S1111;如果判断结果为是,则执行S1116。
S1116:若判断结果为是,则利用第一上下文模型进行CABAC解码获得flag;
S1117:判断是否flag==1;
S1118:若判断结果为是,则利用等概率静态算术解码获得唯一被占据子节点的坐标信息X、Y、Z;
S1119:还原当前节点划分的8个子节点的占位比特信息;
S1120:若判断结果为否,则利用基于NC上下文的CABAC解码获得当前节点划分的8个子节点的占位比特信息;
S1121:N
all=N
all+1;
需要说明的是,对于S1111、S1113和S1117而言,如果判断结果为否,那么均将执行S1120。在S1120、S1115和S1119之后,则均将执行S1121。
S1122:判断是否N
oc==1;
S1123:若判断结果为是,则N
singe=N
singe+1;
S1124:判断是否N
singe/N
all>0.8;
需要说明的是,对于S1122而言,如果判断结果为是,则先执行S1123,再执行S1124;如果判断结果为否,则直接执行S1124。
S1125:若判断结果为否,则ctxSingleChildEnabled=0;
S1126:若判断结果为是,则ctxSingleChildEnabled=1;
S1127:判断当前第j层内所有节点是否已处理;
S1128:若判断结果为否,则j=j+1,返回执行S1104;
S1129:若判断结果为是,则判断八叉树的所有层是否已处理;
S1130:若判断结果为否,则i=i+1,返回执行S1102;
S1131:若判断结果为是,则结束流程。
需要说明的是,首先,进入八叉树的第i层(i的最小值为0),初始化设置节点数量N
all=0,单一子节点数量N
singe=0,以及赋值单一子节点使能变量ctxSingleChildEnabled=0。
其次,读取第j个节点(j的最小值为0),根据当前节点的6个邻居节点的占位比特信息,计算得出NC。
再次,当ctxSingleChildEnabled==1时,根据与当前节点相接的6个邻居节点的占位比特信息,计算得出N
on,最后预测出flag。根据当前节点的26个邻居节点的占位比特信息,计算得出N
x=-1、N
y=-1和N
z=-1,可以预测出第一组坐标信息X
0、Y
0和Z
0;计算得出N
x=1,N
y=1和N
z=1,可以预测出第二组坐标信息X
1、Y
1和Z
1。其中,当ctxSingleChildEnabled==0时,也可以根据与当前节点相接的6个邻居节点的占位比特信息,用以预测出flag。
再次,当NC==0时(邻居配置数为0,即6个邻居节点中无邻居节点被占据),由于已经得到预测flag,这时候可以用基于上下文“预测flag”的自适应二进制算术解码来获得flag。当flag等于1时,则用等概率静态二进制算术解码来获得当前节点中单一子节点的坐标信息(X/Y/Z坐标值),并还原出8个子节点的占位比特信息。
当NC>0(6个邻居节点中有邻居节点被占据)且ctxSingleChildEnabled==1时,用基于上下文“预测flag”的自适应二进制算术解码来获得flag。当flag==1时,则用基于上下文“预测坐标信息”的自 适应二进制算术解码来获得当前节点中单一子节点的坐标信息(X/Y/Z坐标值),并还原出8个子节点的占位比特信息。
当flag==0时(8个子节点中不只1个子节点被占据)或者,NC>0(6个邻居节点中有邻居节点被占据)且ctxSingleChildEnabled==0时,则用CABAC来解码获得当前节点的8个子节点的占位比特信息。
最后,更新N
all=N
all+1。根据当前节点的8个子节点的占位比特信息,计算得出N
oc,当N
oc=1时,更新N
singe=N
singe+1。这里,ctxSingleChildEnabled的计算具体如上述的式(9)所示。
如果当前第i层内所有节点已处理,那么i=i+1,并返回到步骤S1102处理八叉树下一层;否则,j=j+1,返回到步骤S1104处理第i层的下一个节点。如果所有层已处理,那么可以结束流程。
简言之,本申请技术方案的保护点在于针对单一子节点解码构建了“预测flag”和“预测坐标信息”的上下文模型,通过CABAC提高压缩效率。并通过有单一子节点的节点在所有节点中的比例来控制该点云解码方法是否使能。
本实施例提供了一种点云解码方法,通过上述实施例对前述实施例的具体实现进行了详细阐述,从中可以看出,由于针对单一子节点的标识信息和坐标信息分别构建了上下文模型,如此基于所构建的上下文模型对标识信息和坐标信息进行熵解码,能够充分利用点云的空间相关性,从而能够提高点云的解码效率。
本申请的再一实施例中,基于前述实施例相同的发明构思,参见图12,其示出了本申请实施例提供的一种编码器120的组成结构示意图。如图12所示,该编码器120可以包括:第一获取单元1201、第一确定单元1202和编码单元1203;其中,
第一获取单元1201,配置为获取当前节点的邻居节点的占位比特信息;
第一确定单元1202,配置为根据所述邻居节点的占位比特信息,确定上下文模型;
编码单元1203,配置为利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
在一些实施例中,第一确定单元1202,具体配置为根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息;以及根据所述当前节点的预测标识信息,确定所述第一上下文模型。
在一些实施例中,第一确定单元1202,还配置为确定当前节点的子节点被占据数;以及根据所述子节点被占据数,确定所述单一子节点的标识信息;
编码单元1203,具体配置为利用所述第一上下文模型对所述单一子节点的标识信息进行熵编码,并写入码流。
在一些实施例中,第一确定单元1202,具体配置为根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息;以及根据所述当前节点的预测坐标信息,确定所述第二上下文模型。
在一些实施例中,编码单元1203,具体配置为当所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,确定所述单一子节点的坐标信息,利用所述第二上下文模型对所述单一子节点的坐标信息进行熵编码,并写入码流。
在一些实施例中,第一确定单元1202,还配置为确定所述当前节点的邻居配置数;
编码单元1203,还配置为若所述邻居配置数指示所述当前节点中有邻居节点被占据,则在所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,确定所述单一子节点的坐标信息,利用所述第二上下文模型对所述单一子节点的坐标信息进行熵编码,并写入码流。
在一些实施例中,第一确定单元1202,还配置为获取所述当前节点划分的子节点的占位比特信息;以及根据所述子节点的占位比特信息,计算所述单一子节点的坐标信息。
在一些实施例中,所述邻居节点包括下述至少之一:与所述当前节点共面的邻居节点、与所述当前节点共线的邻居节点和与所述当前节点共点的邻居节点。
在一些实施例中,第一确定单元1202,还配置为若所述邻居节点内有点占据,则确定所述邻居节点的占位比特信息等于第一值;若所述邻居节点内无点占据,则确定所述邻居节点的占位比特信息等于第二值。
在一些实施例中,第一确定单元1202,还配置为获取与所述当前节点共面的邻居节点的占位比特信息;以及根据所述与所述当前节点共面的邻居节点的占位比特信息,确定所述邻居配置数。
在一些实施例中,第一确定单元1202,还配置为若所述邻居配置数大于0,则确定所述当前节点中有邻居节点被占据;若所述邻居配置数等于0,则确定所述当前节点中无邻居节点被占据。
在一些实施例中,第一确定单元1202,还配置为获取所述当前节点划分的子节点的占位比特信息;以及根据所述子节点的占位比特信息,确定所述子节点被占据数。
在一些实施例中,第一确定单元1202,还配置为若所述子节点内有点占据,则确定所述子节点的占位比特信息等于第一值;若所述子节点内无点占据,则确定所述子节点的占位比特信息等于第二值。
在一些实施例中,所述第一值为1,所述第二值为0;或者,所述第一值为0,所述第二值为1。
在一些实施例中,第一确定单元1202,还配置为若所述子节点被占据数等于1,则确定所述单一子节点的标识信息的取值为第一标识值;若所述子节点被占据数不等于1,则确定所述单一子节点的标识信息的取值为第二标识值。
在一些实施例中,第一确定单元1202,还配置为若所述子节点被占据数等于1,则确定所述当前节点划分的子节点中仅一个子节点被占据;若所述子节点被占据数不等于1,则确定所述当前节点划分的子节点中至少两个子节点被占据。
在一些实施例中,第一确定单元1202,还配置为若所述当前节点划分的子节点中仅一个子节点被占据,则确定所述单一子节点的标识信息的取值为第一标识值;若所述当前节点划分的子节点中至少两个子节点被占据,则确定所述单一子节点的标识信息的取值为第二标识值。
在一些实施例中,所述第一标识值为1,所述第二标识值为0;或者,所述第一标识值为0,所述第二标识值为1。
在一些实施例中,第一确定单元1202,还配置为确定单一子节点使能变量的取值;以及在所述单一子节点使能变量的取值指示所述当前节点处于单一子节点使能状态时,根据所述邻居节点的占位比特信息,确定上下文模型。
在一些实施例中,参见图12,编码器120还可以包括第一比较单元1204;
第一确定单元1202,还配置为确定节点数量以及单一子节点数量;
第一比较单元1204,配置为对所述单一子节点数量和所述节点数量进行除法运算,得到第一比例值;以及将所述第一比例值和第一阈值进行比较;以及根据所述第一比例值和所述第一阈值的比较结果,确定所述单一子节点使能变量的取值。
进一步地,第一比较单元1204,具体配置为若所述第一比例值大于所述第一阈值,则确定所述单一子节点使能变量的取值为第三值;若所述第一比例值小于或等于所述第一阈值,则确定所述单一子节点使能变量的取值为第四值。
在一些实施例中,所述第三值为1,所述第四值为0;或者,所述第三值为0,所述第四值为1。
在一些实施例中,参见图12,编码器120还可以包括划分单元1205和第一设置单元1206;其中,
划分单元1205,配置为对输入点云进行八叉树划分,得到K层的八叉树,K为大于0的整数;
第一设置单元1206,配置为在进入所述八叉树的第i层时,设置所述节点数量的初始值为0,所述单一子节点数量的初始值为0,所述单一子节点使能变量的初始值为0;其中,i为大于或等于0且小于K的整数。
在一些实施例中,第一获取单元1201,还配置为当所述当前节点处于所述第i层时,基于所述第i层中的已编码节点,获得所述节点数量;以及从所述已编码节点中确定仅一个子节点被占据的已编码节点,获得所述单一子节点数量。
在一些实施例中,第一确定单元1202,还配置为在所述已编码节点中,判断所述已编码节点划分的子节点中是否仅一个子节点被占据;以及若判断结果为是,则对所述单一子节点数量执行加1操作,更新所述单一子节点数量;若判断结果为否,则维持所述单一子节点数量不变。
在一些实施例中,第一确定单元1202,还配置为根据所述邻居节点的占位比特信息,确定与所述当前节点共面的邻居节点中有点占据的第一节点数量;以及根据所述第一节点数量,确定所述当前节点的预测标识信息。
在一些实施例中,第一比较单元1204,还配置为将所述第一节点数量与第二阈值进行比较;根据所述第一节点数量与所述第二阈值的比较结果,确定所述当前节点的预测标识信息。
进一步地,第一比较单元1204,具体配置为若所述第一节点数量小于所述第二阈值,则确定所述当前节点的预测标识信息等于第五值;若所述第一节点数量大于或等于所述第二阈值,则确定所述当前节点的预测标识信息等于第六值。
在一些实施例中,所述第五值为1,所述第六值为0;或者,所述第五值为0,所述第六值为1。
在一些实施例中,第一确定单元1202,具体配置为根据所述当前节点的预测标识信息,获得第一上下文模型的索引序号值;以及根据所述第一上下文模型的索引序号值,确定所述第一上下文模型。
在一些实施例中,参见图12,编码器120还可以包括第一构建单元1207,配置为构建至少一个第一候选上下文模型;其中,不同的第一候选上下文模型对应不同的索引序号;
相应地,第一确定单元1202,具体配置为根据所述第一上下文模型的索引序号值,从所述至少一个第一候选上下文模型中选择所述索引序号值对应的第一候选上下文模型,将所选择的第一候选上下文 模型确定为所述第一上下文模型。
在一些实施例中,第一确定单元1202,还配置为根据所述邻居节点的占位比特信息,确定第一方向坐标值为第七值对应的第一平面内邻居节点中有点占据的第二节点数量,以及第二方向坐标值为第七值对应的第二平面内邻居节点中有点占据的第三节点数量,以及第三方向坐标值为第七值对应的第三平面内邻居节点中有点占据的第四节点数量;
第一比较单元1204,还配置为将所述第二节点数量与第三阈值进行比较,根据比较结果确定第一坐标方向的第一一预测值;以及将所述第三节点数量与第三阈值进行比较,根据比较结果确定第二坐标方向的第二一预测值;以及将所述第四节点数量与第三阈值进行比较,根据比较结果确定第三坐标方向的第三一预测值;以及根据所述第一一预测值、所述第二一预测值和所述第三一预测值,得到所述当前节点的第一组预测坐标信息。
在一些实施例中,第一确定单元1202,还配置为根据所述邻居节点的占位比特信息,确定第一方向坐标值为第八值对应的第一平面内邻居节点中有点占据的第五节点数量,以及第二方向坐标值为第八值对应的第二平面内邻居节点中有点占据的第六节点数量,以及第三方向坐标值为第八值对应的第三平面内邻居节点中有点占据的第七节点数量;
第一比较单元1204,还配置为将所述第五节点数量与第四阈值进行比较,根据比较结果确定第一坐标方向的第一二预测值;以及将所述第六节点数量与第四阈值进行比较,根据比较结果确定第二坐标方向的第二二预测值;以及将所述第七节点数量与第四阈值进行比较,根据比较结果确定第三坐标方向的第三二预测值;以及根据所述第一二预测值、所述第二二预测值和所述第三二预测值,得到所述当前节点的第二组预测坐标信息。
在一些实施例中,所述第七值为-1,所述第八值为1;或者,所述第七值为1,所述第八值为-1。
在一些实施例中,第一获取单元1201,还配置为获取所述当前节点的第一组预测坐标信息和第二组预测坐标信息;以及根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第二上下文模型的索引序号值;
第一确定单元1202,还配置为根据所述第二上下文模型的索引序号值,确定所述第二上下文模型。
在一些实施例中,第一构建单元1207,还配置为构建至少一个第二候选上下文模型;其中,不同的第二候选上下文模型对应不同的索引序号;
相应地,第一确定单元1202,具体配置为根据所述第二上下文模型的索引序号值,从所述至少一个第二候选上下文模型中选择所述索引序号值对应的第二候选上下文模型,将所选择的第二候选上下文模型确定为所述第二上下文模型。
在一些实施例中,第一获取单元1201,还配置为根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第一坐标方向的第一一预测值和第二一预测值、第二坐标方向的第二一预测值和第二二预测值、第三坐标方向的第三一预测值和第三二预测值;
第一确定单元1202,还配置为根据所述第一坐标方向的第一一预测值和第一二预测值,确定所述第一坐标方向的所述第二上下文模型的索引序号值;以及根据所述第二坐标方向的第二一预测值和第二二预测值,确定所述第二坐标方向的所述第二上下文模型的索引序号值;以及根据所述第三坐标方向的第三一预测值和第三二预测值,确定所述第三坐标方向的所述第二上下文模型的索引序号值。
可以理解地,在本申请实施例中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
因此,本申请实施例提供了一种计算机存储介质,应用于编码器120,该计算机存储介质存储有计算机程序,所述计算机程序被第一处理器执行时实现前述实施例中任一项所述的方法。
基于上述编码器120的组成以及计算机存储介质,参见图13,其示出了本申请实施例提供的编码器120的具体硬件结构示意图。如图13所示,可以包括:第一通信接口1301、第一存储器1302和第一处理器1303;各个组件通过第一总线系统1304耦合在一起。可理解,第一总线系统1304用于实现 这些组件之间的连接通信。第一总线系统1304除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图13中将各种总线都标为第一总线系统1304。其中,
第一通信接口1301,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
第一存储器1302,用于存储能够在第一处理器1303上运行的计算机程序;
第一处理器1303,用于在运行所述计算机程序时,执行:
获取当前节点的邻居节点的占位比特信息;
根据所述邻居节点的占位比特信息,确定上下文模型;
利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
可以理解,本申请实施例中的第一存储器1302可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DRRAM)。本申请描述的系统和方法的第一存储器1302旨在包括但不限于这些和任意其它适合类型的存储器。
而第一处理器1303可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过第一处理器1303中的硬件的集成逻辑电路或者软件形式的指令完成。上述的第一处理器1303可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于第一存储器1302,第一处理器1303读取第一存储器1302中的信息,结合其硬件完成上述方法的步骤。
可以理解的是,本申请描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(Application Specific Integrated Circuits,ASIC)、数字信号处理器(Digital Signal Processing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(Programmable Logic Device,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。对于软件实现,可通过执行本申请所述功能的模块(例如过程、函数等)来实现本申请所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
可选地,作为另一个实施例,第一处理器1303还配置为在运行所述计算机程序时,执行前述实施例中任一项所述的方法。
本实施例提供了一种编码器,该编码器可以包括第一获取单元、第一确定单元和编码单元。这样,这样,由于利用邻居节点的占位比特信息来构建上下文模型,如此基于所构建的上下文模型对单一子节点的标识信息和坐标信息进行熵解码,能够充分利用点云的空间相关性,从而能够提高点云的解码效率。
本申请的再一实施例中,基于前述实施例相同的发明构思,参见图14,其示出了本申请实施例提供的一种解码器140的组成结构示意图。如图14所示,该解码器140可以包括:第二获取单元1401、第二确定单元1402和解码单元1403;其中,
第二获取单元1401,配置为获取当前节点的邻居节点的占位比特信息;
第二确定单元1402,配置为根据所述邻居节点的占位比特信息,确定上下文模型;
解码单元1403,配置为利用所述上下文模型解析码流,获取所述当前节点的相关信息;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
在一些实施例中,第二确定单元1402,具体配置为根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息;以及根据所述当前节点的预测标识信息,确定所述第一上下文模型。
在一些实施例中,解码单元1403,具体配置为利用所述第一上下文模型解析码流,获取所述单一子节点的标识信息;其中,所述单一子节点的标识信息用于指示所述当前节点划分的子节点中是否仅一个子节点被占据。
在一些实施例中,第二确定单元1402,还配置为若所述单一子节点的标识信息的取值等于第一标识值,则确定所述当前节点划分的子节点中仅一个子节点被占据;若所述单一子节点的标识信息的取值等于第二标识值,则确定所述当前节点划分的子节点中至少两个子节点被占据。
在一些实施例中,所述第一标识值为1,所述第二标识值为0;或者,所述第一标识值为0,所述第二标识值为1。
在一些实施例中,第二确定单元1402,具体配置为根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息;以及根据所述当前节点的预测坐标信息,确定所述第二上下文模型。
在一些实施例中,解码单元1403,具体配置为当所述单一子节点的标识信息指示当前节点划分的子节点中仅一个子节点被占据时,利用所述第二上下文模型解析码流,获取所述单一子节点的坐标信息。
在一些实施例中,第二确定单元1402,还配置为确定所述当前节点的邻居配置数;
解码单元1403,具体配置为若所述邻居配置数指示所述当前节点中有邻居节点被占据,则在所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,利用所述第二上下文模型解析码流,获取所述单一子节点的坐标信息。
在一些实施例中,第二确定单元1402,还配置为基于所述单一子节点的坐标信息,确定所述当前节点划分的子节点的占位比特信息。
在一些实施例中,所述邻居节点包括下述至少之一:与所述当前节点共面的邻居节点、与所述当前节点共线的邻居节点和与所述当前节点共点的邻居节点。
在一些实施例中,第二确定单元1402,还配置为若所述邻居节点内有点占据,则确定所述邻居节点的占位比特信息等于第一值;若所述邻居节点内无点占据,则确定所述邻居节点的占位比特信息等于第二值。
在一些实施例中,所述第一值为1,所述第二值为0;或者,所述第一值为0,所述第二值为1。
在一些实施例中,第二确定单元1402,还配置为获取与所述当前节点共面的邻居节点的占位比特信息;以及根据所述与所述当前节点共面的邻居节点的占位比特信息,确定所述邻居配置数。
在一些实施例中,第二确定单元1402,还配置为若所述邻居配置数大于0,则确定所述当前节点中有邻居节点被占据;若所述邻居配置数等于0,则确定所述当前节点中无邻居节点被占据。
在一些实施例中,第二确定单元1402,还配置为确定单一子节点使能变量的取值;以及在所述单一子节点使能变量的取值指示所述当前节点处于单一子节点使能状态时,根据所述邻居节点的占位比特信息,确定上下文模型。
在一些实施例中,参见图14,解码器140还可以包括第二比较单元1404;
第二确定单元1402,还配置为确定节点数量以及单一子节点数量;
第二比较单元1404,配置为对所述单一子节点数量和所述节点数量进行除法运算,得到第一比例值;以及将所述第一比例值和第一阈值进行比较;以及根据所述第一比例值和所述第一阈值的比较结果,确定所述单一子节点使能变量的取值。
进一步地,第二比较单元1404,具体配置为若所述第一比例值大于所述第一阈值,则确定所述单一子节点使能变量的取值为第三值;若所述第一比例值小于或等于所述第一阈值,则确定所述单一子节点使能变量的取值为第四值。
在一些实施例中,所述第三值为1,所述第四值为0;或者,所述第三值为0,所述第四值为1。
在一些实施例中,参见图14,解码器140还可以包括第二设置单元1405,配置为通过解码单元1403解析所述码流,在确定进入所述八叉树的第i层时,设置所述节点数量的初始值为0,所述单一子节点数量的初始值为0,所述单一子节点使能变量的初始值为0;其中,i为大于或等于0且小于K的整数,K表示所述八叉树的层数,K为大于0的整数。
在一些实施例中,第二获取单元1401,还配置为通过解码单元1403解析所述码流,在确定所述当前节点处于八叉树的第i层时,基于所述第i层中的已解码节点,获得所述节点数量;以及从所述已解码节点中确定仅一个子节点被占据的已解码节点,获得所述单一子节点数量。
在一些实施例中,第二获取单元1401,还配置为在所述已解码节点中,判断所述已解码节点划分的子节点中是否仅一个子节点被占据;以及若判断结果为是,则对所述单一子节点数量执行加1操作,更新所述单一子节点数量;若判断结果为否,则维持所述单一子节点数量不变。
在一些实施例中,第二确定单元1402,还配置为根据所述邻居节点的占位比特信息,确定与所述当前节点共面的邻居节点中有点占据的第一节点数量;以及根据所述第一节点数量,确定所述当前节点 的预测标识信息。
在一些实施例中,第二比较单元1404,还配置为将所述第一节点数量与第二阈值进行比较;根据所述第一节点数量与所述第二阈值的比较结果,确定所述当前节点的预测标识信息。
进一步地,第二比较单元1404,具体配置为若所述第一节点数量小于所述所述第二阈值,则确定所述当前节点的预测标识信息等于第五值;若所述第一节点数量大于或等于所述第二阈值,则确定所述当前节点的预测标识信息等于第六值。
在一些实施例中,所述第五值为1,所述第六值为0;或者,所述第五值为0,所述第六值为1。
在一些实施例中,第二确定单元1402,具体配置为根据所述当前节点的预测标识信息,获得第一上下文模型的索引序号值;以及根据所述第一上下文模型的索引序号值,确定所述第一上下文模型。
在一些实施例中,参见图14,解码器140还可以包括第二构建单元1406,配置为构建至少一个第一候选上下文模型;其中,不同的第一候选上下文模型对应不同的索引序号;
相应地,第二确定单元1402,具体配置为根据所述第一上下文模型的索引序号值,从所述至少一个第一候选上下文模型中选择所述索引序号值对应的第一候选上下文模型,将所选择的第一候选上下文模型确定为所述第一上下文模型。
在一些实施例中,第二确定单元1402,还配置为根据所述邻居节点的占位比特信息,确定第一方向坐标值为第七值对应的第一平面内邻居节点中有点占据的第二节点数量,以及第二方向坐标值为第七值对应的第二平面内邻居节点中有点占据的第三节点数量,以及第三方向坐标值为第七值对应的第三平面内邻居节点中有点占据的第四节点数量;
第二比较单元1404,还配置为将所述第二节点数量与第三阈值进行比较,根据比较结果确定第一坐标方向的第一一预测值;以及将所述第三节点数量与第三阈值进行比较,根据比较结果确定第二坐标方向的第二一预测值;以及将所述第四节点数量与第三阈值进行比较,根据比较结果确定第三坐标方向的第三一预测值;以及根据所述第一一预测值、所述第二一预测值和所述第三一预测值,得到所述当前节点的第一组预测坐标信息。
在一些实施例中,第二确定单元1402,还配置为根据所述邻居节点的占位比特信息,确定第一方向坐标值为第八值对应的第一平面内邻居节点中有点占据的第五节点数量,以及第二方向坐标值为第八值对应的第二平面内邻居节点中有点占据的第六节点数量,以及第三方向坐标值为第八值对应的第三平面内邻居节点中有点占据的第七节点数量;
第二比较单元1404,还配置为将所述第五节点数量与第四阈值进行比较,根据比较结果确定第一坐标方向的第一二预测值;以及将所述第六节点数量与第四阈值进行比较,根据比较结果确定第二坐标方向的第二二预测值;以及将所述第七节点数量与第四阈值进行比较,根据比较结果确定第三坐标方向的第三二预测值;以及根据所述第一二预测值、所述第二二预测值和所述第三二预测值,得到所述当前节点的第二组预测坐标信息。
在一些实施例中,所述第七值为-1,所述第八值为1;或者,所述第七值为1,所述第八值为-1。
在一些实施例中,第二获取单元1401,还配置为获取所述当前节点的第一组预测坐标信息和第二组预测坐标信息;以及根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第二上下文模型的索引序号值;
第二确定单元1402,还配置为根据所述第二上下文模型的索引序号值,确定所述第二上下文模型。
在一些实施例中,第二构建单元1406,还配置为构建至少一个第二候选上下文模型;其中,不同的第二候选上下文模型对应不同的索引序号;
相应地,第二确定单元1402,具体配置为根据所述第二上下文模型的索引序号值,从所述至少一个第二候选上下文模型中选择所述索引序号值对应的第二候选上下文模型,将所选择的第二候选上下文模型确定为所述第二上下文模型。
在一些实施例中,第二获取单元1401,还配置为根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第一坐标方向的第一一预测值和第二一预测值、第二坐标方向的第二一预测值和第二二预测值、第三坐标方向的第三一预测值和第三二预测值;
第二确定单元1402,还配置为根据所述第一坐标方向的第一一预测值和第一二预测值,确定所述第一坐标方向的所述第二上下文模型的索引序号值;以及根据所述第二坐标方向的第二一预测值和第二二预测值,确定所述第二坐标方向的所述第二上下文模型的索引序号值;以及根据所述第三坐标方向的第三一预测值和第三二预测值,确定所述第三坐标方向的所述第二上下文模型的索引序号值。
可以理解地,在本实施例中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以 采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本实施例提供了一种计算机存储介质,应用于解码器140,该计算机存储介质存储有计算机程序,所述计算机程序被第二处理器执行时实现前述实施例中任一项所述的方法。
基于上述解码器140的组成以及计算机存储介质,参见图15,其示出了本申请实施例提供的解码器140的具体硬件结构示意图。如图15所示,可以包括:第二通信接口1501、第二存储器1502和第二处理器1503;各个组件通过第二总线系统1504耦合在一起。可理解,第二总线系统1504用于实现这些组件之间的连接通信。第二总线系统1504除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图15中将各种总线都标为第二总线系统1504。其中,
第二通信接口1501,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
第二存储器1502,用于存储能够在第二处理器1503上运行的计算机程序;
第二处理器1503,用于在运行所述计算机程序时,执行:
获取当前节点的邻居节点的占位比特信息;
根据所述邻居节点的占位比特信息,确定上下文模型;
利用所述上下文模型解析码流,获取所述当前节点的相关信息;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
可选地,作为另一个实施例,第二处理器1503还配置为在运行所述计算机程序时,执行前述实施例中任一项所述的方法。
可以理解,第二存储器1502与第一存储器1302的硬件功能类似,第二处理器1503与第一处理器1303的硬件功能类似;这里不再详述。
本实施例提供了一种解码器,该解码器可以包括第二获取单元、第二确定单元和解码单元。这样,由于利用邻居节点的占位比特信息来构建上下文模型,如此基于所构建的上下文模型对单一子节点的标识信息和坐标信息进行熵解码,能够充分利用点云的空间相关性,从而能够提高点云的解码效率。
需要说明的是,在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
本申请实施例中,在编码器侧,获取当前节点的邻居节点的占位比特信息;根据所述邻居节点的占位比特信息,确定上下文模型;利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。在解码器侧,获取当前节点的邻居节点的占位比特信息;根据所述邻居节点的占位比特信息,确定上下文模型;利用所述上下文模型解析码流,获取所述当前节点的相关信息;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。这样,由于利用邻居节点的占位比特信息来构建上下文模型,如此基于所构建的上下文模型对单一子节点的标识信息和坐标信息进行熵编码,能够充分利用点云的空间相关性,从而能够提高点云的编解码效率。
Claims (75)
- 一种点云编码方法,应用于编码器,所述方法包括:获取当前节点的邻居节点的占位比特信息;根据所述邻居节点的占位比特信息,确定上下文模型;利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
- 根据权利要求1所述的方法,其中,所述根据所述邻居节点的占位比特信息,确定上下文模型,包括:根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息;根据所述当前节点的预测标识信息,确定所述第一上下文模型。
- 根据权利要求2所述的方法,其中,所述利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流,包括:确定当前节点的子节点被占据数;根据所述子节点被占据数,确定所述单一子节点的标识信息;利用所述第一上下文模型对所述单一子节点的标识信息进行熵编码,并写入码流。
- 根据权利要求1所述的方法,其中,所述根据所述邻居节点的占位比特信息,确定上下文模型,包括:根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息;根据所述当前节点的预测坐标信息,确定所述第二上下文模型。
- 根据权利要求4所述的方法,其中,所述利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流,包括:当所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,确定所述单一子节点的坐标信息,利用所述第二上下文模型对所述单一子节点的坐标信息进行熵编码,并写入码流。
- 根据权利要求4所述的方法,其中,所述方法还包括:确定所述当前节点的邻居配置数;相应地,所述利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流,包括:若所述邻居配置数指示所述当前节点中有邻居节点被占据,则在所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,确定所述单一子节点的坐标信息,利用所述第二上下文模型对所述单一子节点的坐标信息进行熵编码,并写入码流。
- 根据权利要求5或6所述的方法,其中,所述确定所述单一子节点的坐标信息,包括:获取所述当前节点划分的子节点的占位比特信息;根据所述子节点的占位比特信息,计算所述单一子节点的坐标信息。
- 根据权利要求1所述的方法,其中,所述邻居节点包括下述至少之一:与所述当前节点共面的邻居节点、与所述当前节点共线的邻居节点和与所述当前节点共点的邻居节点。
- 根据权利要求8所述的方法,其中,所述获取当前节点的邻居节点的占位比特信息,包括:若所述邻居节点内有点占据,则确定所述邻居节点的占位比特信息等于第一值;若所述邻居节点内无点占据,则确定所述邻居节点的占位比特信息等于第二值。
- 根据权利要求6所述的方法,其中,所述确定所述当前节点的邻居配置数,包括:获取与所述当前节点共面的邻居节点的占位比特信息;根据所述与所述当前节点共面的邻居节点的占位比特信息,确定所述邻居配置数。
- 根据权利要求10所述的方法,其中,所述方法还包括:若所述邻居配置数大于0,则确定所述当前节点中有邻居节点被占据;若所述邻居配置数等于0,则确定所述当前节点中无邻居节点被占据。
- 根据权利要求3所述的方法,其中,所述确定当前节点的子节点被占据数,包括:获取所述当前节点划分的子节点的占位比特信息;根据所述子节点的占位比特信息,确定所述子节点被占据数。
- 根据权利要求12所述的方法,其中,所述获取所述当前节点划分的子节点的占位比特信息,包括:若所述子节点内有点占据,则确定所述子节点的占位比特信息等于第一值;若所述子节点内无点占据,则确定所述子节点的占位比特信息等于第二值。
- 根据权利要求9或13所述的方法,其中,所述第一值为1,所述第二值为0;或者,所述第一值为0,所述第二值为1。
- 根据权利要求3所述的方法,其中,所述根据所述子节点被占据数,确定所述单一子节点的标识信息,包括:若所述子节点被占据数等于1,则确定所述单一子节点的标识信息的取值为第一标识值;若所述子节点被占据数不等于1,则确定所述单一子节点的标识信息的取值为第二标识值。
- 根据权利要求3所述的方法,其中,所述方法还包括:若所述子节点被占据数等于1,则确定所述当前节点划分的子节点中仅一个子节点被占据;若所述子节点被占据数不等于1,则确定所述当前节点划分的子节点中至少两个子节点被占据。
- 根据权利要求16所述的方法,其中,所述根据所述子节点被占据数,确定所述单一子节点的标识信息,包括:若所述当前节点划分的子节点中仅一个子节点被占据,则确定所述单一子节点的标识信息的取值为第一标识值;若所述当前节点划分的子节点中至少两个子节点被占据,则确定所述单一子节点的标识信息的取值为第二标识值。
- 根据权利要求15或17所述的方法,其中,所述第一标识值为1,所述第二标识值为0;或者,所述第一标识值为0,所述第二标识值为1。
- 根据权利要求1所述的方法,其中,所述方法还包括:确定单一子节点使能变量的取值;相应地,所述根据所述邻居节点的占位比特信息,确定上下文模型,包括:在所述单一子节点使能变量的取值指示所述当前节点处于单一子节点使能状态时,根据所述邻居节点的占位比特信息,确定上下文模型。
- 根据权利要求19所述的方法,其中,所述确定单一子节点使能变量的取值,包括:确定节点数量以及单一子节点数量;对所述单一子节点数量和所述节点数量进行除法运算,得到第一比例值;将所述第一比例值和第一阈值进行比较;根据所述第一比例值和所述第一阈值的比较结果,确定所述单一子节点使能变量的取值。
- 根据权利要求20所述的方法,其中,所述根据所述第一比例值和所述第一阈值的比较结果,确定所述单一子节点使能变量的取值,包括:若所述第一比例值大于所述第一阈值,则确定所述单一子节点使能变量的取值为第三值;若所述第一比例值小于或等于所述第一阈值,则确定所述单一子节点使能变量的取值为第四值。
- 根据权利要求21所述的方法,其中,所述第三值为1,所述第四值为0;或者,所述第三值为0,所述第四值为1。
- 根据权利要求20所述的方法,其中,所述方法还包括:对输入点云进行八叉树划分,得到K层的八叉树,K为大于0的整数;在进入所述八叉树的第i层时,设置所述节点数量的初始值为0,所述单一子节点数量的初始值为0,所述单一子节点使能变量的初始值为0;其中,i为大于或等于0且小于K的整数。
- 根据权利要求23所述的方法,其中,当所述当前节点处于所述第i层时,所述确定节点数量以及单一子节点数量,包括:基于所述第i层中的已编码节点,获得所述节点数量;从所述已编码节点中确定仅一个子节点被占据的已编码节点,获得所述单一子节点数量。
- 根据权利要求24所述的方法,其中,所述从所述已编码节点中确定仅一个子节点被占据的已编码节点,获得所述单一子节点数量,包括:在所述已编码节点中,判断所述已编码节点划分的子节点中是否仅一个子节点被占据;若判断结果为是,则对所述单一子节点数量执行加1操作,更新所述单一子节点数量;若判断结果为否,则维持所述单一子节点数量不变。
- 根据权利要求2所述的方法,其中,所述根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息,包括:根据所述邻居节点的占位比特信息,确定与所述当前节点共面的邻居节点中有点占据的第一节点数量;根据所述第一节点数量,确定所述当前节点的预测标识信息。
- 根据权利要求26所述的方法,其中,所述根据所述第一节点数量,确定所述当前节点的预测标识信息,包括:将所述第一节点数量与第二阈值进行比较;根据所述第一节点数量与所述第二阈值的比较结果,确定所述当前节点的预测标识信息。
- 根据权利要求27所述的方法,其中,所述根据所述第一节点数量与所述第二阈值的比较结果,确定所述当前节点的预测标识信息,包括:若所述第一节点数量小于所述第二阈值,则确定所述当前节点的预测标识信息等于第五值;若所述第一节点数量大于或等于所述第二阈值,则确定所述当前节点的预测标识信息等于第六值。
- 根据权利要求28所述的方法,其中,所述第五值为1,所述第六值为0;或者,所述第五值为0,所述第六值为1。
- 根据权利要求2所述的方法,其中,所述根据所述当前节点的预测标识信息,确定所述第一上下文模型,包括:根据所述当前节点的预测标识信息,获得第一上下文模型的索引序号值;根据所述第一上下文模型的索引序号值,确定所述第一上下文模型。
- 根据权利要求30所述的方法,其中,所述方法还包括:构建至少一个第一候选上下文模型;其中,不同的第一候选上下文模型对应不同的索引序号;相应地,所述根据所述第一上下文模型的索引序号值,确定所述第一上下文模型,包括:根据所述第一上下文模型的索引序号值,从所述至少一个第一候选上下文模型中选择所述索引序号值对应的第一候选上下文模型,将所选择的第一候选上下文模型确定为所述第一上下文模型。
- 根据权利要求4所述的方法,其中,所述根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息,包括:根据所述邻居节点的占位比特信息,确定第一方向坐标值为第七值对应的第一平面内邻居节点中有点占据的第二节点数量,以及第二方向坐标值为第七值对应的第二平面内邻居节点中有点占据的第三节点数量,以及第三方向坐标值为第七值对应的第三平面内邻居节点中有点占据的第四节点数量;将所述第二节点数量与第三阈值进行比较,根据比较结果确定第一坐标方向的第一一预测值;将所述第三节点数量与第三阈值进行比较,根据比较结果确定第二坐标方向的第二一预测值;将所述第四节点数量与第三阈值进行比较,根据比较结果确定第三坐标方向的第三一预测值;根据所述第一一预测值、所述第二一预测值和所述第三一预测值,得到所述当前节点的第一组预测坐标信息。
- 根据权利要求32所述的方法,其中,所述方法还包括:根据所述邻居节点的占位比特信息,确定第一方向坐标值为第八值对应的第一平面内邻居节点中有点占据的第五节点数量,以及第二方向坐标值为第八值对应的第二平面内邻居节点中有点占据的第六节点数量,以及第三方向坐标值为第八值对应的第三平面内邻居节点中有点占据的第七节点数量;将所述第五节点数量与第四阈值进行比较,根据比较结果确定第一坐标方向的第一二预测值;将所述第六节点数量与第四阈值进行比较,根据比较结果确定第二坐标方向的第二二预测值;将所述第七节点数量与第四阈值进行比较,根据比较结果确定第三坐标方向的第三二预测值;根据所述第一二预测值、所述第二二预测值和所述第三二预测值,得到所述当前节点的第二组预测坐标信息。
- 根据权利要求33所述的方法,其中,所述第七值为-1,所述第八值为1;或者,所述第七值为1,所述第八值为-1。
- 根据权利要求33所述的方法,其中,所述根据所述当前节点的预测坐标信息,确定所述第二上下文模型,包括:获取所述当前节点的第一组预测坐标信息和第二组预测坐标信息;根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第二上下文模型的索引序号值;根据所述第二上下文模型的索引序号值,确定所述第二上下文模型。
- 根据权利要求35所述的方法,其中,所述方法还包括:构建至少一个第二候选上下文模型;其中,不同的第二候选上下文模型对应不同的索引序号;相应地,所述所述根据所述第二上下文模型的索引序号值,确定所述第二上下文模型,包括:根据所述第二上下文模型的索引序号值,从所述至少一个第二候选上下文模型中选择所述索引序号值对应的第二候选上下文模型,将所选择的第二候选上下文模型确定为所述第二上下文模型。
- 根据权利要求35所述的方法,其中,所述根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第二上下文模型的索引序号值,包括:根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第一坐标方向的第一一预测值和第二一预测值、第二坐标方向的第二一预测值和第二二预测值、第三坐标方向的第三一预测值和第三二预测值;根据所述第一坐标方向的第一一预测值和第一二预测值,确定所述第一坐标方向的所述第二上下文模型的索引序号值;根据所述第二坐标方向的第二一预测值和第二二预测值,确定所述第二坐标方向的所述第二上下文模型的索引序号值;根据所述第三坐标方向的第三一预测值和第三二预测值,确定所述第三坐标方向的所述第二上下文模型的索引序号值。
- 一种点云解码方法,应用于解码器,所述方法包括:获取当前节点的邻居节点的占位比特信息;根据所述邻居节点的占位比特信息,确定上下文模型;利用所述上下文模型解析码流,获取所述当前节点的相关信息;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
- 根据权利要求38所述的方法,其中,所述根据所述邻居节点的占位比特信息,确定上下文模型,包括:根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息;根据所述当前节点的预测标识信息,确定所述第一上下文模型。
- 根据权利要求39所述的方法,其中,所述利用所述上下文模型解析码流,获取所述当前节点的相关信息,包括:利用所述第一上下文模型解析码流,获取所述单一子节点的标识信息;其中,所述单一子节点的标识信息用于指示所述当前节点划分的子节点中是否仅一个子节点被占据。
- 根据权利要求40所述的方法,其中,所述方法还包括:若所述单一子节点的标识信息的取值等于第一标识值,则确定所述当前节点划分的子节点中仅一个子节点被占据;若所述单一子节点的标识信息的取值等于第二标识值,则确定所述当前节点划分的子节点中至少两个子节点被占据。
- 根据权利要求41所述的方法,其中,所述第一标识值为1,所述第二标识值为0;或者,所述第一标识值为0,所述第二标识值为1。
- 根据权利要求38所述的方法,其中,所述根据所述邻居节点的占位比特信息,确定上下文模型,包括:根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息;根据所述当前节点的预测坐标信息,确定所述第二上下文模型。
- 根据权利要求43所述的方法,其中,所述利用所述上下文模型解析码流,获取所述当前节点的相关信息,包括:当所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,利用所述第二上下文模型解析码流,获取所述单一子节点的坐标信息。
- 根据权利要求43所述的方法,其中,所述利用所述上下文模型解析码流,获取所述当前节点的相关信息,包括:确定所述当前节点的邻居配置数;若所述邻居配置数指示所述当前节点中有邻居节点被占据,则在所述单一子节点的标识信息指示所述当前节点划分的子节点中仅一个子节点被占据时,利用所述第二上下文模型解析码流,获取所述单一子节点的坐标信息。
- 根据权利要求44或45所述的方法,其中,所述方法还包括:基于所述单一子节点的坐标信息,确定所述当前节点划分的子节点的占位比特信息。
- 根据权利要求38所述的方法,其中,所述邻居节点包括下述至少之一:与所述当前节点共面的邻居节点、与所述当前节点共线的邻居节点和与所述当前节点共点的邻居节点。
- 根据权利要求47所述的方法,其中,所述获取当前节点的邻居节点的占位比特信息,包括:若所述邻居节点内有点占据,则确定所述邻居节点的占位比特信息等于第一值;若所述邻居节点内无点占据,则确定所述邻居节点的占位比特信息等于第二值。
- 根据权利要求48所述的方法,其中,所述第一值为1,所述第二值为0;或者,所述第一值为 0,所述第二值为1。
- 根据权利要求45所述的方法,其中,所述确定所述当前节点的邻居配置数,包括:获取与所述当前节点共面的邻居节点的占位比特信息;根据所述与所述当前节点共面的邻居节点的占位比特信息,确定所述邻居配置数。
- 根据权利要求50所述的方法,其中,所述方法还包括:若所述邻居配置数大于0,则确定所述当前节点中有邻居节点被占据;若所述邻居配置数等于0,则确定所述当前节点中无邻居节点被占据。
- 根据权利要求38所述的方法,其中,所述方法还包括:确定单一子节点使能变量的取值;相应地,所述所述根据所述邻居节点的占位比特信息,确定上下文模型,包括:在所述单一子节点使能变量的取值指示所述当前节点处于单一子节点使能状态时,根据所述邻居节点的占位比特信息,确定上下文模型。
- 根据权利要求52所述的方法,其中,所述确定单一子节点使能变量的取值,包括:确定节点数量以及单一子节点数量;对所述单一子节点数量和所述节点数量进行除法运算,得到第一比例值;将所述第一比例值和第一阈值进行比较;根据所述第一比例值和所述第一阈值的比较结果,确定所述单一子节点使能变量的取值。
- 根据权利要求53所述的方法,其中,所述根据所述第一比例值和所述第一阈值的比较结果,确定所述单一子节点使能变量的取值,包括:若所述第一比例值大于所述第一阈值,则确定所述单一子节点使能变量的取值为第三值;若所述第一比例值小于或等于所述第一阈值,则确定所述单一子节点使能变量的取值为第四值。
- 根据权利要求54所述的方法,其中,所述第三值为1,所述第四值为0;或者,所述第三值为0,所述第四值为1。
- 根据权利要求53所述的方法,其中,所述方法还包括:解析所述码流,在确定进入所述八叉树的第i层时,设置所述节点数量的初始值为0,所述单一子节点数量的初始值为0,所述单一子节点使能变量的初始值为0;其中,i为大于或等于0且小于K的整数,K表示所述八叉树的层数,K为大于0的整数。
- 根据权利要求56所述的方法,其中,所述确定节点数量以及单一子节点数量,包括:解析所述码流,在确定所述当前节点处于八叉树的第i层时,基于所述第i层中的已解码节点,获得所述节点数量;从所述已解码节点中确定仅一个子节点被占据的已解码节点,获得所述单一子节点数量。
- 根据权利要求57所述的方法,其中,所述从所述已解码节点中确定仅一个子节点被占据的已解码节点,获得所述单一子节点数量,包括:在所述已解码节点中,判断所述已解码节点划分的子节点中是否仅一个子节点被占据;若判断结果为是,则对所述单一子节点数量执行加1操作,更新所述单一子节点数量;若判断结果为否,则维持所述单一子节点数量不变。
- 根据权利要求39所述的方法,其中,所述根据所述邻居节点的占位比特信息,确定所述当前节点的预测标识信息,包括:根据所述邻居节点的占位比特信息,确定与所述当前节点共面的邻居节点中有点占据的第一节点数量;根据所述第一节点数量,确定所述当前节点的预测标识信息。
- 根据权利要求59所述的方法,其中,所述根据所述第一节点数量,确定所述当前节点的预测标识信息,包括:将所述第一节点数量与第二阈值进行比较;根据所述第一节点数量与所述第二阈值的比较结果,确定所述当前节点的预测标识信息。
- 根据权利要求60所述的方法,其中,所述根据所述第一节点数量与所述第二阈值的比较结果,确定所述当前节点的预测标识信息,包括:若所述第一节点数量小于所述所述第二阈值,则确定所述当前节点的预测标识信息等于第五值;若所述第一节点数量大于或等于所述第二阈值,则确定所述当前节点的预测标识信息等于第六值。
- 根据权利要求61所述的方法,其中,所述第五值为1,所述第六值为0;或者,所述第五值为0,所述第六值为1。
- 根据权利要求39所述的方法,其中,所述根据所述当前节点的预测标识信息,确定所述第一 上下文模型,包括:根据所述当前节点的预测标识信息,获得第一上下文模型的索引序号值;根据所述第一上下文模型的索引序号值,确定所述第一上下文模型。
- 根据权利要求63所述的方法,其中,所述方法还包括:构建至少一个第一候选上下文模型;其中,不同的第一候选上下文模型对应不同的索引序号;相应地,所述根据所述第一上下文模型的索引序号值,确定所述第一上下文模型,包括:根据所述第一上下文模型的索引序号值,从所述至少一个第一候选上下文模型中选择所述索引序号值对应的第一候选上下文模型,将所选择的第一候选上下文模型确定为所述第一上下文模型。
- 根据权利要求43所述的方法,其中,所述根据所述邻居节点的占位比特信息,确定所述当前节点的预测坐标信息,包括:根据所述邻居节点的占位比特信息,确定第一方向坐标值为第七值对应的第一平面内邻居节点中有点占据的第二节点数量,以及第二方向坐标值为第七值对应的第二平面内邻居节点中有点占据的第三节点数量,以及第三方向坐标值为第七值对应的第三平面内邻居节点中有点占据的第四节点数量;将所述第二节点数量与第三阈值进行比较,根据比较结果确定第一坐标方向的第一一预测值;将所述第三节点数量与第三阈值进行比较,根据比较结果确定第二坐标方向的第二一预测值;将所述第四节点数量与第三阈值进行比较,根据比较结果确定第三坐标方向的第三一预测值;根据所述第一一预测值、所述第二一预测值和所述第三一预测值,得到所述当前节点的第一组预测坐标信息。
- 根据权利要求65所述的方法,其中,所述方法还包括:根据所述邻居节点的占位比特信息,确定第一方向坐标值为第八值对应的第一平面内邻居节点中有点占据的第五节点数量,以及第二方向坐标值为第八值对应的第二平面内邻居节点中有点占据的第六节点数量,以及第三方向坐标值为第八值对应的第三平面内邻居节点中有点占据的第七节点数量;将所述第五节点数量与第四阈值进行比较,根据比较结果确定第一坐标方向的第一二预测值;将所述第六节点数量与第四阈值进行比较,根据比较结果确定第二坐标方向的第二二预测值;将所述第七节点数量与第四阈值进行比较,根据比较结果确定第三坐标方向的第三二预测值;根据所述第一二预测值、所述第二二预测值和所述第三二预测值,得到所述当前节点的第二组预测坐标信息。
- 根据权利要求66所述的方法,其中,所述第七值为-1,所述第八值为1;或者,所述第七值为1,所述第八值为-1。
- 根据权利要求66所述的方法,其中,所述根据所述当前节点的预测坐标信息,确定所述第二上下文模型,包括:获取所述当前节点的第一组预测坐标信息和第二组预测坐标信息;根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第二上下文模型的索引序号值;根据所述第二上下文模型的索引序号值,确定所述第二上下文模型。
- 根据权利要求68所述的方法,其中,所述方法还包括:构建至少一个第二候选上下文模型;其中,不同的第二候选上下文模型对应不同的索引序号;相应地,所述根据所述第二上下文模型的索引序号值,确定所述第二上下文模型,包括:根据所述第二上下文模型的索引序号值,从所述至少一个第二候选上下文模型中选择所述索引序号值对应的第二候选上下文模型,将所选择的第二候选上下文模型确定为所述第二上下文模型。
- 根据权利要求69所述的方法,其中,所述根据所述当前节点的预测坐标信息,获得第二上下文模型的索引序号值,包括:根据所述第一组预测坐标信息和所述第二组预测坐标信息,获得第一坐标方向的第一一预测值和第二一预测值、第二坐标方向的第二一预测值和第二二预测值、第三坐标方向的第三一预测值和第三二预测值;根据所述第一坐标方向的第一一预测值和第一二预测值,确定所述第一坐标方向的所述第二上下文模型的索引序号值;根据所述第二坐标方向的第二一预测值和第二二预测值,确定所述第二坐标方向的所述第二上下文模型的索引序号值;根据所述第三坐标方向的第三一预测值和第三二预测值,确定所述第三坐标方向的所述第二上下文模型的索引序号值。
- 一种编码器,所述编码器包括第一获取单元、第一确定单元和编码单元;其中,所述第一获取单元,配置为获取当前节点的邻居节点的占位比特信息;所述第一确定单元,配置为根据所述邻居节点的占位比特信息,确定上下文模型;所述编码单元,配置为利用所述上下文模型对所述当前节点的相关信息进行熵编码,并写入码流;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
- 一种编码器,所述编码器包括第一存储器和第一处理器;其中,所述第一存储器,用于存储能够在所述第一处理器上运行的计算机程序;所述第一处理器,用于在运行所述计算机程序时,执行如权利要求1至37任一项所述的方法。
- 一种解码器,所述解码器包括第二获取单元、第二确定单元和解码单元;其中,所述第二获取单元,配置为获取当前节点的邻居节点的占位比特信息;所述第二确定单元,配置为根据所述邻居节点的占位比特信息,确定上下文模型;所述解码单元,配置为利用所述上下文模型解析码流,获取所述当前节点的相关信息;其中,所述相关信息包括至少之一:单一子节点的标识信息和所述单一子节点的坐标信息。
- 一种解码器,所述解码器包括第二存储器和第二处理器;其中,所述第二存储器,用于存储能够在所述第二处理器上运行的计算机程序;所述第二处理器,用于在运行所述计算机程序时,执行如权利要求38至70任一项所述的方法。
- 一种计算机存储介质,其中,所述计算机存储介质存储有计算机程序,所述计算机程序被第一处理器执行时实现如权利要求1至37任一项所述的方法、或者被第二处理器执行时实现如权利要求38至70任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311843610.3A CN117793350A (zh) | 2020-12-14 | 2020-12-14 | 点云编解码方法、编码器、解码器以及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/136202 WO2022126326A1 (zh) | 2020-12-14 | 2020-12-14 | 点云编解码方法、编码器、解码器以及计算机存储介质 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311843610.3A Division CN117793350A (zh) | 2020-12-14 | 2020-12-14 | 点云编解码方法、编码器、解码器以及计算机存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116530021A true CN116530021A (zh) | 2023-08-01 |
Family
ID=82058736
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311843610.3A Pending CN117793350A (zh) | 2020-12-14 | 2020-12-14 | 点云编解码方法、编码器、解码器以及计算机存储介质 |
CN202080107662.2A Pending CN116530021A (zh) | 2020-12-14 | 2020-12-14 | 点云编解码方法、编码器、解码器以及计算机存储介质 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311843610.3A Pending CN117793350A (zh) | 2020-12-14 | 2020-12-14 | 点云编解码方法、编码器、解码器以及计算机存储介质 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230316586A1 (zh) |
CN (2) | CN117793350A (zh) |
WO (1) | WO2022126326A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024082135A1 (zh) * | 2022-10-18 | 2024-04-25 | Oppo广东移动通信有限公司 | 编解码方法、编解码器、码流以及计算机存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10805646B2 (en) * | 2018-06-22 | 2020-10-13 | Apple Inc. | Point cloud geometry compression using octrees and binary arithmetic encoding with adaptive look-up tables |
EP3514968B1 (en) * | 2018-01-18 | 2023-03-08 | BlackBerry Limited | Methods and devices for entropy coding point clouds |
JP7168591B2 (ja) * | 2018-01-26 | 2022-11-09 | パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ | 三次元データ符号化方法、三次元データ復号方法、三次元データ符号化装置、及び三次元データ復号装置 |
CN111145090B (zh) * | 2019-11-29 | 2023-04-25 | 鹏城实验室 | 一种点云属性编码方法、解码方法、编码设备及解码设备 |
CN111405281A (zh) * | 2020-03-30 | 2020-07-10 | 北京大学深圳研究生院 | 一种点云属性信息的编码方法、解码方法、存储介质及终端设备 |
-
2020
- 2020-12-14 CN CN202311843610.3A patent/CN117793350A/zh active Pending
- 2020-12-14 CN CN202080107662.2A patent/CN116530021A/zh active Pending
- 2020-12-14 WO PCT/CN2020/136202 patent/WO2022126326A1/zh active Application Filing
-
2023
- 2023-06-06 US US18/329,927 patent/US20230316586A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
CN117793350A (zh) | 2024-03-29 |
WO2022126326A1 (zh) | 2022-06-23 |
US20230316586A1 (en) | 2023-10-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11924468B2 (en) | Implicit quadtree or binary-tree geometry partition for point cloud coding | |
US11711545B2 (en) | Arithmetic coding information for parallel octree coding | |
AU2020397870B2 (en) | Method and apparatus for point cloud coding | |
CN114175100A (zh) | 用于处理点云数据的方法和装置 | |
CN114930858A (zh) | 用于基于几何的点云压缩的高级语法 | |
US11514612B2 (en) | Method and apparatus for point cloud coding | |
US20230316586A1 (en) | Point cloud coding method, encoder and decoder | |
CN115086660B (zh) | 基于点云属性预测的解码、编码方法、解码器及编码器 | |
KR102650334B1 (ko) | 포인트 클라우드 코딩을 위한 방법 및 장치 | |
CN116648915A (zh) | 点云编解码方法、编码器、解码器以及计算机存储介质 | |
CN113875248A (zh) | 信息处理装置和方法 | |
CN116097651A (zh) | 点云编解码方法、编码器、解码器以及计算机存储介质 | |
US20230177735A1 (en) | Information processing apparatus and method | |
US11983907B2 (en) | Techniques and apparatus for explicit quad-tree and binary-tree partitioning for geometry coding | |
US11611775B2 (en) | Method and apparatus for point cloud coding | |
RU2778864C1 (ru) | Неявное геометрическое разделение на основе квадродерева или бинарного дерева для кодирования облака точек | |
CN116830580A (zh) | 点云解码方法、解码器及计算机存储介质 | |
CN116830579A (zh) | 几何重构方法、解码器以及计算机存储介质 | |
CN117201796A (zh) | 视频编码方法、装置、计算设备和存储介质 | |
CN116634179A (zh) | 点云数据处理方法、装置、电子设备及存储介质 | |
EP4139899A2 (en) | Method and apparatus for calculating distance based weighted average for point cloud coding | |
CN116320503A (zh) | 几何模式的确定方法、装置、设备及存储介质 | |
CN117461054A (zh) | 具有推导的纹理坐标的网格压缩 | |
KR20230169317A (ko) | 제약된 기하구조 동적 범위를 갖는 메시 압축 | |
CN116635905A (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 |