CN121058043A - 编码方法、解码方法、码流、编码器、解码器、介质及程序产品 - Google Patents
编码方法、解码方法、码流、编码器、解码器、介质及程序产品Info
- Publication number
- CN121058043A CN121058043A CN202480027912.XA CN202480027912A CN121058043A CN 121058043 A CN121058043 A CN 121058043A CN 202480027912 A CN202480027912 A CN 202480027912A CN 121058043 A CN121058043 A CN 121058043A
- Authority
- CN
- China
- Prior art keywords
- current
- lod
- grid
- subdivision
- mesh
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/004—Predictors, e.g. intraframe, interframe coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
公开了一种编解码方法、码流、编码器、解码器、介质及产品。解码方法包括:解码码流,确定第一语法元素的取值;在第一语法元素指示当前网格使用非线性细分方式时,确定当前网格中的当前LOD的重建网格,并对当前LOD的重建网格进行细分,确定当前LOD的细分网格;在当前LOD为第i个LOD的情况下,将当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;第一点包括当前网格对应的重建基础网格的顶点;以及根据当前LOD的细分网格和当前LOD的第一点的位移系数,确定当前网格中的下一LOD的重建网格。
Description
相关申请的交叉引用
本申请基于申请号为63/521,327、申请日为2021年6月15日的美国专利申请提出,并要求该专利申请的优先权,该专利申请的全部内容在此引入本公开作为参考。
技术领域
本公开涉及视频编解码技术领域,尤其涉及一种编解码方法、码流、编码器、解码器、存储介质及程序产品。
背景技术
在运动图像专家组(Moving Picture Experts Group,MPEG)提供的动态网格编码(Dynamic Mesh Coding,DMC)的标准参考软件中,在对网格的几何信息进行编解码时进行以下操作。首先,对原始网格进行预处理,得到基础网格。其中,利用通用编码方法(例如“edgebreaker”)对基础网格进行编码。然后,对基础网格进行细分,得到细分网格。接下来,根据细分网格与原始网格的近似点之间的差异确定位移系数。最后,将位移系数打包到二维图像中,并使用诸如高效视频编码(High Efficiency Video Coding, HEVC)的无损视频编码方法来编码。
然而,在对网格的几何信息进行编解码的过程中,由于细分过程考虑不全面,导致编码位移系数时存在冗余,降低了编解码效率。
发明内容
本公开提供一种编码方法、解码方法、码流、编码器、解码器、介质及产品,可以减少位移系数的编码比特,进而提升编解码效率。
本公开的技术方案可以如下实现。
第一方面,本公开实施例提供了一种解码方法,应用于解码器,该方法包括:解码码流,确定第一语法元素的取值;在所述第一语法元素的取值指示当前网格使用非线性细分方式时,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点;根据所述当前LOD的细分网格和所述当前LOD的第一点的位移系数,确定所述当前网格中的下一LOD的重建网格。
第二方面,本公开实施例提供了一种编码方法,应用于编码器,该方法包括:在当前网格使用非线性细分方式时,确定第一语法元素的取值,并将所述第一语法元素写入码流,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点;根据所述当前LOD的细分网格和所述当前LOD的第一点的位移系数,确定所述当前网格中的下一LOD的重建网格。
第三方面,本公开实施例提供了一种码流,该码流是根据待编码信息进行比特编码生成的;其中,待编码信息包括下述至少一项:当前网格的基础网格、当前网格的至少一个LOD的位移系数、当前网格的至少一个LOD的量化参数、当前网格的至少一个LOD的量化参数增量、第一语法元素的取值、第二语法元素的取值和第三语法元素的取值。
第四方面,本公开实施例提供了一种编码器,包括第一确定单元,被配置为:在当前网格使用非线性细分方式时,确定第一语法元素的取值,并将所述第一语法元素写入码流,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点;根据所述当前LOD的细分网格和所述当前LOD的位移系数,确定所述当前网格中的下一LOD的重建网格。
第五方面,本公开实施例提供了一种编码器,包括存储器和处理器。存储器用于存储能够在处理器上运行的计算机程序。处理器用于在运行计算机程序时,执行如第二方面所述的方法。
第六方面,本公开实施例提供了一种解码器,包括确定单元。确定单元配置为:解码码流,确定第一语法元素的取值;在所述第一语法元素的取值指示当前网格使用非线性细分方式时,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点;根据所述当前LOD的细分网格和所述当前LOD的第一点的位移系数,确定所述当前网格中的下一LOD的重建网格。
第七方面,本公开实施例提供了一种解码器,包括存储器和处理器。存储器用于存储能够在处理器上运行的计算机程序;处理器用于在运行计算机程序时,执行如第一方面所述的方法。
第八方面,本公开实施例提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,计算机程序被执行时实现如第一方面所述的方法、或者如第二方面所述的方法。
第九方面,本公开实施例提供了一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被至少一个处理器执行时实现如第一方面所述的方法、或者如第二方面所述的方法。
本公开实施例提供了一种编码方法、解码方法、码流、编码器、解码器、存储介质及程序产品。在解码端,解码码流,确定第一语法元素的取值;在第一语法元素指示当前网格使用非线性细分方式时,确定当前网格中的当前LOD的重建网格,并对当前LOD的重建网格进行细分,确定当前LOD的细分网格;在当前LOD为第i个LOD的情况下,将当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;第一点包括当前网格对应的重建基础网格的顶点;根据当前LOD的细分网格和当前LOD的第一点的位移系数,确定当前网格中的下一LOD的重建网格。在编码端,在当前网格使用非线性细分方式时,确定第一语法元素的取值,并将第一语法元素写入码流,确定当前网格中的当前LOD的重建网格,并对当前LOD的重建网格进行细分,确定当前LOD的细分网格;在当前LOD为第i个LOD的情况下,将当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;第一点包括当前网格对应的重建基础网格的顶点;根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格。也就是说,在本公开的实施例中,通过增加第一语法元素指示当前网格使用非线性细分方式,在编码阶段,接近基本层中的顶点的位移系数可以从位移列表中去掉,在解码阶段,接近基本层中的顶点的位移系数被推断为等于0,因而在后续将位移系数递归地应用于先前重建的多细节层(Level of Details,LOD)的过程中,能够改善高级别上位移系数存在的冗余问题,减少位移系数的编码比特,进而提升编解码效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,在附图中:
图1为一种几何编码的流程示意图;
图2为一种位移分量的生成过程示意图;
图3为一种局部坐标系中位移分量的分解示意图;
图4为一种使用垂直于表面的法线方向上位移的递归细分示意图;
图5为一种网格细分的流程示意图;
图6为一种具有2个LOD和一维位移的网格细分结果示意图;
图7为一种参数化网格的编码过程示意图;
图8为一种网格框架(mesh frame)中的几何信息示意图;
图9为一种由四个顶点和三个面组成的网格的表面示意图;
图10为一种由四个顶点和三个面组成的网格的数据结构示意图;
图11为一种由具有属性纹理图的参数化网格的数据结构示意图;
图12为一种由四个顶点和三个三角形面组成的具有属性映射特征的网格示意图;
图13A为一种流形网格示意图;
图13B为一种非流形网格示意图;
图14为一种位移分量的映射示意图;
图15A为一种二维图像的位移分量填充示意图;
图15B为另一种二维图像的位移分量填充示意图;
图16为本公开实施例提供的一种解码方法的流程示意图一;
图17为本公开实施例提供的一种解码方法的流程示意图二;
图18为本公开实施例提供的一种解码方法的流程示意图三;
图19为本公开实施例提供的一种解码方法的流程示意图四;
图20为本公开实施例提供的一种网格的递归细分结果示意图;
图21为本公开实施例提供的一种递归细分的详细流程示意图;
图22为本公开实施例提供的一种网格的非线性细分结果示意图;
图23为本公开实施例提供的一种非线性细分的详细流程示意图;
图24为本公开实施例提供的一种解码方法的流程示意图五;
图25为本公开实施例提供的一种编码方法的流程示意图一;
图26为本公开实施例提供的一种编码方法的流程示意图二;
图27为本公开实施例提供的一种编码方法的流程示意图三;
图28为本公开实施例提供的一种编码方法的流程示意图四;
图29A为本公开实施例提供的一种位移系数在二维图像中的填充方式示意图;
图29B为本公开实施例提供的另一种位移系数在二维图像中的填充方式示意图;
图30为本公开实施例提供的一种编码器的组成结构示意图;
图31为本公开实施例提供的一种编码器的具体硬件结构示意图;
图32为本公开实施例提供的一种解码器的组成结构示意图;
图33为本公开实施例提供的一种解码器的具体硬件结构示意图;
图34为本公开实施例提供的一种编解码系统的组成结构示意图。
具体实施方式
为了能够更加详尽地了解本公开实施例的特点与技术内容,下面结合附图对本公开实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本公开实施例。
除非另有定义,本文所使用的所有的技术和科学术语与属于本公开的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本公开实施例的目的,不是旨在限制本公开。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
还需要指出,本公开实施例所涉及的术语“第一\第二\第三”仅是用于区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本公开实施例能够以除了在这里图示或描述的以外的顺序实施。
在本公开实施例中,可以允许在同一视频场景中解码和合成不同的数据格式比特流。这些数据格式至少可以包括图像格式、点云(Point Cloud)格式、网格(Mesh)格式。通过这种方式,可以为具有不同来源的多个数据格式(例如,网格、点云、图像等等)提供实时沉浸式视频交互服务。
在本公开实施例中,基于数据格式的方法可以允许以数据格式的比特流级进行独立性处理。即与视频编码中的瓦片(tiles)或切片(slices)一样,该场景中的不同数据格式可以以独立的方式编码,从而可以基于数据格式进行独立的编码和解码。
一般而言,三维动画内容采用基于关键帧的表示方法,即每帧是一个静态网格。不同时刻的静态网格具有相同的拓扑结构和不同的几何结构。但是,基于关键帧表示的三维动态网格的数据量特别大,因此如何能够有效的存储、传输和绘制成为三维动态网格发展所面临的问题。另外针对不同的用户终端(例如,电脑、笔记本、便携式设备、手机)需要支持网格的空间可伸缩性;不同的网络带宽(例如,宽带、窄带、无线)需要支持网格的质量可伸缩性。因此,三维动态网格压缩是一个非常关键的问题。在这里,“一帧”可以理解为一幅图像。示例性地,关键帧可以理解为三维动画中的一幅关键图像。
在对本公开实施例进行进一步详细说明之前,先对本公开实施例中涉及的关键术语和相关技术进行介绍。
(1)关键术语。
本公开实施例中涉及的术语适用于如下的解释:
网格(Mesh)——定义多面体对象形状/拓扑的顶点、边和面的集合。面通常由三角形(三角形网格)组成。
基础网格(Base mesh)——具有更少顶点但保持与原始曲面相似性的网格。
动态网格(Dynamic mesh)——如下一种网格,该网格的五个分量(连接性、几何形状、映射、顶点属性、属性图)中的至少一个随时间变化。
动画网格(Animated mesh)——如下一种网格,该网格的拓扑被定义为映射分量。
参数化网格(Parametrized mesh)——是拓扑定义为映射组件的网格。
连接性(Connectivity)——描述如何连接网格顶点以创建3D表面的一组顶点索引。(几何形状和所有属性共享相同的唯一连接性信息)。
几何形状(Geometry)——描述与网格顶点相关的位置的一组顶点3D(x,y,z)坐标。表示位置的坐标(x,y,z)应该具有有限的精度和动态范围。
映射(Mapping)——描述如何将网格表面映射到平面的2D区域。这种映射由与网格顶点相关联的一组UV参数/纹理[映射]坐标以及连接性信息来描述。
顶点属性(Vertex attribute)——与网格顶点相关联的矢量属性值的标量。
属性图(Attribute Map)——与网格表面相关联并存储为2D图像/视频的属性。视频(即,参数空间)和表面之间的映射由映射信息定义。
顶点(Vertex)——位置(通常在3D空间中)以及其他信息,例如颜色、法向量和纹理坐标。
边(Edge)——两个顶点之间的连接。
面(Face)——一组封闭的边,其中三角形面有由三个顶点定义的三条边。使用“右手”坐标系来确定面的方向。
表面(Surface)——将三维对象与环境分开的面的集合。
每点比特数(bits per point,bpp)——用于描述网格中一个点的信息量(以比特表示)。
位移(Displacements)——原始网格的几何形状和由于基础网格细分过程而重建的网格几何形状之间的差异。
LOD(Level of Details,LOD)——网格重建的可缩放表示,每个LOD都包含足够的信息,以便以指示的精度或空间分辨率来重建网格。后续的每个LOD都是在多个先前重建的网格之上进行的细化。
(2)相关技术
当前算法可以应用于两阶段编码过程来编码几何信息。首先,抽取几何信息以创建使用通用几何编码方法(例如“edgebreaker”)编码的基础网格。然后对基础网格进行分层细分,细分点和原始网格的近似值之间的差异存储为几何位移分量。该位移分量被打包(或称为“填充”)到2D图像中,并利用诸如高效视频编码(High Efficiency Video Coding,HEVC)之类的无损视频编码方法进行编码。其中,两阶段几何编码过程的流程如图1所示。
在图1中,静态或动态网格输入预处理模块,该预处理模块用于抽取几何信息以生成基础网格和位移分量。然后通过通用网格编码器(例如“edgebreaker”)对抽取的基础网格进行编码处理,以及将位移分量打包到2D图像中,再利用HEVC之类的视频编码器对位移信息进行编码处理,将所得到的编码比特写入码流中。
图2描述了使用一个细化步骤生成基础网格中一个面的位移的过程。其中,PB1、PB2和PB3表示基础网格点,PS1、PS2和PS3表示细分点,PSD1、PSD2和PSD3表示进行移位后的细分点。在这里,细分点PS1作为 PB1和PB2点之间的中点计算得到。该过程可以递归重复执行。
在图3中,PS1和PSD1的每个向量可以由法线、切线和双切线方向上的三个分量描述。其中,这三个分量可以用小波变换进一步处理,并且相应的变换系数可以映射到颜色平面(例如,YUV 444颜色空间中的Y、U和V分量),或者顺序映射到单个颜色平面(例如,YUV420或YUV 400颜色空间中的Y平面分量),或者使用颜色平面(例如,YUV 420颜色空间中的Y、U和V分量)之间的交错方法打包。
递归地重复细分过程,直至达到期望的点密度。图4描述了在2D空间中使用垂直于表面的法线方向上的位移进行递归细分的一个示例。如图4所示,在该迭代细分过程中,(a)、(c)和(e)为凸连续表面的三级细分过程,(b)、(d)和(f)为振荡表面的三级细分过程。
示例性地,这里存在三个LOD细化,并且细分处理包括如下步骤。
在步骤1中,使用重建的基础网格中的两个相邻点PB0和PB1定义一条边。
在步骤2中,使用包含点PB0和PB1的面计算边的法线。
在步骤3中,在点PS1_1处细分重建的基础网格。
在步骤4中,沿着步骤2中定义的法线将位移d1_1应用到点PS1_1。
在步骤5中,创建两条边:PB0 PS1_1和PS1_1 PB1,如图4中的(a)和(b)。
在步骤6中,将步骤3-5应用于步骤5中的每个新边,直到生成所需的LOD,如图4中的(c)和(e)以及图4中的(d)和(f)。
需要注意的是,法线总是参考重建的基础网格计算。另外,位移是参考步骤5中生成的细分边计算得到的,而不是参考步骤1中获得的重建基本边。
进一步地,细分过程的流程框图如图5所示。在图5中,在步骤S501中,首先对原始网格进行网格简化,以得到基础网格。在步骤S502中,对基础网格进行量化。在步骤S503中,对量化后的基础网格进行编码。在步骤S504中,从码流中解码基础网络,以得到重建的基础网格。在步骤S505中,初始化n=0,并对重建的基础网格进行网格细分以得到细分网格。在步骤S506中,判断n是否小于L-1。若判断结果为是,即n<L-1,则n=n+1(S507),继续执行步骤S505至S506。若步骤S506的判断结果为否,即n<L-1不成立,则表明细分完成,然后再执行步骤S508和S509。也就是说,在细分完成之后,对所得到的细分网格与原始网格进行位移计算,以得到位移系数,并将位移系数编码到码流中。
其中,n表示迭代细分次数,n为从0开始索引的整数。L表示LOD个数,L为从1开始索引的整数。
示例性地,图6提供了具有2个LOD和1维位移的三维内容的网格细分结果。其中,黑色实线(由顶点PB_1、PB_2和PB_3组成)表示基础网格,黑色虚线表示细分网格,第一加粗实线则为应用位移的LOD1,第二加粗实线则为应用位移的LOD2。
进一步地,图7提供了参数化网格的编码过程示意图,该编码过程具体如下。
使用静态网格编码器对基础网格帧进行量化和编码。该过程与用于压缩基础网格的编码方案的类型无关。
位移是使用分层细分过程生成的,并且表示原始网格拓扑和先前重建的细分LOD之间的差异。位移的第一次迭代使用基础网格作为输入。
位移经过分层小波变换处理(或其他变换处理),该变换递归地将LOD应用于重建的基础网格。
然后,对小波系数进行量化,打包到2D图像/视频中,并且可以通过使用传统的图像/视频编码器来压缩。
通过对在图像/视频解码过程中生成的重建小波系数图像/视频应用图像解包和反量化,来获得小波系数的重建版本。
然后再通过对重建的小波系数应用逆小波变换,来计算重建的位移。
小波系数以浮点格式计算,且可以是正数和负数。在一些系统中,为了生成2D图像,首先将系数转换为正值,并映射到给定的位深。
c‘(i)=2^[bit_depth-1]+[c(i)*2^bit_depth]/[c_max-c_min],
其中,c′(i)是积分位移系数值,c(i)是当前位移系数值,c_max是最大位移系数值,c_min是最小位移系数值,bit_depth是定义用于图像编码的固定级别的数量的值。
在图8中示出了一种网格框架中的几何信息示例,这里具体为每个顶点都具有属性的网格的数据结构示例。
在图9中展示了一个由四个顶点和三个面组成的网格的表面示例,在图10中展示了一个由四个顶点和三个面组成的网格的数据结构示例。其中,对于图9展示的由四个顶点和三个面组成的具有每个顶点颜色特征(color-per-vertex)的网格(图8)表示的表面示例。空间中的每个顶点由其X、Y、Z位置坐标和三个颜色属性R、G、B描述。如下所示,每个面由形成三角形的三个顶点索引定义。
# ---------------------------------
#第1部分:
#几何信息
#X Y Z a_1 a_2 a_3
#顶点0(v_idx_0)
v 0.0 0.0 0.0 127 127 127
#顶点1(v_idx_1)
v 1.0 0.0 0.0 127 127 127
#顶点2(v_idx_2)
v 0.0 1.0 0.0 127 127 127
#顶点3(v_idx_3)
v 0.0 0.0 1.0 127 127 127
# ---------------------------------
#第2部分:
#连接性信息
#v_idx,v_idx,v_idx
#面0(f_idx_0)
f 0 12
#面1(f_idx_1)
f 0 31
#面2(f_idx_2)
f 0 23
# ---------------------------------
在图11中展示一个由具有属性纹理图的参数化网格的数据结构示例。
在图12中展示一个由具有属性映射特征的网格(图11)表示的表面示例,该网格由四个顶点和三个面组成。空间中的每个顶点都由其X,Y,Z位置坐标来描述。(U,V)表示2D纹理顶点图中的属性坐标。每个面由三对顶点索引和纹理顶点坐标定义,它们在3D空间中形成一个三角形且在2D纹理图中形成一个三角形。
# ---------------------------------
#第1部分:
#几何信息
#X Y Z
#顶点0(v_idx_0)
v 0.0 0.0 0.0
#顶点1(v_idx_1)
v 1.0 0.0 0.0
#顶点2(v_idx_2)
v 0.0 1.0 0.0
#顶点3(v_idx_3)
v 0.0 0.0 1.0
# ---------------------------------
#第2部分:
#映射信息
#U V
#纹理顶点0(vt_0)
vt 0.500000 0.500000
#纹理顶点1(vt_1)
vt 0.0000000.500000
#纹理顶点2(vt_2)
vt 0.5000001.000000
#纹理顶点3(vt_3)
vt 1.0000000.500000
#纹理顶点4(vt_4)
vt 0.5000000.000000
# ---------------------------------
#第3部分:
#连接性信息
#v_idx/vt_idx
#面0(f_idx_0)
f 0/0 1/2 2/1
#面1(f_idx_1)
f 0/0 3/2 1/3
#面2(f_idx_2)
f 0/0 2/3 3/4
在本公开实施例中,可以使用右手坐标系确定面的取向。一个面由属于三条边的三个顶点组成,三个顶点索引描述每个面。
流形网格是一条边最多属于两个不同的面的网格,如图13A所示。非流形网格是一条边属于两个以上的面的网格,如图13B所示。
进一步地,为了使用现有的视频编码标准对位移分量进行编码,可以将变换后的位移分量从一维阵列映射到二维图像,如图14所示。
每个单位矢量分量与不同的颜色平面相关联。示例性地,当法线单位向量映射到Y平面时;将切线单位向量映射到U平面;双切单位向量被映射到V平面。在这种情况下,YUV444颜色映射用于编码。如图15A和图15B所示,这里提供了视频分量的位移系数8×8填充块示例。其中,图15A表示正向填充,图15B表示反向填充。
位移系数编码中使用的提升变换(Lifting Transform)的性质导致独立的细分级别,其具有用于重建的单独的系数集。
在相关技术中,如图5所示,将位移系数应用于先前重建的LOD。在某些情况下,位移系数在高级别上通常会存在冗余,导致编码比特开销大,降低了编解码效率。
基于此,本公开实施例提供了一种编解码方法,通过增加第一语法元素指示当前网格使用非线性细分方式,在确定当前网格使用非线性细分方式时,对当前网格中的当前LOD的重建网格进行细分,确定当前LOD的细分网格;直接将当前LOD的第一点(与基点重合或相邻的点)的位移系数设置为0,即与基点(例如PB_1、PB_2和PB_3)相邻的位移被推断为等于0;根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格。如此,在当前网格使用非线性细分方式时,能够进一步改善高级别上位移系数存在的冗余问题,节省位移系数的编码比特,进而提升编解码效率。
也就是说,在本公开的实施例中,通过增加第一语法元素指示当前网格使用非线性细分方式的情况,在编码阶段,接近基本层中的顶点的位移系数可以从位移列表中去掉,在解码阶段,接近基本层中的顶点的位移系数被推断为等于0,因而在后续将位移系数递归地应用于先前重建的LOD的过程中,能够改善高级别上位移系数存在的冗余问题,减少位移系数的编码比特,进而提升编解码效率。
为便于理解本公开实施例的技术方案,以下通过具体实施例详述本公开的技术方案。以上相关技术作为可选方案与本公开实施例的技术方案可以进行任意结合,其均属于本公开实施例的保护范围。本公开实施例包括以下内容中的至少部分内容。
图16为本公开实施例提供的一种解码方法的流程示意图一。如图16所示,该方法可以包括以下步骤。
在步骤101中,解码码流,确定第一语法元素的取值。
需要说明的是,在本公开实施例中,该解码方法可以是指一种网格细分方法,具体地,是一种用于动态网格解码的递归细分方法,能够提升编解码效率。
还需要说明的是,在本公开实施例中,基于视频的动态网格编码(Video-basedDynamic Mesh Coding,VDMC)是一种用于压缩三维网格的标准,其主要是利用已有的基于视频的视觉体积编码(Visual Volumetric Video-based Coding,V3C)标准对三维网格进行压缩。在本公开实施例中,细分方法在所有的LOD上共享功能,并且由Atlas序列参数集VDMC扩展RBSP语法结构中的两个语法元素来定义:asps_vdmc_ext_subdivision_method和asps_vdmc_ext_subdivision_iteration_count。
其中,表1提供了一种示意性的Atlas序列参数集VDMC扩展的语法结构。
表1
在表1中,asps_vdmc_ext_subdivision_method用于指示当前Atlas序列参数集相关联的网格的细分方法标识符,asps_vdmc_ext_subdivision_iteration_count用于指示网格的细分迭代次数,asps_vdmc_ext_ displacement_coordinate_system用于指示网格的坐标系标识符,asps_vdmc_ext_transform_method用于指示网格的小波变换标识符。
其中,对于asps_vdmc_ext_subdivision_method来说,表2描述了所支持的细分方法与asps_vdmc_ext_subdivision_method的对应关系列表。
表2
对于asps_vdmc_ext_subdivision_iteration_count来说,当不存在时,推断asps_vdmc_ext_ subdivision_iteration_count的值等于0。
对于asps_vdmc_ext_displacement_coordinate_system来说,表3描述了所支持的坐标系与asps_vdmc_ ext_displacement_coordinate_system的对应关系列表。
表3
对于asps_vdmc_ext_transform_method来说,表4描述了所支持的小波变换方法与asps_vdmc_ext_ transform_method的对应关系列表。
表4
在本公开实施例中,这里的第一语法元素可以用asps_vdmc_ext_subdivision_method表示,用于指示网格的细分方法,例如可以是中点细分、Loop细分等。
由于细分的特殊性,较高级别的LOD通常退化为“0”位移,从而在信令和编码信息中引入显著的冗余。
基于此,为了有效编码体积内容的网格表示的几何分量,可以通过去除诸如基础网格的边和来自先前LOD的继承值的情况下的冗余位移。本公开实施例提出了一种新的自适应细分方式,其中在较高级别的LOD上,与基点相邻的边总是等于0 。
可以理解,在本公开实施例中,在前述表2的基础上,针对第一语法元素增加了新的取值,以使得第一语法元素能够用于指示当前网格是否使用非线性细分方式。在这里,非线性细分方式可以是创建与相关技术相同的细分,但是与基点(例如PB_1、PB_2和PB_3)相邻的位移被推断为等于0。简单来说,针对每一个LOD,位移是基于先前重建的LOD中的细分顶点计算得到的,从而能够将位移递归地用于先前重建的LOD,因此,这里的自适应细分方式称为“递归细分方式”。以中点细分为例,该递归细分方式则可以称为中点递归的细分方法。
在一种可能的实现方式中,如表5所示,这里增加了等于2和3的新asps_vdmc_ext_subdivision_method,该新asps_vdmc_ext_subdivision_method将创建与相关技术相同的细分,但是与基点(例如PB_1、PB_2和PB_3)相邻的位移被推断为等于零,从而能够节省位移的编码比特。
表5
步骤102中,在第一语法元素指示当前网格使用非线性细分方式时,确定当前网格中的当前LOD的重建网格,并对当前LOD的重建网格进行细分,确定当前LOD的细分网格。
需要说明的是,在本公开实施例中,第一语法元素用于指示当前网格是否使用非线性细分方式。其中,在第一语法元素的取值为第一值时,确定第一语法元素指示当前网格不使用细分方式;在第一语法元素的取值为第二值时,确定第一语法元素指示当前网格使用中点细分方式;在第一语法元素的取值为第三值时,确定第一语法元素指示当前网格使用递归细分方式;在第一语法元素的取值为第四值时,确定第一语法元素指示当前网格使用非线性细分方式。
在这里,第一值、第二值、第三值、第四值各不相同。示例性地,第一值可以设置为0,第二值可以设置为1,第三值可以设置为2,第四值可以设置为3。也就是说,根据第一语法元素的取值不同,能够确定当前网格是否使用非线性细分方式。
在一实施例中,如果第一语法元素的取值为0,那么可以确定当前网格不使用任何细分方式,例如中点细分方式、递归细分方式、非线性细分方式等;如果第一语法元素的取值为1,那么可以确定当前网格使用中点细分方式;如果第一语法元素的取值为2,那么可以确定当前网格使用递归细分方式;如果第一语法元素的取值为3,那么可以确定当前网格使用非线性细分方式。
还需要说明的是,在本公开实施例中,在当前网格使用非线性细分方式时,可以通过至少一个LOD进行递归重建得到当前网格的重建网格。具体地,在得到当前网格中的当前LOD的重建网格之后可以对当前LOD的重建网格进行细分,确定当前LOD的细分网格。然后,根据当前LOD的细分网格以及预先设置的位移系数或者码流中的位移系数,从而能够递归得到当前LOD的下一LOD的重建网格。
在一些实施例中,首先确定当前网格中的第一LOD的重建网格。该方法可以包括:解码码流,确定重建基础网格;对重建基础网格进行细分,确定初始细分网格;解码码流,确定初始细分网格的位移系数;根据初始细分网格和初始细分网格的位移系数,确定当前网格中的第一LOD的重建网格。
在本公开实施例中,基础网格又可以称为“简化网格”。在一些实施例中,通过解码基础网格码流,确定重建基础网格。示例性地,可以是通过网格解码器(例如EdgeBreaker等)解码基础网格码流,以获得重建基础网格。
在一些实施例中,在确定所述当前网格中的第一LOD的重建网格之后,对第一LOD的重建网格进行细分以确定第二LOD的细分网格;解码码流以确定第二LOD的细分网格的位移系数; 根据第二LOD的细分网格和第二LOD的细分网格的位移系数,确定当前网格中的下一LOD的重建网格;以及继续执行细分操作,直至确定出当前网格中的第L个LOD的重建网格。其中, L的取值与当前网格的细分迭代次数具有关联关系。
在本公开实施例中,对于第一LOD来说,位移系数是指原始网格的顶点坐标信息和初始细分网格的顶点坐标信息之间的差异。这样,在解码获得初始细分网格的位移系数之后,根据该位移系数对初始细分网格的顶点坐标信息进行相应位移运算,可以得到第一LOD的重建网格,即LOD1的重建网格。然后基于LOD1的重建网格进行细分,得到LOD1上的细分网格,再根据LOD1上的细分网格和对应的位移系数可以确定出LOD2的重建网格,依次类推,直至重建完成。
在步骤103中,在当前LOD为第i个LOD的情况下,将当前LOD的第一点的位移系数确定为0;其中,i为大于2的整数;第一点包括当前网格对应的重建基础网格的顶点。
需要说明的是,在本公开实施例中,位移系数可以包括一个或多个方向上的位移分量,如图3所示,位移系数包括法线方向、切线方向和双切线方向等三个方向上的位移分量。其中,第一LOD的位移系数是相对于基础网格的细分顶点来计算的,后续层级的位移系数则都是相对于前一LOD重建LOD的细分顶点来计算的,从而可以实现位移系数的递归细分。
需要说明的是,在本公开实施例中,如果当前LOD为第i个LOD,i为大于2的整数,即当前LOD满足LoD大于2,那么,可以将当前LOD的第一点的位移系数确定为0。
需要说明的是,在本公开的实施例中,当前LOD的第一点包括当前网格对应的重建基础网格的顶点,即第一点可以理解为与基点(例如,PB_1、PB_2、PB_3)重合或相邻的点。
也就是说,在本公开的实施例中,如果第一语法元素指示当前网格使用非线性细分方式,且当前LOD大于2,那么可以直接将当前LOD的第一点的位移系数设置为0,并利用该位移系数进行后续的网格重建。
在步骤104中,根据当前LOD的细分网格和当前LOD的第一点的位移系数,确定当前网格中的下一LOD的重建网格。
需要说明的是,在本公开实施例中,根据当前LOD的细分网格和当前LOD的第一点的位移系数,确定当前网格中的下一LOD的重建网格,具体地:根据第一点的位移系数对当前LOD的细分网格的顶点坐标信息进行相应位移运算,得到当前网格中的下一LOD的重建网格。
也就是说,在本公开实施例中,这里是将位移系数递归地应用于先前重建的LOD,具体是将当前LOD的细分网格的每个顶点按照顺序加上解码得到的位移系数,从而可以得到下一LOD的重建网格。
可以理解的是,在本公开的实施例中,在第一语法元素指示当前网格使用非线性细分方式时,如果当前LOD大于2,那么当前LOD的第一点的位移系数设置为0,即设置与基点重合或相邻的点(第一点)的位移为0,此时,在获得重建网格时,对于第一点,其实是将当前LOD的细分网格与0进行位移运算。
在一些实施例中,该方法还可以包括:在确定当前网格中的下一LOD的重建网格之后,将下一LOD的重建网格作为当前LOD的重建网格,返回执行对当前LOD的重建网格进行细分,确定当前LOD的细分网格的步骤,直至确定出当前网格中的第L个LOD的重建网格;其中,L的取值与当前网格的细分迭代次数具有关联关系。
还需要说明的是,在本公开实施例中,当前网格的细分迭代次数可以是由码流中的第二语法元素来指示。在一实施例中,该方法可以包括:解码码流,确定第二语法元素的取值;根据第二语法元素的取值,确定当前网格的细分迭代次数。
在本公开实施例中,第二语法元素可以用asps_vmc_ext_subdivision_iteration_count表示。也就是说,当前网格的细分迭代次数可以是由码流中的asps_vmc_ext_subdivision_iteration_count所指示的数值。
另外,L表示当前网格对应的LOD层数,L的取值可以是由当前网格的细分迭代次数确定的,即L的取值等于asps_vmc_ext_subdivision_iteration_count所指示的数值。
进一步地,图17为本公开实施例提供的一种解码方法的流程示意图二。如图17所示,在步骤102之后,该方法可以包括以下步骤。
在步骤105中,在当前LOD为第i个LOD的情况下,解码码流,确定当前LOD的第二点的位移系数。其中,第二点不包括当前网格对应的重建基础网格的顶点。换句话说,第二点为当前网格对应的重建基础网格中的点中的除了第一点以外的点。
需要说明的是,在本公开实施例中,如果当前LOD为第i个LOD,i为大于2的整数,即当前LOD满足LoD大于2,那么,可以将当前LOD的第一点的位移系数确定为0,而第二点的位移系数则可以通过解码码流获得的。在这里,码流可以是位移码流。对于位移码流的具体解码方式也可以有多种,如视频解码、熵解码等等。也就是说,在本公开实施例中,可以通过视频解码器进行解码来获得位移信息,或者可以通过熵解码器进行解码来获得位移信息,这里也不作任何限定。
需要说明的是,在本公开的实施例中,当前LOD的第二点不包括当前网格对应的重建基础网格的顶点,即第二点可以理解为与基点(例如,PB_1、PB_2、PB_3)不接近的点。
也就是说,在本公开的实施例中,如果第一语法元素指示当前网格使用非线性细分方式,且当前LOD的层数大于2,一方面可以将当前LOD的第一点的位移系数设置为0,同时可以通过解码码流确定当前LOD的第二点的位移系数。
在步骤106中,根据当前LOD的细分网格和当前LOD的第二点的位移系数,确定当前网格中的下一LOD的重建网格。
需要说明的是,在本公开实施例中,根据当前LOD的细分网格和当前LOD的第二点的位移系数,确定当前网格中的下一LOD的重建网格,可以包括:根据第二点的位移系数对当前LOD的细分网格的顶点坐标信息进行相应位移运算,得到当前网格中的下一LOD的重建网格。
也就是说,在本公开实施例中,这里是将位移系数递归地应用于先前重建的LOD,具体是将当前LOD的细分网格的每个顶点按照顺序加上解码得到的位移系数,从而可以得到下一LOD的重建网格。
进一步地,在本公开的实施例中,图18为本公开实施例提供的一种解码方法的流程示意图三。如图18所示,在步骤102之后,该方法可以包括以下步骤。
在步骤107中,在当前LOD为第二LOD的情况下,解码码流,确定当前LOD的位移系数。
需要说明的是,在本公开实施例中,如果当前LOD为第二LOD,即当前LOD为LoD 2,那么,可以通过解码码流获得当前LOD的位移系数。在这里,码流可以是位移码流。对于位移码流的具体解码方式也可以有多种,如视频解码、熵解码等等。也就是说,在本公开实施例中,可以通过视频解码器进行解码来获得位移信息,或者可以通过熵解码器进行解码来获得位移信息,这里也不作任何限定。
在步骤108中,根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格。
需要说明的是,在本公开实施例中,根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格,具体地:根据位移系数对当前LOD的细分网格的顶点坐标信息进行相应位移运算,得到当前网格中的下一LOD的重建网格。
也就是说,在本公开实施例中,这里是将位移系数递归地应用于先前重建的LOD,具体是将当前LOD的细分网格的每个顶点按照顺序加上解码得到的位移系数,从而可以得到下一LOD的重建网格。
在一些实施例中,该方法还可以包括:在确定当前网格中的下一LOD的重建网格之后,将下一LOD的重建网格作为当前LOD的重建网格,返回执行对当前LOD的重建网格进行细分,确定当前LOD的细分网格的步骤,直至确定出当前网格中的第L个LOD的重建网格;其中,L的取值与当前网格的细分迭代次数具有关联关系。
还需要说明的是,在本公开实施例中,当前网格的细分迭代次数可以是由码流中的第二语法元素来指示。在一实施例中,该方法可以包括:解码码流,确定第二语法元素的取值;根据第二语法元素的取值,确定当前网格的细分迭代次数。
在本公开实施例中,第二语法元素可以用asps_vmc_ext_subdivision_iteration_count表示。也就是说,当前网格的细分迭代次数可以是由码流中的asps_vmc_ext_subdivision_iteration_count所指示的数值。
另外,L表示当前网格对应的LOD层数,L的取值可以是由当前网格的细分迭代次数确定的,即L的取值等于asps_vmc_ext_subdivision_iteration_count所指示的数值。
进一步地,在本公开的实施例中,图19为本公开实施例提供的一种解码方法的流程示意图四。如图19所示,在步骤101之后,该方法可以包括:
在步骤109中,在第一语法元素指示当前网格使用递归细分方式时,确定当前网格中的当前LOD的重建网格,并对当前LOD的重建网格进行细分,确定当前LOD的细分网格。
需要说明的是,在本公开实施例中,第一语法元素也可以用于指示当前网格是否使用递归细分方式。其中,在第一语法元素的取值为第一值时,确定第一语法元素指示当前网格不使用细分方式;在第一语法元素的取值为第二值时,确定第一语法元素指示当前网格使用中点细分方式;在第一语法元素的取值为第三值时,确定第一语法元素指示当前网格使用递归细分方式;在第一语法元素的取值为第四值时,确定第一语法元素指示当前网格使用非线性细分方式。
在这里,第一值、第二值、第三值、第四值各不相同。示例性地,第一值可以设置为0,第二值可以设置为1,第三值可以设置为2,第四值可以设置为3。也就是说,根据第一语法元素的取值不同,能够确定当前网格是否使用递归细分方式。
在一实施例中,如果第一语法元素的取值为0,那么可以确定当前网格不使用任何细分方式,例如中点细分方式、递归细分方式、非线性细分方式等;如果第一语法元素的取值为1,那么可以确定当前网格使用中点细分方式;如果第一语法元素的取值为2,那么可以确定当前网格使用递归细分方式;如果第一语法元素的取值为3,那么可以确定当前网格使用非线性细分方式。
还需要说明的是,在本公开实施例中,在当前网格使用递归细分方式时,可以由至少一个LOD进行递归重建得到当前网格的重建网格。具体地,在得到当前网格中的当前LOD的重建网格之后可以对当前LOD的重建网格进行细分,确定当前LOD的细分网格。然后根据细分网格和码流中的位移系数,从而能够递归得到当前LOD的下一LOD的重建网格。
在一些实施例中,首先确定当前网格中的第一LOD的重建网格。该方法可以包括:解码码流,确定重建基础网格;对重建基础网格进行细分,确定初始细分网格;解码码流,确定初始细分网格的位移系数;根据初始细分网格和初始细分网格的位移系数,确定当前网格中的第一LOD的重建网格。
在本公开实施例中,基础网格又可以称为“简化网格”。在一些实施例中,通过解码基础网格码流,确定重建基础网格。示例性地,可以是通过网格解码器(例如EdgeBreaker等)解码基础网格码流,以获得重建基础网格。
在本公开实施例中,对于第一LOD来说,位移系数是指原始网格的顶点坐标信息和初始细分网格的顶点坐标信息之间的差异。这样,在解码获得初始细分网格的位移系数之后,根据该位移系数对初始细分网格的顶点坐标信息进行相应位移运算,可以得到第一LOD的重建网格,即LOD1的重建网格。然后基于LOD1的重建网格进行细分,得到LOD1上的细分网格,再根据LOD1上的细分网格和对应的位移系数可以确定出LOD2的重建网格,依次类推,直至重建完成。
在步骤110中,解码码流,确定当前LOD的位移系数。
需要说明的是,在本公开实施例中,位移系数可以包括一个或多个方向上的位移分量,如图3所示,位移系数包括法线方向、切线方向和双切线方向等三个方向上的位移分量。其中,第一LOD的位移系数是相对于基础网格的细分顶点来计算的,后续层级的位移系数则都是相对于前一LOD重建LOD的细分顶点来计算的,从而可以实现位移系数的递归细分。
还需要说明的是,在本公开实施例中,当前LOD的位移系数是通过解码码流获得的。在这里,码流可以是位移码流。对于位移码流的具体解码方式也可以有多种,如视频解码、熵解码等等。也就是说,在本公开实施例中,可以通过视频解码器进行解码来获得位移信息,或者可以通过熵解码器进行解码来获得位移信息,这里也不作任何限定。
在一些实施例中,对于步骤105、步骤107、步骤110中任一个步骤所涉及的确定当前LOD的位移系数的方法,具体可以包括:解码码流,确定当前LOD的解码位移系数。根据当前LOD的量化参数对当前LOD的解码位移系数进行反量化,确定当前LOD的反量化位移系数。对当前LOD的反量化位移系数进行逆小波变换,确定当前LOD的位移系数。
需要说明的是,在本公开实施例中,在解码获得当前LOD的解码位移系数之后,可以对当前LOD的解码位移系数进行预处理,确定当前LOD的位移系数。其中,预处理可以包括反量化、逆小波变换等处理。
在一实施例中,对当前LOD的解码位移系数进行预处理,确定当前LOD的位移系数,具体地:确定当前LOD的量化参数;根据当前LOD的量化参数对当前LOD的解码位移系数进行反量化,确定当前LOD的反量化位移系数;对当前LOD的反量化位移系数进行逆小波变换,确定当前LOD的位移系数。
需要说明的是,在本公开实施例中,反量化是量化的逆过程,用于将量化后的定点转换为浮点数;而逆小波变换是小波转换的逆过程,用于将小波域中的信号恢复到原始的时间域,从而可以得到当前LOD的位移系数。
还需要说明的是,在本公开实施例中,量化参数(Quantizer Parameter,QP)反映了空间细节压缩情况。其中,值越小,量化越精细,图像质量越高,产生的码流也越长。如QP小,大部分的细节都会被保留;QP增大,一些细节丢失,码率降低,但图像失真加强和质量下降。具体地,QP是量化步长Qstep的序号,QP的取值为0 时,表示量化最精细;相反,QP的取值为51时,表示量化越粗糙。
在一种可能的实现方式中,对于当前LOD的量化参数来说,该方法可以包括:解码码流,确定当前LOD的量化参数。
在另一种可能的实现方式中,对于当前LOD的量化参数来说,该方法可以包括:确定当前LOD的前一LOD的量化参数;解码码流,确定当前LOD的量化参数增量;根据前一LOD的量化参数和量化参数增量,确定当前LOD的量化参数。
也就是说,编码端可以将量化参数直接写入码流,使得解码端通过解码即可得到对应的量化参数;或者编码端也可以将量化参数增量写入码流,然后解码端根据解码得到的量化参数增量和前一LOD的量化参数也可以得到对应的量化参数。
示例性地,假设当前LOD的量化参数可以用QP(i)表示,前一LOD的量化参数可以用QP(i-1)表示,量化参数增量可以用ΔQP表示,那么QP(i)= QP(i-1)+ΔQP。其中,对于第一LOD的量化参数来说,可以是将对应的量化参数QP(1) 直接写入码流。
需要注意的是,在本公开实施例中,也可以是在编码端和解码端设置一个参考量化参数,然后将每一LOD的量化参数与参考量化参数之间的量化参数增量写入码流。这样,解码端在解码码流确定出当前LOD的量化参数增量之后,可以根据当前LOD的量化参数增量和参考量化参数来确定出当前LOD的量化参数,从而也能够节省解码量化参数的信令开销。
在一些实施例中,解码码流,确定当前LOD的解码位移系数,可以包括:解码码流,确定二维图像;根据预设填充方式从二维图像中进行位移系数提取,得到当前LOD的解码位移系数。
在本公开实施例中,可以是解码位移码流来确定当前LOD的解码位移系数。另外,预设填充方式包括正向填充方式或者反向填充方式。其中,对于预设填充方式的确定,可以是解码端和编码端设置相同的填充方式,或者也可以是根据码流中的第三语法元素来指示。
在一实施例中,该方法可以包括:解码码流,确定第三语法元素的取值;根据第三语法元素的取值,确定预设填充方式。
在本公开实施例中,第三语法元素可以可以用dmsps_packing_order表示。也就是说,预设填充方式可以是由码流中的dmsps_packing_order所指示的填充方式。
这样,在本公开实施例中,位移码流可以通过位移解码器进行解码。若编码端通过视频编码的方式压缩位移,则解码端通过相应的视频解码器进行解码,并根据预设填充方式将其从二维图像中按照对应的顺序恢复出来。再对其执行反量化、逆小波变换等操作使其恢复出与编码端一致的位移系数。否则,如果编码端对位移系数采用熵编码的方式,那么解码端可以直接对其进行熵解码,再进行后续的反量化、逆小波变换等操作,以得到当前LOD的位移系数。
步骤1011:根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格。
需要说明的是,在本公开实施例中,根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格,具体地:根据位移系数对当前LOD的细分网格的顶点坐标信息进行相应位移运算,得到当前网格中的下一LOD的重建网格。
也就是说,在本公开实施例中,这里是将位移系数递归地应用于先前重建的LOD,具体是将当前LOD的细分网格的每个顶点按照顺序加上解码得到的位移系数,从而可以得到下一LOD的重建网格。
在一些实施例中,该方法还可以包括:在确定当前网格中的下一LOD的重建网格之后,将下一LOD的重建网格作为当前LOD的重建网格,返回执行对当前LOD的重建网格进行细分,确定当前LOD的细分网格的步骤,直至确定出当前网格中的第L个LOD的重建网格;其中,L的取值与当前网格的细分迭代次数具有关联关系。
还需要说明的是,在本公开实施例中,当前网格的细分迭代次数可以是由码流中的第二语法元素来指示。在一实施例中,该方法可以包括:解码码流,确定第二语法元素的取值;根据第二语法元素的取值,确定当前网格的细分迭代次数。
在本公开实施例中,第二语法元素可以用asps_vmc_ext_subdivision_iteration_count表示。也就是说,当前网格的细分迭代次数可以是由码流中的asps_vmc_ext_subdivision_iteration_count所指示的数值。
另外,L表示当前网格对应的LOD层数,L的取值可以是由当前网格的细分迭代次数确定的,即L的取值等于asps_vmc_ext_subdivision_iteration_count所指示的数值。
这样,在本公开实施例中,对于第一语法元素指示示当前网格使用递归细分方式的情况,如图20所示,首先对基础网格进行细分,可以得到初始细分网格;在解码获得初始细分网格的位移系数之后,根据该位移系数对初始细分网格的顶点坐标信息进行相应位移运算,可以得到第一LOD的重建网格,即LOD1的重建网格。然后基于LOD1的重建网格进行细分,得到LOD1上的细分网格;然后在解码获得LOD1的位移系数之后,根据LOD1上的细分网格以及LOD1的位移系数可以确定出LOD2的重建网格,依次类推,直至得到LOD L的重建网格,表明当前网格重建完成。其中,在图20中,黑色实线(由顶点PB_1、PB_2和PB_3组成)表示基础网格,黑色虚线表示细分网格,第一加粗实线则为应用位移的LOD1,第二加粗实线则为应用位移的LOD2。
在一些实施例中,递归细分的详细流程如图21所示,该详细流程可以包括如下步骤。
在步骤S1901中,首先对原始网格进行网格简化,以得到基础网格。在步骤S1902中,对基础网格进行量化。在步骤S1903中对量化后的基础网格进行编码。在步骤S1904中解析码流以从码流中解码基础网络,以得到重建的基础网格。在步骤S1905中,初始化n=0,并将重建的基础网格作为临时网格进行网格细分。在步骤S1906中,根据细分网格和原始网格计算位移系数。在步骤S1907中,根据位移系数和细分网格来更新临时网格,以及将位移系数保存至存储器。在步骤S1909中,判断n是否小于L-1。若步骤S1909的判断结果为是,即n<L-1,则n=n+1(S1910),然后继续执行步骤S1905至S1909。若步骤S1909的判断结果为否,即n<L-1不成立,则表明细分完成。最后,将位移系数编码到码流中。
这样,在本公开实施例中,对于第一语法元素指示示当前网格使用非线性细分方式的情况,如图22所示,首先对基础网格进行细分,可以得到初始细分网格;在解码获得初始细分网格的位移系数之后,根据该位移系数对初始细分网格的顶点坐标信息进行相应位移运算,可以得到第一LOD的重建网格,即LOD1的重建网格。然后基于LOD1的重建网格进行细分,得到LOD1上的细分网格;然后在解码获得LOD1的位移系数之后,根据LOD1上的细分网格以及LOD1的位移系数可以确定出LOD2的重建网格。对于LOD3到LOD L的重建网格,如LODi(i大于预设值,预设值可以是例如2),LOD i中的相邻基基础格顶点(第一点)的位移系数可以设置为0,而其他点(第二点)的位移系数依然可以解码获得,根据LOD i上的细分网格以及LOD i的位移系数可以确定下一LOD的重建网格。依次类推,直至得到LOD L的重建网格,表明当前网格重建完成。其中,在图22中,黑色实线(由顶点PB_1、PB_2和PB_3组成)表示基础网格,黑色虚线表示细分网格,第一加粗实线则为应用位移的LOD1,第二加粗实线则为应用位移的LOD2。尽管预设值可以是例如2,但是各实施例并不限于此。在各个实施例中,预设值可以是2,3,4,……,或任意其他整数。
在一些实施例中,非线性细分的详细流程如图23所示,该详细流程可以包括如下步骤。
在步骤S1901中,对原始网格进行网格简化,以得到基础网格。在步骤S1902中,对基础网格进行量化。在步骤S1903中,对量化后的基础网格进行编码。在步骤S1904中,解析码流,以从码流中解码基础网络,以得到重建的基础网格。在步骤S1905中,初始化n=0,并将重建的基础网格作为临时网格进行网格细分。在步骤S1906中,根据细分网格和原始网格计算位移系数。在步骤S1911中,为了去冗余,删除相邻基础格顶点的位移系数。在步骤S1907中,根据位移系数和细分网格来更新临时网格。在步骤S1908中,将其他位移系数保存至存储器。在步骤S1909中,判断n是否小于L-1。若步骤S1909中的判断结果为是,即n<L-1,则n=n+1(S1910),然后继续执行S1905至S1909。若步骤S1909中的判断结果为否,即n<L-1不成立,则表明细分完成。最后,还需要将其他位移系数编码到码流中。
也就是说,在本公开的实施例中,当多LOD(LoD)大于2且asps_vdmc_ext_subdivision_method 为3时,属于包含基础网格顶点的边的位移被推断为等于零,并且这些位移被添加到用于基础重建的位移列表中的对应位置。
还可以理解地,在当前网格不使用递归细分方式时,这时候当前网格可以使用中点细分方式。在一些实施例中,如图24所示,该方法可以包括如下步骤。
在步骤201中,在第一语法元素指示当前网格使用中点细分方式时,解码码流,确定重建基础网格。
在步骤202中,对重建基础网格进行细分,确定当前网格中的至少一个LOD的细分网格。
在步骤203中,解码码流,确定当前网格中的至少一个LOD的位移系数。
在步骤204中,根据当前网格中的至少一个LOD的细分网格和至少一个LOD的位移系数,确定当前网格中的至少一个LOD的重建网格。
需要说明的是,在本公开实施例中,至少一个LOD的层数与当前网格的细分迭代次数具有关联关系。在这里,L表示至少一个LOD的层数,即当前网格对应的LOD层数,它可以是等于码流中的asps_vmc_ext_ subdivision_iteration_count所指示的数值。
还需要说明的是,在本公开实施例中,如图5和图6所示,当前网格使用中点细分方式时,这时候每一LOD的位移系数都是由细分网格的顶点坐标信息与原始网格的顶点坐标信息进行位移计算得到的,而不是基于先前重建的LOD上递归得到的。
本公开实施例提供了一种解码方法,具体是一种动态网格的递归细分方法。在本公开的实施例中,通过增加第一语法元素指示当前网格使用非线性细分方式的情况,在解码阶段,接近基本层中的顶点的位移系数被推断为等于0,因而在后续将位移系数递归地应用于先前重建的LOD的过程中,能够改善高级别上位移系数存在的冗余问题,节省位移系数的编码比特,进而提升编解码效率。
在本公开的另一实施例中,图25为本公开实施例提供的一种编码方法的流程示意图一。如图25所示,该方法可以包括如下步骤。
在步骤301中,在当前网格使用非线性细分方式时,确定第一语法元素的取值,并将第一语法元素写入码流,确定当前网格中的当前LOD的重建网格,并对当前LOD的重建网格进行细分,确定当前LOD的细分网格。
需要说明的是,在本公开实施例中,该编码方法可以是一种网格细分方法,具体地,是一种用于动态网格编码的递归细分方法,能够提升编解码效率。
还需要说明的是,在本公开实施例中,基于视频的动态网格编码(Video-basedDynamic Mesh Coding,VDMC)是一种用于压缩三维网格的标准,其主要是利用已有的V3C标准对三维网格进行压缩。在本公开实施例中,细分方法在所有的LOD上共享功能,并且由Atlas序列参数集VDMC扩展RBSP语法结构中的两个语法元素来定义:asps_vdmc_ext_subdivision_method和asps_vdmc_ext_subdivision_ iteration_count,如前述的表1所示。
对于网格细分来说,由于细分的特殊性,较高级别的LOD通常退化为“0”位移,从而在信令和编码信息中引入显著的冗余。基于此,为了有效编码体积内容的网格表示的几何分量,可以通过去除诸如基础网格的边和来自先前LOD的继承值的情况下的冗余位移。本公开实施例提出了一种新的自适应细分方式,其中在较高LOD上,与基点相邻的边总是等于0。
在本公开实施例中,可以通过设置第一语法元素来表示当前网格是否使用非线性细分方式。其中,这里的第一语法元素可以用asps_vdmc_ext_subdivision_method表示,用于指示网格的细分方法。示例性地,如表2所示,若第一语法元素的取值为0,则表示当前网格不使用细分方式;若第一语法元素的取值为1,则表示当前网格使用中点细分方式。
可以理解,在本公开实施例中,在前述表2的基础上,针对第一语法元素增加了新的取值,以使得第一语法元素能够用于指示当前网格是否使用非线性细分方式。在这里,非线性细分方式可以是创建与相关技术相同的细分,但是与基点(例如PB_1、PB_2和PB_3)相邻的位移被推断为等于0。换句话说,针对每一个LOD,位移是基于先前重建的LOD中的细分顶点计算得到的,从而能够将位移递归地用于先前重建的LOD,因此,这里的自适应细分方式称为“递归细分方式”。以中点细分为例,该递归细分方式则可以称为中点递归的细分方法。
在一种可能的实现方式中,如前述表5所示,这里增加了等于2和3的新asps_vdmc_ext_subdivision_ method,该新asps_vdmc_ext_subdivision_method将创建与相关技术相同的细分,但是与基点(例如PB_1、PB_2和PB_3)相邻的位移被推断为等于零,从而能够节省位移的编码比特。
需要说明的是,在本公开实施例中,第一语法元素用于指示当前网格是否使用非线性细分方式。在一些实施例中,该方法可以包括:确定第一语法元素的取值;对第一语法元素的取值进行编码处理,将编码比特写入码流。
需要说明的是,在本公开的实施例中,如果当前网格使用非线性细分方式,那么可以确定第一语法元素的取值为第四值。
在一实施例中,在当前网格不使用细分方式时,确定第一语法元素的取值为第一值;在当前网格使用中点细分方式时,确定第一语法元素的取值为第二值;在当前网格使用递归细分方式时,确定第一语法元素的取值为第三值;在当前网格使用非线性细分方式时,确定第一语法元素的取值为第四值。
在这里,第一值、第二值、第三值、第四值各不相同。示例性地,第一值可以设置为0,第二值可以设置为1,第三值可以设置为2,第四值可以设置为3。也就是说,根据第一语法元素的取值不同,能够确定当前网格是否使用非线性细分方式。
在一实施例中,如果第一语法元素的取值为0,那么可以确定当前网格不使用任何细分方式,例如中点细分方式、递归细分方式、非线性细分方式等;如果第一语法元素的取值为1,那么可以确定当前网格使用中点细分方式;如果第一语法元素的取值为2,那么可以确定当前网格使用递归细分方式;如果第一语法元素的取值为3,那么可以确定当前网格使用非线性细分方式。
还需要说明的是,在本公开实施例中,在当前网格使用非线性细分方式时,可以由至少一个LOD进行递归重建得到的当前网格的重建网格。具体地,在得到当前网格中的当前LOD的重建网格之后可以对当前LOD的重建网格进行细分,确定当前LOD的细分网格。然后结合设置的位移系数或者码流中的位移系数,从而能够递归得到当前LOD的下一LOD的重建网格。
在一些实施例中,首先确定当前网格中的第一LOD的重建网格。该方法可以包括:确定当前网格的基础网格;对基础网格进行编码与解码处理,确定重建基础网格;对重建基础网格进行细分,确定初始细分网格;确定初始细分网格的位移系数;根据初始细分网格和初始细分网格的位移系数,确定当前网格中的第一LOD的重建网格。
在本公开实施例中,基础网格又可以称为“简化网格”。在一些实施例中,确定当前网格的基础网格,可以包括:确定当前网格的原始网格;对原始网格进行下采样处理,得到基础网格。
还需要说明的是,在本公开实施例中,当前的输入网格可以称为原始网格。通过对输入网格进行下采样处理,即实现对输入网格的简化操作,可以得到基础网格。
在一些实施例中,该方法还可以包括:对基础网格进行编码处理,将所得到的编码比特写入码流。
示例性地,这里的码流可以是指基础网格码流。那么通过网格编码器(例如EdgeBreaker等)可以将基础网格写入基础网格码流。
在一些实施例中,对于确定初始细分网格的位移系数,该方法可以包括:对初始细分网格的顶点坐标信息与原始网格的顶点坐标信息进行位移计算,确定初始细分网格的位移系数。
在一些实施例中,在确定所述当前网格中的第一LOD的重建网格之后,对第一LOD的重建网格进行细分以确定第二LOD的细分网格;解码码流以确定第二LOD的细分网格的位移系数; 根据第二LOD的细分网格和第二LOD的细分网格的位移系数,确定当前网格中的下一LOD的重建网格;以及继续执行细分操作,直至确定出当前网格中的第L个LOD的重建网格。其中, L的取值与当前网格的细分迭代次数具有关联关系。
在本公开实施例中,对于第一LOD来说,位移系数是指原始网格的顶点坐标信息和初始细分网格的顶点坐标信息之间的差异。这样,在解码获得初始细分网格的位移系数之后,根据该位移系数对初始细分网格的顶点坐标信息进行相应位移运算,可以得到第一LOD的重建网格,即LOD1的重建网格。然后基于LOD1的重建网格进行细分,得到LOD1上的细分网格,根据细分网格和对应的位移系数可以确定出LOD2的重建网格,依次类推,直至重建完成。
在步骤302中,在当前LOD为第i个LOD的情况下,将当前LOD的第一点的位移系数确定为0;其中,i为大于2的整数;第一点包括当前网格对应的重建基础网格的顶点。
需要说明的是,在本公开实施例中,位移系数可以包括一个或多个方向上的位移分量,如图3所示,位移系数包括法线方向、切线方向和双切线方向等三个方向上的位移分量。其中,第一LOD的位移系数是相对于基础网格的细分顶点来计算的,后续层级的位移系数则都是相对于前一LOD重建LOD的细分顶点来计算的,从而可以实现位移系数的递归细分。
需要说明的是,在本公开实施例中,如果当前LOD为第i个LOD,i为大于2的整数,即当前LOD满足LoD大于2,那么,可以将当前LOD的第一点的位移系数确定为0。
需要说明的是,在本公开的实施例中,当前LOD的第一点包括当前网格对应的重建基础网格的顶点,即第一点可以理解为与基点(例如,PB_1、PB_2、PB_3)重合或相邻的点。
也就是说,在本公开的实施例中,如果第一语法元素指示当前网格使用非线性细分方式,且当前LOD大于2,那么可以直接将当前LOD的第一点的位移系数设置为0,并利用该位移系数进行后续的网格重建。
在步骤303中,根据当前LOD的细分网格和当前LOD的第一点的位移系数,确定当前网格中的下一LOD的重建网格。
需要说明的是,在本公开实施例中,根据当前LOD的细分网格和当前LOD的第一点的位移系数,确定当前网格中的下一LOD的重建网格,可以包括:根据第一点的位移系数对当前LOD的细分网格的顶点坐标信息进行相应位移运算,得到当前网格中的下一LOD的重建网格。
也就是说,在本公开实施例中,这里是将位移系数递归地应用于先前重建的LOD,具体是将当前LOD的细分网格的每个顶点按照顺序加上对应的位移系数,从而可以得到下一LOD的重建网格。
可以理解的是,在本公开的实施例中,在第一语法元素指示当前网格使用非线性细分方式时,如果当前LOD的层数大于2,那么当前LOD的第一点的位移系数设置为0,即设置与基点重合或相邻的点(第一点)的位移为0,此时,在获得重建网格时,对于第一点,其实是将当前LOD的细分网格与0进行相应位移运算。
在一些实施例中,该方法还可以包括:在确定当前网格中的下一LOD的重建网格之后,将下一LOD的重建网格作为当前LOD的重建网格,返回执行对当前LOD的重建网格进行细分,确定当前LOD的细分网格的步骤,直至确定出当前网格中的第L个LOD的重建网格;其中,L的取值与当前网格的细分迭代次数具有关联关系。
还需要说明的是,在本公开实施例中,当前网格的细分迭代次数可以是由码流中的第二语法元素来指示。在一实施例中,该方法可以包括:解码码流,确定第二语法元素的取值;根据第二语法元素的取值,确定当前网格的细分迭代次数。
在本公开实施例中,第二语法元素可以用asps_vmc_ext_subdivision_iteration_count表示。也就是说,当前网格的细分迭代次数可以是由码流中的asps_vmc_ext_subdivision_iteration_count所指示的数值。
另外,L表示当前网格对应的LOD层数,L的取值可以是由当前网格的细分迭代次数确定的,即L的取值等于asps_vmc_ext_subdivision_iteration_count所指示的数值。
进一步地,在本公开的实施例中,图26为本公开实施例提供的一种编码方法的流程示意图二。如图26所示,在步骤步骤301之后,该方法可以包括以下步骤。
在步骤304中,在当前LOD为第i个LOD的情况下,确定当前LOD的第二点的位移系数,将第二点的位移系数写入码流。其中,第二点不包括当前网格对应的重建基础网格的顶点。换句话说,第二点为当前网格对应的重建基础网格中的点中的除了第一点以外的点。
需要说明的是,在本公开实施例中,如果当前LOD为第i个LOD,i为大于2的整数,即当前LOD大于2,那么,可以将当前LOD的第一点的位移系数确定为0,而第二点的位移系数则可以通过相应地位移运算获得的,然后可以将第二点的位移系数写入码流。在这里,码流可以是位移码流。对于位移码流的具体编码方式也可以有多种,如视频编码、熵编码等等。也就是说,在本公开实施例中,可以通过视频编码器将位移信息写入位移码流,或者可以通过熵编码器将位移信息写入位移码流,这里也不作任何限定。
在一些实施例中,确定当前LOD的第二点的位移系数,可以包括:对当前LOD的细分网格的顶点坐标信息与原始网格的顶点坐标信息进行位移计算,确定当前LOD的第二点的位移系数。
进一步地,在一些实施例中,该方法还可以包括:对当前LOD的第二点的位移系数进行预处理,确定当前LOD的第二点的量化位移系数;对当前LOD的第二点的量化位移系数进行编码处理,将所得到的编码比特写入码流。
需要说明的是,在本公开的实施例中,当前LOD的第二点不包括当前网格对应的重建基础网格的顶点。换句话说,第二点为当前网格对应的重建基础网格中的点中的除了第一点以外的点。即第二点可以理解为与基点(例如,PB_1、PB_2、PB_3)不相邻的边。
也就是说,在本公开的实施例中,如果当前网格使用非线性细分方式,且当前LOD大于2,可以将当前LOD的第一点的位移系数设置为0,同时可以通过计算确定当前LOD的第二点的位移系数,并编码第二点的位移系数。
在步骤305中,根据当前LOD的细分网格和当前LOD的第二点的位移系数,确定当前网格中的下一LOD的重建网格。
需要说明的是,在本公开实施例中,根据当前LOD的细分网格和当前LOD的第二点的位移系数,确定当前网格中的下一LOD的重建网格,具体地:根据第二点的位移系数对当前LOD的细分网格的顶点坐标信息进行相应位移运算,得到当前网格中的下一LOD的重建网格。
也就是说,在本公开实施例中,这里是将位移系数递归地应用于先前重建的LOD层,具体是将当前LOD的细分网格的每个顶点按照顺序加上对应的位移系数,从而可以得到下一LOD的重建网格。
进一步地,在本公开的实施例中,图27为本公开实施例提供的一种编码方法的流程示意图三。如图27所示,在步骤步骤301之后,该方法可以包括以下步骤。
在步骤306中,在当前LOD为第二LOD的情况下,确定当前LOD的位移系数,并将当前LOD的位移系数写入码流。
需要说明的是,在本公开实施例中,如果当前LOD为第二LOD,即当前LOD为LoD 2,那么,可以通过位移运算确定当前LOD的位移系数,并将当前LOD的位移系数写入码流。在这里,码流可以是位移码流。
对于位移码流的具体编码方式也可以有多种,如视频编码、熵编码等等。也就是说,在本公开实施例中,可以通过视频编码器将位移信息写入位移码流,或者可以通过熵编码器将位移信息写入位移码流,这里也不作任何限定。
在一些实施例中,确定当前LOD的位移系数,可以包括:对当前LOD的细分网格的顶点坐标信息与原始网格的顶点坐标信息进行位移计算,确定当前LOD的位移系数。
进一步地,在一些实施例中,该方法还可以包括:对当前LOD的位移系数进行预处理,确定当前LOD的量化位移系数;对当前LOD的量化位移系数进行编码处理,将所得到的编码比特写入码流。
在步骤307中,根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格。
需要说明的是,在本公开实施例中,根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格,可以包括:根据位移系数对当前LOD的细分网格的顶点坐标信息进行相应位移运算,得到当前网格中的下一LOD的重建网格。
也就是说,在本公开实施例中,这里是将位移系数递归地应用于先前重建的LOD,具体是将当前LOD的细分网格的每个顶点按照顺序加上解码得到的位移系数,从而可以得到下一LOD的重建网格。
在一些实施例中,该方法还可以包括:在确定当前网格中的下一LOD的重建网格之后,将下一LOD的重建网格作为当前LOD的重建网格,返回执行对当前LOD的重建网格进行细分,确定当前LOD的细分网格的步骤,直至确定出当前网格中的第L个LOD的重建网格;其中,L的取值与当前网格的细分迭代次数具有关联关系。
还需要说明的是,在本公开实施例中,当前网格的细分迭代次数可以是由码流中的第二语法元素来指示。在一实施例中,该方法可以包括:解码码流,确定第二语法元素的取值;根据第二语法元素的取值,确定当前网格的细分迭代次数。
在本公开实施例中,第二语法元素可以用asps_vmc_ext_subdivision_iteration_count表示。也就是说,当前网格的细分迭代次数可以是由码流中的asps_vmc_ext_subdivision_iteration_count所指示的数值。
另外,L表示当前网格对应的LOD层数,L的取值可以是由当前网格的细分迭代次数确定的,即L的取值等于asps_vmc_ext_subdivision_iteration_count所指示的数值。
进一步地,在本公开的实施例中,图28为本公开实施例提供的一种编码方法的流程示意图四。如图28所示,该方法可以包括以下步骤。
在步骤308中,在当前网格使用递归细分方式时,确定第一语法元素的取值,并将第一语法元素写入码流,确定当前网格中的当前LOD的重建网格,并对当前LOD的重建网格进行细分,确定当前LOD的细分网格。
在本公开实施例中,还可以通过设置第一语法元素来表示当前网格是否使用递归细分方式。其中,这里的第一语法元素可以用asps_vdmc_ext_subdivision_method表示,用于指示网格的细分方法。示例性地,如表2所示,若第一语法元素的取值为0,则表示当前网格不使用细分方式;若第一语法元素的取值为1,则表示当前网格使用中点细分方式。
可以理解,在本公开实施例中,在前述表2的基础上,针对第一语法元素增加了新的取值,以使得第一语法元素能够用于指示当前网格是否使用递归细分方式。在这里,递归细分方式可以是创建与相关技术相同的细分,但是与基点(例如PB_1、PB_2和PB_3)相邻的位移被推断为等于0。换句话说,针对每一个LOD,位移是基于先前重建的LOD中的细分顶点计算得到的,从而能够将位移递归地用于先前重建的LOD,因此,这里的自适应细分方式称为“递归细分方式”。以中点细分为例,该递归细分方式则可以称为中点递归的细分方法。
在一种可能的实现方式中,如前述表5所示,这里增加了等于2和3的新asps_vdmc_ext_subdivision_ method,该新asps_vdmc_ext_subdivision_method将创建与相关技术相同的细分,但是与基点(例如PB_1、PB_2和PB_3)相邻的位移被推断为等于零,从而能够节省位移的编码比特。
需要说明的是,在本公开实施例中,第一语法元素用于指示当前网格是否使用递归细分方式。在一些实施例中,该方法可以包括:确定第一语法元素的取值;对第一语法元素的取值进行编码处理,将编码比特写入码流。
需要说明的是,在本公开的实施例中,如果当前网格使用递归细分方式,那么可以确定第一语法元素的取值为第三值。
在一实施例中,在当前网格不使用细分方式时,确定第一语法元素的取值为第一值;在当前网格使用中点细分方式时,确定第一语法元素的取值为第二值;在当前网格使用递归细分方式时,确定第一语法元素的取值为第三值;在当前网格使用非线性细分方式时,确定第一语法元素的取值为第四值。
在这里,第一值、第二值、第三值、第四值各不相同。示例性地,第一值可以设置为0,第二值可以设置为1,第三值可以设置为2,第四值可以设置为3。也就是说,根据第一语法元素的取值不同,能够确定当前网格是否使用非线性细分方式。
在一实施例中,如果第一语法元素的取值为0,那么可以确定当前网格不使用任何细分方式,例如中点细分方式、递归细分方式、非线性细分方式等;如果第一语法元素的取值为1,那么可以确定当前网格使用中点细分方式;如果第一语法元素的取值为2,那么可以确定当前网格使用递归细分方式;如果第一语法元素的取值为3,那么可以确定当前网格使用非线性细分方式。
还需要说明的是,在本公开实施例中,在当前网格使用非线性细分方式时,可以由至少一个LOD进行递归重建得到当前网格的重建网格,。具体地,在得到当前网格中的当前LOD的重建网格之后可以对当前LOD的重建网格进行细分,确定当前LOD的细分网格。然后,根据细分网格、以及设置的位移系数或者码流中的位移系数,从而能够递归得到当前LOD的下一LOD的重建网格。
在一些实施例中,首先确定当前网格中的第一LOD的重建网格。该方法可以包括:确定当前网格的基础网格;对基础网格进行编码与解码处理,确定重建基础网格;对重建基础网格进行细分,确定初始细分网格;确定初始细分网格的位移系数;根据初始细分网格和初始细分网格的位移系数,确定当前网格中的第一LOD的重建网格。
在本公开实施例中,基础网格又可以称为“简化网格”。在一些实施例中,确定当前网格的基础网格,可以包括:确定当前网格的原始网格;对原始网格进行下采样处理,得到基础网格。
还需要说明的是,在本公开实施例中,当前的输入网格可以称为原始网格。通过对输入网格进行下采样处理,即实现对输入网格的简化操作,可以得到基础网格。
在一些实施例中,该方法还可以包括:对基础网格进行编码处理,将所得到的编码比特写入码流。
示例性地,这里的码流可以是指基础网格码流。那么通过网格编码器(例如EdgeBreaker等)可以将基础网格写入基础网格码流。
在一些实施例中,对于确定初始细分网格的位移系数,该方法可以包括:对初始细分网格的顶点坐标信息与原始网格的顶点坐标信息进行位移计算,确定初始细分网格的位移系数。
在本公开实施例中,对于第一LOD来说,位移系数是指原始网格的顶点坐标信息和初始细分网格的顶点坐标信息之间的差异。这样,在解码获得初始细分网格的位移系数之后,根据该位移系数对初始细分网格的顶点坐标信息进行相应位移运算,可以得到第一LOD的重建网格,即LOD1的重建网格。然后基于LOD1的重建网格进行细分,得到LOD1上的细分网格,再结合对应的位移系数可以确定出LOD2的重建网格,依次类推,直至重建完成。
步骤309:确定当前LOD的位移系数,将当前LOD的位移系数写入码流。
需要说明的是,在本公开实施例中,位移系数可以包括一个或多个方向上的位移分量,如图3所示,位移系数包括法线方向、切线方向和双切线方向等三个方向上的位移分量。其中,第一LOD的位移系数是相对于基础网格的细分顶点来计算的,后续层级的位移系数则都是相对于前一LOD重建LOD的细分顶点来计算的,从而可以实现位移系数的递归细分。
在一些实施例中,,对于步骤304、步骤306、步骤309中任一个步骤所涉及的确定当前LOD的位移系数的方法,具体可以包括:对当前LOD的细分网格的顶点坐标信息与原始网格的顶点坐标信息进行位移计算,确定当前LOD的位移系数。
进一步地,在一些实施例中,该方法还可以包括:对当前LOD的位移系数进行预处理,确定当前LOD的量化位移系数;对当前LOD的量化位移系数进行编码处理,将所得到的编码比特写入码流。
也就是说,在本公开实施例中,在生成细分网格之后,可以为细分网格的每个顶点计算几何位移矢量,以使细分网格的形状尽可能接近原始网格的形状。这些几何位移矢量就是这里的位移系数。具体地,细分网格顶点与原始网格顶点之间的几何信息存在差异,该差异即为的位移系数。
还需要说明的是,在本公开实施例中,在确定当前LOD的量化位移系数之后,将当前LOD的量化位移系数编码到码流中,这里的码流可以是位移码流。对于位移码流的具体编码方式也可以有多种,如视频编码、熵编码等等。也就是说,在本公开实施例中,可以通过视频编码器将位移信息写入位移码流,或者可以通过熵编码器将位移信息写入位移码流,这里也不作任何限定。
还需要说明的是,在本公开实施例中,在得到当前LOD的位移系数之后,可以对当前LOD的位移系数进行预处理。其中,预处理可以包括小波变换、量化等处理。
在一实施例中,对当前LOD的位移系数进行预处理,确定当前LOD的量化位移系数,可以包括:对当前LOD的位移系数进行小波变换,确定当前LOD的小波变换系数;对当前LOD的小波变换系数进行量化,确定当前LOD的量化位移系数。
在本公开实施例中,小波变换是将当前LOD的位移系数转换为小波域中的信号,这里的小波变换系数是以浮点格式进行计算。量化则是将浮点数转换为预设精度的定点数,其中,预设精度可以是在小块(patch)、图像或序列等级别的编码码流中指示的精度。
在一些实施例中,对当前LOD的小波变换系数进行量化,确定当前LOD的量化位移系数,可以包括:确定当前LOD的量化参数;根据当前LOD的量化参数对当前LOD的小波变换系数进行量化,确定当前LOD的量化位移系数。
需要说明的是,在本公开实施例中,量化参数(Quantizer Parameter,QP)反映了空间细节压缩情况。其中,值越小,量化越精细,图像质量越高,产生的码流也越长。如QP小,大部分的细节都会被保留;QP增大,一些细节丢失,码率降低,但图像失真加强和质量下降。具体地,QP是量化步长Qstep的序号,QP的取值为0 时,表示量化最精细;相反,QP的取值为51时,表示量化越粗糙。
在一些实施例中,确定当前LOD的量化参数,可以包括:确定当前LOD的多个候选量化参数;基于多个候选量化参数对当前LOD的小波变换系数进行量化与编码代价计算,确定多个候选量化参数各自的代价结果;从多个候选量化参数各自的代价结果中确定最小代价结果,将最小代价结果对应的候选量化参数确定为当前LOD的量化参数。
需要说明的是,在本公开实施例中,对于每一LOD来说,可以存在多个候选量化参数,根据这多个候选量化参数各自的代价结果,从中选取最小代价结果对应的候选量化参数,将其作为当前LOD的量化参数。其中,这里的代价计算可以包括以下至少之一:率失真代价(Rate-Distortion Optimization,RDO)均方误差(Mean Square Error,MSE)、误差平方和(Sum of Squared Difference,SSD)、绝对误差和(Sum of Absolute Difference,SAD)、绝对误差和(Sum of Absolute Transformed Difference,SATD)、峰值信噪比(PeakSignal to Noise Ratio,PSNR)等。
还需要说明的是,在本公开实施例中,量化参数可以用vmc_transform_lifting_quantization_ parameters[ltpIndex][i][j]表示。在这里,可以根据码流中的对应坐标i和LoD j的量化参数vmc_transform_ lifting_quantization_parameters[ltpIndex][i][j],按照在patch、图像或序列等级别的编码码流中指示的精度将小波变换系数转换成定点表示。其中,i表示位移系数的分量信息(x,y,z用于典范坐标系,n,t,bt用于局部坐标系);j表示LOD的层数;ltpIndex表示应用的级别,其中,0代表序列级,1代表图像级,2代表patch级。
在一种可能的实现方式中,对于当前LOD的量化参数来说,该方法可以包括:对当前LOD的量化参数进行编码处理,将所得到的编码比特写入码流。
在另一种可能的实现方式中,对于当前LOD的量化参数来说,该方法可以包括:确定当前LOD的前一LOD的量化参数;根据前一LOD的量化参数和当前LOD的量化参数,确定当前LOD的量化参数增量;对当前LOD的量化参数增量进行编码处理,将所得到的编码比特写入码流。
也就是说,在本公开实施例中,编码端可以将量化参数直接写入码流,使得解码端通过解码即可得到对应的量化参数;或者编码端也可以将量化参数增量写入码流,然后解码端根据解码得到的量化参数增量和前一LOD的量化参数也可以得到对应的量化参数。
在一实施例中,可以根据当前LOD的量化参数与前一LOD的量化参数进行减法运算,确定当前LOD的量化参数增量。示例性地,假设当前LOD的量化参数可以用QP(i)表示,前一LOD的量化参数可以用QP(i-1)表示,量化参数增量可以用ΔQP表示,那么ΔQP =QP(i)-QP(i-1)。其中,对于第一LOD的量化参数来说,可以是将对应的量化参数QP(1) 直接写入码流。
还需要说明的是,在本公开实施例中,也可以是在编码端和解码端设置一个参考量化参数,然后将每一LOD的量化参数与参考量化参数之间的量化参数增量写入码流。这样,解码端在解码码流确定出当前LOD的量化参数增量之后,可以根据当前LOD的量化参数增量和参考量化参数来确定出当前LOD的量化参数,从而也能够节省码流中量化参数的编码比特。
在一些实施例中,该方法还可以包括:确定当前网格中的至少一个LOD的量化位移系数,其中,至少一个LOD包括当前LOD;根据预设填充方式将至少一个LOD的量化位移系数填充到二维图像中;对二维图像进行编码处理,将所得到的编码比特写入码流。
在本公开实施例中,预设填充方式包括正向填充方式或者反向填充方式。其中,对于预设填充方式的确定,可以是解码端和编码端设置相同的填充方式,或者也可以是根据码流中的第三语法元素来指示。
在一实施例中,该方法还可以包括:根据预设填充方式,确定第三语法元素的取值;对第三语法元素的取值进行编码处理,将所得到的编码比特写入码流。
在本公开实施例中,第三语法元素可以可以用dmsps_packing_order表示。也就是说,预设填充方式可以是由码流中的dmsps_packing_order所指示的填充方式。
这样,若编码端通过视频编码的方式压缩位移,则解码端通过相应的视频解码器进行解码,并根据预设填充方式将其从二维图像中按照对应的顺序恢复出来。再对其执行反量化、逆小波变换等操作使其恢复出与编码端一致的位移系数。否则,如果编码端对位移系数采用熵编码的方式,那么解码端可以直接对其进行熵解码,再进行后续的反量化、逆小波变换等操作,以得到当前LOD的位移系数。
示例性地,图29A为本公开实施例提供的一种位移系数在二维图像中的填充方式示意图,图29B为本公开实施例提供的另一种位移系数在二维图像中的填充方式示意图。其中,图29A为示例性的正向填充方式,或称为“连续填充(continuous-packing)”;图29B为示例性的反向填充方式(inverse packing)。
也就是说,在本公开实施例中,对于量化位移系数来说,量化位移系数在每个LOD内沿着3D空间扫描模式(例如,Morton、Hilbert或沿着其他空间填充曲线)进行扫描,每个分量形成三个一维阵列(参见图29A和图29B)。根据LOD和由语法元素dmsps_packing_order指示的预设填充方式,将量化位移系数转换成二维图像。其中,编码树单元(Coding TreeUnit,CTU)中未被占用的符号可以使用其中一种填充方法(例如零填充)进行填充。
在步骤310中,根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格。
需要说明的是,在本公开实施例中,根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格,具体地:根据位移系数对当前LOD的细分网格的顶点坐标信息进行相应位移运算,得到当前网格中的下一LOD的重建网格。
也就是说,在本公开实施例中,这里是将位移系数递归地应用于先前重建的LOD,具体是将当前LOD的细分网格的每个顶点按照顺序加上解码得到的位移系数,从而可以得到下一LOD的重建网格。
在一些实施例中,该方法还可以包括:在确定当前网格中的下一LOD的重建网格之后,将下一LOD的重建网格作为当前LOD的重建网格,返回执行对当前LOD的重建网格进行细分,确定当前LOD的细分网格的步骤,直至确定出当前网格中的第L个LOD的重建网格;其中,L的取值与当前网格的细分迭代次数具有关联关系。
还需要说明的是,在本公开实施例中,当前网格的细分迭代次数可以是由码流中的第二语法元素来指示。在一实施例中,该方法可以包括:确定当前网格的细分迭代次数;根据当前网格的细分迭代次数,确定第二语法元素的取值;对第二语法元素的取值进行编码处理,将所得到的编码比特写入码流。
在本公开实施例中,第二语法元素可以用asps_vmc_ext_subdivision_iteration_count表示。也就是说,当前网格的细分迭代次数可以是由码流中的asps_vmc_ext_subdivision_iteration_count所指示的数值。
另外,L表示当前网格对应的LOD层数,L的取值可以是由当前网格的细分迭代次数确定的,即L的取值等于asps_vmc_ext_subdivision_iteration_count所指示的数值。
这样,在本公开实施例中,对于第一语法元素指示示当前网格使用递归细分方式的情况,如图20所示,首先对基础网格进行细分,可以得到初始细分网格;在解码获得初始细分网格的位移系数之后,根据该位移系数对初始细分网格的顶点坐标信息进行相应位移运算,可以得到第一LOD的重建网格,即LOD1的重建网格。然后基于LOD1的重建网格进行细分,得到LOD1上的细分网格;然后在解码获得LOD1的位移系数之后,根据LOD1上的细分网格以及LOD1的位移系数可以确定出LOD2的重建网格,依次类推,直至得到LOD L的重建网格,表明当前网格重建完成。其中,在图20中,黑色实线(由顶点PB_1、PB_2和PB_3组成)表示基础网格,黑色虚线表示细分网格,第一加粗实线则为应用位移的LOD1,第二加粗实线则为应用位移的LOD2。
在一些实施例中,递归细分的详细流程如图21所示,该详细流程可以包括如下步骤。
在步骤S1901中,对原始网格进行网格简化,以得到基础网格。在步骤S1902中,对基础网格进行量化。在步骤S1903中,对量化后的基础网格进行编码。在步骤S1904中,解析码流以从码流中解码基础网络,以得到重建的基础网格。在步骤S1905中,初始化n=0,并将重建的基础网格作为临时网格进行网格细分。在步骤S1906中,根据细分网格和原始网格计算位移系数。在步骤S1907中,根据位移系数和细分网格来更新临时网格。在步骤S1908中,将位移系数保存至存储器。在步骤S1909中,判断n是否小于L-1。若步骤S1909中的判断结果为是,即n<L-1,则n=n+1(S1910),继续执行步骤S1905至S1909。若步骤S1909中的判断结果为否,即n<L-1不成立,则表明细分完成。最后,还需要将位移系数编码到码流中。
这样,在本公开实施例中,对于第一语法元素指示示当前网格使用非线性细分方式的情况,如图22所示,首先对基础网格进行细分,可以得到初始细分网格;在解码获得初始细分网格的位移系数之后,根据该位移系数对初始细分网格的顶点坐标信息进行相应位移运算,可以得到第一LOD的重建网格,即LOD1的重建网格。然后基于LOD1的重建网格进行细分,得到LOD1上的细分网格;然后在解码获得LOD1的位移系数之后,根据LOD1上的细分网格以及LOD1的位移系数可以确定出LOD2的重建网格。对于LOD3到LOD L的重建网格,如LODi(i大于预设值,预设值可以例如是2),LOD i中的相邻基基础格顶点(第一点)的位移系数可以设置为0,而其他点(第二点)的位移系数依然可以解码获得,根据LOD i上的细分网格以及LOD i的位移系数可以确定下一LOD的重建网格。依次类推,直至得到LOD L的重建网格,表明当前网格重建完成。其中,在图22中,黑色实线(由顶点PB_1、PB_2和PB_3组成)表示基础网格,黑色虚线表示细分网格,第一加粗实线则为应用位移的LOD1,第二加粗实线则为应用位移的LOD2。尽管预设值可以是例如2,但是各实施例并不限于此。在各个实施例中,预设值可以是2,3,4,……,或任意其他整数值。
在一些实施例中,非线性细分的详细流程如图23所示,该详细流程可以包括如下步骤。
在步骤S1901中,对原始网格进行网格简化,以得到基础网格。在步骤S1902中,对基础网格进行量化。在步骤S1903中,对量化后的基础网格进行编码。在步骤S1904中,解析码流以从码流中解码基础网络,以得到重建的基础网格。在步骤S1905中,初始化n=0,并将重建的基础网格作为临时网格进行网格细分。在步骤S1906中,根据细分网格和原始网格计算位移系数。在步骤S1911中,为了去冗余,删除相邻基础格顶点的位移系数。在步骤S1907中,根据位移系数和细分网格来更新临时网格。在步骤S1908中,将其他位移系数保存至存储器。在步骤S1909中,判断n是否小于L-1。若步骤S1909中的判断结果为是,即n<L-1,则n=n+1,然后继续执行步骤S1905至S1909。若步骤S1909中的判断结果为否,即n<L-1不成立,则表明细分完成。最后,还需要将其他位移系数编码到码流中。
还可以理解地,在当前网格不使用递归细分方式时,当前网格可以使用中点细分方式。在一些实施例中,该方法可以包括:在当前网格使用中点细分方式时,确定重建基础网格;对重建基础网格进行细分,确定当前网格中的至少一个LOD的细分网格;确定当前网格中的至少一个LOD的位移系数;根据当前网格中的至少一个LOD的细分网格和至少一个LOD的位移系数,确定当前网格中的至少一个LOD的重建网格。
需要说明的是,在本公开实施例中,至少一个LOD的层数与当前网格的细分迭代次数具有关联关系。在这里,L表示至少一个LOD的层数,即当前网格对应的LOD层数,它可以是等于码流中的asps_vmc_ext_ subdivision_iteration_count所指示的数值。
还需要说明的是,在本公开实施例中,如图5和图6所示,当前网格使用中点细分方式时,这时候每一LOD的位移系数都是由细分网格的顶点坐标信息与原始网格的顶点坐标信息进行位移计算得到的,而不是基于先前重建的LOD上递归得到的。
还可以理解地,在本公开实施例中,这里还提供了一种码流,该码流是根据待编码信息进行比特编码生成的;其中,待编码信息包括下述至少一类信息:当前网格的基础网格、当前网格的至少一个LOD的位移系数、当前网格的至少一个LOD的量化参数、当前网格的至少一个LOD的量化参数增量、第一语法元素的取值、第二语法元素的取值和第三语法元素的取值。
本公开实施例提供了一种编码方法,具体是一种动态网格的递归细分方法。在本公开的实施例中,通过增加第一语法元素指示当前网格使用非线性细分方式的情况,在编码阶段,接近基本层中的顶点的位移系数可以从位移列表中去掉,因而在后续将位移系数递归地应用于先前重建的LOD的过程中,能够改善高级别上位移系数存在的冗余问题,节省位移系数的编码比特,进而提升编解码效率。
在本公开的又一实施例中,基于前述实施例所述的编解码方法,如图6所示,将位移系数应用于先前重建的LOD。在某些情况下,位移系数在LOD的高级别上通常是冗余的。
在一些系统中,细分方法在所有LOD上共享功能,并且是由Atlas序列参数集VDMC扩展RBSP语法结构中的两个语法元素asps_vdmc_ext_subdivision_method和asps_vdmc_ext_subdivision_iteration_ count定义,如前述表1所示。
asps_vdmc_ext_subdivision_method可以指示当前atlas序列参数集相关联的网格的细分方法标识符。前述表2描述了支持的细分方法列表及其与asps_vdmc_ext_subdivision_method的关系。
asps_vdmc_ext_subdivision_iteration_count可以指示网格的细分迭代次数。当不存在时,推断asps_vdmc_ext_subdivision_iteration_count的值等于0。
由于细分的特殊性,LOD较高级别上的位移通常退化为“0”,从而在信令和编码信息中引入显著的冗余。本公开实施例所提出的解决方案引入了有效和灵活的方法和装置,用于通过去除诸如基础网格的边和来自先前LOD的继承值的情况下的冗余位移来有效编码体积内容的网格表示的几何分量。
为了克服通过信号发送退化边的问题,本公开实施例提出了一种新的自适应细分方法,其中在较高级别的LOD上,与基点相邻的边总是等于0。其中,实现这点的一种方式是通过添加等于2和3的新asps_vdmc_ext_subdivision_method,该新asps_vdmc_ext_subdivision_method将创建与原始方法相同的细分,但是与基点(例如,PB_1、PB_2和PB_3)相邻的位移被推断为等于零,具体实施过程如图20、21、22、23所示。
在一实施例中,编码端对网格中的几何位移系数进行有效编码的方法包括具有递归细分更新的细分过程,而位移系数是相对于先前重建LOD中的细分顶点计算的。
第一阶段:网格分割,这是创建网格内容的表示独立对象/感兴趣区域/体积图块的片段或块、语义块等的步骤。LOD细分的数量由asps_vmc_ext_subdivision_iteration_count定义。
第二阶段:网格简化,其创建基网格,使用未定义的静态网格编码器对基网格进行编码。对基网格进行解码并根据LOD的数量来递归地细分。
第三阶段:对于每个LOD,计算网格的先前更新的细分LOD和网格的原始表面之间的网格位移。然后,使用小波变换来处理位移。
当LoD大于2且语法元素asps_vdmc_ext_subdivision_method的值等于3时,属于包含基网格的顶点的边的位移被推断为等于0,且不记录在位移列表中以便进一步编码。
第四阶段:根据如比特流中用信号表示的LODj和对应的坐标I的量化参数vmc_transform_lifting_quantization_parameters[ltpIndex][i][j],小波变换系数转换成固定点表示,其精度在在斑块(patch)、图片或序列级别(ltpIndex)的编码比特流中指示。
第五阶段:在每个LoD内沿着3D空间扫描模式(例如,莫顿、Hilbert,或者沿着其它空间填充曲线)来扫描量化后的小波系数,每个分量形成三个一维阵列(图29A和29B)。
根据LoD以及由标志dmsps_packing_order指示的选定的打包顺序,将变换系数转换成二维图像。使用填充方法之一(例如,零填充)来填充CTU中未被占用的符号。
在一实施例中,解码过程与编码过程相反,解码端可以由以下五个阶段组成。
第一阶段:基网格从几何形状比特流中解码,并递归地细分到由编码器定义的LOD。
第二阶段:获得几何形状位移的编码比特流,并使用对应于dmsps_mesh_codec_id解码器的编解码器来对该比特流进行解码。
第三阶段:使用比特流中用信号表示的量化参数,对位移小波系数进行反量化。
第四阶段:使用反量化的位移小波系数进行反小波变换处理。
第五阶段:在每个变换级别,网格位移递归地应用于细分后的基网格,以生成重建的网格,重建的网格由表示独立对象/感兴趣区域/体积图块的块、语义块等组成。
也就是说,在本公开的实施例中,当LoD大于2且asps_vdmc_ext_subdivision_method为3时,属于包含基网格的顶点的边的位移被推断为等于0,且添加到位移列表中的对应位置以用于网格重建。
通过上述实施例对前述实施例的具体实现进行详细阐述,从中可以看出,根据前述实施例的技术方案,通过增加第一语法元素指示当前网格使用非线性细分方式的情况,在确定当前网格使用非线性细分方式时,对当前网格中的当前LOD的重建网格进行细分,确定当前LOD的细分网格;直接将当前LOD的第一点(与基点重合或相邻的点)的位移系数设置为0,即与基点(例如PB_1、PB_2和PB_3)相邻的位移被推断为等于0;根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格。如此,在当前网格使用非线性细分方式时,能够进一步改善高级别上位移系数存在的冗余问题,节省位移系数的编码比特,进而提升编解码效率。
也就是说,在本公开的实施例中,通过增加第一语法元素指示当前网格使用非线性细分方式的情况,在编码阶段,接近基本层中的顶点的位移系数可以从位移列表中去掉,在解码阶段,接近基本层中的顶点的位移系数被推断为等于0,因而在后续将位移系数递归地应用于先前重建的LOD的过程中,能够改善高级别上位移系数存在的冗余问题,节省位移系数的编码比特,进而提升编解码效率。
在本公开的再一实施例中,基于前述实施例相同的发明构思,图30为本公开实施例提供的一种编码器的组成结构示意图。如图30所示,编码器300可以包括第一确定单元3001。
第一确定单元3001被配置为在当前网格使用非线性细分方式时,确定第一语法元素的取值,并将所述第一语法元素写入码流,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;根据所述当前LOD的细分网格和所述当前LOD的位移系数,确定所述当前网格中的下一LOD的重建网格。其中,i为大于2的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点。
可以理解地,在本公开实施例中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
因此,本公开实施例提供了一种计算机可读存储介质,应用于编码器300,该计算机可读存储介质存储有计算机程序,所述计算机程序被第一处理器执行时实现前述实施例中任一项所述的方法。
基于编码器300的组成以及计算机可读存储介质,图31为本公开实施例提供的一种编码器的具体硬件结构示意图。如图31所示,编码器300可以包括:第一通信接口3101、第一存储器3102和第一处理器3103;各个组件通过第一总线系统3104耦合在一起。可理解,第一总线系统3104用于实现这些组件之间的连接通信。第一总线系统3104除包括数据总线、电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图31中将各种总线都标为第一总线系统3104。
第一通信接口3101用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送。
第一存储器3102用于存储能够在第一处理器3103上运行的计算机程序。
第一处理器3103用于在运行所述计算机程序时,执行如下操作:在当前网格使用非线性细分方式时,确定第一语法元素的取值,并将所述第一语法元素写入码流,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;其中,i为大于2的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点;根据所述当前LOD的细分网格和所述当前LOD的位移系数,确定所述当前网格中的下一LOD的重建网格。
可以理解,本公开实施例中的第一存储器3102可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(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 DataRate SDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DRRAM)。本公开描述的系统和方法的第一存储器3102旨在包括但不限于这些和任意其它适合类型的存储器。
而第一处理器3103可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过第一处理器3103中的硬件的集成逻辑电路或者软件形式的指令完成。上述的第一处理器3103可以是通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本公开实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本公开实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于第一存储器3102,第一处理器3103读取第一存储器3102中的信息,结合其硬件完成上述方法的步骤。
可以理解的是,本公开描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(Application Specific Integrated Circuits,ASIC)、数字信号处理器(Digital SignalProcessing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(ProgrammableLogic Device,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本公开所述功能的其它电子单元或其组合中。对于软件实现,可通过执行本公开所述功能的模块(例如过程、函数等)来实现本公开所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
可选地,作为另一个实施例,第一处理器3103还配置为在运行所述计算机程序时,执行前述实施例中任一项所述的方法。
本实施例提供了一种编码器,在该编码器中,通过增加第一语法元素指示当前网格使用非线性细分方式的情况,在确定当前网格使用非线性细分方式时,将第一点的位移系数设置为0,即与基点(例如PB_1、PB_2和PB_3)相邻的位移被推断为等于0,并递归地应用于先前重建的LOD,从而能够改善高级别上位移系数存在的冗余问题,节省位移系数的编码比特,进而提升编解码效率。
在本公开的再一实施例中,基于前述实施例相同的发明构思,图32为本公开实施例提供的一种解码器的组成结构示意图。如图32所示,解码器320可以包括第二确定单元3201。
所述第二确定单元3201被配置为解码码流,确定第一语法元素的取值;在所述第一语法元素指示当前网格使用非线性细分方式时,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;根据所述当前LOD的细分网格和所述当前LOD的第一点的位移系数,确定所述当前网格中的下一LOD的重建网格。其中,i为大于2的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点。
可以理解地,在本实施例中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本实施例提供了一种计算机可读存储介质,应用于解码器320,该计算机可读存储介质存储有计算机程序,所述计算机程序被第二处理器执行时实现前述实施例中任一项所述的方法。
基于解码器320的组成以及计算机可读存储介质,图33为本公开实施例提供的一种解码器的具体硬件结构示意图。如图33所示,解码器320可以包括:第二通信接口3301、第二存储器3302和第二处理器3303;各个组件通过第二总线系统3304耦合在一起。可理解,第二总线系统3304用于实现这些组件之间的连接通信。第二总线系统3304除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图33中将各种总线都标为第二总线系统3304。
第二通信接口3301用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送。
第二存储器3302用于存储能够在第二处理器3303上运行的计算机程序。
第二处理器3303用于在运行所述计算机程序时,执行如下操作:解码码流,确定第一语法元素的取值;在所述第一语法元素指示当前网格使用非线性细分方式时,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;其中,i为大于2的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点;根据所述当前LOD的细分网格和所述当前LOD的第一点的位移系数,确定所述当前网格中的下一LOD的重建网格。
可选地,作为另一个实施例,第二处理器3303还配置为在运行所述计算机程序时,执行前述实施例中任一项所述的方法。
可以理解,第二存储器3302与第一存储器3102的硬件功能类似,第二处理器3303与第一处理器3103的硬件功能类似;这里不再详述。
本实施例提供了一种解码器,在该解码器中,在确定当前网格使用非线性细分方式时,将第一点的位移系数设置为0,即与基点(例如PB_1、PB_2和PB_3)相邻的位移被推断为等于0,并递归地应用于先前重建的LOD,从而能够改善高级别上位移系数存在的冗余问题,节省位移系数的编码比特,进而提升编解码效率。
在本公开的再一实施例中,图34为本公开实施例提供的一种编解码系统的组成结构示意图。如图34所示,编解码系统340可以包括编码器3401和解码器3402。
在本公开实施例中,编码器3401可以为前述实施例中任一项所述的编码器,解码器3402可以为前述实施例中任一项所述的解码器。
需要说明的是,在本公开实施例中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
还需要说明的是,本公开实施例还提供了一种计算机程序产品,包括计算机程序或指令。
在一些实施例中,该计算机程序产品可应用于本公开实施例中的终端设备,并且该计算机程序或指令使得计算机执行本公开实施例的各个方法中由终端设备实现的相应流程,为了简洁,在此不再赘述。
还需要说明的是,本公开实施例还提供了一种计算机程序。
在一些实施例中,该计算机程序可应用于本公开实施例中的终端设备,当该计算机程序在计算机上运行时,使得计算机执行本公开实施例的各个方法中由终端设备实现的相应流程,为了简洁,在此不再赘述。
本领域普通技术人员可以意识到,结合本公开所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
上述本公开实施例序号仅仅为了描述,不代表实施例的优劣。
本公开所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本公开所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
本公开所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。
工业实用性
本公开实施例提供了一种编解码方法、码流、编码器、解码器、介质及产品,在解码端,解码码流,确定第一语法元素的取值;在第一语法元素指示当前网格使用非线性细分方式时,确定当前网格中的当前LOD的重建网格,并对当前LOD的重建网格进行细分,确定当前LOD的细分网格;在当前LOD为第i个LOD的情况下,将当前LOD的第一点的位移系数确定为0;其中,i为大于2的整数;第一点包括当前网格对应的重建基础网格的顶点;根据当前LOD的细分网格和当前LOD的第一点的位移系数,确定当前网格中的下一LOD的重建网格。在编码端,在当前网格使用非线性细分方式时,确定第一语法元素的取值,并将第一语法元素写入码流,确定当前网格中的当前LOD的重建网格,并对当前LOD的重建网格进行细分,确定当前LOD的细分网格;在当前LOD为第i个LOD的情况下,将当前LOD的第一点的位移系数确定为0;其中,i为大于2的整数;第一点包括当前网格对应的重建基础网格的顶点;根据当前LOD的细分网格和当前LOD的位移系数,确定当前网格中的下一LOD的重建网格。也就是说,在本公开的实施例中,通过增加第一语法元素指示当前网格使用非线性细分方式的情况,在编码阶段,接近基本层中的顶点的位移系数可以从位移列表中去掉,在解码阶段,接近基本层中的顶点的位移系数被推断为等于0,因而在后续将位移系数递归地应用于先前重建的LOD的过程中,能够改善高级别上位移系数存在的冗余问题,节省位移系数的编码比特,进而提升编解码效率。
Claims (49)
1.一种解码方法,应用于解码器,所述解码方法包括:
解码码流以确定第一语法元素的取值;
在所述第一语法元素的取值指示当前网格使用非线性细分方式时,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;
在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点;以及
根据所述当前LOD的细分网格和所述当前LOD的第一点的位移系数,确定所述当前网格中的下一LOD的重建网格。
2.根据权利要求1的解码方法,还包括:
在所述当前LOD为第i个LOD的情况下,解码所述码流以确定所述当前LOD的第二点的位移系数;其中,所述第二点为所述当前网格对应的重建基础网格中的点中的除了所述第一点以外的点;以及
根据所述当前LOD的细分网格和所述当前LOD的第二点的位移系数,确定所述当前网格中的下一LOD的重建网格。
3.根据权利要求1的解码方法,还包括:
在所述当前LOD为第二LOD的情况下,解码所述码流以确定所述当前LOD的位移系数;以及
根据所述当前LOD的细分网格和所述当前LOD的位移系数来确定所述当前网格中的下一LOD的重建网格。
4.根据权利要求1-3中的任一项所述的解码方法,还包括:
解码所述码流以确定重建基础网格;
对所述重建基础网格进行细分以确定初始细分网格;
解码所述码流以确定所述初始细分网格的位移系数;以及
根据所述初始细分网格和所述初始细分网格的位移系数,确定所述当前网格中的第一LOD的重建网格。
5.根据权利要求4所述的解码方法,还包括:
在确定所述当前网格中的第一LOD的重建网格之后,对所述第一LOD的重建网格进行细分以确定第二LOD的细分网格;
解码所述码流以确定所述第二LOD的细分网格的位移系数;
根据所述第二LOD的细分网格和所述第二LOD的细分网格的位移系数,确定所述当前网格中的下一LOD的重建网格;以及
继续执行细分操作,直至确定出所述当前网格中的第L个LOD的重建网格,
其中,所述L的取值与所述当前网格的细分迭代次数具有关联关系。
6.根据权利要求5所述的解码方法,还包括:
在所述第一语法元素指示当前网格使用递归细分方式时,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;
解码所述码流以确定所述当前LOD的位移系数;以及
根据所述当前LOD的细分网格和所述当前LOD的位移系数,确定所述当前网格中的下一LOD的重建网格。
7.根据权利要求6所述的解码方法,还包括:
在确定所述当前网格中的下一LOD的重建网格之后,将所述下一LOD的重建网格作为所述当前LOD的重建网格,返回执行对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格的步骤,直至确定出所述当前网格中的第L个LOD的重建网格。
8.根据权利要求7所述的解码方法,还包括:
解码所述码流以确定第二语法元素的取值;以及
根据所述第二语法元素的取值,确定所述当前网格的细分迭代次数。
9.根据权利要求6至8中任一项所述的解码方法,其中,所述解码所述码流以确定所述当前LOD的位移系数包括:
解码所述码流以确定所述当前LOD的解码位移系数;以及
对所述当前LOD的解码位移系数进行预处理以确定所述当前LOD的位移系数。
10.根据权利要求9所述的解码方法,其中,所述对所述当前LOD的解码位移系数进行预处理以确定所述当前LOD的位移系数包括:
确定所述当前LOD的量化参数;
通过根据所述当前LOD的量化参数对所述当前LOD的解码位移系数进行反量化来确定所述当前LOD的反量化位移系数;以及
对所述当前LOD的反量化位移系数进行逆小波变换来确定所述当前LOD的位移系数。
11.根据权利要求10所述的解码方法,其中,所述确定所述当前LOD的量化参数包括:
解码所述码流以确定所述当前LOD的量化参数。
12.根据权利要求10所述的解码方法,其中,所述确定所述当前LOD的量化参数包括:
确定所述当前LOD的前一LOD的量化参数;
解码所述码流以确定所述当前LOD的量化参数增量;以及
根据所述前一LOD的量化参数和所述量化参数增量,确定所述当前LOD的量化参数。
13.根据权利要求9所述的解码方法,其中,所述解码所述码流以确定所述当前LOD的解码位移系数包括:
解码所述码流以确定二维图像;以及
根据预设填充方式从所述二维图像中提取所述当前LOD的解码位移系数。
14.根据权利要求13所述的解码方法,还包括:
解码所述码流以确定第三语法元素的取值;以及
根据所述第三语法元素的取值,确定所述预设填充方式。
15.根据权利要求1-4,5-8,10-14中任一项所述的解码方法,其中,所述根据所述当前LOD的细分网格和所述当前LOD的第一点的位移系数来确定所述当前网格中的下一LOD的重建网格包括:
根据所述位移系数对所述当前LOD的细分网格的顶点坐标信息进行位移运算,得到所述当前网格中的下一LOD的重建网格。
16.根据权利要求6所述的解码方法,还包括:
在所述第一语法元素指示当前网格使用中点细分方式时,解码所述码流以确定重建基础网格;
对所述重建基础网格进行细分,确定所述当前网格中的至少一个LOD的细分网格;
解码所述码流以确定所述当前网格中的至少一个LOD的位移系数;以及
根据所述当前网格中的所述至少一个LOD的细分网格和所述至少一个LOD的位移系数,确定所述当前网格中的所述至少一个LOD的重建网格。
17.根据权利要求16所述的解码方法,其中,所述至少一个LOD的层数与所述当前网格的细分迭代次数具有关联关系。
18.根据权利要求16所述的解码方法,还包括:
在所述第一语法元素的取值为第一值时,确定所述第一语法元素指示当前网格不使用细分方式;
在所述第一语法元素的取值为第二值时,确定所述第一语法元素指示当前网格使用中点细分方式;
在所述第一语法元素的取值为第三值时,确定所述第一语法元素指示当前网格使用递归细分方式;以及
在所述第一语法元素的取值为第四值时,确定所述第一语法元素指示当前网格使用非线性细分方式。
19.根据权利要求1-18中任一项所属的方法,其中,所述预设值为2。
20.一种编码方法,应用于编码器,所述编码方法包括:
在当前网格使用非线性细分方式时,确定第一语法元素的取值,并将所述第一语法元素写入码流,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;
在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点;以及
根据所述当前LOD的细分网格和所述当前LOD的第一点的位移系数,确定所述当前网格中的下一LOD的重建网格。
21.根据权利要求20的编码方法,还包括:
在所述当前LOD为第i个LOD的情况下,确定所述当前LOD的第二点的位移系数,将所述第二点的位移系数写入所述码流;其中,所述第二点为所述当前网格对应的重建基础网格中的点中的除了所述第一点以外的点;以及
根据所述当前LOD的细分网格和所述当前LOD的第二点的位移系数,确定所述当前网格中的下一LOD的重建网格。
22.根据权利要求20的编码方法,还包括:
在所述当前LOD为第二LOD的情况下,确定所述当前LOD的位移系数,将所述当前LOD的位移系数写入所述码流;以及
根据所述当前LOD的细分网格和所述当前LOD的位移系数,确定所述当前网格中的下一LOD的重建网格。
23.根据权利要求20-22中的任一项所述的编码方法,还包括:
确定所述当前网格的基础网格,将所述基础网格写入所述码流;
对所述基础网格进行编码与解码处理,确定重建基础网格;
对所述重建基础网格进行细分,确定初始细分网格;
确定所述初始细分网格的位移系数,将所述初始细分网格的位移系数写入所述码流;以及
根据所述初始细分网格和所述初始细分网格的位移系数,确定所述当前网格中的第一LOD的重建网格。
24.根据权利要求23所述的编码方法,其中,所述确定所述当前网格的基础网格包括:
确定所述当前网格的原始网格;以及
对所述原始网格进行下采样处理,得到所述基础网格。
25.根据权利要求24所述的编码方法,其中,所述确定所述初始细分网格的位移系数包括:
根据所述初始细分网格的顶点坐标信息与所述原始网格的顶点坐标信息来确定所述初始细分网格的位移系数。
26.根据权利要求24或25所述的编码方法,还包括:
在确定所述当前网格中的第一LOD的重建网格之后,对所述第一LOD的重建网格进行细分,确定第二LOD的细分网格;
确定所述第二LOD的细分网格的位移系数,将所述第二LOD的细分网格的位移系数写入所述码流;以及
根据所述第二LOD的细分网格和所述第二LOD的细分网格的位移系数,确定所述当前网格中的下一LOD的重建网格;
继续执行细分操作,直至确定出所述当前网格中的第L个LOD的重建网格,其中
所述L的取值与所述当前网格的细分迭代次数具有关联关系。
27.根据权利要求26所述的编码方法,还包括:
在当前网格使用递归细分方式时,确定第一语法元素的取值,并将所述第一语法元素写入所述码流,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;
确定所述当前LOD的位移系数,将所述当前LOD的位移系数写入所述码流;以及
根据所述当前LOD的细分网格和所述当前LOD的位移系数,确定所述当前网格中的下一LOD的重建网格。
28.根据权利要求27所述的编码方法,还包括:
在确定所述当前网格中的下一LOD的重建网格之后,将所述下一LOD的重建网格作为所述当前LOD的重建网格,返回执行对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格的步骤,直至确定出所述当前网格中的第L个LOD的重建网格。
29.根据权利要求28所述的编码方法,还包括:
确定所述当前网格的细分迭代次数;以及
根据所述当前网格的细分迭代次数,确定第二语法元素,将所述第二语法元素写入所述码流。
30.根据权利要求27所述的编码方法,其中,所述确定所述当前LOD的位移系数,包括:
根据所述当前LOD的细分网格的顶点坐标信息与所述原始网格的顶点坐标信息来确定所述当前LOD的位移系数。
31.根据权利要求27-30中任一项所述的编码方法,还包括:
对所述当前LOD的位移系数进行预处理以确定所述当前LOD的量化位移系数;以及
对所述当前LOD的量化位移系数进行编码处理以得到编码比特,并将所述编码比特写入所述码流。
32.根据权利要求31所述的编码方法,其中,所述对所述当前LOD的位移系数进行预处理以确定所述当前LOD的量化位移系数包括:
对所述当前LOD的位移系数进行小波变换,确定所述当前LOD的小波变换系数;以及
对所述当前LOD的小波变换系数进行量化,确定所述当前LOD的量化位移系数。
33.根据权利要求32所述的编码方法,其中,所述对所述当前LOD的小波变换系数进行量化,确定所述当前LOD的量化位移系数包括:
确定所述当前LOD的量化参数;以及
根据所述当前LOD的量化参数对所述当前LOD的小波变换系数进行量化,以确定所述当前LOD的量化位移系数。
34.根据权利要求33所述的编码方法,还包括:
对所述当前LOD的量化参数进行编码处理以得到编码比特,并将所述编码比特写入所述码流。
35.根据权利要求33所述的编码方法,还包括:
确定所述当前LOD的前一LOD的量化参数;以及
根据所述前一LOD的量化参数和所述当前LOD的量化参数,确定所述当前LOD的量化参数增量;以及
对所述当前LOD的量化参数增量进行编码处理,将所得到的编码比特写入所述码流。
36.根据权利要求31所述的编码方法,还包括:
确定所述当前网格中的至少一个LOD的量化位移系数,其中,所述至少一个LOD包括所述当前LOD;
根据预设填充方式将所述至少一个LOD的量化位移系数填充到二维图像中;以及
对所述二维图像进行编码处理,将所得到的编码比特写入所述码流。
37.根据权利要求36所述的编码方法,还包括:
根据所述预设填充方式,确定第三语法元素的取值;以及
对所述第三语法元素的取值进行编码处理,将所得到的编码比特写入所述码流。
38.根据权利要求20至37中任一项所述的编码方法,其中,所述根据所述当前LOD的细分网格和所述当前LOD的位移系数,确定所述当前网格中的下一LOD的重建网格,包括:
根据所述位移系数对所述当前LOD的细分网格的顶点坐标信息进行位移运算,得到所述当前网格中的下一LOD的重建网格。
39.根据权利要求20-38中任一项所述的编码方法,还包括:
在所述当前网格不使用细分方式时,确定所述第一语法元素的取值为第一值;
在所述当前网格使用中点细分方式时,确定所述第一语法元素的取值为第二值;
在所述当前网格使用递归细分方式时,确定所述第一语法元素的取值为第三值;以及
在所述当前网格使用非线性细分方式时,确定所述第一语法元素的取值为第四值。
40.根据权利要求39所述的编码方法,还包括:
在所述当前网格使用中点细分方式时,确定重建基础网格;
对所述重建基础网格进行细分,确定所述当前网格中的至少一个LOD的细分网格;
确定所述当前网格中的至少一个LOD的位移系数;以及
根据所述当前网格中的至少一个LOD的细分网格和所述至少一个LOD的位移系数,确定所述当前网格中的至少一个LOD的重建网格。
41.根据权利要求40所述的编码方法,其中,所述至少一个LOD的层数与所述当前网格的细分迭代次数具有关联关系。
42.根据权利要求20-41任一项所述的方法,其中,所述预设值为2。
43.一种码流,其中,所述码流是根据待编码信息进行比特编码生成的;其中,所述待编码信息包括下述至少一项:
当前网格的基础网格、当前网格的至少一个LOD的位移系数、当前网格的至少一个LOD的量化参数、当前网格的至少一个LOD的量化参数增量、第一语法元素的取值、第二语法元素的取值和第三语法元素的取值。
44.一种编码器,包括:
确定单元,配置为:
在当前网格使用非线性细分方式时,确定第一语法元素的取值,并将所述第一语法元素写入码流,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;
在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点;以及
根据所述当前LOD的细分网格和所述当前LOD的位移系数,确定所述当前网格中的下一LOD的重建网格。
45.一种编码器,包括:
存储器,用于存储能够在处理器上运行的计算机程序;
所述处理器,用于在运行所述计算机程序时,执行如权利要求20-42中任一项所述的编码方法。
46.一种解码器,包括:
确定单元,配置为:
解码码流以确定第一语法元素的取值;
在所述第一语法元素的取值指示当前网格使用非线性细分方式时,确定所述当前网格中的当前LOD的重建网格,并对所述当前LOD的重建网格进行细分以确定所述当前LOD的细分网格;
在所述当前LOD为第i个LOD的情况下,将所述当前LOD的第一点的位移系数确定为0;其中,i为大于预设值的整数;所述第一点包括所述当前网格对应的重建基础网格的顶点;以及
根据所述当前LOD的细分网格和所述当前LOD的第一点的位移系数,确定所述当前网格中的下一LOD的重建网格。
47.一种解码器,包括:
存储器,用于存储能够在处理器上运行的计算机程序;
所述处理器,用于在运行所述计算机程序时,执行如权利要求1-19中任一项所述的解码方法。
48.一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序被至少一个处理器执行时实现如权利要求1-18中任一项所述的解码方法、或者如权利要求20-42中任一项所述的编码方法。
49.一种计算机程序产品,包括计算机程序或指令,其中,所述计算机程序或指令被至少一个处理器执行时实现如权利要求1-19中任一项所述的解码方法、或者如权利要求20-42中任一项所述的编码方法。
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US202363521327P | 2023-06-15 | 2023-06-15 | |
| US63/521,327 | 2023-06-15 | ||
| PCT/CN2024/099684 WO2024255912A1 (en) | 2023-06-15 | 2024-06-17 | Encoding method, decoding method, bitstream, encoder, decoder, medium and program product |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN121058043A true CN121058043A (zh) | 2025-12-02 |
Family
ID=93851365
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202480027912.XA Pending CN121058043A (zh) | 2023-06-15 | 2024-06-17 | 编码方法、解码方法、码流、编码器、解码器、介质及程序产品 |
Country Status (2)
| Country | Link |
|---|---|
| CN (1) | CN121058043A (zh) |
| WO (1) | WO2024255912A1 (zh) |
Family Cites Families (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20080031325A1 (en) * | 2006-08-03 | 2008-02-07 | Yingyong Qi | Mesh-based video compression with domain transformation |
| CN106408620A (zh) * | 2016-09-08 | 2017-02-15 | 成都希盟泰克科技发展有限公司 | 基于压缩感知的三维网格模型数据处理方法 |
| US11450030B2 (en) * | 2019-09-24 | 2022-09-20 | Apple Inc. | Three-dimensional mesh compression using a video encoder |
| US12340468B2 (en) * | 2020-03-15 | 2025-06-24 | Intel Corporation | Apparatus and method for displaced mesh compression |
| CN114331816B (zh) * | 2021-12-27 | 2025-09-12 | 北京达佳互联信息技术有限公司 | 图像处理方法、装置、电子设备及存储介质 |
-
2024
- 2024-06-17 CN CN202480027912.XA patent/CN121058043A/zh active Pending
- 2024-06-17 WO PCT/CN2024/099684 patent/WO2024255912A1/en not_active Ceased
Also Published As
| Publication number | Publication date |
|---|---|
| WO2024255912A1 (en) | 2024-12-19 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| KR101986282B1 (ko) | 반복 구조 검색 기반의 3d 모델 압축을 위한 방법 및 장치 | |
| WO2024035762A1 (en) | Dynamic mesh geometry refinement component adaptive coding | |
| CN119678499A (zh) | 用于点云编解码的方法、装置和介质 | |
| WO2024163690A2 (en) | Visual volumetric video-based coding method, encoder and decoder | |
| CN120092264A (zh) | 用于点云编解码的方法、装置和介质 | |
| WO2023155045A1 (zh) | 预测的方法和装置、编码器、解码器和编解码系统 | |
| CN121058043A (zh) | 编码方法、解码方法、码流、编码器、解码器、介质及程序产品 | |
| WO2024148573A1 (zh) | 编解码方法、编码器、解码器以及存储介质 | |
| WO2025067513A1 (en) | Encoding and decoding methods, encoder, decoder and storage medium | |
| WO2024255475A1 (en) | Coding and decoding methods, bitstream, encoder, decoder and storage medium | |
| WO2024039703A1 (en) | Dynamic mesh geometry refinement | |
| WO2025081769A1 (en) | Coding and decoding methods, bitstream, encoder, decoder and storage medium | |
| WO2024213067A1 (en) | Decoding method, encoding method, bitstream, decoder, encoder and storage medium | |
| WO2025000342A1 (zh) | 编解码方法、编码器、解码器以及存储介质 | |
| WO2025152005A1 (zh) | 编解码方法及装置、编解码器、码流、设备、存储介质 | |
| US12445613B2 (en) | Displacement quantization syntax | |
| US20240282011A1 (en) | Fix-point implementation of mesh codec | |
| CN120982094A (zh) | 编解码方法、编码器、解码器、码流以及存储介质 | |
| WO2025076656A1 (zh) | 编解码方法、编解码器以及存储介质 | |
| WO2025213480A1 (zh) | 编解码方法及装置、点云编解码器、码流、设备、存储介质 | |
| WO2025213306A1 (zh) | 编解码方法、编解码器以及存储介质 | |
| WO2025007270A9 (zh) | 编解码方法、编码器、解码器、码流以及存储介质 | |
| WO2025000429A1 (zh) | 编解码方法、码流、编码器、解码器以及存储介质 | |
| WO2025208498A1 (zh) | 编解码方法、编解码器、码流以及存储介质 | |
| WO2025145325A1 (zh) | 编解码方法、编解码器以及存储介质 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication |