CN114598889B - 一种编解码方法、装置及其设备 - Google Patents
一种编解码方法、装置及其设备 Download PDFInfo
- Publication number
- CN114598889B CN114598889B CN202011410129.1A CN202011410129A CN114598889B CN 114598889 B CN114598889 B CN 114598889B CN 202011410129 A CN202011410129 A CN 202011410129A CN 114598889 B CN114598889 B CN 114598889B
- Authority
- CN
- China
- Prior art keywords
- motion information
- current block
- weight
- pixel position
- value
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 119
- 230000002093 peripheral effect Effects 0.000 claims abstract description 318
- 239000013598 vector Substances 0.000 claims description 618
- 230000009466 transformation Effects 0.000 claims description 285
- 238000003860 storage Methods 0.000 claims description 139
- 230000002123 temporal effect Effects 0.000 claims description 64
- 238000012986 modification Methods 0.000 claims description 25
- 230000004048 modification Effects 0.000 claims description 25
- 238000012937 correction Methods 0.000 claims description 23
- 230000002457 bidirectional effect Effects 0.000 claims description 21
- 230000003247 decreasing effect Effects 0.000 claims description 18
- 238000005520 cutting process Methods 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 description 45
- 230000008569 process Effects 0.000 description 31
- 238000005192 partition Methods 0.000 description 25
- 238000010586 diagram Methods 0.000 description 20
- 238000012545 processing Methods 0.000 description 14
- 238000004458 analytical method Methods 0.000 description 8
- 230000007423 decrease Effects 0.000 description 7
- 230000008859 change Effects 0.000 description 5
- 238000013139 quantization Methods 0.000 description 5
- 238000009826 distribution Methods 0.000 description 4
- 230000003044 adaptive effect Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000009795 derivation Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000007774 longterm Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 101100134058 Caenorhabditis elegans nth-1 gene Proteins 0.000 description 1
- 101100460203 Schizosaccharomyces pombe (strain 972 / ATCC 24843) new2 gene Proteins 0.000 description 1
- 101100273916 Schizosaccharomyces pombe (strain 972 / ATCC 24843) wip1 gene Proteins 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Classifications
-
- 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/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/513—Processing of motion vectors
- H04N19/517—Processing of motion vectors by encoding
- H04N19/52—Processing of motion vectors by encoding by predictive encoding
-
- 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/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/124—Quantisation
- H04N19/126—Details of normalisation or weighting functions, e.g. normalisation matrices or variable uniform quantisers
-
- 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/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/56—Motion estimation with initialisation of the vector search, e.g. estimating a good candidate to initiate a search
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本申请提供一种编解码方法、装置及其设备,包括:根据权重配置参数为当前块外部的周边位置配置参考权重值;针对当前块的每个像素位置,根据权重预测角度从当前块外部的周边位置中确定像素位置指向的周边匹配位置;根据周边匹配位置关联的参考权重值确定像素位置的目标权重值,根据像素位置的目标权重值确定像素位置的关联权重值;获取运动信息候选列表;基于运动信息候选列表获取当前块的第一目标运动信息和第二目标运动信息;根据第一目标运动信息确定像素位置的第一预测值,根据第二目标运动信息确定像素位置的第二预测值;根据第一预测值,目标权重值,第二预测值和关联权重值,确定像素位置的加权预测值。通过本申请提高预测准确性。
Description
技术领域
本申请涉及编解码技术领域,尤其是涉及一种编解码方法、装置及其设备。
背景技术
为了达到节约空间的目的,视频图像都是经过编码后才传输的,完整的视频编码可以包括预测、变换、量化、熵编码、滤波等过程。针对预测过程,预测过程可以包括帧内预测和帧间预测,帧间预测是指利用视频时间域的相关性,使用邻近已编码图像的像素预测当前像素,以达到有效去除视频时域冗余的目的。帧内预测是指利用视频空间域的相关性,使用当前帧图像的已编码块的像素预测当前像素,以达到去除视频空域冗余的目的。
在相关技术中,当前块为矩形,而实际物体的边缘往往不是矩形,因此,对于物体边缘来说,往往存在两个不同对象(如存在前景的物体和背景)。基于此,当两个对象的运动不一致时,矩形划分不能很好的将两个对象分割,即使将当前块划分为两个非矩形子块,通过两个非矩形子块预测当前块,目前,也存在预测效果不佳,编码性能较差等问题。
发明内容
有鉴于此,本申请提供了一种编解码方法、装置及其设备,提高了预测的准确性。
本申请提供一种编解码方法,所述方法包括:
在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;
根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;
针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
本申请提供一种编解码装置,所述装置包括:获取模块,用于在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;配置模块,用于根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;确定模块,用于针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;所述获取模块,还用于获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;所述确定模块,还用于根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
本申请提供一种解码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下步骤:
在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;
根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;
针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
本申请提供一种编码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下步骤:
在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;
根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;
针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
由以上技术方案可见,本申请实施例中,提出一种配置权重值的有效方式,能够为当前块的每个像素位置配置合理的目标权重值,从而提高预测的准确性,提高预测性能,提高编码性能,能够使当前块的预测值加更接近原始像素,并带来编码性能的提高。
附图说明
图1是视频编码框架的示意图;
图2A-图2E是加权预测的示意图;
图3是本申请一种实施方式中的编解码方法的流程图;
图4A-图4D是当前块外部的周边位置的示意图;
图5是本申请一种实施方式中的权重预测角度的示意图;
图6是本申请一种实施方式中的四种权重变换率的参考权重值的示意图;
图7A-图7C是本申请一种实施方式中的权重预测角度与角度分区的示意图;
图8是本申请一种实施方式中的当前块的相邻块的示意图;
图9A和图9B是本申请一种实施方式中的MVD的示意图;
图10A是本申请一种实施方式中的编解码装置的结构示意图;
图10B是本申请一种实施方式中的解码端设备的硬件结构图;
图10C是本申请一种实施方式中的编码端设备的硬件结构图。
具体实施方式
在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非用于限制本申请。本申请实施例和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但是,这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息,取决于语境。此外,所使用的词语“如果”可以被解释成为“在……时”,或“当……时”,或“响应于确定”。
本申请实施例中提出一种编解码方法、装置及其设备,可以涉及如下概念:
帧内预测(intra prediction),帧间预测(inter prediction)与IBC(帧内块拷贝)预测:
帧内预测是指,基于视频空间域的相关性,使用已编码块进行预测,以达到去除视频空域冗余的目的。帧内预测规定了多种预测模式,每种预测模式对应一种纹理方向(DC模式除外),例如,若图像纹理呈现水平状排布,则水平预测模式可以更好的预测图像信息。
帧间预测是指,基于视频时间域的相关性,由于视频序列包含较强的时域相关性,使用邻近已编码图像像素预测当前图像的像素,可以达到有效去除视频时域冗余的目的。
帧内块拷贝(IBC,Intra Block Copy)是指,允许同帧参考,当前块的参考数据来自同一帧,帧内块拷贝也可以称为帧内块复制。帧内块拷贝技术中,可以使用当前块的块矢量获取当前块的预测值,示例性的,基于屏幕内容中同一帧内存在大量重复出现的纹理这一特性,在采用块矢量获取当前块的预测值时,能够提升屏幕内容序列的压缩效率。
预测像素(Prediction Signal):预测像素是指从已编解码的像素中导出的像素值,通过原始像素与预测像素之差获得残差,进而进行残差变换量化以及系数编码。帧间的预测像素指的是当前块从参考帧导出的像素值,由于像素位置离散,需要通过插值运算来获取最终的预测像素。预测像素与原始像素越接近,两者相减得到的残差能量越小,编码压缩性能越高。
运动矢量(Motion Vector,MV):在帧间预测中,可以使用运动矢量表示当前帧的当前块与参考帧的参考块之间的相对位移。每个划分的块都有相应的运动矢量传送到解码端,如果对每个块的运动矢量进行独立编码和传输,特别是小尺寸的大量块,则消耗很多比特。为降低用于编码运动矢量的比特数,可以利用相邻块之间的空间相关性,根据相邻已编码块的运动矢量对当前块的运动矢量进行预测,然后对预测差进行编码,这样可以有效降低表示运动矢量的比特数。在对当前块的运动矢量进行编码时,可以先使用相邻已编码块的运动矢量预测当前块的运动矢量,然后对该运动矢量的预测值(MVP,Motion VectorPrediction)与运动矢量的真正估值之间的差值(MVD,Motion Vector Difference)进行编码。
运动信息(Motion Information):由于运动矢量表示当前块与某个参考块之间的位置偏移,为了准确的获取指向块的信息,除了运动矢量,还需要参考帧图像的索引信息来表示当前块使用哪个参考帧图像。在视频编码技术中,对于当前帧,通常可以建立一个参考帧图像列表,参考帧图像索引信息则表示当前块采用了参考帧图像列表中的第几个参考帧图像。
此外,很多编码技术还支持多个参考图像列表,因此,还可以使用一个索引值来表示使用了哪一个参考图像列表,这个索引值可以称为参考方向。综上所述,在视频编码技术中,可以将运动矢量,参考帧索引,参考方向等与运动相关的信息统称为运动信息。
知识库帧(lib picture):知识库帧也可以称为知识库图像,类似长期参考帧(long term reference picture)的概念,知识库帧可以为较远距离的帧,知识库帧可以存在于当前帧的参考帧列表(也可以称为参考帧队列)中,用于有效的帧间预测。示例性的,知识库帧的POC(Picture Order Count,显示顺序,即图像顺序号)可以被设置为当前帧的POC减1。
率失真原则(Rate-Distortion Optimized):评价编码效率的有两大指标:码率和PSNR(Peak Signal to Noise Ratio,峰值信噪比),比特流越小,则压缩率越大,PSNR越大,则重建图像质量越好,在模式选择时,判别公式实质上也就是对二者的综合评价。例如,模式对应的代价:J(mode)=D+λ*R,其中,D表示Distortion(失真),通常可以使用SSE指标来进行衡量,SSE是指重建图像块与源图像的差值的均方和;λ是拉格朗日乘子,R就是该模式下图像块编码所需的实际比特数,包括编码模式信息、运动信息、残差等所需的比特总和。在模式选择时,若使用RDO原则去对编码模式做比较决策,通常可以保证编码性能最佳。
视频编码框架:参见图1所示,可以使用视频编码框架实现本申请实施例的编码端处理流程,视频解码框架的示意图与图1类似,在此不再赘述,可以使用视频解码框架实现本申请实施例的解码端处理流程。示例性的,在视频编码框架和视频解码框架中,可以包括但不限于帧内预测/帧间预测、运动估计/运动补偿、参考图像缓冲器、环内滤波、重建、变换、量化、反变换、反量化、熵编码器等模块。在编码端,通过这些模块之间的配合,可以实现编码端处理流程,在解码端,通过这些模块之间的配合,可以实现解码端处理流程。
在相关技术中,当前块可以为矩形,而实际物体的边缘往往不是矩形,因此,对于物体的边缘来说,往往存在两个不同对象(如存在前景的物体和背景等)。当两个对象的运动不一致时,则矩形划分不能很好的将这两个对象进行分割,为此,可以将当前块划分为两个非矩形子块,并对两个非矩形子块进行加权预测。示例性的,加权预测是利用多个预测值进行加权操作,从而获得最终预测值,加权预测可以包括:帧间和帧内的联合加权预测,帧间和帧间的联合加权预测,帧内和帧内的联合加权预测等。针对加权预测的权重值,可以为当前块的不同像素位置配置相同权重值,也可以为当前块的不同像素位置配置不同权重值。
参见图2A所示,为帧间帧内联合加权预测的示意图。
CIIP(Combined inter/intra prediction,帧间帧内联合预测)预测块由帧内预测块(即采用帧内预测模式得到像素位置的帧内预测值)和帧间预测块(即采用帧间预测模式得到像素位置的帧间预测值)加权得到,每个像素位置采用的帧内预测值与帧间预测值的权重比是1:1。例如,针对每个像素位置,将该像素位置的帧内预测值与该像素位置的帧间预测值进行加权,得到该像素位置的联合预测值,最终将每个像素位置的联合预测值组成CIIP预测块。
参见图2B所示,为帧间三角划分加权预测(Triangular Partition Mode,TPM)的示意图。
TPM预测块由帧间预测块1(即采用帧间预测模式1得到像素位置的帧间预测值)和帧间预测块2(即采用帧间预测模式2得到像素位置的帧间预测值)组合得到。TPM预测块可以划分为两个区域,一个区域可以为帧间区域1,另一个区域可以为帧间区域2,TPM预测块的两个帧间区域可以呈非矩形分布,虚线分界线的角度可以为主对角线或者副对角线两种。
针对帧间区域1的每个像素位置,主要基于帧间预测块1的帧间预测值确定,例如,将该像素位置的帧间预测块1的帧间预测值与该像素位置的帧间预测块2的帧间预测值进行加权时,帧间预测块1的帧间预测值的权重值较大,帧间预测块2的帧间预测值的权重值较小(甚至为0),得到该像素位置的联合预测值。针对帧间区域2的每个像素位置,主要基于帧间预测块2的帧间预测值确定,例如,将该像素位置的帧间预测块1的帧间预测值与该像素位置的帧间预测块2的帧间预测值进行加权时,帧间预测块2的帧间预测值的权重值较大,帧间预测块1的帧间预测值的权重值较小(甚至为0),得到该像素位置的联合预测值。
参见图2C所示,为帧间帧内联合三角加权预测的示意图。通过对帧间帧内联合加权预测进行修改,使CIIP预测块的帧间区域和帧内区域呈现三角加权划分预测的权重分布。
CIIP预测块由帧内预测块(即采用帧内预测模式得到像素位置的帧内预测值)和帧间预测块(即采用帧间预测模式得到像素位置的帧间预测值)组合得到。CIIP预测块可以划分为两个区域,一个区域可以为帧内区域,另一个区域可以为帧间区域,CIIP预测块的帧间帧内可以呈非矩形分布,虚线分界线区域可采用混合加权方式或者直接进行分割,且该虚线分界线的角度可以为主对角线或者副对角线两种,帧内区域和帧间区域的位置可变。
针对帧内区域的每个像素位置,主要基于帧内预测值确定,例如,将该像素位置的帧内预测值与该像素位置的帧间预测值进行加权时,帧内预测值的权重值较大,帧间预测值的权重值较小,得到该像素位置的联合预测值。针对帧间区域的每个像素位置,主要基于帧间预测值确定,例如,将该像素位置的帧内预测值与该像素位置的帧间预测值进行加权时,帧间预测值的权重值较大,帧内预测值的权重值较小,得到该像素位置的联合预测值。
参见图2D所示,为帧间块几何分割模式(Geometrical partitioning for interblocks,GEO)的示意图,GEO模式用于利用一条分割线将帧间预测块划分为两个子块,不同于TPM模式,GEO模式可以采用更多的划分方向,GEO模式的加权预测过程与TPM模式类似。
GEO预测块由帧间预测块1(即采用帧间预测模式1得到像素位置的帧间预测值)和帧间预测块2(即采用帧间预测模式2得到像素位置的帧间预测值)组合得到。GEO预测块可以划分为两个区域,一个区域可以为帧间区域1,另一个区域可以为帧间区域2。
针对帧间区域1的每个像素位置,主要基于帧间预测块1的帧间预测值确定,例如,将该像素位置的帧间预测块1的帧间预测值与该像素位置的帧间预测块2的帧间预测值进行加权时,帧间预测块1的帧间预测值的权重值较大,帧间预测块2的帧间预测值的权重值较小。针对帧间区域2的每个像素位置,主要基于帧间预测块2的帧间预测值确定,例如,将该像素位置的帧间预测块1的帧间预测值与该像素位置的帧间预测块2的帧间预测值进行加权时,帧间预测块2的帧间预测值的权重值较大,帧间预测块1的帧间预测值的权重值较小。
示例性的,GEO预测块的权重值配置与像素位置离分割线的距离有关,参见图2E所示,像素位置A,像素位置B和像素位置C位于分割线右下侧,像素位置D,像素位置E和像素位置F位于分割线左上侧。对于像素位置A,像素位置B和像素位置C来说,帧间区域2的权重值排序为B≥A≥C,帧间区域1的权重值排序为C≥A≥B。对于像素位置D,像素位置E和像素位置F来说,帧间区域1的权重值排序为D≥F≥E,帧间区域2的权重值排序为E≥F≥D。上述方式需要计算像素位置与分割线的距离,继而确定像素位置的权重值。
针对上述各种情况,为了实现加权预测,均需要确定当前块的每个像素位置的权重值,并基于像素位置的权重值对该像素位置进行加权预测。但是,相关技术中,并没有配置权重值的有效方式,无法配置合理的权重值,导致预测效果不佳,编码性能差等问题。
针对上述发现,本申请实施例中提出权重值的导出方式,可以根据当前块外部的周边位置的参考权重值,确定当前块的每个像素位置的目标权重值,能够为每个像素位置配置合理的目标权重值,提高预测准确性,提高预测性能,提高编码性能,预测值更接近原始像素。
以下结合几个具体实施例,对本申请实施例中的编解码方法进行详细说明。
实施例1:参见图3所示,为编解码方法的流程示意图,该方法可以应用于解码端(也可以称为视频解码器)或者编码端(也可以称为视频编码器),该方法可以包括:
步骤301,在确定对当前块启动加权预测时,获取当前块的权重预测角度和权重配置参数,该权重配置参数包括权重变换率和权重变换的起始位置。权重变换的起始位置可以由如下参数的至少一个确定:当前块的权重预测角度,当前块的权重预测位置,当前块的尺寸。
示例性的,在需要对当前块进行预测时,解码端或者编码端可以先确定是否对当前块启动加权预测。若对当前块启动加权预测,则采用本申请实施例的编解码方法,即执行步骤301和后续步骤。若对当前块不启动加权预测,则实现方式本申请实施例中不做限制。
示例性的,在确定对当前块启动加权预测时,可以获取当前块的权重预测角度,当前块的权重预测位置,及当前块的权重变换率。然后,可以基于当前块的权重预测角度,当前块的权重预测位置和当前块的尺寸中的至少一个,确定当前块的权重变换的起始位置。至此,可以得到当前块的权重预测角度,当前块的权重变换率和当前块的权重变换的起始位置。
步骤302,根据当前块的权重配置参数为当前块外部的周边位置配置参考权重值。
示例性的,当前块外部的周边位置的数量由如下参数的至少一个确定:当前块的尺寸,当前块的权重预测角度。例如,基于当前块的尺寸和/或当前块的权重预测角度确定当前块外部的周边位置的数量M,并根据当前块的权重配置参数为M个周边位置配置参考权重值。
示例性的,针对当前块外部的周边位置,可以根据该周边位置的坐标值,该权重变换的起始位置的坐标值,以及该权重变换率,配置该周边位置的参考权重值。针对该周边位置的坐标值和该权重变换的起始位置的坐标值,与像素坐标值可以不在同一坐标系中,即配置周边位置的参考权重值是个独立操作,当确定像素位置对应的参考权重时,才在同一坐标系。
示例性的,当前块外部的周边位置的参考权重值可以单调递增;或,当前块外部的周边位置的参考权重值可以单调递减。例如,当前块外部的周边位置的参考权重值的排布可以为00…0024688…88,或,当前块外部的周边位置的参考权重值的排布可以为88…8864200…00。
示例性的,当前块外部的周边位置可以包括但不限于:当前块外部上侧一行的周边位置,或者,当前块外部左侧一列的周边位置。当然,上述只是周边位置的示例,对此不做限制。
若当前块外部的周边位置包括当前块外部上侧一行的周边位置,则从左到右的顺序上的参考权重值,可以是单调递增或单调递减。或者,若当前块外部的周边位置包括当前块外部左侧一列的周边位置,则从上到下的顺序上的参考权重值,可以是单调递增或单调递减。
示例性的,当前块外部的周边位置可以包括目标区域,目标区域的第一邻近区域,目标区域的第二邻近区域。示例性的,第一邻近区域的参考权重值均为第一参考权重值,第二邻近区域的参考权重值均为第二参考权重值,且该第一参考权重值与该第二参考权重值不同。示例性的,目标区域可以包括一个参考权重值或至少两个参考权重值;若目标区域包括至少两个参考权重值,则目标区域的至少两个参考权重值单调递增或单调递减。
示例性的,若当前块支持权重变换率切换模式,则采用如下方式获取当前块的权重变换率:获取当前块的权重变换率指示信息;根据该权重变换率指示信息获取当前块的权重变换率;若权重变换率指示信息为第一指示信息,则当前块的权重变换率为第一权重变换率;若权重变换率指示信息为第二指示信息,则当前块的权重变换率为第二权重变换率。当前块的权重变换率指示信息可以为当前块对应的权重变换率切换标识,第一指示信息用于指示当前块不需要进行权重变换率切换,第二指示信息用于指示当前块需要进行权重变换率切换。
示例性的,当前块的权重预测角度为水平角度;或者,当前块的权重预测角度为垂直角度;或者,当前块的权重预测角度的斜率的绝对值为2的n次方,n为整数。
步骤303,针对当前块的每个像素位置,根据当前块的权重预测角度从当前块外部的周边位置中确定该像素位置指向的周边匹配位置;根据该周边匹配位置关联的参考权重值确定该像素位置的目标权重值,根据该像素位置的目标权重值确定该像素位置的关联权重值。
示例性的,权重预测角度表示当前块内部的像素位置所指向的角度方向,例如,基于某一种权重预测角度,该权重预测角度对应的角度方向指向当前块的某个外部周边位置。基于此,针对当前块的每个像素位置,基于该权重预测角度确定该像素位置所指向的角度方向,继而根据该角度方向从当前块外部的周边位置中确定该像素位置指向的周边匹配位置。
针对当前块的每个像素位置,在确定该像素位置指向的周边匹配位置后,基于该周边匹配位置关联的参考权重值确定该像素位置的目标权重值,例如,将该周边匹配位置关联的参考权重值确定为该像素位置的目标权重值。然后,根据该像素位置的目标权重值确定该像素位置的关联权重值,例如,每个像素位置的目标权重值与关联权重值的和,可以均为固定的预设数值,因此,关联权重值可以为预设数值与目标权重值之差。假设预设数值为8,像素位置的目标权重值为0,则该像素位置的关联权重值为8;若像素位置的目标权重值为1,则该像素位置的关联权重值为7,以此类推,只要目标权重值与关联权重值之和为8即可。
示例性的,当前块外部的周边位置可以包括整像素位置,或亚像素位置,或整像素位置和亚像素位置,根据周边匹配位置关联的参考权重值确定该像素位置的目标权重值,可以包括:若周边匹配位置是亚像素位置,且该亚像素位置已设置参考权重值,则根据该亚像素位置的参考权重值确定该像素位置的目标权重值。若周边匹配位置是整像素位置,且该整像素位置已设置参考权重值,则根据该整像素位置的参考权重值确定该像素位置的目标权重值。
步骤304,获取为当前块创建的运动信息候选列表,该运动信息候选列表可以包括至少一个候选运动信息,且运动信息候选列表中的候选运动信息可以为单向运动信息。
示例性的,可以先获取待加入到当前块的运动信息候选列表中的至少一个可用运动信息,然后,可以基于所述至少一个可用运动信息获取为当前块创建的该运动信息候选列表。
示例性的,所述至少一个可用运动信息可以包括但不限于如下运动信息的至少一种:时域运动信息;空域运动信息;预设运动信息。当然,上述只是运动信息类型的几个示例。
步骤305,基于运动信息候选列表获取当前块的第一目标运动信息和第二目标运动信息。
示例性的,可以从运动信息候选列表中选择候选运动信息作为当前块的第一原始运动信息,并从运动信息候选列表中选择候选运动信息作为当前块的第二原始运动信息。根据第一原始运动信息确定当前块的第一目标运动信息;根据第二原始运动信息确定当前块的第二目标运动信息。例如,第一原始运动信息包括第一原始运动矢量,第一目标运动信息包括第一目标运动矢量,可以获取与第一原始运动矢量对应的第一运动矢量差;根据第一运动矢量差和第一原始运动矢量确定第一目标运动矢量,或将第一原始运动矢量确定为第一目标运动矢量。又例如,第二原始运动信息包括第二原始运动矢量,第二目标运动信息包括第二目标运动矢量,可以获取与第二原始运动矢量对应的第二运动矢量差;根据第二运动矢量差和第二原始运动矢量确定第二目标运动矢量,或将第二原始运动矢量确定为第二目标运动矢量。
示例性的,获取与第一原始运动矢量对应的第一运动矢量差,可以包括:获取第一运动矢量差的方向信息和幅值信息,并根据第一运动矢量差的方向信息和幅值信息确定第一运动矢量差。获取与第二原始运动矢量对应的第二运动矢量差,可以包括:获取第二运动矢量差的方向信息和幅值信息,并根据第二运动矢量差的方向信息和幅值信息确定第二运动矢量差。
步骤306,针对当前块的每个像素位置,根据当前块的第一目标运动信息确定该像素位置的第一预测值,根据当前块的第二目标运动信息确定该像素位置的第二预测值;根据该第一预测值,该目标权重值,该第二预测值和该关联权重值,确定该像素位置的加权预测值。
示例性的,假设目标权重值是第一目标运动信息对应的权重值,关联权重值是第二目标运动信息对应的权重值,则该像素位置的加权预测值可以为:(该像素位置的第一预测值*该像素位置的目标权重值+该像素位置的第二预测值*该像素位置的关联权重值)/固定的预设数值。或者,假设目标权重值是第二目标运动信息对应的权重值,关联权重值是第一目标运动信息对应的权重值,则该像素位置的加权预测值可以为:(该像素位置的第二预测值*该像素位置的目标权重值+该像素位置的第一预测值*该像素位置的关联权重值)/固定的预设数值。
步骤307,根据当前块的所有像素位置的加权预测值确定当前块的加权预测值。
例如,将当前块的所有像素位置的加权预测值组成当前块的加权预测值。
示例性的,根据当前块的所有像素位置的加权预测值确定当前块的加权预测值之后,针对当前块的每个运动信息存储单元,根据运动信息存储单元的坐标,当前块的权重预测角度和当前块外部的周边位置的参考权重值确定该运动信息存储单元的存储方式;基于该运动信息存储单元的存储方式,将第一目标运动信息存储为该运动信息存储单元的目标运动信息,或将第二目标运动信息存储为该运动信息存储单元的目标运动信息。
在另一种可能的实施方式中,针对当前块的每个运动信息存储单元,根据运动信息存储单元的坐标,权重预测角度和权重预测位置确定该运动信息存储单元的存储方式;基于该运动信息存储单元的存储方式,将第一目标运动信息存储为该运动信息存储单元的目标运动信息,或将第二目标运动信息存储为该运动信息存储单元的目标运动信息。
示例性的,上述执行顺序只是为了方便描述给出的示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。
由以上技术方案可见,本申请实施例中,提出一种配置权重值的有效方式,能够为当前块的每个像素位置配置合理的目标权重值,从而提高预测的准确性,提高预测性能,提高编码性能,能够使当前块的预测值加更接近原始像素,并带来编码性能的提高。
实施例2:本申请实施例提出另一种编解码方法,可以应用于编码端,该方法包括:
步骤a1,在确定对当前块启动加权预测时,编码端获取当前块的权重预测角度,当前块的权重预测位置,及当前块的权重变换率。示例性的,编码端确定是否对当前块启动加权预测,如果是,则执行步骤a1及后续步骤,如果否,则处理方式本申请不做限制。
在一种可能的实施方式中,若当前块满足启动加权预测的条件,则确定对当前块启动加权预测。若当前块不满足启动加权预测的条件,则确定不对当前块启动加权预测。例如,判断当前块的特征信息是否满足特定条件。如果是,确定对当前块启动加权预测;如果否,确定对当前块不启动加权预测。特征信息包括但不限于以下之一或任意组合:当前块所在当前帧的帧类型,当前块的尺寸信息,开关控制信息。开关控制信息可以包括但不限于:序列级(SPS、SH)开关控制信息,或,图像级(PPS、PH)开关控制信息,或,片级(Slice、Tile、Patch),或,最大编码单元级(LCU、CTU),或块级(CU、PU、TU)开关控制信息。
例如,若特征信息为当前块所在当前帧的帧类型,当前块所在当前帧的帧类型满足特定条件,可以包括但不限于:若当前块所在当前帧的帧类型为B帧,则确定帧类型满足特定条件。或者,若当前块所在当前帧的帧类型为I帧,则确定帧类型满足特定条件。
例如,若特征信息为当前块的尺寸信息,如宽度和高度,尺寸信息满足特定条件包括但不限于:若宽度大于或等于第一数值,高度大于或等于第二数值,确定当前块的尺寸信息满足特定条件。或,若宽度大于或等于第三数值,高度大于或等于第四数值,宽度小于或等于第五数值,高度小于或等于第六数值,确定当前块的尺寸信息满足特定条件。或,若宽度和高度的乘积大于或等于第七数值,确定当前块的尺寸信息满足特定条件。上述数值可以根据经验配置,如8、16、32、64、128等。比如说,第一数值为8,第二数值为8,第三数值为8,第四数值为8,第五数值为64,第六数值为64,第七数值为64。综上所述,若宽度大于或等于8,高度大于或等于8,确定当前块的尺寸信息满足特定条件。或,若宽度大于或等于8,高度大于或等于8,宽度小于或等于64,高度小于或等于64,确定当前块的尺寸信息满足特定条件。或,若宽度和高度的乘积大于或等于64,确定当前块的尺寸信息满足特定条件。
例如,若特征信息为当前块的尺寸信息,如当前块的宽度和高度,则当前块的尺寸信息满足特定条件,可以包括但不限于:宽度不小于a,且不大于b,高度不小于a,且不大于b。a可以小于或等于16,b可以大于或等于16。例如,a等于8,b等于64或者b等于32。
例如,若特征信息为开关控制信息,则该开关控制信息满足特定条件,可以包括但不限于:若开关控制信息为允许当前块启用加权预测,则确定该开关控制信息满足特定条件。
例如,若特征信息为当前块所在当前帧的帧类型,当前块的尺寸信息,则帧类型满足特定条件,且尺寸信息满足特定条件时,可以确定当前块的特征信息满足特定条件。或者,若特征信息为当前块所在当前帧的帧类型,开关控制信息,则帧类型满足特定条件,且开关控制信息满足特定条件时,可以确定当前块的特征信息满足特定条件。或者,若特征信息为当前块的尺寸信息、开关控制信息,则尺寸信息满足特定条件,且开关控制信息满足特定条件时,可以确定当前块的特征信息满足特定条件。或者,若特征信息为当前块所在当前帧的帧类型、当前块的尺寸信息、开关控制信息,则帧类型满足特定条件,尺寸信息满足特定条件,且开关控制信息满足特定条件时,可以确定当前块的特征信息满足特定条件。
在一种可能的实施方式中,在确定对当前块启动加权预测时,编码端可以获取当前块的权重预测角度,当前块的权重预测位置,及当前块的权重变换率。
示例性的,权重预测角度表示当前块内部的像素位置所指向的角度方向,参见图4A所示,基于某一种权重预测角度,示出了当前块内部的像素位置(如像素位置1、像素位置2和像素位置3)所指向的角度方向,该角度方向指向当前块外部的某个周边位置。参见图4B所示,基于另一种权重预测角度,示出了当前块内部的像素位置(如像素位置2、像素位置3和像素位置4)所指向的角度方向,该角度方向指向当前块外部的某个周边位置。
示例性的,权重预测位置(也可以称为距离参数)用于配置当前块外部周边位置的参考权重值。例如,根据当前块的权重预测角度、当前块的尺寸等参数,确定当前块外部的周边位置的范围(即当前块外部的周边位置的数量),参见图4A或者图4B所示。
然后,将周边位置的范围进行N等分,N的取值可以任意配置,如4、6、8等,以8为例进行说明,权重预测位置用于表示当前块外部的哪个周边位置作为当前块的权重变换的起始位置,从而根据权重变换的起始位置配置当前块外部的周边位置的参考权重值。
参见图4C所示,在将所有周边位置8等分后,可以得到7个权重预测位置。在此基础上,当权重预测位置为0时,可以表示周边位置a0(即虚线0指向的周边位置,在实际应用中,并不存在虚线0,虚线0只是为了方便理解给出的示例,虚线0-虚线6用于将所有周边位置8等分)作为当前块外部周边位置的权重变换的起始位置。以此类推,当权重预测位置为6时,表示周边位置a6作为当前块外部周边位置的权重变换的起始位置。
针对不同的权重预测角度,N的取值可以不同,例如,针对权重预测角度A,N的取值为6,表示将基于权重预测角度A确定的周边位置的范围进行6等分,针对权重预测角度B,N的取值为8,表示将基于权重预测角度B确定的周边位置的范围进行8等分。
针对不同的权重预测角度,N的取值也可以相同,在N的取值相同的情况下,权重预测位置数量可以不同,如针对权重预测角度A,N的取值为8,表示将基于权重预测角度A确定的周边位置的范围进行8等分,针对权重预测角度B,N的取值为8,表示将基于权重预测角度B确定的周边位置的范围进行8等分,但是,权重预测角度A对应的权重预测位置选择a1至a5共5个位置,权重预测角度B对应的权重预测位置选择a0至a6共7个位置。
上述是以将周边位置的范围进行N等分为例,在实际应用中,还可以采用不均匀的划分方式,比如说,将周边位置的范围划分成N份,而不是N等分,对此不做限制。
在将所有的周边位置8等分后,可以得到7个权重预测位置,步骤a1中,编码端可以从7个权重预测位置中获取一个权重预测位置,也可以从7个权重预测位置中选择部分权重预测位置(如5个权重预测位置),从5个权重预测位置获取一个权重预测位置。
示例性的,权重变换率表示当前块外部的周边位置的参考权重值的变换率,用于表示参考权重值的变化速度,权重变换率可以是不为0的任意数,如权重变换率可以是-4、-2、-1、1、2、4、0.5、0.75、1.5等。权重变换率的绝对值为1时,即权重变换率为-1或者1,用于表示参考权重值的变化速度为1,参考权重值从0到8需要经过0,1,2,3,4,5,6,7,8等数值,参考权重值从8到0需要经过8,7,6,5,4,3,2,1,0等数值。权重变换率的绝对值为2时,即权重变换率为-2或者2,用于表示参考权重值的变化速度为2,参考权重值从0到8需要经过0,2,4,6,8等数值,参考权重值从8到0需要经过8,6,4,2,0等数值。权重变换率的绝对值为4时,即权重变换率为-4或者4,用于表示参考权重值的变化速度为4,参考权重值从0到8需要经过0,4,8等数值,参考权重值从8到0需要经过8,4,0等数值。权重变换率的绝对值为0.5时,即权重变换率为-0.5或者0.5,用于表示参考权重值的变化速度为0.5,参考权重从0到8需要经过0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8等数值,参考权重从8到0需要经过8,8,7,7,6,6,5,5,4,4,3,3,2,2,1,1,0,0等数值。当然,上述举例为从0到8,可以将0和8替换为任意数。
步骤a2,编码端根据当前块的权重变换率和权重变换的起始位置(权重变换率和权重变换的起始位置可以称为权重配置参数)为当前块外部的周边位置配置参考权重值。
示例性的,权重变换的起始位置可以由如下参数的至少一个确定:当前块的权重预测角度,当前块的权重预测位置,当前块的尺寸,因此,可以基于当前块的权重预测角度,当前块的权重预测位置和当前块的尺寸中的至少一个,确定当前块的权重变换的起始位置。然后,根据当前块的权重变换率和权重变换的起始位置为当前块外部的周边位置配置参考权重值。
步骤a3,针对当前块的每个像素位置,编码端根据当前块的权重预测角度从当前块外部的周边位置中确定该像素位置指向的周边匹配位置。为了区分方便,本实施例中,可以将该像素位置指向的当前块外部的周边位置,称为该像素位置的周边匹配位置。
示例性的,由于权重预测角度表示当前块内部的像素位置所指向的角度方向,因此,针对当前块的每个像素位置,基于该权重预测角度确定该像素位置所指向的角度方向,继而根据该角度方向从当前块外部的周边位置中确定该像素位置指向的周边匹配位置。
当前块外部的周边位置可以包括:当前块外部上侧一行的周边位置(即像素位置),如当前块外部上侧第n1行的周边位置,n1可以为1,也可以为2、3等,对此不做限制。或者,当前块外部左侧一列的周边位置(即像素位置),如当前块外部左侧第n2列的周边位置,n2可以为1,也可以为2、3等,对此不做限制。当然,上述只是周边位置的几个示例,对此不做限制。示例性的,当前块外部周边位置可以位于像素位置之间,即亚像素位置,此时,当前块的位置不能简单描述为第x行,而是位于第x行与第y行之间的亚像素位置行。
示例性的,针对当前块外部周边位置的范围,可以预先指定某个范围是当前块外部的周边位置的范围;或者,可以根据权重预测角度确定当前块外部的周边位置的范围,例如,根据权重预测角度确定当前块内部的每个像素位置指向的周边位置,所有像素位置指向的周边位置的边界,可以是当前块外部的周边位置的范围,对此周边位置的范围不做限制。
当前块外部周边位置可以包括整像素位置;或者,当前块外部周边位置可以包括非整像素位置,非整像素位置可以为亚像素位置,如1/2亚像素位置,1/4亚像素位置,3/4亚像素位置等,对此不做限制;或者,当前块外部周边位置可以包括整像素位置和亚像素位置。
示例性的,当前块外部的两个周边位置,可以对应一个整像素位置;或者,当前块外部的四个周边位置,可以对应一个整像素位置;或者,当前块外部的一个周边位置,可以对应一个整像素位置;或者,当前块外部的一个周边位置,可以对应两个整像素位置。当然,上述只是几个示例,对此不做限制,周边位置与整像素位置的关系可以任意配置。
参见图4A和图4B所示,是一个周边位置对应一个整像素位置,参见图4D所示,是两个周边位置对应一个整像素位置,对于其它情况,本实施例中不再赘述。
步骤a4,编码端根据周边匹配位置关联的参考权重值确定该像素位置的目标权重值。
针对当前块的每个像素位置,在确定该像素位置指向的周边匹配位置后,编码端确定该周边匹配位置关联的参考权重值,并根据该周边匹配位置关联的参考权重值确定该像素位置的目标权重值,例如,将该周边匹配位置关联的参考权重值确定为该像素位置的目标权重值。
编码端根据周边匹配位置关联的参考权重值确定该像素位置的目标权重值,可以包括:若该周边匹配位置是亚像素位置,且该亚像素位置已设置参考权重值,则根据该亚像素位置的参考权重值确定该像素位置的目标权重值。若该周边匹配位置是整像素位置,且该整像素位置已设置参考权重值,则根据该整像素位置的参考权重值确定该像素位置的目标权重值。
步骤a5,编码端根据该像素位置的目标权重值确定该像素位置的关联权重值。
示例性的,针对每个像素位置来说,该像素位置的目标权重值与该像素位置的关联权重值的和,可以为固定的预设数值,即关联权重值可以为预设数值与目标权重值之差。基于此,假设预设数值为8,该像素位置的目标权重值为2,则该像素位置的关联权重值为6。
步骤a6,编码端获取为当前块创建的运动信息候选列表,该运动信息候选列表可以包括至少一个候选运动信息(为了区分方便,将运动信息候选列表中的运动信息记为候选运动信息);基于该运动信息候选列表获取当前块的第一目标运动信息和第二目标运动信息。
步骤a7,针对当前块的每个像素位置,编码端根据当前块的第一目标运动信息确定该像素位置的第一预测值,并根据当前块的第二目标运动信息确定该像素位置的第二预测值。
步骤a8,编码端根据该像素位置的第一预测值,该像素位置的目标权重值,该像素位置的第二预测值和该像素位置的关联权重值,确定该像素位置的加权预测值。
例如,该像素位置的加权预测值可以为:(该像素位置的第一预测值*该像素位置的目标权重值+该像素位置的第二预测值*该像素位置的关联权重值)/固定的预设数值。
步骤a9,编码端根据当前块的所有像素位置的加权预测值确定当前块的加权预测值。
实施例3:本申请实施例提出另一种编解码方法,可以应用于解码端,该方法包括:
步骤b1,在确定对当前块启动加权预测时,解码端获取当前块的权重预测角度,当前块的权重预测位置,及当前块的权重变换率。示例性的,解码端确定是否对当前块启动加权预测,如果是,则执行步骤b1及后续步骤,如果否,则处理方式本申请不做限制。
在一种可能的实施方式中,编码端判断当前块的特征信息是否满足特定条件,如果是,则确定对当前块启动加权预测。解码端也判断当前块的特征信息是否满足特定条件,如果是,则确定对当前块启动加权预测;如果否,则确定不对当前块启动加权预测。关于解码端如何基于特征信息确定当前块是否启动加权预测,与编码端的确定方式类似,在此不再重复赘述。
在另一种可能的实施方式中,编码端根据当前块的特征信息确定当前块是否支持加权预测,在当前块支持加权预测时,还可以采用其它策略确定是否对当前块启动加权预测,如采用率失真原则确定是否对当前块启动加权预测。在确定是否对当前块启动加权预测后,编码端发送当前块的编码比特流时,编码比特流可以包括是否启动加权预测的语法,该语法表示当前块是否启动加权预测。解码端根据当前块的特征信息确定当前块是否支持加权预测,具体方式与编码端的确定方式类似,在此不再赘述。在当前块支持加权预测时,解码端可以从编码比特流中解析出是否启动加权预测的语法,根据该语法确定是否对当前块启动加权预测。
示例性的,在确定对当前块启动加权预测时,解码端还可以获取当前块的权重预测角度,当前块的权重预测位置,及当前块的权重变换率,关于该权重预测角度,该权重预测位置及该权重变换率的相关说明,可以参见上述实施例2的步骤a1,在此不再重复赘述。
步骤b2,解码端根据当前块的权重变换率和权重变换的起始位置(权重变换率和权重变换的起始位置可以称为权重配置参数)为当前块外部的周边位置配置参考权重值。
示例性的,解码端可以基于当前块的权重预测角度,当前块的权重预测位置和当前块的尺寸中的至少一个,确定当前块的权重变换的起始位置。然后,解码端根据当前块的权重变换率和权重变换的起始位置为当前块外部的周边位置配置参考权重值。
步骤b3,针对当前块的每个像素位置,解码端可以根据该当前块的权重预测角度从该当前块外部的周边位置中确定出与该像素位置指向的周边匹配位置。
步骤b4,解码端根据该周边匹配位置关联的参考权重值确定该像素位置的目标权重值。
步骤b5,解码端根据该像素位置的目标权重值确定该像素位置的关联权重值。
步骤b6,解码端为当前块创建的运动信息候选列表,该运动信息候选列表包括至少一个候选运动信息;基于运动信息候选列表获取当前块的第一目标运动信息和第二目标运动信息。
步骤b7,针对当前块的每个像素位置,解码端根据当前块的第一目标运动信息确定该像素位置的第一预测值,并根据当前块的第二目标运动信息确定该像素位置的第二预测值。
步骤b8,解码端根据该像素位置的第一预测值,该像素位置的目标权重值,该像素位置的第二预测值和该像素位置的关联权重值,确定该像素位置的加权预测值。
步骤b9,解码端根据当前块的所有像素位置的加权预测值确定当前块的加权预测值。
示例性的,针对步骤b2-步骤b9,其实现过程可以参见步骤a2-步骤a9,不同之处在于,步骤b2-步骤b9是解码端的处理流程,而不是编码端的处理流程,在此不再赘述。
实施例4:在实施例1-实施例3中,需要基于权重预测角度进行加权处理,可以将这种加权处理方式记为帧间角度加权预测(Angular Weighted Prediction,AWP)模式,即,在当前块支持AWP模式时,采用实施例1-实施例3对当前块进行预测,得到当前块的预测值。
实施例1-实施例3涉及权重预测角度,该权重预测角度可以是任意角度,如180度内任意角度,或,360度内任意角度,对此权重预测角度不做限制,如10度,20度,30度等。
在一种可能的实施方式中,该权重预测角度可以为水平角度;或者,该权重预测角度可以为垂直角度;或者,该权重预测角度的斜率的绝对值(权重预测角度的斜率的绝对值也就是权重预测角度的tan值)可以为2的n次方,n为整数,如正整数,0,负整数等。
例如,该权重预测角度的斜率的绝对值可以为1(即2的0次方),或者为2(即2的1次方),或者为1/2(即2的-1次方),或者为4(即2的2次方),或者为1/4(即2的-2次方),或者为8(即2的3次方),或者为1/8(即2的-3次方)等。示例性的,参见图5所示,示出了8种权重预测角度,这些权重预测角度的斜率的绝对值为2的n次方。
本申请实施例中,可以对权重预测角度进行移位操作,关于对权重预测角度进行移位操作的例子参见后续实施例,因此,在权重预测角度的斜率的绝对值为2的n次方时,在对权重预测角度进行移位操作时,可以避免出现除法操作,从而方便的进行移位实现。
示例性的,不同块尺寸(即当前块的尺寸)支持的权重预测角度的数量可以相同或者不同。例如,块尺寸A支持8种权重预测角度,块尺寸B和块尺寸C支持6种权重预测角度等。
实施例5:在上述实施例1-实施例3中,编码端/解码端可以根据当前块的权重变换率和当前块的权重变换的起始位置为当前块外部的周边位置配置参考权重值。在一种可能的实施方式中,可以采用如下方式:针对当前块外部的每个周边位置,根据该周边位置的坐标值,该权重变换的起始位置的坐标值,以及该权重变换率,配置该周边位置的参考权重值。针对每个周边位置,若该周边位置是当前块外部上侧一行的周边位置,则该周边位置的坐标值是横坐标值,权重变换的起始位置的坐标值是横坐标值。若该周边位置是当前块外部左侧一列的周边位置,则该周边位置的坐标值是纵坐标值,权重变换的起始位置的坐标值是纵坐标值。
示例性的,可以将当前块左上角的像素位置(如左上角的第一个像素位置)作为坐标原点,当前块的周边位置的坐标值(如横坐标值或纵坐标值)和权重变换的起始位置的坐标值(如横坐标值或纵坐标值),均是相对于该坐标原点的坐标值。当然,也可以将当前块的其它像素位置作为坐标原点,实现方式与左上角的像素位置作为坐标原点的实现方式类似。
在一种可能的实施方式中,确定周边位置的坐标值与权重变换的起始位置的坐标值的差值,确定该差值与当前块的权重变换率的乘积值。若乘积值小于第一数值(参考权重值的最小值,如0),确定该周边位置关联的参考权重值为第一数值;若乘积值大于第二数值(参考权重值的最大值,如8),确定该周边位置关联的参考权重值为第二数值;若乘积值不小于第一数值,且该乘积值不大于第二数值,确定该周边位置关联的参考权重值为该乘积值。
还可以根据周边位置的坐标值与权重变换的起始位置的坐标值的大小关系,确定周边位置关联的参考权重值。例如,若周边位置的坐标值小于权重变换的起始位置的坐标值,确定周边位置关联的参考权重值为第一数值;若周边位置的坐标值不小于权重变换的起始位置的坐标值,确定周边位置关联的参考权重值为第二数值。又例如,若周边位置的坐标值小于权重变换的起始位置的坐标值,确定周边位置关联的参考权重值为第二数值;若周边位置的坐标值不小于权重变换的起始位置的坐标值,确定周边位置关联的参考权重值为第一数值。
在上述实施例中,第一数值和第二数值均可以根据经验配置,且第一数值小于第二数值,对此第一数值和第二数值均不做限制。例如,第一数值是预先约定的参考权重值的最小值,如0,第二数值是预先约定的参考权重值的最大值,如8,当然,0和8也只是示例。
示例性的,参见图4C所示,在将所有的周边位置8等分后,可以得到7个权重预测位置,当权重预测位置为0时,表示周边位置a0,权重变换的起始位置的坐标值为周边位置a0的坐标值。当权重预测位置为1时,表示周边位置a1,权重变换的起始位置的坐标值为周边位置a1的坐标值,以此类推,关于权重变换的起始位置的坐标值的确定方式,在此不再赘述。
实施例6:在实施例1-实施例3中,编码端/解码端根据当前块的权重变换率和当前块的权重变换的起始位置为当前块外部的周边位置配置参考权重值。在一种可能的实施方式,可以采用如下方式:获取当前块的权重预测角度、当前块的权重变换率和当前块的权重预测位置,基于当前块的权重预测位置确定当前块的权重变换的起始位置,基于该权重变换的起始位置和该权重变换率确定权重配置参数,即该权重配置参数包括权重变换的起始位置和权重变换率。根据该权重配置参数确定当前块外部的周边位置的参考权重值。例如,采用如下方式确定参考权重值:y=Clip3(最小值,最大值,a*(x-s)),x表示周边位置的索引,a表示权重变换率,s表示权重变换的起始位置。综上所述,针对当前块外部的每个周边位置,根据该周边位置的索引,权重变换的起始位置以及该权重变换率,配置该周边位置的参考权重值。
以下结合具体步骤,对为当前块外部的周边位置配置参考权重值的过程进行说明。
步骤c1、获取有效数量个参考权重值。
示例性的,当前块外部的周边位置的数量为有效数量,步骤c1中,需要获取有效数量个参考权重值,该有效数量可以是基于当前块的尺寸和/或当前块的权重预测角度确定。例如,采用如下方式确定该有效数量:ValidLenth=(N+(M>>X))<<1,N和M分别是当前块的高和宽,X为当前块的权重预测角度的斜率的绝对值的log2对数值,如0或1。
在一种可能的实施方式中,针对有效数量个参考权重值,可以单调递增或单调递减。或,针对有效数量个参考权重值,可以先包括多个第一数值再包括多个第二数值,或,针对有效数量个参考权重值,可以先包括多个第二数值再包括多个第一数值。若当前块外部的周边位置包括当前块外部上侧一行的像素位置,则从左到右的顺序上的参考权重值,单调递增或单调递减。若当前块外部的周边位置包括当前块外部左侧一列的像素位置,则从上到下的顺序上的参考权重值,单调递增或单调递减。以下结合几个具体情况,对此进行说明。
情况1:针对有效数量个参考权重值,可以单调递增,或,单调递减。例如,有效数量个参考权重值可以为[88...88765432100...00],即单调递减。又例如,有效数量个参考权重值可以为[00...00123456788...88],即单调递增。当然,上述只是示例,对此不做限制。
示例性的,参考权重值可以是根据权重配置参数配置的,该权重配置参数可以包括权重变换率和权重变换的起始位置,权重变换率的获取方式可以参见后续实施例,权重变换的起始位置可以是根据经验配置的数值,也可以由权重预测位置确定权重变换的起始位置,还可以由权重预测角度和权重预测位置确定权重变换的起始位置,对此不做限制。
针对有效数量个参考权重值,按照从第一个到最后一个的顺序,可以单调递增或者单调递减。例如,参考权重值的最大值为M1,参考权重值的最小值为M2,针对有效数量个参考权重值,从最大值M1至最小值M2单调递减;或,从最小值M2至最大值M1单调递增。假设M1为8,M2为0,则多个参考权重值,可以从8至0单调递减;或从0至8单调递增。
示例性的,可以先获取权重变换率和权重变换的起始位置,然后,根据权重变换率和权重变换的起始位置,确定多个参考权重值。例如,采用如下方式确定参考权重值:y=Clip3(最小值,最大值,a*(x-s)),x表示周边位置的索引,即x的取值范围是1-有效数量值,如x为1,表示第1个周边位置,y表示第1个周边位置的参考权重值,x为2,表示第2个周边位置,y表示第2个周边位置的参考权重值。a表示权重变换率,s表示权重变换的起始位置。
Clip3用于限制参考权重值位于最小值与最大值之间,最小值和最大值均可以根据经验配置,为了方便描述,在后续过程中,以最小值为0,最大值为8为例进行说明。
a表示权重变换率,a可以是不为0的整数,如a可以是-4、-2、-1、1、2、4等,对此a的取值不做限制。若a的绝对值为1,则参考权重值从0到8需要经过0,1,2,3,4,5,6,7,8,或者,参考权重值从8到0需要经过8,7,6,5,4,3,2,1,0。
s表示权重变换的起始位置,s可以由权重预测位置确定,例如,s=f(权重预测位置),即s是一个与权重预测位置有关的函数。例如,在当前块外部的周边位置的范围确定后,可以确定周边位置的有效数量,并将所有周边位置进行N等分,N的取值可以任意配置,如4、6、8等,而权重预测位置用于表示采用当前块外部的哪个周边位置作为当前块的目标周边区域,而这个权重预测位置对应的周边位置就是权重变换的起始位置。或者,s可以由权重预测角度和权重预测位置确定,例如,s=f(权重预测角度,权重预测位置),即s是一个与权重预测角度和权重预测位置有关的函数。例如,可以根据权重预测角度确定当前块外部的周边位置的范围,在当前块外部的周边位置的范围确定后,可以确定周边位置的有效数量,并将所有周边位置进行N等分,权重预测位置用于表示采用当前块外部的哪个周边位置作为当前块的目标周边区域,而这个权重预测位置对应的周边位置就是权重变换的起始位置。
综上所述,在y=Clip3(最小值,最大值,a*(x-s))中,权重变换率a和权重变换的起始位置s均为已知值,针对当前块外部的每个周边位置,可以通过该函数关系确定该周边位置的参考权重值。例如,假设权重变换率a为2,权重变换的起始位置s为2,则该函数关系可以为y=2*(x-2),针对当前块外部的每个周边位置x,可以得到参考权重值y。
综上所述,可以得到当前块的有效数量个参考权重值,这些参考权重值单调递增或单调递减。在一种可能的实施方式中,当前块外部的周边位置可以包括目标区域,目标区域的第一邻近区域,目标区域的第二邻近区域。目标区域可以包括一个参考权重值或至少两个参考权重值;若目标区域包括至少两个参考权重值,则目标区域的至少两个参考权重值单调递增或单调递减。单调递增可以是严格单调递增(即目标区域的至少两个参考权重值严格单调递增);单调递减可以是严格单调递减(即目标区域的至少两个参考权重值严格单调递减)。例如,目标区域的参考权重值从1-7单调递增,或目标区域的参考权重值从7-1单调递减。
示例性的,第一邻近区域的参考权重值均为第一参考权重值,第二邻近区域的参考权重值均为第二参考权重值,且该第一参考权重值与该第二参考权重值不同。例如,第一邻近区域的参考权重值均为0,目标区域包括至少两个参考权重值,参考权重值从1-7单调递增,第二邻近区域的参考权重值均为8,显然,第一邻近区域的参考权重值与第二邻近区域的参考权重值不同。又例如,第一邻近区域的参考权重值均为8,目标区域包括至少两个参考权重值,参考权重值从7-1单调递减,第二邻近区域的参考权重值均为0。
情况2:针对有效数量个参考权重值,可以先包括多个第一数值,再包括多个第二数值,或者,可以先包括多个第二数值,再包括多个第一数值。例如,有效数量个参考权重值可以为[88...8800...00]或[00...0088...88]。示例性的,可以根据权重变换的起始位置确定多个参考权重值。例如,权重变换的起始位置表示第s个参考权重值,因此,第s个参考权重值之前(不包括第s个参考权重值)的所有参考权重值为第一数值(如8),第s个参考权重值之后(包括第s个参考权重值)的所有参考权重值为第二数值(如0)。或者,第s个参考权重值之前的所有参考权重值为第二数值,第s个参考权重值之后的所有参考权重值为第一数值。
步骤c2,根据有效数量个参考权重值,配置当前块外部的周边位置的参考权重值。
示例性的,当前块外部的周边位置的数量为有效数量,且参考权重值的数量为有效数量,因此,可以将有效数量个参考权重值,配置为当前块外部的周边位置的参考权重值。
例如,可以将第1个参考权重值配置为当前块外部的第1个周边位置的参考权重值,将第2个参考权重值配置为当前块外部的第2个周边位置的参考权重值,以此类推。
综上所述,由于已经为当前块外部的周边位置配置参考权重值,即每个周边位置均具有参考权重值,因此,在从当前块外部的周边位置中确定像素位置指向的周边匹配位置后,可以确定该周边匹配位置关联的参考权重值,也就是该像素位置的目标权重值。
以下结合几个具体的应用场景,对上述过程的实施方式进行说明。示例性的,在后续几个应用场景中,假设当前块的尺寸为M*N,M为当前块的宽,N为当前块的高。X为权重预测角度的tan值的log2对数值,如0或者1。Y为权重预测位置的索引值,a,b,c,d为预设的常数值。ValidLenth表示有效数量,FirstPos表示权重变换的起始位置,ReferenceWeights[i]表示第i个周边位置的参考权重值,Clip3用于限制参考权重值位于最小值0与最大值8之间,i表示当前块外部的周边位置的索引,a表示权重变换率的绝对值。
应用场景1:基于当前块的尺寸和当前块的权重预测角度确定有效数量(也可以称为参考权重有效长度,即ValidLenth),并获取权重变换的起始位置(即FirstPos)。例如,可以通过如下公式确定ValidLenth:ValidLenth=(N+(M>>X))<<1;通过如下公式确定FirstPos:FirstPos=(ValidLength>>1)-a+Y*((ValidLength-1)>>3)。在此基础上,通过如下公式导出当前块的每个周边位置的参考权重值:ReferenceWeights[i]=Clip3(0,8,a*(i-FirstPos))。i的取值范围可以是0~ValidLength-1;或1~ValidLength。在得到当前块的周边位置的参考权重值ReferenceWeights[i]后,通过如下公式导出当前块的像素位置(x,y)的目标权重值:SampleWeight[x][y]=ReferenceWeights[(y<<1)+((x<<1)>>X)],<<表示左移,>>表示右移。
应用场景2:可以通过如下公式确定ValidLenth:ValidLenth=(N+(M>>X))<<1;通过如下公式确定FirstPos:FirstPos=(ValidLength>>1)-b+Y*((ValidLength-1)>>3)–((M<<1)>>X)。在此基础上,通过如下公式导出当前块的每个周边位置的参考权重值:ReferenceWeights[i]=Clip3(0,8,a*(i-FirstPos))。可以通过如下公式导出当前块的每个像素位置(x,y)的目标权重值:SampleWeight[x][y]=ReferenceWeights[(y<<1)-((x<<1)>>X)]。
应用场景3:可以通过如下公式确定ValidLenth:ValidLenth=(M+(N>>X))<<1;通过如下公式确定FirstPos:FirstPos=(ValidLength>>1)-c+Y*((ValidLength-1)>>3)–((N<<1)>>X)。在此基础上,可以通过如下公式导出当前块的每个周边位置的参考权重值:ReferenceWeights[i]=Clip3(0,8,a*(i-FirstPos))。可以通过如下公式导出当前块的每个像素位置(x,y)的目标权重值:SampleWeight[x][y]=ReferenceWeights[(x<<1)-((y<<1)>>X)]。
应用场景4:可以通过如下公式确定ValidLenth:ValidLenth=(M+(N>>X))<<1;可以通过如下公式确定FirstPos:FirstPos=(ValidLength>>1)-d+Y*((ValidLength-1)>>3);在此基础上,可以通过如下公式导出当前块的每个周边位置的参考权重值:ReferenceWeights[i]=Clip3(0,8,a*(i-FirstPos))。可以通过如下公式导出当前块的每个像素位置(x,y)的目标权重值:SampleWeight[x][y]=ReferenceWeights[(x<<1)+((y<<1)>>X)]。
应用场景5:参见图6所示,示出了四种权重变换率的参考权重值的示意图。
在权重变换率的绝对值为1时,即权重变换率为1或者权重变换率为-1,可以通过如下公式导出当前块的每个周边位置的参考权重值:ReferenceWeights[i]=Clip3(0,8,1*(i-FirstPos)),上述公式可以等价为ReferenceWeight[i]=Clip3(0,8,i–FirstPos)。在该情况中,参见图6所示的第一类情况,FirstPos可以为4,即第1个到第4个周边位置的参考权重值为0,第5个周边位置的参考权重值为1,第6个周边位置的参考权重值为2,以此类推。
在权重变换率的绝对值为2时,即权重变换率为2或者权重变换率为-2,通过如下公式导出当前块的每个周边位置的参考权重值:ReferenceWeights[i]=Clip3(0,8,2*(i-FirstPos)),上述公式可以等价为ReferenceWeight[i]=Clip3(0,8,(i–FirstPos)<<1)。在该情况中,参见图6所示的第二类情况,FirstPos可以为6,即第1个到第6个周边位置的参考权重值为0,第7个周边位置的参考权重值为2,第8个周边位置的参考权重值为4,以此类推。
在权重变换率的绝对值为4时,即权重变换率为4或者权重变换率为-4,可以通过如下公式导出当前块的每个周边位置的参考权重值:ReferenceWeights[i]=Clip3(0,8,4*(i-FirstPos)),上述公式可以等价为ReferenceWeight[i]=Clip3(0,8,(i–FirstPos)<<2)。在该情况中,参见图6所示的第三类情况,FirstPos可以为7,第1个到第7个周边位置的参考权重值为0,第8个周边位置的参考权重值为4,第9-17个周边位置的参考权重值为8,以此类推。
在权重变换率的绝对值为8时,即权重变换率为8或者权重变换率为-8,通过如下公式导出当前块的每个周边位置的参考权重值:ReferenceWeights[i]=Clip3(0,8,8*(i-FirstPos)),上述公式可以等价为ReferenceWeight[i]=Clip3(0,8,(i–FirstPos)<<3)。在该情况中,参见图6所示的第四类情况,FirstPos可以为8,即第1个到第8个周边位置的参考权重值为0,第9个周边位置的参考权重值为9,第10-17个周边位置的参考权重值为8,以此类推。
综上所述,在权重变换率的绝对值为1时,FirstPos为4,在权重变换率的绝对值为2时,FirstPos为6(即权重变换率1时的FirstPos+2),在权重变换率的绝对值为4时,FirstPos为7(即权重变换率1时的FirstPos+3),基于此,可以对齐参考权重值为4的位置。
示例性的,针对当前块来说,在支持权重变换率切换并启动权重变换率切换时,可以从图6所示的4类权重变换率的参考权重值分布示例中选择一种进行切换,从而通过对图像或者图像的局部区域进行权重变换率的切换,达到减弱一些图像显示场景中的图像显示的跳变突出。比如说,有一些图像显示场景中需要解决跳变比较突出的问题,AWP模式的权重变化率切换能够解决这个问题。例如,混合图像内容包括部分屏幕内容,动画片,包含动画片的图像等,可以对某个含有屏幕内容的区域进行权重变换率切换,解决跳变比较突出的问题。
在上述过程中,ValidLenth与当前块的权重预测角度和当前块的尺寸相关,为了方案简化,可以固化某些参数来达到优化目的,例如,可以将当前块的权重预测角度配置为固定参数值,ValidLenth只与当前块的尺寸相关。FirstPos与当前块的权重预测角度,当前块的尺寸,当前块的权重预测位置相关,为了方案简化,可以固化某些参数来达到优化目的,例如,可以将当前块的权重预测角度配置为固定参数值,FirstPos只与当前块的尺寸和当前块的权重预测位置相关。或,将当前块的权重预测位置配置为固定参数值,FirstPos只与当前块的尺寸和当前块的权重预测角度相关。或,将当前块的权重预测角度和当前块的权重预测位置均配置为固定参数值,这两个固定参数值可以相同或者不同,FirstPos只与当前块的尺寸相关。
实施例7:在实施例1-实施例3中,编码端/解码端可以根据当前块的权重变换率和当前块的权重变换的起始位置为当前块外部的周边位置配置参考权重值。在一种可能的实施方式中,记M和N是当前块的宽和高,角度加权预测模式(AWP)的权重阵列导出方式,包括:
步骤d1,根据AwpIdx获取stepIdx,angleIdx以及subAngleIdx等参数。
示例性的,AwpIdx表示权重预测位置和权重预测角度的索引值,假设存在7种权重预测位置,8种权重预测角度,则AwpIdx的取值范围是0-55。若权重预测位置为-3至3(表示第4个权重预测位置是中心,第4个权重预测位置为0),权重预测角度的索引为0-7,则AwpIdx的56个索引值对应的权重预测位置和权重预测角度的排列方式可以包括:
排列方式1:
{角度0,跨度-3},{角度1,跨度-3},...,{角度6,跨度-3},{角度7,跨度-3};
{角度0,跨度-2},{角度1,跨度-2},...,{角度6,跨度-2},{角度7,跨度-2};
{角度0,跨度-1},{角度1,跨度-1},...,{角度6,跨度-1},{角度7,跨度-1};
{角度0,跨度0},{角度1,跨度0},...,{角度6,跨度0},{角度7,跨度0};
{角度0,跨度1},{角度1,跨度1},...,{角度6,跨度1},{角度7,跨度1};
{角度0,跨度2},{角度1,跨度2},...,{角度6,跨度2},{角度7,跨度2};
{角度0,跨度3},{角度1,跨度3},...,{角度6,跨度3},{角度7,跨度3}。
排列方式2:
{角度0,跨度0},{角度1,跨度0},...,{角度6,跨度0},{角度7,跨度0};
{角度0,跨度-1},{角度1,跨度-1},...,{角度6,跨度-1},{角度7,跨度-1};
{角度0,跨度1},{角度1,跨度1},...,{角度6,跨度1},{角度7,跨度1};
{角度0,跨度-2},{角度1,跨度-2},...,{角度6,跨度-2},{角度7,跨度-2};
{角度0,跨度2},{角度1,跨度2},...,{角度6,跨度2},{角度7,跨度2};
{角度0,跨度-3},{角度1,跨度-3},...,{角度6,跨度-3},{角度7,跨度-3};
{角度0,跨度3},{角度1,跨度3},...,{角度6,跨度3},{角度7,跨度3}。
在上述排列方式1和排列方式2中,角度0表示8种权重预测角度中的第一种权重预测角度,角度1表示8种权重预测角度中的第二种权重预测角度,以此类推。
跨度0表示7种权重预测位置中的第4个权重预测位置(即处于中心的权重预测位置),跨度-1表示第4个权重预测位置左侧第一个权重预测位置(即表示7种权重预测位置中的第3个权重预测位置),跨度1表示第4个权重预测位置右侧第一个权重预测位置(即表示7种权重预测位置中的第5个权重预测位置),跨度-2表示第4个权重预测位置左侧第二个权重预测位置(即表示7种权重预测位置中的第2个权重预测位置),以此类推。
在排列方式1中,{角度0,跨度-3}对应的AwpIdx为0,{角度1,跨度-3}对应的AwpIdx为1,{角度2,跨度-3}对应的AwpIdx为2,以此类推,{角度7,跨度3}对应的AwpIdx为55,按照排列方式1的顺序,AwpIdx依次增加。在排列方式2中,{角度0,跨度0}对应的AwpIdx为0,{角度1,跨度0}对应的AwpIdx为2,{角度2,跨度0}对应的AwpIdx为3,以此类推,{角度7,跨度3}对应的AwpIdx为55,按照排列方式2的顺序AwpIdx依次增加。
显然,当AwpIdx的取值越小时,码率代价越小,当AwpIdx的取值越大时,码率代价越大,因此,AwpIdx的前面取值的码率代价会低于后面取值的码率代价。基于上述原因,在排列方式2中,考虑将“跨度0”的权重预测位置放置于最前面,即“跨度0”的权重预测位置与8种权重预测角度的组合,其AwpIdx的取值是前8种取值,其码率代价最小。又由于“跨度0”的权重预测位置被选中的概率较大,因此,排列方式2能够降低编码的码率代价
示例性的,stepIdx表示权重预测位置(即权重预测位置的索引值),权重预测位置的范围可以是-3至3。例如,针对第1个权重预测位置,权重预测位置为-3,针对第2个权重预测位置,权重预测位置为-2,以此类推,针对第7个权重预测位置,权重预测位置为3。
示例性的,angleIdx表示权重预测角度的斜率的绝对值的log2对数值(如0或1或较大常数),subAngleIdx表示权重预测角度所在的角度分区。参见图7A所示,示出8种权重预测角度,权重预测角度0的angleIdx为权重预测角度0的斜率的绝对值的log2对数值,权重预测角度1的angleIdx为权重预测角度1的斜率的绝对值的log2对数值,以此类推,权重预测角度7的angleIdx为权重预测角度7的斜率的绝对值的log2对数值。权重预测角度0和权重预测角度1位于角度分区0,权重预测角度2和权重预测角度3位于角度分区1,权重预测角度4和权重预测角度5位于角度分区2,权重预测角度6和权重预测角度7位于角度分区3。
综上所述,根据AwpIdx获取stepIdx,angleIdx以及subAngleIdx,可以包括:
可以采用如下公式确定stepIdx:
可以根据如下公式确定modAngNum(角度编号):modAngNum=AwpIdx%8;基于modAngNum,可以采用如下方式确定angleIdx:若modAngNum等于2,则angleIdx=7;若modAngNum等于6,则angleIdx=8;否则,angleIdx=modAngNum%2。
可以采用如下公式确定subAngleIdx:subAngleIdx=modAngNum>>1。
综上所述,编码端在确定出当前块的权重预测角度和当前块的权重预测位置后,可以基于该权重预测角度和该权重预测位置确定AwpIdx的取值,参见排列方式1或者排列方式2。编码端在向解码端发送编码比特流时,该编码比特流可以携带AwpIdx的取值,基于此,解码端可以得到AwpIdx的取值,并根据AwpIdx获取stepIdx,angleIdx以及subAngleIdx。stepIdx能够唯一确定一个权重预测位置,angleIdx以及subAngleIdx能够唯一确定一个权重预测角度,参见表1所示,当然,也可以采用其它方式确定权重预测角度,例如,更改分区编号等。
表1
步骤d2,根据stepIdx,angleIdx和subAngleIdx为当前块外部周边位置配置参考权重值。
情况一、若subAngleIdx为0,即权重预测角度位于角度分区0,比如说,权重预测角度为权重预测角度0或权重预测角度1,则可以采用如下公式确定权重变换的起始位置FirstPos:FirstPos=(ValidLength_H>>1)-6+DeltaPos_H。然后,采用如下公式确定当前块外部的周边位置的参考权重值:ReferenceWeights[x]=Clip3(0,8,x-FirstPos),在该公式中,是以参考权重值的最小值为0,参考权重值的最大值为8,权重变换率为1为例进行说明,也就是说,上述公式可以等价为ReferenceWeights[x]=Clip3(最小值,最大值,a*(x-FirstPos))。x可以是当前块外部的周边位置的索引,x的取值范围是0~ValidLength_H-1,a表示权重变换率。
在上述公式中,ValidLength_H可以表示当前块外部的周边位置的数量(即有效数量,也可以称为有效长度),在subAngleIdx为0时,权重预测角度指向的当前块外部的周边位置,可以是左侧一列的周边位置,因此,可以将有效数量记为ValidLength_H。示例性的,可以采用如下公式确定有效数量ValidLength_H:ValidLength_H=(N+(M>>angleIdx))<<1。此处左移一位,是因为公式采用1/2-pel精度,若为1-pel精度,则ValidLength_H=(N+(M>>angleIdx));若为1/4-pel精度,则ValidLength_H=(N+(M>>angleIdx))<<2;若为2-pel精度,则ValidLength_H=(N+(M>>angleIdx))>>1,其他像素精度以此类推,在此不在赘述。之后的公式中,涉及的部分>>1操作,均可能因为像素精度的不同而发生改变。
在上述公式中,DeltaPos_H表示位置变化量参数(即一个中间参数),在subAngleIdx为0时,权重预测角度指向的当前块外部的周边位置,可以是当前块外部左侧一列的周边位置,因此,可以将位置变化量参数记为DeltaPos_H。示例性的,可以采用如下公式确定DeltaPos_H:DeltaPos_H=stepIdx*((ValidLength_H>>3)-1)。
情况二、若subAngleIdx为1,即权重预测角度位于角度分区1,比如说,权重预测角度为权重预测角度2或权重预测角度3,则可以采用如下公式确定权重变换的起始位置FirstPos:FirstPos=(ValidLength_H>>1)-4+DeltaPos_H–((M<<1)>>angleIdx)。然后,采用如下公式确定当前块外部的周边位置的参考权重值:ReferenceWeights[x]=Clip3(0,8,a*(x-FirstPos)),在该公式中,是以参考权重值的最小值为0,参考权重值的最大值为8,权重变换率为a为例进行说明。x可以是当前块外部的周边位置的索引,x的取值范围是0~ValidLength_H-1。
在上述公式中,ValidLength_H和DeltaPos_H可以参见情况一,在此不再赘述。
情况三、若subAngleIdx为2,即权重预测角度位于角度分区2,比如说,权重预测角度为权重预测角度4或权重预测角度5,则可以采用如下公式确定权重变换的起始位置FirstPos:FirstPos=(ValidLength_W>>1)-4+DeltaPos_W–((N<<1)>>angleIdx)。然后,采用如下公式确定当前块外部的周边位置的参考权重值:ReferenceWeights[x]=Clip3(0,8,a*(x-FirstPos)),在该公式中,是以参考权重值的最小值为0,参考权重值的最大值为8,权重变换率为a为例进行说明。x可以是当前块外部的周边位置的索引,x的取值范围是0~ValidLength_W-1。
在上述公式中,ValidLength_W表示当前块外部的周边位置的数量(即有效数量,也可以称为有效长度),在subAngleIdx为2时,权重预测角度指向的当前块外部的周边位置,可以是上侧一行的周边位置,因此,将有效数量记为ValidLength_W。示例性的,可以采用如下公式确定有效数量ValidLength_W:ValidLength_W=(M+(N>>angleIdx))<<1。
在上述公式中,DeltaPos_W表示位置变化量参数(即一个中间参数),在subAngleIdx为2时,权重预测角度指向的当前块外部的周边位置,可以是当前块外部上侧一行的周边位置,因此,可以将位置变化量参数记为DeltaPos_W。示例性的,可以采用如下公式确定DeltaPos_W:DeltaPos_W=stepIdx*((ValidLength_W>>3)-1)。
情况四、若subAngleIdx为3,即权重预测角度位于角度分区3,比如说,权重预测角度为权重预测角度6或权重预测角度7,则可以采用如下公式确定权重变换的起始位置FirstPos:FirstPos=(ValidLength_W>>1)-6+DeltaPos_W。然后,可以采用如下公式确定当前块外部的周边位置的参考权重值:ReferenceWeights[x]=Clip3(0,8,a*(x-FirstPos)),在该公式中,是以参考权重值的最小值为0,参考权重值的最大值为8,权重变换率为a为例进行说明。x可以是当前块外部的周边位置的索引,x的取值范围是0~ValidLength_W-1。
在上述公式中,ValidLength_W和DeltaPos_W可以参见情况三,在此不再赘述。
综上所述,可以根据subAngleIdx确定应该采用哪种情况进行处理,例如,在情况一和情况二中,可以根据angleIdx和stepIdx确定ValidLength_H和DeltaPos_H,并可以根据ValidLength_H和DeltaPos_H确定FirstPos,继而根据FirstPos配置参考权重值。在情况三和情况四中,可以根据angleIdx和stepIdx确定ValidLength_W和DeltaPos_W,并可以根据ValidLength_W和DeltaPos_W确定FirstPos,继而根据FirstPos配置参考权重值。
上述各情况中的公式的区别在于,将当前块的左上角作为坐标原点时,参考权重值ReferenceWeights[x]的起始位置发生了变化。例如,参见图7B所示,示出了角度分区2和角度分区3的示例,在1/2-pel精度时,参考权重值ReferenceWeights[x]的起始位置为(高<<1)>>angleIdx,即公式中的偏移“–((N<<1)>>angleIdx)”。角度分区0和角度分区1的实现类似,只是公式中的偏移为“–((M<<1)>>angleIdx)”,即高度改为宽度即可。
步骤d3,根据angleIdx和参考权重值ReferenceWeights[x]获取像素位置的亮度权重值。
情况一、若subAngleIdx为0,则可以采用如下公式确定像素位置(x,y)的亮度权重值:AwpWeightArrayY[x][y]=ReferenceWeights[(y<<1)+((x<<1)>>angleIdx)],(y<<1)+((x<<1)>>angleIdx)表示像素位置(x,y)指向的周边位置,ReferenceWeights[(y<<1)+((x<<1)>>angleIdx)]表示该周边位置的参考权重值。x的取值范围是0~M-1,y的取值范围是0~N-1。
情况二、若subAngleIdx为1,则可以采用如下公式确定像素位置(x,y)的亮度权重值:AwpWeightArrayY[x][y]=ReferenceWeights[(y<<1)-((x<<1)>>angleIdx)],(y<<1)-((x<<1)>>angleIdx)表示像素位置(x,y)指向的周边位置,ReferenceWeights[(y<<1)-((x<<1)>>angleIdx)]表示该周边位置的参考权重值。x的取值范围是0~M-1;y的取值范围是0~N-1。
情况三、若subAngleIdx为2,则可以采用如下公式确定像素位置(x,y)的亮度权重值:AwpWeightArrayY[x][y]=ReferenceWeights[(x<<1)-((y<<1)>>angleIdx)],(x<<1)-((y<<1)>>angleIdx)表示像素位置(x,y)指向的周边位置,ReferenceWeights[(x<<1)-((y<<1)>>angleIdx)]表示该周边位置的参考权重值。x的取值范围是0~M-1;y的取值范围是0~N-1。
情况四、若subAngleIdx为3,则可以采用如下公式确定像素位置(x,y)的亮度权重值:AwpWeightArrayY[x][y]=ReferenceWeights[(x<<1)+((y<<1)>>angleIdx)],(x<<1)+((y<<1)>>angleIdx)表示像素位置(x,y)指向的周边位置,ReferenceWeights[(x<<1)+((y<<1)>>angleIdx)]表示该周边位置的参考权重值。x的取值范围是0~M-1;y的取值范围是0~N-1。
步骤d4,根据像素位置的亮度权重值获取该像素位置的色度权重值,而该像素位置的亮度权重值和该像素位置的色度权重值,就可以组成该像素位置的目标权重值。
例如,若色度分辨率的格式为4:2:0,则采用如下公式确定像素位置(x,y)的色度权重值:AwpWeightArrayUV[x][y]=AwpWeightArrayY[x<<1][y<<1]。又例如,若色度分辨率的格式为4:4:4,则采用如下公式确定像素位置(x,y)的色度权重值:AwpWeightArrayUV[x][y]=AwpWeightArrayY[x][y]。其中,x的取值范围是0~M/2-1;y的取值范围是0~N/2-1。
步骤d4的另一种实现方式为:根据angleIdx和参考权重值ReferenceWeight[x]获取像素位置的色度权重值,而不需要根据亮度权重值获取色度权重值。例如,若色度分辨率的格式为4:2:0,则根据angleIdx和参考权重值ReferenceWeight[x]获取像素位置的色度权重值。
例如,若subAngleIdx为0,则可以采用如下公式确定像素位置(x,y)的色度权重值:AwpWeightArrayUV[x][y]=ReferenceWeights[(y<<2)+((x<<2)>>angleIdx)]。
例如,若subAngleIdx为1,则可以采用如下公式确定像素位置(x,y)的色度权重值:AwpWeightArrayUV[x][y]=ReferenceWeights[(y<<2)-((x<<2)>>angleIdx)]。
例如,若subAngleIdx为2,则可以采用如下公式确定像素位置(x,y)的色度权重值:AwpWeightArrayUV[x][y]=ReferenceWeights[(x<<2)-((y<<2)>>angleIdx)]。
例如,若subAngleIdx为3,则可以采用如下公式确定像素位置(x,y)的色度权重值:AwpWeightArrayUV[x][y]=ReferenceWeights[(x<<2)+((y<<2)>>angleIdx)]。
在上述各公式中,x的取值范围是0~M-1,y的取值范围是0~N-1。
在步骤d3和步骤d4中,各情况中的公式的区别在于,参见图7C所示,示出了角度分区2和角度分区3的示例。将当前块的左上角作为坐标原点时,(x,y)的匹配位置在角度分区2的计算公式可以为:x–y>>angleIdx,(x,y)的匹配位置在角度分区3的计算公式可以为:x+y>>angleIdx。在1/2-pel精度时,(x,y)的匹配位置在角度分区2的计算公式可以为:(x<<1)–(y<<1)>>angleIdx,(x,y)的匹配位置在角度分区3的计算公式可以为:(x<<1)+(y<<1)>>angleIdx。角度分区0和角度分区1的实现类似,只是交换(x,y)的位置即可。
实施例8:在实施例1-实施例3中,编码端/解码端需要获取当前块的权重变换率,若当前块支持权重变换率切换模式,则采用如下方式获取当前块的权重变换率:获取当前块的权重变换率指示信息,并根据该权重变换率指示信息确定当前块的权重变换率。示例性的,若该权重变换率指示信息为第一指示信息,则当前块的权重变换率为第一权重变换率;若权重变换率指示信息为第二指示信息,则当前块的权重变换率为第二权重变换率。若当前块不支持权重变换率切换模式,则将预设的权重变换率确定为当前块的权重变换率。
综上所述,若当前块支持权重变换率切换模式,则当前块的权重变换率可以为第一权重变换率或者第二权重变换率,且第一权重变换率与第二权重变换率不同,即,当前块的权重变换率是可变的,从而能够自适应的切换权重变换率,而不是采用统一的一个权重变换率。
示例性的,若切换控制信息允许当前块启用权重变换率切换模式,则当前块支持权重变换率切换模式,若切换控制信息不允许当前块启用权重变换率切换模式,则当前块不支持权重变换率切换模式。该切换控制信息可以包括但不限于:序列级切换控制信息,帧级切换控制信息,Slice(片)级切换控制信息,Tile(片)级切换控制信息,Patch(片)级切换控制信息,CTU(Coding Tee Unit,编码树单元)级切换控制信息,LCU(Largest CodingUnit,最大编码单元)级切换控制信息,块级切换控制信息,CU(Coding Unit,编码单元)级切换控制信息,PU(Prediction Unit,预测单元)级切换控制信息等,对此不做限制。
对于编码端来说,可以获知切换控制信息,且获知切换控制信息是否允许当前块启用权重变换率切换模式,继而确定当前块是否支持权重变换率切换模式。编码端可以将切换控制信息编码到码流,使得解码端从码流中解析出切换控制信息,获知切换控制信息是否允许当前块启用权重变换率切换模式,继而确定当前块是否支持权重变换率切换模式。编码端也可以不将切换控制信息编码到码流,而是由解码端隐式推导出切换控制信息,获知切换控制信息是否允许当前块启用权重变换率切换模式,继而确定当前块是否支持权重变换率切换模式。
以序列级切换控制信息为例,序列级切换控制信息为awp_adptive_flag(帧间角度加权预测适应标志位),若awp_adptive_flag为第一取值,则表示序列级切换控制信息允许当前序列启用权重变换率切换模式,从而允许当前块启用权重变换率切换模式,若awp_adptive_flag为第二取值,则表示序列级切换控制信息不允许当前序列启用权重变换率切换模式,从而不允许当前块启用权重变换率切换模式。示例性的,第一取值为1,第二取值为0,或者,第一取值为0,第二取值为1。当然,上述只是第一取值和第二取值的示例,对此不做限制。针对其它类型的切换控制信息,实现过程与序列级切换控制信息类似,在此不再赘述。
在一种可能的实施方式中,当前块的权重变换率指示信息可以为当前块对应的权重变换率切换标识,第一指示信息用于指示当前块不需要进行权重变换率切换,第二指示信息用于指示当前块需要进行权重变换率切换。在此基础上,可以获取当前块对应的权重变换率切换标识,并根据该权重变换率切换标识确定当前块的权重变换率。例如,若该权重变换率切换标识用于指示当前块不需要进行权重变换率切换,则当前块的权重变换率可以为第一权重变换率;若该权重变换率切换标识用于指示当前块需要进行权重变换率切换,则当前块的权重变换率可以为第二权重变换率。第一权重变换率的绝对值不等于第二权重变换率的绝对值。
例如,第一权重变换率的绝对值可以大于第二权重变换率的绝对值,如第一权重变换率的绝对值可以为4,第二权重变换率的绝对值为1或2。或,第一权重变换率的绝对值可以为2,第二权重变换率的绝对值为1。或,第一权重变换率的绝对值可以为8,第二权重变换率的绝对值为1或2或4。又例如,第一权重变换率的绝对值可以小于第二权重变换率的绝对值,如第一权重变换率的绝对值可以为1,第二权重变换率的绝对值可以为2或4或8。或者,第一权重变换率的绝对值可以为2,第二权重变换率的绝对值可以为4或8。或者,第一权重变换率的绝对值可以为4,第二权重变换率的绝对值可以为8。当然,上述只是几个示例,对此不做限制,只要第一权重变换率的绝对值不等于第二权重变换率的绝对值即可。
示例性的,权重变换率切换标识可以包括但不限于:序列级权重变换率切换标识,帧级权重变换率切换标识,Slice级权重变换率切换标识,Tile级权重变换率切换标识,Patch级权重变换率切换标识,CTU级权重变换率切换标识,LCU级权重变换率切换标识,块级权重变换率切换标识,CU级权重变换率切换标识,PU级权重变换率切换标识等等,对此不做限制。
例如,可以将当前块对应的序列级权重变换率切换标识确定为当前块对应的权重变换率切换标识,或者,将当前块对应的帧级权重变换率切换标识确定为当前块对应的权重变换率切换标识,以此类推,只要能够得到当前块对应的权重变换率切换标识即可。
示例性的,可以将第一权重变换率作为默认的权重变换率,对于编码端来说,可以获知当前块是否需要进行权重变换率切换,若当前块不需要进行权重变换率切换,则编码端确定当前块的权重变换率为第一权重变换率。若当前块需要进行权重变换率切换,则编码端确定当前块的权重变换率为第二权重变换率。或者,对于编码端来说,可以获知当前块对应的权重变换率切换标识,若该权重变换率切换标识用于指示当前块不需要进行权重变换率切换,则编码端可以确定当前块的权重变换率为第一权重变换率。若该权重变换率切换标识用于指示当前块需要进行权重变换率切换,则编码端确定当前块的权重变换率为第二权重变换率。
例如,编码端确定与第一权重变换率对应的率失真代价值1,与第二权重变换率对应的率失真代价值2。若率失真代价值1小于率失真代价值2,则确定当前块不需要进行权重变换率切换,若率失真代价值2小于率失真代价值1,则确定当前块需要进行权重变换率切换。
编码端可以将权重变换率切换标识(如序列级权重变换率切换标识等)编码到码流,使得解码端从码流中解析出该权重变换率切换标识,并将该权重变换率切换标识确定为当前块对应的权重变换率切换标识。综上所述,解码端可以获知当前块对应的权重变换率切换标识,若该权重变换率切换标识用于指示当前块不需要进行权重变换率切换,则解码端确定当前块的权重变换率为第一权重变换率。若该权重变换率切换标识用于指示当前块需要进行权重变换率切换,则解码端确定当前块的权重变换率为第二权重变换率。例如,若权重变换率切换标识为第一取值,则指示当前块不需要进行权重变换率切换,若权重变换率切换标识为第二取值,则指示当前块需要进行权重变换率切换。第一取值为1,第二取值为0,或者,第一取值为0,第二取值为1。当然,上述只是第一取值和第二取值的示例,对此不做限制。
编码端也可以不将权重变换率切换标识编码到码流,而是由解码端隐式推导权重变换率切换标识,并将该权重变换率切换标识确定为当前块对应的权重变换率切换标识。例如,若连续多个块均需要进行权重变换率切换,则当前块也需要进行权重变换率切换,解码端隐式推导出权重变换率切换标识,将该权重变换率切换标识确定为当前块对应的权重变换率切换标识,且该权重变换率切换标识指示当前块需要进行权重变换率切换。若连续多个块均不需要进行权重变换率切换,则当前块也不需要进行权重变换率切换,解码端隐式推导出权重变换率切换标识,且权重变换率切换标识指示当前块不需要进行权重变换率切换。当然,上述方式只是隐式推导出权重变换率切换标识的示例,对此推导方式不做限制。综上所述,解码端可以获知当前块对应的权重变换率切换标识,若该权重变换率切换标识指示当前块不需要进行权重变换率切换,则确定当前块的权重变换率为第一权重变换率。若该权重变换率切换标识指示当前块需要进行权重变换率切换,则确定当前块的权重变换率为第二权重变换率。
综上所述,当前块的权重变换率可以为第一权重变换率或第二权重变换率,即当前块的权重变换率可以进行切换,权重变换率的切换依赖于某级的权重变换率切换标识(refine_flag),该refine_flag为显示标识或隐式标识,显示标识是指将refine_flag编入码流,使得解码端从码流中解析出refine_flag,隐式标识是指编解码端根据能够得到的信息自适应推导refine_flag。
示例性的,某级refine_flag是指:序列级指示当前序列的refine_flag,作为属于当前序列的所有块的refine_flag;帧级指示当前帧的refine_flag,作为属于当前帧的所有块的refine_flag;Slice级指示当前Slice的refine_flag,作为属于当前Slice的所有块的refine_flag;Tile级指示当前Tile的refine_flag,作为属于当前Tile的所有块的refine_flag;Patch级指示当前Patch的refine_flag,作为属于当前Patch的所有块的refine_flag;CTU级指示当前CTU的refine_flag,作为属于当前CTU的所有块的refine_flag;LCU级指示当前LCU的refine_flag,作为属于当前LCU的所有块的refine_flag;块级指示当前块的refine_flag,作为属于当前块的refine_flag;CU级指示当前CU的refine_flag,作为属于当前CU的refine_flag;PU级指示当前PU的refine_flag,作为属于当前PU的refine_flag。当然,上述只是几个示例,对此不做限制。
示例性的,可以将第一权重变换率作为默认的权重变换率,在权重变换率切换标识用于指示当前块不需要进行权重变换率切换时,不对权重变换率进行切换,即确定当前块的权重变换率为第一权重变换率。在权重变换率切换标识用于指示当前块需要进行权重变换率切换时,对权重变换率进行切换,即确定当前块的权重变换率为第二权重变换率。
实施例9:在实施例1-实施例3中,编码端/解码端需要获取当前块的权重预测角度和权重预测位置,在实施例8中,可以得到当前块的权重变换率,如第一权重变换率或者第二权重变换率,在此基础上,采用如下方式获取当前块的权重预测角度和权重预测位置:
编码端和解码端约定相同的权重预测角度作为当前块的权重预测角度,并约定相同的权重预测位置作为当前块的权重预测位置。例如,编码端和解码端将权重预测角度0作为当前块的权重预测角度,编码端和解码端将权重预测位置4作为当前块的权重预测位置。
编码端构建权重预测角度列表,权重预测角度列表包括至少一个权重预测角度,如上述实施例的8种权重预测角度(0至7)。构建权重预测位置列表,权重预测位置列表包括至少一个权重预测位置,如上述实施例的7种权重预测位置(-3至3)。依次遍历权重预测角度列表中每个权重预测角度,遍历权重预测位置列表中每个权重预测位置,即遍历每个权重预测角度及每个权重预测位置的组合。将每个组合作为步骤a1中获取的权重预测角度和权重预测位置,基于权重预测角度,权重预测位置及权重变换率,得到当前块的加权预测值。
例如,编码端遍历到权重预测角度0和权重预测位置0时,基于权重预测角度0和权重预测位置0得到当前块的加权预测值。遍历到权重预测角度1和权重预测位置0时,基于权重预测角度1和权重预测位置0得到当前块的加权预测值,以此类推。基于权重预测角度和权重预测位置的每个组合,得到当前块的加权预测值。基于权重预测角度和权重预测位置的组合得到当前块的加权预测值后,根据当前块的加权预测值确定率失真代价值,对此率失真代价值的确定方式不做限制,基于每个组合的率失真代价值选择最小率失真代价值。
然后,编码端将最小率失真代价值对应的权重预测角度和权重预测位置组合分别作为目标权重预测角度和目标权重预测位置,最后,将目标权重预测角度在权重预测角度列表中的索引值和目标权重预测位置在权重预测位置列表中的索引值编入码流。
针对解码端来说,解码端构建权重预测角度列表,该权重预测角度列表与编码端的权重预测角度列表相同,权重预测角度列表包括至少一个权重预测角度。构建权重预测位置列表,该权重预测位置列表与编码端的权重预测位置列表相同,权重预测位置列表包括至少一个权重预测位置。解码端在接收到当前块的编码比特流后,从编码比特流中解析出指示信息,根据该指示信息从权重预测角度列表中选择一个权重预测角度作为当前块的权重预测角度,根据该指示信息从权重预测位置列表中选择一个权重预测位置作为当前块的权重预测位置。
比如说,编码端在向解码端发送编码比特流时,该编码比特流可以包括指示信息,该指示信息用于指示当前块的权重预测角度和当前块的权重预测位置,参见实施例7中的AwpIdx,以排列方式2为例,基于当前块的权重预测角度和当前块的权重预测位置,编码端可以获知AwpIdx的取值,并在编码比特流中编码AwpIdx的取值(即指示信息)。解码端在接收到编码比特流后,从该编码比特流中解析出该指示信息(即AwpIdx的取值),基于AwpIdx的取值以及排列方式2,可以确定当前块的权重预测角度和当前块的权重预测位置。
实施例1-9是AWP模式的编解码过程,在AWP模式中,AWP的模式数可以在序列级,帧级,Slice级,Tile级,Patch级,CTU级,LCU级,块级,CU级,PU级开关控制大小。模式数大小的控制可以通过权重预测角度的增减或/和参考权重配置方式数量的增减。语法标识可以单独编码flag也可以依赖别的flag导出,例如通过某个flag来控制AWP模式数,如该flag为1时,权重预测角度为6种,该flag为0时,权重预测角度为8种。
实施例10:在实施例1-实施例3中,编码端/解码端需要获取为当前块创建的运动信息候选列表,该运动信息候选列表包括至少一个候选运动信息,且运动信息候选列表中的候选运动信息可以为单向运动信息。例如,获取待加入到运动信息候选列表中的至少一个可用运动信息,基于这些可用运动信息获取为当前块创建的运动信息候选列表。至少一个可用运动信息包括但不限于如下运动信息的至少一种:时域运动信息;空域运动信息;预设运动信息。
在一种可能的实施方式中,针对时域运动信息,待加入到运动信息候选列表中的可用运动信息的获取过程,可以包括:基于当前块的预设位置,从当前块的参考帧中选取与该预设位置对应的时域相邻块,并将该时域相邻块的运动信息确定为可用运动信息,即可用运动信息为时域运动信息。针对空域运动信息,待加入到运动信息候选列表中的可用运动信息的获取过程,可以包括:针对当前块的空域相邻块,若空域相邻块存在,且该空域相邻块采用帧间预测模式,则将该空域相邻块的运动信息确定为可用运动信息,即可用运动信息为空域运动信息。针对预设运动信息,待加入到运动信息候选列表中的可用运动信息的获取过程,可以包括:可以将预设运动信息确定为可用运动信息,该预设运动信息可以包括但不限于基于该运动信息候选列表中已存在的候选运动信息所导出的缺省运动信息。
在一种可能的实施方式中,针对待加入到运动信息候选列表中的可用运动信息,若该可用运动信息为单向运动信息,则可以将该单向运动信息加入到运动信息候选列表。或者,若该单向运动信息与运动信息候选列表中已存在的候选运动信息不重复,则可以将该单向运动信息加入到运动信息候选列表。或者,若该单向运动信息与运动信息候选列表中已存在的候选运动信息重复,则可以不将该单向运动信息加入到运动信息候选列表。
在一种可能的实施方式中,针对待加入到运动信息候选列表的可用运动信息,若该可用运动信息为双向运动信息,则可以根据该可用运动信息的属性将该可用运动信息裁剪为单向运动信息(如指向第一参考帧列表中参考帧的单向运动信息,或者,指向第二参考帧列表中参考帧的单向运动信息),并将该单向运动信息加入到运动信息候选列表。或者,若该单向运动信息与运动信息候选列表中已存在的候选运动信息不重复,则可以将该单向运动信息加入到运动信息候选列表。或者,若该单向运动信息与运动信息候选列表中已存在的候选运动信息重复,则可以不将该单向运动信息加入到运动信息候选列表。
示例性的,可以采用如下方式将可用运动信息(即双向运动信息)裁剪为单向运动信息:根据可用运动信息的编号的奇偶属性将可用运动信息裁剪为单向运动信息。例如,若可用运动信息是当前块的相邻块的运动信息,则基于相邻块的遍历次序确定该可用运动信息的编号,该相邻块可以为空域相邻块和/或时域相邻块。若该编号的奇偶属性为奇数,则将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若该编号的奇偶属性为偶数,将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。或,若该编号的奇偶属性为偶数,则将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若该编号的奇偶属性为奇数,则将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
例如,当前块的相邻块可以是空域相邻块,参见图8所示,为空域相邻块的位置的示意图,F,G,C,A,B,D是当前块的空域相邻块,当然,空域相邻块可以是F,G,C,A,B,D中的一个或多个。假设空域相邻块的遍历次序是FGCABD,则F对应的编号为0,G对应的编号为1,C对应的编号为2,A对应的编号为3,B对应的编号为4,D对应的编号为5。或者,F对应的编号为1,G对应的编号为2,C对应的编号为3,A对应的编号为4,B对应的编号为5,D对应的编号为6。当然,上述FGCABD的遍历次序只是示例,对此遍历次序不做限制,且上述编号也只是示例。假设FGCABD对应的编号依次为0,1,2,3,4,5,若可用运动信息是空域相邻块F的运动信息,则基于空域相邻块F的遍历次序确定可用运动信息的编号为0,编号0表示按照遍历顺序遍历的第一个空域相邻块。若可用运动信息是空域相邻块G的运动信息,则基于空域相邻块G的遍历次序确定可用运动信息的编号为1,编号1表示按照遍历顺序遍历的第二个空域相邻块,以此类推。
又例如,当前块的相邻块可以是时域相邻块,假设时域相邻块的遍历次序是右上角像素位置的时域相邻块,右下角像素位置的时域相邻块,左下角像素位置的时域相邻块,则右上角像素位置的时域相邻块对应的编号为0,右下角像素位置的时域相邻块对应的编号为1,左下角像素位置的时域相邻块对应的编号为2。或,右上角像素位置的时域相邻块对应的编号为1,右下角像素位置的时域相邻块对应的编号为2,左下角像素位置的时域相邻块对应的编号为3。当然,上述遍历次序只是示例,对此遍历次序不做限制,且上述各时域相邻块对应的编号也只是示例。综上所述,若可用运动信息是右上角像素位置的时域相邻块的运动信息,则基于右上角像素位置的时域相邻块的遍历次序确定可用运动信息的编号为0,以此类推。
又例如,当前块的相邻块可以是空域相邻块和时域相邻块,假设空域相邻块的遍历次序是FGCABD,时域相邻块位于任意空域相邻块的后面(如位于D的后面,或位于B的后面,或位于A的后面,或位于C的后面,或位于G的后面,或位于F的后面),或者,时域相邻块位于所有空域相邻块的前面(如位于F的前面),假设时域相邻块位于F的前面,则所有相邻块的遍历次序是TFGCABD,T用于表示时域相邻块(可以是任意位置的时域相邻块)。当然,上述TFGCABD的遍历次序只是示例,对此遍历次序不做限制。基于此,T对应的编号为0,F对应的编号为1,G对应的编号为2,C对应的编号为3,A对应的编号为4,B对应的编号为5,D对应的编号为6。或者,T对应的编号为1,F对应的编号为2,G对应的编号为3,C对应的编号为4,A对应的编号为5,B对应的编号为6,D对应的编号为7。
综上所述,针对空域相邻块和时域相邻块,假设TFGCABD对应的编号依次为0,1,2,3,4,5,6,若可用运动信息是时域相邻块T的运动信息,基于时域相邻块T的遍历次序确定可用运动信息的编号为0,若可用运动信息是空域相邻块D的运动信息,基于空域相邻块D的遍历次序确定可用运动信息的编号为6,以此类推。假设TFGCABD对应的编号依次为0,1,2,3,4,5,6,若对TFGCABD的运动信息进行依次遍历后,T的运动信息为可用运动信息且为双向运动信息,G的运动信息为可用运动信息且为双向运动信息,A的运动信息为可用运动信息且为双向运动信息,则T的运动信息的编号为0,G的运动信息的编号为2,A的运动信息的编号为4。一种情况下,T的运动信息的编号的奇偶属性为偶数,将T的运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。G的运动信息的编号的奇偶属性为偶数,将G的运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。A的运动信息的编号的奇偶属性为偶数,将A的运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。另一种情况下,T的运动信息的编号的奇偶属性为偶数,将T的运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。G的运动信息的编号的奇偶属性为偶数,将G的运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。A的运动信息的编号的奇偶属性为偶数,将A的运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。
例如,可用运动信息还可以是预设运动信息,根据预设运动信息的编号将预设运动信息裁剪为单向运动信息。当然,若预设信息通过已经存在于列表中的单向运动信息导出,预设运动信息也为单向运动信息,不需要进行裁剪操作。假设空域相邻块的遍历次序是FGCABD,预设运动信息位于任意空域相邻块的后面,或位于所有空域相邻块的前面,假设预设运动信息位于D的后面,则遍历次序是FGCABDK,K用于表示预设运动信息(预设运动信息可以为至少一个,预设运动信息为多个时,将多个预设运动信息按照顺序排列)。当然,FGCABDK的遍历次序只是示例,对此遍历次序不做限制。基于此,FGCABDK对应的编号依次为0123456或1234567。假设相邻块(如空域相邻块和时域相邻块)的遍历次序是TFGCABD,预设运动信息可以位于任意相邻块的后面,也可以位于所有相邻块的前面,假设预设运动信息位于D的后面,则遍历次序是TFGCABDK。当然,TFGCABDK的遍历次序只是示例,对此遍历次序不做限制。基于此,TFGCABDK对应的编号依次为01234567或12345678。
示例性的,可以采用如下方式将可用运动信息(即双向运动信息)裁剪为单向运动信息:根据可用运动信息的性质(也可理解成类型)将该可用运动信息裁剪为单向运动信息。例如,若该可用运动信息是当前块的时域相邻块的运动信息,则可以将该可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;即,只要可用运动信息的性质为时域相邻块的运动信息,就将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。或者,若该可用运动信息是当前块的时域相邻块的运动信息,则可以将该可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,即,只要可用运动信息的性质为时域相邻块的运动信息,就将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
又例如,若可用运动信息是当前块的空域相邻块的运动信息,则将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,即,只要可用运动信息的性质为空域相邻块的运动信息,就将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。或者,若可用运动信息是当前块的空域相邻块的运动信息,则将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,即,只要可用运动信息的性质为空域相邻块的运动信息,就将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
若可用运动信息是预设运动信息(即可用运动信息的性质为预设运动信息),则将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。或者,若可用运动信息是预设运动信息,则将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
在上述实施例中,第一参考帧列表也称为第一参考帧队列,还可以称为前向参考帧列表,如List0。第二参考帧列表也称为第二参考帧队列,还可以称为后向参考帧列表,如List1。
示例性的,可以比较单向运动信息(若可用运动信息为单向运动信息,则待比较的单向运动信息为可用运动信息,若可用运动信息为双向运动信息,则待比较的单向运动信息为对可用运动信息进行裁剪后的单向运动信息)与运动信息候选列表中已存在的候选运动信息是否重复。针对单向运动信息与候选运动信息的查重操作包括:若单向运动信息指向的参考帧与候选运动信息指向的参考帧相同,单向运动信息的运动矢量与候选运动信息的运动矢量相同,则确定单向运动信息与候选运动信息重复;否则,确定单向运动信息与候选运动信息不重复。单向运动信息指向的参考帧与候选运动信息指向的参考帧是否相同的确定过程,包括:
情况1、若该单向运动信息指向的参考帧列表与该候选运动信息指向的参考帧列表相同,且该单向运动信息指向的参考帧索引(refIdx)与该候选运动信息指向的参考帧索引(refIdx)相同,则可以确定该单向运动信息指向的参考帧与该候选运动信息指向的参考帧相同;否则,可以确定该单向运动信息指向的参考帧与该候选运动信息指向的参考帧不同。
情况2、若单向运动信息指向的参考帧的POC(显示顺序)与候选运动信息指向的参考帧的POC相同,则确定单向运动信息指向的参考帧与候选运动信息指向的参考帧相同;否则,确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
情况3、若单向运动信息指向的参考帧为知识库帧,候选运动信息指向的参考帧为非知识库帧,或单向运动信息指向的参考帧为非知识库帧,候选运动信息指向的参考帧为知识库帧,则确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
若单向运动信息指向的参考帧和候选运动信息指向的参考帧均为非知识库帧,则比较单向运动信息指向的参考帧的POC与候选运动信息指向的参考帧的POC是否相同,若是,则可以确定单向运动信息指向的参考帧与候选运动信息指向的参考帧相同;若否,则可以确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
若单向运动信息指向的参考帧和候选运动信息指向的参考帧均为知识库帧,则可以确定单向运动信息指向的参考帧与候选运动信息指向的参考帧相同。
情况4、若单向运动信息指向的参考帧为知识库帧,候选运动信息指向的参考帧为非知识库帧,或单向运动信息指向的参考帧为非知识库帧,候选运动信息指向的参考帧为知识库帧,则确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
若单向运动信息指向的参考帧和候选运动信息指向的参考帧均为非知识库帧,则比较单向运动信息指向的参考帧的POC与候选运动信息指向的参考帧的POC是否相同,若是,则可以确定单向运动信息指向的参考帧与候选运动信息指向的参考帧相同;若否,则可以确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
若单向运动信息指向的参考帧和候选运动信息指向的参考帧均为知识库帧,则比较单向运动信息指向的参考帧的知识库帧索引与候选运动信息指向的参考帧的知识库帧索引是否相等,若是,则可以确定单向运动信息指向的参考帧与候选运动信息指向的参考帧相同,若否,则可以确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
实施例11:针对实施例10,可以利用时域运动信息(将时域相邻块的运动信息称为时域运动信息)和/或空域运动信息(将空域相邻块的运动信息称为空域运动信息)获取运动信息候选列表,从时域运动信息和/或空域运动信息中选取可用运动信息。例如,时域运动信息为至少一个,空域运动信息是图8中F,G,C,A,B,D等空域相邻块的运动信息。
针对空域运动信息,可以采用如下方式获取待加入到运动信息候选列表的可用运动信息:
参见图8所示,F,G,C,A,B,D可以是当前块E的空域相邻块,可以确定F,G,C,A,B,D的运动信息的“可用”性。示例性的,如果F存在且采用帧间预测模式,则F的运动信息为可用运动信息;否则,F的运动信息为不可用运动信息。如果G存在且采用帧间预测模式,则G的运动信息为可用运动信息;否则,G的运动信息为不可用运动信息。如果C存在且采用帧间预测模式,则C的运动信息为可用运动信息;否则,C的运动信息为不可用运动信息。如果A存在且采用帧间预测模式,则A的运动信息为可用运动信息;否则,A的运动信息为不可用运动信息。如果B存在且采用帧间预测模式,则B的运动信息为可用运动信息;否则,B的运动信息为不可用运动信息。如果D存在且采用帧间预测模式,则D的运动信息为可用运动信息;否则,D的运动信息为不可用运动信息。
针对时域运动信息,可以采用如下方式获取待加入到运动信息候选列表的可用运动信息:
基于当前块的预设位置,从当前块的参考帧中选取与该预设位置对应的时域相邻块,并将该时域相邻块的运动信息确定为可用运动信息。比如说,若当前块所在当前帧为B帧,则可以根据co-located参考帧的co-located块导出单向运动信息或双向运动信息,将该单向运动信息或双向运动信息作为可用运动信息。若当前帧为P帧,则可以根据co-located参考帧的co-located块导出单向运动信息,将该单向运动信息作为可用运动信息。
示例性的,co-located块是co-located参考帧中与当前块的预设位置对应的时域相邻块,当前块的预设位置可以根据经验配置,对此当前块的预设位置不做限制,如当前块的左上角像素位置,当前块的右上角像素位置,当前块的左下角像素位置,当前块的右下角像素位置,当前块的中心像素位置等。比如说,左上角像素位置的左上角坐标可以为(x0,y0),右上角像素位置的右上角坐标可以为(x0+width,y0)(x0+width–1,y0),右下角像素位置的右下角坐标可以为(x0+width,y0+height)(x0+width–1,y0+height)(x0+width,y0+height-1)(x0+width–1,y0+height-1),左下角像素位置的左下角坐标可以为(x0,y0+height)(x0,y0+height-1)关于co-located参考帧可以是预设的参考帧,如将当前块的List0中的第一个参考帧作为co-located参考帧,也可以是导出的参考帧,如将当前块的List0中与当前帧最近的参考帧作为co-located参考帧,还可以是从码流中解析出的参考帧,如针对解码端来说,可以从码流中解析出co-located参考帧的信息,继而确定co-located参考帧。
若当前块所在当前帧为B帧,则根据co-located块的运动信息导出单向运动信息或双向运动信息,若当前块所在当前帧为P帧,则根据co-located块的运动信息导出单向运动信息。
示例性的,关于当前块的预设位置,一种可能的实施方式是:若当前块外部右下角点的坐标位置未超出预设块边界(预设块边界可以为最大编码单元边界,如LCU边界或者CTU边界等),则该预设位置为当前块外部右下角点的坐标位置。若当前块外部右下角点的坐标位置超出预设块边界,则该预设位置为当前块内部右下角点的坐标位置(如当前块外部右下角点的坐标位置,超出预设块右边界和下边界),或者,当前块外部右下角点的坐标位置的上边位置(如当前块外部右下角点的坐标位置,超出预设块下边界),或者,当前块外部右下角点的坐标位置的左边位置(如当前块外部右下角点的坐标位置,超出预设块右边界)。
示例性的,关于时域运动信息,可以是利用时域相邻块的模式信息导出的运动信息。比如说,可以先确定时域相邻块的待变换运动信息,例如,时域相邻块采用帧内预测模式时,基于其它块的运动信息推导出时域相邻块的待变换运动信息。例如,利用空域相邻块导出运动信息作为时域相邻块的带变换运动信息,或者,可直接将指向同位帧的零运动信息作为最终的时域相邻块的运动信息;时域相邻块采用帧间预测模式时,基于时域相邻块的运动信息确定时域相邻块的待变换运动信息。然后,对时域相邻块的待变换运动信息进行变换,得到时域运动信息(即变换到当前帧的当前块能用的运动信息),例如,基于当前块的参考帧(即同位帧,也即时域相邻块所在帧)与时域相邻块的参考帧之间的距离,以及当前帧与当前块的参考帧之间的距离,对时域相邻块的运动矢量进行伸缩,得到伸缩后的运动矢量,将伸缩后的运动矢量和当前块的参考帧的索引组成运动信息,这个运动信息就是时域运动信息。针对时域相邻块为帧间预测块的情况,具体的,例如,若时域相邻块为双向运动信息,同时对指向List0的单向运动信息和指向List1的单向运动信息进行相应的伸缩操作得到时域运动信息;若时域相邻块为指向List0或指向List1的单向运动信息,将该单向运动信息进行两次伸缩得到双向运动信息作为时域运动信息。再例如,若时域相邻块的运动信息存在指向List0的运动信息,将伸缩后得到的指向List0单向运动信息作为时域运动信息,否则,将指向List1的运动信息伸缩后得到的指向List0的单向运动信息作为时域运动信息。再例如,若时域相邻块的运动信息存在指向List1的运动信息,将伸缩后得到的指向List1单向运动信息作为时域运动信息,否则,将指向List0的运动信息伸缩后得到的指向List1的单向运动信息作为时域运动信息。
在得到可用运动信息后,针对每个可用运动信息(如空域运动信息,时域运动信息,预设运动信息等),可以采用如下方式之一或组合将可用运动信息加入到运动信息候选列表:
不进行查重处理。比如说,若可用运动信息为单向运动信息,则将该单向运动信息加入到运动信息候选列表。若可用运动信息为双向运动信息,则根据该可用运动信息的属性将该可用运动信息裁剪为单向运动信息,并将裁剪后的单向运动信息加入到运动信息候选列表。
进行查重处理。比如说,若可用运动信息为单向运动信息,且单向运动信息与运动信息候选列表中已存在的候选运动信息不重复,则可以将该单向运动信息加入到运动信息候选列表。若单向运动信息与候选运动信息重复,则不将该单向运动信息加入到运动信息候选列表。
若可用运动信息为双向运动信息,则可以根据该可用运动信息的属性将该可用运动信息裁剪为单向运动信息,若裁剪后的单向运动信息与运动信息候选列表中已存在的候选运动信息不重复,则将该单向运动信息加入到运动信息候选列表。若裁剪后的单向运动信息与候选运动信息重复,则不将该单向运动信息加入到运动信息候选列表。
在该查重处理过程中,需要确定单向运动信息与运动信息候选列表中已存在的候选运动信息是否重复,针对该过程,可以确定单向运动信息与运动信息候选列表中已存在的全部候选运动信息(即已存在的每个候选运动信息)是否重复,或者,可以确定单向运动信息与运动信息候选列表中已存在的部分候选运动信息(如第一个候选运动信息,或最后一个候选运动信息,或前两个候选运动信息,或后两个候选运动信息,对此不做限制)是否重复。
为了方便描述,将进行查重操作的两个运动信息称为运动信息1和运动信息2,当运动信息1为待查重的单向运动信息时,运动信息2为运动信息候选列表中已存在的候选运动信息;针对运动信息1和运动信息2之间的查重操作,可以采用如下方式实现:
查重方式1、基于List+refIdx+MV_x+MV_y进行查重操作。比如说,先查指向的List列表是否相同(即是指向List0,还是指向List1,还是同时指向List0和List1),在查refidx是否相同,在查MV是否相同(即运动矢量的水平分量是否相同,以及运动矢量的垂直分量是否相同)。例如,先查询运动信息1指向的参考帧列表与运动信息2指向的参考帧列表是否相同,如果不同,则运动信息1与运动信息2不重复。如果相同,则查询运动信息1的refIdx与运动信息2的refIdx是否相同,若不同,则运动信息1与运动信息2不重复。若相同,则查询运动信息1的运动矢量与运动信息2的运动矢量是否相同,若否,则运动信息1与运动信息2不重复,若是,则确定运动信息1与运动信息2重复。
若运动信息1指向的参考帧列表与运动信息2指向的参考帧列表均是List0,则二者相同,或者,若运动信息1指向的参考帧列表与运动信息2指向的参考帧列表均是List1,则二者相同,或者,若运动信息1指向的参考帧列表为List0,运动信息2指向的参考帧列表为List1,则二者不同,或者,若运动信息1指向的参考帧列表为List1,运动信息2指向的参考帧列表为List0,则二者不同,或者,若运动信息1指向的参考帧列表为List0,运动信息2指向的参考帧列表为List0和List1,则二者不同,或者,若运动信息1指向的参考帧列表为List1,运动信息2指向的参考帧列表为List0和List1,则二者不同,或者,若运动信息1指向的参考帧列表List0中参考帧索引为refIdx0的参考帧,并指向List1中参考帧索引为refIdx1的参考帧,运动信息2指向List0中参考帧索引为refIdx2的参考帧,并指向List1中参考帧索引为refIdx3的参考帧,refIdx0不等于refIdx2,或refIdx1不等于refIdx3,则二者不同。
当然,上述只是对参考帧列表进行比较的几个示例,对此不做限制。
例如,若运动信息1的运动矢量的水平分量与运动信息2的运动矢量的水平分量相同,且运动信息1的运动矢量的垂直分量与运动信息2的运动矢量的垂直分量相同,则说明运动信息1的运动矢量与运动信息2的运动矢量相同。
查重方式2、基于POC(即帧号)+MV_x(运动矢量的水平分量)+MV_y(运动矢量的垂直分量)进行查重操作。例如,先查指向的参考帧的POC是否相同(即若指向List0中参考帧索引为refIdx0的参考帧的POC等于指向List1中参考帧索引为refIdx1的参考帧的POC,也判定为相同,针对单向运动信息与单向运动信息的查重,以及,双向运动信息与双向运动信息的查重都适用);在查MV是否相同(即水平分量是否相同,以及垂直分量是否相同)。
示例性的,先查询运动信息1指向的参考帧的POC与运动信息2指向的参考帧的POC是否相同,如果不同,则确定运动信息1与运动信息2不重复。如果相同,则可以继续查询运动信息1的运动矢量与运动信息2的运动矢量是否相同,若不同,则可以确定运动信息1与运动信息2不重复,若相同,则可以确定运动信息1与运动信息2重复。
指向的参考帧的POC相同,包括:运动信息1指向List0中参考帧索引为refIdx0的参考帧,且运动信息2指向List0中参考帧索引为refIdx0的参考帧,且运动信息1指向的参考帧的POC与运动信息2指向的参考帧的POC相同。或,运动信息1指向List1中参考帧索引为refIdx1的参考帧,且运动信息2指向List1中参考帧索引为refIdx1的参考帧,且运动信息1指向的参考帧的POC与运动信息2指向的参考帧的POC相同。或,运动信息1指向List0中参考帧索引为refIdx0的参考帧,且运动信息2指向List1中参考帧索引为refIdx1的参考帧,且运动信息1指向的参考帧的POC与运动信息2指向的参考帧的POC相同。或,运动信息1指向List1中参考帧索引为refIdx1的参考帧,且运动信息2指向List0中参考帧索引为refIdx0的参考帧,且运动信息1指向的参考帧的POC与运动信息2指向的参考帧的POC相同。或,运动信息1指向List0中参考帧索引为refIdx0的参考帧,指向List1中参考帧索引为refIdx1的参考帧,运动信息2指向List0中参考帧索引为refIdx2的参考帧,指向List1中参考帧索引为refIdx3的参考帧,运动信息1指向的List0中参考帧索引为refIdx0的参考帧的POC与运动信息2指向的List1中参考帧索引为refIdx3的参考帧的POC相同,且运动信息1指向的List1中参考帧为refIdx1的参考帧的POC与运动信息2指向的List0中参考帧索引为refIdx2的参考帧的POC相同。当然,上述只是参考帧的POC相同的示例,对此不做限制。
上述过程是对参考帧的POC进行查重,需要注意的是,参考帧的POC只是查重操作的一个示例,除了POC以外,还可以采用其它能够确认参考帧是否相同的属性,如参考帧的DOC(解码顺序标记)等,对此不作限制。综上所述,可以将POC替换为DOC。
查重方式3、基于指向的参考帧为知识库帧进行查重操作。若运动信息1指向的参考帧为知识库帧,运动信息2指向的参考帧为非知识库帧,则确定运动信息1指向的参考帧与运动信息2指向的参考帧不同,并确定运动信息1与运动信息2不重复。或者,若运动信息1指向的参考帧为非知识库帧,运动信息2指向的参考帧为知识库帧,则确定运动信息1指向的参考帧与运动信息2指向的参考帧不同,并确定运动信息1与运动信息2不重复。
若运动信息1指向的参考帧和运动信息2指向的参考帧均为非知识库帧,则比较运动信息1指向的参考帧的POC与运动信息2指向的参考帧的POC是否相同。若否,则确定运动信息1指向的参考帧与运动信息2指向的参考帧不同,并确定运动信息1与运动信息2不重复。若是,则确定运动信息1指向的参考帧与运动信息2指向的参考帧相同,并继续查询运动信息1的运动矢量与运动信息2的运动矢量是否相同,若不同,则确定运动信息1与运动信息2不重复,若相同,则确定运动信息1与运动信息2重复。
若运动信息1指向的参考帧和运动信息2指向的参考帧均为非知识库帧,还可以采用查重方式1或者查重方式2进行查重处理,对此查重处理过程不再赘述。
若运动信息1指向的参考帧和运动信息2指向的参考帧均为均为知识库帧,则比较运动信息1指向的参考帧的知识库帧索引与运动信息2指向的参考帧的知识库帧索引是否相等,若否,则确定运动信息1指向的参考帧与运动信息2指向的参考帧不同,并确定运动信息1与运动信息2不重复。若是,则确定运动信息1指向的参考帧与运动信息2指向的参考帧相同,并继续查询运动信息1的运动矢量与运动信息2的运动矢量是否相同,若不同,则确定运动信息1与运动信息2不重复,若相同,则确定运动信息1与运动信息2重复。
知识库帧索引是指:当存在多个知识库帧时,每个知识库帧具有唯一索引,例如,第一个知识库帧的索引为0,第二个知识库帧的索引为1,以此类推。基于此,当知识库帧索引相等时,表示两个知识库帧是同一帧,当知识库帧索引不等时,表示两个知识库帧不是同一帧。
在一种可能的实施方式中,知识库帧(类似长期参考帧)的POC被设置为(当前帧的POC-1),因此,在判定两个参考帧是否为同一帧时,可以考虑知识库帧的情况,即采用查重方式3来确定运动信息1指向的参考帧与运动信息2指向的参考帧是否相同。
示例性的,如果两个运动信息(如两个都是单向运动信息,如运动信息1和运动信息2)满足下面一个或多个条件,则两个运动信息不重复;否则两个运动信息重复:a)参考帧一个为知识库帧,一个为非知识库帧;b)两个运动信息均指向List0,运动矢量不相等或参考帧POC不相等;c)两个运动信息均指向List1,运动矢量不相等或参考帧POC不相等;d)一个运动信息指向List0,另一个运动信息指向List1,运动矢量不相等或参考帧POC不相等。
示例性的,可以采用如下方式判断参考帧是否相同:如果两个参考帧满足下面一个或多个条件,则两个参考帧不同;否则两个参考帧相同。a)一个参考帧是非知识库帧(也可以称为非知识库图像或者非知识图像),另一个参考帧是知识库帧(也可以称为知识库图像或者知识图像);b)两个参考帧都是非知识库帧,两个参考帧对应的参考图像POC不相等;c)两个参考帧都是知识库帧,两个参考帧对应的知识库帧索引(即知识图像索引)不相等。
示例性的,若两个运动信息满足下面一个或多个条件,则两个运动信息不重复,否则两个运动信息重复:两个运动信息的参考帧不同;两个运动信息对应的运动矢量不相等。
在一种可能的实施方式中,可以利用空域运动信息和/或时域运动信息获取运动信息候选列表,如AwpUniArray,以下结合几个具体应用场景,对运动信息候选列表的获取过程进行说明。在后续应用场景中,假设运动信息候选列表的长度为X,即需要添加X个可用运动信息,在将可用运动信息添加到运动信息候选列表后,将已添加的运动信息称为候选运动信息。
应用场景1:将时域运动信息加入到运动信息候选列表,若列表长度等于X,结束添加过程,若列表长度小于X,将空域运动信息加入到运动信息候选列表,直至列表长度为X。比如说,若添加时域运动信息后,列表长度为X-1,则添加一个空域运动信息,若添加时域运动信息后,列表长度为X-2,则添加两个可以运动信息,以此类推。
针对每个可用运动信息,在将该可用运动信息加入到运动信息候选列表时,可以进行查重操作,也可以不进行查重操作。若对单向运动信息与运动信息候选列表中已存在的候选运动信息进行查重操作,则可以采用上述查重方式1、查重方式2或查重方式3进行查重操作。
应用场景2:将时域运动信息与空域运动信息一起加入运动信息候选列表(空域运动信息可以位于时域运动信息之前,或者时域运动信息也可以位于空域运动信息之前,为了方便描述,后续以时域运动信息位于空域运动信息之前为例),按照时域运动信息与空域运动信息的顺序,依次将每个运动信息加入到运动信息候选列表,若列表长度等于X,结束添加过程,若列表长度小于X,将预设运动信息加入到运动信息候选列表,直至列表长度为X。
示例性的,按照时域运动信息(即可用运动信息),F、G、C、A、B、D中可用运动信息(即空域运动信息)的顺序,将可用运动信息加入到运动信息候选列表。针对每个可用运动信息,在将该可用运动信息加入到运动信息候选列表时,可以进行查重操作,也可以不进行查重操作。若对单向运动信息与运动信息候选列表中已存在的候选运动信息进行查重操作,则可以采用上述查重方式1、查重方式2或查重方式3进行查重操作。
综上所述,基于时域运动信息和空域运动信息的顺序,可以将时域运动信息与空域运动信息一起加入运动信息候选列表,一直到列表长度等于X,或者,遍历结束,列表长度小于X,并将预设运动信息加入到运动信息候选列表,直至列表长度为X。
应用场景3:将时域运动信息加入运动信息候选列表,将时域运动信息加入运动信息候选列表后,预留至少Y个位置给空域运动信息,时域运动信息为双向运动信息或单向运动信息。示例性的,将时域运动信息加入运动信息候选列表,若列表长度等于X-Y,则结束时域运动信息的添加过程,或直至时域运动信息遍历结束,列表长度小于X-Y,结束时域运动信息的添加过程。然后,将空域运动信息加入运动信息候选列表,若列表长度等于X,则结束空域运动信息的添加过程,或直至空域运动信息遍历结束,列表长度小于X,结束空域运动信息的添加过程,将预设运动信息加入到运动信息候选列表,直至列表长度为X。
在上述各应用场景中,X可以取任意的正整数,例如,X的取值可以4,5等。
在上述各应用场景中,均可能将预设运动信息(也可以称为缺省运动信息)加入到运动信息候选列表,关于预设运动信息的实现方式,可以包括但不限于如下方式:
预设运动信息1:零运动信息,如指向ListX且refIdx小于ListX中参考帧数量的零运动矢量。比如说,可以进行补0操作,即运动信息可以为(0,0,ref_idx3,ListZ)。
预设运动信息2:基于运动信息候选列表中已存在的候选运动信息所导出的缺省运动信息。比如说,记需要放大或缩小的x轴方向或y轴方向的绝对值为temp_val,结果为result:
1、如果temp_val<8,则result=8,或者,result=-8。
示例性的,若候选运动信息的x轴方向的temp_val小于8,则缺省运动信息的x轴方向的运动矢量为8,或者,缺省运动信息的x轴方向的运动矢量为-8。
若候选运动信息的y轴方向的temp_val小于8,则缺省运动信息的y轴方向的运动矢量为8,或者,缺省运动信息的y轴方向的运动矢量为-8。
2、假设不满足1,如果temp_val<=64,则result=(temp_val*5+2)>>2,或者,result=(temp_val*3+2)>>2,正负号与候选运动信息的运动矢量的正负号相同。
示例性的,若候选运动信息的x轴方向的运动矢量为正,且x轴方向的运动矢量的绝对值(即temp_val)小于或等于64,则缺省运动信息的x轴方向的运动矢量为(temp_val*5+2)>>2,若候选运动信息的x轴方向的运动矢量为负,且x轴方向的运动矢量的绝对值(即temp_val)小于或等于64,则缺省运动信息的x轴方向的运动矢量为result=(temp_val*3+2)>>2。
针对缺省运动信息的y轴方向的运动矢量,与x轴方向的运动矢量类似。
3、假设不满足1和2,如果temp_val<=128,则result=(temp_val*9+4)>>3,或者,result=(temp_val*7+4)>>3,正负号与候选运动信息的运动矢量的正负号相同。
4、假设不满足1,不满足2,且不满足3,则result=(temp_val*33+16)>>5,或者,result=(temp_val*31+16)>>5,正负号与候选运动信息的运动矢量的正负号相同。
预设运动信息3:基于运动信息候选列表中已存在的候选运动信息所导出的缺省运动信息。比如说,以运动信息候选列表中的任意一个有效的候选运动信息(x,y,ref_idx,ListX)为基础,ref_idx和ListX分别为参考帧索引和参考帧列表,且二者统称为参考帧信息,可添加以下至少一个运动信息:(x+a,y+b,ref_idx,ListX),a,b可以取任意整数;(k1*x,k1*y,ref_idx_new1,ListX),k1为任意非0正整数,即对运动矢量进行伸缩操作;(k2*x,k2*y,ref_idx_new2,ListY),k2为任意非0正整数,即对运动矢量进行伸缩操作。
预设运动信息4:方式54、预设运动信息为运动信息候选列表中已存在的候选运动信息,即进行扩充(padding)操作,可采用运动信息候选列表中已存在的候选运动信息进行重复填充操作。例如,可采用运动信息候选列表中已存在的最后一个单向运动信息进行重复填充。
综上所述,在列表长度小于X,需要将预设运动信息加入到运动信息候选列表时,可以将预设运动信息1加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将预设运动信息2加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将预设运动信息3加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将预设运动信息1和预设运动信息2加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将预设运动信息1和预设运动信息3加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将预设运动信息2和预设运动信息3加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将预设运动信息1、预设运动信息2和预设运动信息3加入到运动信息候选列表,直至列表长度为X或添加结束。
示例性的,在采用上述方式,将预设运动信息加入到运动信息候选列表后,若列表长度仍然小于X,则可以将预设运动信息4加入到运动信息候选列表,即,采用运动信息候选列表中已存在的候选运动信息进行重复填充操作,一直到列表长度为X。
在另一种可能的实施方式中,在列表长度小于X,需要将预设运动信息加入到运动信息候选列表时,可以直接将预设运动信息4加入到运动信息候选列表,即,采用运动信息候选列表中已存在的候选运动信息进行重复填充操作,一直到列表长度为X。
在上述实施例中,预设运动信息可以为单向运动信息,也可为双向运动信息。若预设运动信息为单向运动信息,在将该预设运动信息添加到运动信息候选列表时,可以进行查重操作,也可以不进行查重操作。若查重操作的结果为不重复,则将该预设运动信息添加到运动信息候选列表。若查重操作的结果为重复,则不将该预设运动信息添加到运动信息候选列表。
应用场景4:第一步,F、G、C、A、B和D是当前块的相邻预测块,确定F、G、C、A和D的“可用”性。第二步,按时域运动信息、F、G、C、A、B和D的顺序,将可用运动信息放入到运动信息候选列表,直至运动信息候选列表长度为5或遍历结束。
若可用运动信息为单向运动信息,将该可用运动信息与运动信息候选列表中已经存在的候选运动信息进行查重操作,若不重复则放入运动信息候选列表。否则,按照可用运动信息的编号(即遍历顺序编号)的奇偶属性将双向运动信息裁剪为单向运动信息,然后,将单向运动信息与运动信息候选列表中已经存在的候选运动信息进行查重操作,若不重复则放入运动信息候选列表。例如,若编号为偶数,则将双向运动信息裁剪为指向参考帧列表List0的单向运动信息,若编号为奇数,则将双向运动信息裁剪为指向参考帧列表List1的单向运动信息。
第三步,如果运动信息候选列表的长度小于5,依次生成四个运动信息,生成的四个运动信息的参考帧信息与运动信息候选列表中第一个单向运动信息的参考帧信息相同。对运动信息候选列表中第一个单向运动信息的运动矢量记为(x,y),生成的四个运动信息对应的运动矢量为(x0,y0),(x1,y1),(x2,y2),(x3,y3),将新生成的运动信息依次加入运动信息候选列表,直至运动信息候选列表的长度为5,四个运动信息计算如下:
x0=abs(x)<8?8:(abs(x)<=64?((abs(x)*5+2)>>2):(abs(x)<=128?((abs(x)*9+4)>>3):((abs(x)*33+16)>>5)))
x0=(x<0)?-x0:x0
y0=y
x1=x
y1=abs(y)<8?8:(abs(y)<=64?((abs(y)*5+2)>>2):(abs(y)<=128?((abs(y)*9+4)>>3):((abs(y)*33+16)>>5)))
y1=(y<0)?-y1:y1
x2=abs(x)<8?8:(abs(x)<=64?((abs(x)*3+2)>>2):(abs(x)<=128?((abs(x)*7+4)>>3):((abs(x)*31+16)>>5)))
x2=(x<0)?-x2:x2
x2=abs(x)<8?-x2:x2
y2=y
x3=x
y3=abs(y)<8?8:(abs(y)<=64?((abs(y)*3+2)>>2):(abs(y)<=128?((abs(y)*7+4)>>3):((abs(y)*31+16)>>5)))
y3=(y<0)?-y3:y3
y3=abs(y)<8?-y3:y3
?:表示三目运算符,又称条件运算符,是具有3个操作数的运算符。比如说,A?B:C整个为三目运算符,A是条件,B是条件成立的操作,C是条件不成立的操作。
第四步,将运动信息候选列表中第AwpCandIdx0+1个运动候选的某一个单项运动信息赋值给mvAwp0L0,mvAwp0L1,RefIdxAwp0L0,RefIdxAwp0L1。
第五步,将运动信息候选列表中第AwpCandIdx1+1个运动候选的某一个单项运动信息赋值给mvAwp1L0,mvAwp1L1,RefIdxAwp1L0,RefIdxAwp1L1。
第四步和第五步是基于运动信息候选列表确定目标运动信息(mvAwp0L0,mvAwp0L1,RefIdxAwp0L0,RefIdxAwp0L1和mvAwp1L0,mvAwp1L1,RefIdxAwp1L0,RefIdxAwp1L1是目标运动信息)的过程,确定过程参见后续实施例,在此不再赘述。
在上述实施例中,运动信息候选列表的长度可以基于高层语法确定,该运动信息候选列表的长度表示该运动信息候选列表中候选运动信息的最大数量,该高层语法用于指示该运动信息候选列表的长度。示例性的,该高层语法可以是序列级控制信息,帧级控制信息,Slice级控制信息,Tile级控制信息,Patch级控制信息,CTU级控制信息,LCU级控制信息,块级控制信息,CU级控制信息,PU级控制信息等,对此不做限制。
例如,可以通过序列级语法awp_cand_list_length_num控制运动信息候选列表的长度。参见表2所示,为序列级语法awp_cand_list_length_num的示例。awp_enable_flag表示角度加权预测模式允许标志,是二值变量,值为‘1’表示使用角度加权预测模式;值为‘0’表示不使用角度加权预测模式。AwpEnableFlag的值等于awp_enable_flag的值,如果位流中不存在awp_enable_flag,AwpEnableFlag的值为0。awp_cand_list_length_minus2表示角度加权预测模式的运动信息候选列表的长度,AwpCandListLengthMinus2的值等于awp_cand_list_length_minus2,awp_cand_list_length_minus2的取值范围可为0~3,如果位流中不存在awp_cand_list_length_minus2,AwpCandListLengthMinus2的值为0。
表2
实施例12:针对实施例1-实施例3,编码端/解码端得到运动信息候选列表(参见实施例10和11)后,可以基于运动信息候选列表获取第一目标运动信息和第二目标运动信息。例如,可以基于该运动信息候选列表选择一个候选运动信息作为第一目标运动信息,选择另一个候选运动信息作为第二目标运动信息。或者,基于该运动信息候选列表选择一个候选运动信息叠加第一运动矢量差导出第一目标运动信息,选择一个候选运动信息叠加第二运动矢量差导出第二目标运动信息。关于目标运动信息的获取方式,可以采用如下方式实现:
方式A、从运动信息候选列表中选择一个候选运动信息作为当前块的第一目标运动信息,从运动信息候选列表中选择另一个候选运动信息作为当前块的第二目标运动信息。
示例性的,针对编码端和解码端来说,均可以获取运动信息候选列表,且编码端的运动信息候选列表与解码端的运动信息候选列表相同,对此运动信息候选列表不做限制。
针对编码端来说,可以基于率失真原则,从运动信息候选列表中选择一个候选运动信息作为当前块的第一目标运动信息,从运动信息候选列表中选择另一个候选运动信息作为当前块的第二目标运动信息,第一目标运动信息与第二目标运动信息不同,对此不做限制。
在一种可能的实施方式中,编码端在向解码端发送编码比特流时,该编码比特流可以携带指示信息a和指示信息b,指示信息a用于指示当前块的第一目标运动信息的索引值1,索引值1表示第一目标运动信息是运动信息候选列表中的第几个候选运动信息。指示信息b用于指示当前块的第二目标运动信息的索引值2,索引值2表示第二目标运动信息是运动信息候选列表中的第几个候选运动信息。示例性的,索引值1和索引值2可以不同。
解码端在接收到编码比特流后,从编码比特流中解析出指示信息a和指示信息b。基于指示信息a,解码端从运动信息候选列表中选择索引值1对应的候选运动信息,该候选运动信息作为当前块的第一目标运动信息。基于指示信息b,解码端从运动信息候选列表中选择索引值2对应的候选运动信息,该候选运动信息作为当前块的第二目标运动信息。
在另一种可能的实施方式中,编码端在向解码端发送编码比特流时,该编码比特流可以携带指示信息a和指示信息c,该指示信息a可以用于指示当前块的第一目标运动信息的索引值1,索引值1表示第一目标运动信息是运动信息候选列表中的第几个候选运动信息。该指示信息c可以用于指示索引值2与索引值1的差值,索引值2表示第二目标运动信息是运动信息候选列表中的第几个候选运动信息。示例性的,索引值1和索引值2可以不同。
解码端在接收到编码比特流后,可以从编码比特流中解析出指示信息a和指示信息c。基于指示信息a,解码端可以从运动信息候选列表中选择索引值1对应的候选运动信息,该候选运动信息作为当前块的第一目标运动信息。基于指示信息c,解码端先根据索引值2与索引值1的差值,以及索引值1确定索引值2,然后,解码端可以从运动信息候选列表中选择索引值2对应的候选运动信息,该候选运动信息作为当前块的第二目标运动信息。
示例性的,第一目标运动信息的指示信息与第二目标运动信息的指示信息,可以进行互换,编码端与解码端一致即可,此处是指示信息的互换,不影响解析过程,即不存在解析依赖。第一目标运动信息的指示信息与第二目标运动信息的指示信息不能相等,假设编码两个索引值,索引值a的取值为1,索引值b的取值为3,先编码索引值a时,索引值b可以编码2(3-1),在先编码索引值b时,则索引值b需要编码3。综上所述,先编码索引值小的指示信息,可以降低较大索引值的编码代价。比如说,先编码第一目标运动信息的指示信息,如索引值a,后编码第二目标运动信息的指示信息,如索引值b。也可以先编码第二目标运动信息的指示信息,如索引值b,后编码第一目标运动信息的指示信息,如索引值a。例如,假设索引值a的取值为1,索引值b的取值为3,则先编码索引值a,后编码索引值b。又例如,假设索引值b的取值为1,索引值a的取值为3,则先编码索引值b,后编码索引值a。
方式B、从运动信息候选列表中选择候选运动信息作为当前块的第一原始运动信息,并从运动信息候选列表中选择候选运动信息作为当前块的第二原始运动信息,第一原始运动信息与第二原始运动信息可以不同,即从运动信息候选列表中选择两个不同的候选运动信息作为第一原始运动信息和第二原始运动信息;或者,第一原始运动信息与第二原始运动信息也可以相同,即从运动信息候选列表中选择相同的候选运动信息作为第一原始运动信息和第二原始运动信息。然后,根据第一原始运动信息确定当前块的第一目标运动信息,根据第二原始运动信息确定当前块的第二目标运动信息,第一目标运动信息与第二目标运动信息不同。
在一种可能的实施方式中,若高层语法允许当前块启用加权预测运动矢量修正模式,则采用上述方式B获取第一目标运动信息与第二目标运动信息,即从运动信息候选列表中选择第一原始运动信息和第二原始运动信息,基于第一原始运动信息确定第一目标运动信息,基于第二原始运动信息确定第二目标运动信息。若高层语法不允许当前块启用加权预测运动矢量修正模式,则采用方式A获取第一目标运动信息和第二目标运动信息,即直接从运动信息候选列表中选择第一目标运动信息和第二目标运动信息。示例性的,该加权预测运动矢量修正模式可以是角度加权预测运动矢量修正模式AWP_MVR。该高层语法可以是序列级控制信息,帧级控制信息,Slice级控制信息,Tile级控制信息,Patch级控制信息,CTU级控制信息,LCU级控制信息,块级控制信息,CU级控制信息,PU级控制信息等,对此不做限制。
在后续实施例中,以启用加权预测运动矢量修正模式的处理流程为例进行说明。
关于如何根据原始运动信息确定目标运动信息,本实施例中给出一种单向运动信息叠加运动矢量差的方案,可称之为角度加权预测运动矢量修正模式(AWP_MVR),比如说,第一原始运动信息包括第一原始运动矢量,第一目标运动信息包括第一目标运动矢量,第二原始运动信息包括第二原始运动矢量,第二目标运动信息包括第二目标运动矢量,在此基础上,可以获取与第一原始运动矢量对应的第一运动矢量差(即MVD);根据第一运动矢量差和第一原始运动矢量确定第一目标运动矢量(即第一运动矢量差与第一原始运动矢量的和作为第一目标运动矢量)。可以获取与第二原始运动矢量对应的第二运动矢量差;根据第二运动矢量差和第二原始运动矢量确定第二目标运动矢量(即第二运动矢量差与第二原始运动矢量的和作为第二目标运动矢量)。
示例性的,在确定第一目标运动矢量时,也可以不叠加第一运动矢量差,即将第一原始运动矢量确定为第一目标运动矢量。但是,在确定第二目标运动矢量,可以叠加第二运动矢量差,即根据第二运动矢量差和第二原始运动矢量确定第二目标运动矢量。或者,
在确定第二目标运动矢量时,也可以不叠加第二运动矢量差,即将第二原始运动矢量确定为第二目标运动矢量。但是,在确定第一目标运动矢量,可以叠加第一运动矢量差,即根据第一运动矢量差和第一原始运动矢量确定第一目标运动矢量。或者,
在确定第一目标运动矢量,可以叠加第一运动矢量差,即根据第一运动矢量差和第一原始运动矢量确定第一目标运动矢量。在确定第二目标运动矢量,可以叠加第二运动矢量差,即根据第二运动矢量差和第二原始运动矢量确定第二目标运动矢量。
示例性的,可以获取第一运动矢量差的方向信息和幅值信息,并根据第一运动矢量差的方向信息和幅值信息确定第一运动矢量差。以及,可以获取第二运动矢量差的方向信息和幅值信息,并根据第二运动矢量差的方向信息和幅值信息确定第二运动矢量差。
示例性的,针对解码端来说,可以采用如下方式获取第一运动矢量差的方向信息:解码端从当前块的编码比特流中解析出第一运动矢量差的方向信息。可以采用如下方式获取第二运动矢量差的方向信息:解码端从当前块的编码比特流中解析出第二运动矢量差的方向信息。
示例性的,针对解码端来说,可以采用如下方式获取第一运动矢量差的幅值信息:解码端从当前块的编码比特流中解析出第一运动矢量差的幅值信息。可以采用如下方式获取第二运动矢量差的幅值信息:解码端从当前块的编码比特流中解析出第二运动矢量差的幅值信息。
在一种可能的实施方式中,编码端和解码端可以约定运动矢量差的方向信息和幅值信息,若方向信息表示方向为向右,幅值信息表示幅值为A,则运动矢量差为(A,0);若方向信息表示方向为向下,幅值信息表示幅值为A,则运动矢量差为(0,-A);若方向信息表示方向为向左,幅值信息表示幅值为A,则运动矢量差为(-A,0);若方向信息表示方向为向上,幅值信息表示幅值为A,则运动矢量差为(0,A);若方向信息表示方向为向右上,幅值信息表示幅值为A,则运动矢量差为(A,A);若方向信息表示方向为向左上,幅值信息表示幅值为A,则运动矢量差为(-A,A);若方向信息表示方向为向左下,幅值信息表示幅值为A,则运动矢量差为(-A,-A);若方向信息表示方向为向右下,幅值信息表示幅值为A,则运动矢量差为(A,-A)。当然,上述只是几个示例,对此方向信息和幅值信息不做限制。
示例性的,运动矢量差可支持上述方向信息的部分或全部,运动矢量差支持的幅值A的取值范围,根据经验进行配置,至少为一个取值,对此不做限制。如运动矢量差支持上,下,左,右等方向,运动矢量差支持如下5类步长配置:1/4-pel,1/2-pel,1-pel,2-pel,4-pel,即幅值A的取值为1,2,4,8,16。综上所述,在方向为向上时,运动矢量差可以为(0,1),(0,2),(0,4),(0,8),(0,16)。在方向为向下时,运动矢量差可以为(0,-1),(0,-2),(0,-4),(0,-8),(0,-16)。在方向为向左时,运动矢量差可以为(-1,0),(-2,0),(-4,0),(-8,0),(-16,0)。在方向为向右时,运动矢量差可以为(1,0),(2,0),(4,0),(8,0),(16,0)。
又例如,运动矢量差支持上,下,左,右等方向,运动矢量差支持如下6类步长配置:1/4-pel,1/2-pel,1-pel,2-pel,3-pel,4-pel,即幅值A的取值可以为1,2,4,8,12,16。
又例如,运动矢量差支持上,下,左,右,左上,左下,右上,右下等八个方向,运动矢量差支持如下3类步长配置:1/4-pel,1/2-pel,1-pel,即幅值A的取值可以为1,2,4。
又例如,运动矢量差支持上,下,左,右等四个方向,运动矢量差支持如下4类步长配置:1/4-pel,1/2-pel,1-pel,2-pel,即幅值A的取值可以为1,2,4,8。
当然,上述只是给出了几个示例,对此不做限制。例如,运动矢量差支持的方向可以任意选择,如可以支持上,下,左,右,左上,左下等六个方向,或者,可以支持上,下等两个方向。又例如,运动矢量差支持的步长配置可变,可以进行灵活配置。又例如,可根据量化参数QP等编码参数对步长配置进行自适应配置,如对较大QP采用1-pel,2-pel,4-pel,8-pel对较小QP采用1/4-pel,1/2-pel,1-pel,2-pel。又例如,可以在序列级,图像级,帧级,Slice级,tile级,patch级,CTU级等配置合适的步长配置,使得解码端可以根据序列级,图像级,帧级,Slice级,tile级,patch级,CTU级解析到的步长配置进行解码操作。
为了方便描述,在后续实施例中,假设运动矢量差支持上,下等方向,支持1-pel,2-pel等步长配置,按照1/4-pel精度描述,则运动矢量差可以为(0,4),(0,8),(0,-4),(0,-8),即,(0,1<<2),(0,1<<3),(0,-1<<2),(0,-1<<3)。
针对编码端来说,在获取到运动信息候选列表后,依次遍历运动信息候选列表中的每个候选运动信息组合,该候选运动信息组合包括两个候选运动信息,一个候选运动信息作为第一原始运动信息,另一个候选运动信息作为第二原始运动信息。需要注意的是,第一原始运动信息与第二原始运动信息可以相同(即从运动信息候选列表中选出的两个候选运动信息相同),也可以不同。若第一原始运动信息与第二原始运动信息相同,则可以通过叠加不同的运动矢量差来保证第一目标运动信息和第二目标运动信息不同。针对每个候选运动信息组合,依次遍历运动矢量差组合,该运动矢量差组合包括第一运动矢量差和第二运动矢量差,第一运动矢量差和第二运动矢量差可以相同或不同。比如说,存在两个运动矢量差,分别为运动矢量差1和运动矢量差2,运动矢量差组合1为运动矢量差1和运动矢量差1,运动矢量差组合2为运动矢量差1(即第一运动矢量差)和运动矢量差2,运动矢量差组合3为运动矢量差2(即第一运动矢量差)和运动矢量差1,运动矢量差组合4为运动矢量差2和运动矢量差2。
示例性的,针对当前遍历的候选运动信息组合和运动矢量差组合,若第一原始运动信息与第二原始运动信息不同,则第一运动矢量差和第二运动矢量差可以相同或不同。若第一原始运动信息与第二原始运动信息相同,则第一运动矢量差和第二运动矢量差可以不同。
针对当前遍历的候选运动信息组合和运动矢量差组合,将第一原始运动信息的运动矢量与第一运动矢量差的和作为第一目标运动矢量,将第二原始运动信息的运动矢量与第二运动矢量差的和作为第二目标运动矢量,基于第一目标运动矢量和第二目标运动矢量确定率失真代价值,对此确定方式不做限制。针对每个候选运动信息组合和每个运动矢量差组合进行上述处理,均得到率失真代价值。然后,从所有率失真代价值中选择最小率失真代价值,在当前块的编码比特流中编码最小率失真代价值对应的候选运动信息组合(第一原始运动信息和第二原始运动信息)的信息和运动矢量差组合(第一运动矢量差和第二运动矢量差)的信息。
比如说,在当前块的编码比特流中编码最小率失真代价值对应的第一原始运动信息在运动信息候选列表中的索引值,最小率失真代价值对应的第二原始运动信息在运动信息候选列表中的索引值,最小率失真代价值对应的第一运动矢量差的方向信息和幅值信息,最小率失真代价值对应的第二运动矢量差的方向信息和幅值信息。例如,针对第一运动矢量差的方向信息或者第二运动矢量差的方向信息来说,该方向信息的指示信息可以为0,用于表示方向列表中的第一个方向。针对第一运动矢量差的幅值信息或者第二运动矢量差的幅值信息来说,该幅值信息的指示信息可以为0,表示步长配置列表中的第一个步长配置。
示例性的,若运动矢量差支持上,下,左,右等四个方向,运动矢量差支持1/4-pel,1/2-pel,1-pel,2-pel,4-pel等5类步长配置时,则运动矢量差的方向信息可以采用2bin定长码(共4类值)进行编码,2bin定长码的4个取值分别表示上,下,左,右等四个方向。运动矢量差的幅值信息可以采用截断一元码进行编码,即通过截断一元码表示5类步长配置。
又例如,若运动矢量差支持上,下,左,右等四个方向,运动矢量差支持1/4-pel,1/2-pel,1-pel,2-pel,3-pel,4-pel等6类步长配置时,则运动矢量差的方向信息可以采用2bin定长码(共4类值)进行编码,运动矢量差的幅值信息可以采用截断一元码进行编码。
又例如,若运动矢量差支持上,下,左,右,左上,左下,右上,右下等八个方向,运动矢量差支持1/4-pel,1/2-pel,1-pel等3类步长配置时,则运动矢量差的方向信息可以采用3bin定长码(共8类值)进行编码,运动矢量差的幅值信息可以采用截断一元码进行编码。
又例如,若运动矢量差支持上,下,左,右等四个方向,运动矢量差支持1/4-pel,1/2-pel,1-pel,2-pel等4类步长配置时,基于此,则运动矢量差的方向信息可以采用截断一元码进行编码,运动矢量差的幅值信息可以采用2bin定长码(共4类值)进行编码。
当然,上述只是编码方式的几个示例,对此编码方式不做限制。
综上所述,针对编码端来说,可以在一定区域内搜索到最佳运动矢量(即目标运动矢量),而后将最佳运动矢量与原始运动矢量的差值,作为运动矢量差(MVD),将运动矢量差的幅值信息和方向信息编入码流。编码端在一定区域内搜索最佳运动矢量时,需要约定运动矢量差的方向以及幅值,即,在(A,0),(0,-A),(-A,0),(0,A),(A,A),(-A,A),(-A,-A),(A,-A)等运动矢量差的限定范围内,搜索最佳运动矢量。
针对解码端来说,在接收到当前块的编码比特流后,可以从编码比特流中解析出第一原始运动信息在运动信息候选列表中的索引值,并从运动信息候选列表中选择与该索引值对应的候选运动信息,将该候选运动信息作为当前块的第一原始运动信息。解码端可以从编码比特流中解析出第二原始运动信息在运动信息候选列表中的索引值,并从运动信息候选列表中选择与该索引值对应的候选运动信息,将该候选运动信息作为当前块的第二原始运动信息。
解码端还可以从该编码比特流中解析出第一运动矢量差的方向信息和幅值信息,并根据该方向信息和该幅值信息确定第一运动矢量差。以及,从该编码比特流中解析出第二运动矢量差的方向信息和幅值信息,并根据该方向信息和该幅值信息确定第二运动矢量差。
然后,解码端可以根据第一运动矢量差和第一原始运动信息确定当前块的第一目标运动信息,并根据第二运动矢量差和第二原始运动信息确定当前块的第二目标运动信息。
示例性的,在根据第一运动矢量差的方向信息和第一运动矢量差的幅值信息确定第一运动矢量差时,若第一运动矢量差的幅值信息表示幅值为A,则:若第一运动矢量差的方向信息表示方向为向右,则第一运动矢量差为(A,0);若第一运动矢量差的方向信息表示方向为向下,则第一运动矢量差为(0,-A);若第一运动矢量差的方向信息表示方向为向左,则第一运动矢量差为(-A,0);若第一运动矢量差的方向信息表示方向为向上,则第一运动矢量差为(0,A)。若第一运动矢量差的方向信息表示方向为向右上,则第一运动矢量差为(A,A);若第一运动矢量差的方向信息表示方向为向左上,则第一运动矢量差为(-A,A);若第一运动矢量差的方向信息表示方向为向左下,则第一运动矢量差为(-A,-A);若第一运动矢量差的方向信息表示方向为向右下,则第一运动矢量差为(A,-A)。
在根据第二运动矢量差的方向信息和第二运动矢量差的幅值信息确定第二运动矢量差时,若第二运动矢量差的幅值信息表示幅值为A,则:若第二运动矢量差的方向信息表示方向为向右,则第二运动矢量差为(A,0);若第二运动矢量差的方向信息表示方向为向下,则第二运动矢量差为(0,-A);若第二运动矢量差的方向信息表示方向为向左,则第二运动矢量差为(-A,0);若第二运动矢量差的方向信息表示方向为向上,则第二运动矢量差为(0,A)。若第二运动矢量差的方向信息表示方向为向右上,则第二运动矢量差为(A,A);若第二运动矢量差的方向信息表示方向为向左上,则第二运动矢量差为(-A,A);若第二运动矢量差的方向信息表示方向为向左下,则第二运动矢量差为(-A,-A);若第二运动矢量差的方向信息表示方向为向右下,则第二运动矢量差为(A,-A)。
参见上述实施例,编码端在对运动矢量差的方向信息进行编码时,可以采用定长码,截断一元码等方式,因此,解码端可以采用定长码,截断一元码等方式,对运动矢量差的方向信息进解码,得到运动矢量差的方向信息,如上,下,左,右,左上,左下,右上,右下等。
参见上述实施例,编码端在对运动矢量差的幅值信息进行编码时,可以采用定长码,截断一元码等方式,因此,解码端可以采用定长码,截断一元码等方式,对运动矢量差的幅值信息进解码,得到运动矢量差的幅值信息,如1/4-pel,1/2-pel,1-pel,2-pel等步长配置,继而根据1/4-pel,1/2-pel,1-pel,2-pel等步长配置确定出运动矢量差的幅值A的取值。
在一种可能的实施方式中,编码端还可以在编码比特流中编码用于指示是否对第一原始运动矢量叠加运动矢量差的第一修正标志(如awp_mvr_cand_enable_flag0)和用于指示是否对第一原始运动矢量叠加运动矢量差的第二修正标志(如awp_mvr_cand_enable_flag1),该第一修正标志用于指示对第一原始运动矢量叠加或者不叠加运动矢量差。该第二修正标志用于指示对第二原始运动矢量叠加或者不叠加运动矢量差。
解码端在接收到当前块的编码比特流后,可以先从当前块的编码比特流中解析出第一修正标志和第二修正标志。若第一修正标志用于指示对第一原始运动矢量叠加运动矢量差,则从当前块的编码比特流中解析出第一运动矢量差的方向信息和幅值信息,并根据第一运动矢量差的方向信息和幅值信息确定第一运动矢量差,继而根据第一原始运动矢量和第一运动矢量差确定当前块的第一目标运动矢量。若第一修正标志用于指示对第一原始运动矢量不叠加运动矢量差,则不会解析第一运动矢量差的方向信息和幅值信息,可以直接将第一原始运动矢量作为当前块的第一目标运动矢量。若第二修正标志用于指示对第二原始运动矢量叠加运动矢量差,则从当前块的编码比特流中解析出第二运动矢量差的方向信息和幅值信息,并根据第二运动矢量差的方向信息和幅值信息确定第二运动矢量差,继而根据第二原始运动矢量和第二运动矢量差确定当前块的第二目标运动矢量。若第二修正标志用于指示对第二原始运动矢量不叠加运动矢量差,则不会解析第二运动矢量差的方向信息和幅值信息,可以直接将第二原始运动矢量作为当前块的第二目标运动矢量。
示例性的,当第一修正标志为第一取值时,指示对第一原始运动矢量叠加运动矢量差,当第一修正标志为第二取值时,指示对第一原始运动矢量不叠加运动矢量差。当第二修正标志为第一取值时,指示对第二原始运动矢量叠加运动矢量差,当第二修正标志为第二取值时,表示对第二原始运动矢量不叠加运动矢量差。第一取值和第二取值可以根据经验配置,如第一取值为1,第二取值为0,或者,如第一取值为0,第二取值为1。
实施例13:在实施例12中,解码端可以从编码比特流中解析出第一运动矢量差的幅值信息和第二运动矢量差的幅值信息,在一种可能的实施方式中,编码端和解码端可以构建相同的一个运动矢量差幅值列表,编码端确定第一运动矢量差的幅值信息在该运动矢量差幅值列表中的幅值索引,且编码比特流包括第一运动矢量差的幅值索引。解码端从当前块的编码比特流中解析出第一运动矢量差的幅值索引,并从该运动矢量差幅值列表选取与该幅值索引对应的幅值信息,该幅值信息即第一运动矢量差的幅值信息。编码端确定第二运动矢量差的幅值信息在该运动矢量差幅值列表中的幅值索引,且编码比特流包括第二运动矢量差的幅值索引。解码端从当前块的编码比特流中解析出第二运动矢量差的幅值索引,并从该运动矢量差幅值列表选取与该幅值索引对应的幅值信息,该幅值信息即第二运动矢量差的幅值信息。
在另一种可能的实施方式中,编码端和解码端可以构建相同的至少两个运动矢量差幅值列表,如编码端和解码端构建相同的运动矢量差幅值列表1,并构建相同的运动矢量差幅值列表2。编码端先基于运动矢量差幅值列表的指示信息确定目标运动矢量差幅值列表,即基于运动矢量差幅值列表的指示信息,从所有运动矢量差幅值列表中选取目标运动矢量差幅值列表;然后,编码端确定第一运动矢量差的幅值信息在该目标运动矢量差幅值列表中的幅值索引,且编码比特流包括第一运动矢量差的幅值索引。解码端先基于运动矢量差幅值列表的指示信息确定目标运动矢量差幅值列表,即基于运动矢量差幅值列表的指示信息,从所有运动矢量差幅值列表中选取目标运动矢量差幅值列表。然后,解码端从当前块的编码比特流中解析出第一运动矢量差的幅值索引,并从该目标运动矢量差幅值列表中选取与该第一运动矢量差的幅值索引对应的幅值信息,该幅值信息也就是第一运动矢量差的幅值信息。
编码端还可以确定第二运动矢量差的幅值信息在该目标运动矢量差幅值列表中的幅值索引,且编码比特流可以包括第二运动矢量差的幅值索引。解码端还可以从当前块的编码比特流中解析出第二运动矢量差的幅值索引,并从该目标运动矢量差幅值列表中选取与第二运动矢量差的幅值索引对应的幅值信息,该幅值信息也就是第二运动矢量差的幅值信息。
示例性的,运动矢量差幅值列表的指示信息,可以是任意级别的指示信息,比如说,可以是序列级的运动矢量差幅值列表的指示信息,帧级的运动矢量差幅值列表的指示信息,Slice级的运动矢量差幅值列表的指示信息,Tile级的运动矢量差幅值列表的指示信息,Patch级的运动矢量差幅值列表的指示信息,CTU级的运动矢量差幅值列表的指示信息,LCU级的运动矢量差幅值列表的指示信息,块级的运动矢量差幅值列表的指示信息,CU级的运动矢量差幅值列表的指示信息,PU级的运动矢量差幅值列表的指示信息,对此不做限制,为了方便描述,以帧级的运动矢量差幅值列表的指示信息为例,帧级的运动矢量差幅值列表的指示信息可以为awp_umve_offset_list_flag,通过awp_umve_offset_list_flag控制运动矢量差幅值列表的切换。
比如说,编码端和解码端可以构建运动矢量差幅值列表1和运动矢量差幅值列表2,参见表3和表4所示。可以对运动矢量差幅值列表1进行二值化处理,并对运动矢量差幅值列表2进行二值化处理,对此处理方式不做限制。例如,对运动矢量差幅值列表1采用截断一元码,对运动矢量差幅值列表2采用截断一元码,或者,对运动矢量差幅值列表1采用截断一元码,对运动矢量差幅值列表2采用定长码,或者,对运动矢量差幅值列表1采用定长码,对运动矢量差幅值列表2采用截断一元码,对此不做限制,参见表5和表6所示。
表3
MVD幅值(像素) | 1/4 | 1/2 | 1 | 2 | 4 |
表4
MVD幅值(像素) | 1/4 | 1/2 | 1 | 2 | 4 | 8 | 16 | 32 |
表5
MVD幅值(像素) | 1/4 | 1/2 | 1 | 2 | 4 |
二值化 | 1 | 01 | 001 | 0001 | 0000 |
表6
MVD幅值(像素) | 1/4 | 1/2 | 1 | 2 | 4 | 8 | 16 | 32 |
二值化 | 000 | 001 | 011 | 010 | 10 | 110 | 1110 | 1111 |
在上述应用场景下,通过awp_umve_offset_list_flag控制运动矢量差幅值列表的切换,即控制采用表3所示的运动矢量差幅值列表,或表4所示的运动矢量差幅值列表。例如,若awp_umve_offset_list_flag的取值为第一取值,则表3所示的运动矢量差幅值列表为目标运动矢量差幅值列表,若awp_umve_offset_list_flag的取值为第二取值,则表4所示的运动矢量差幅值列表为目标运动矢量差幅值列表;或者,若awp_umve_offset_list_flag的取值为第二取值,则表3所示的运动矢量差幅值列表为目标运动矢量差幅值列表,若awp_umve_offset_list_flag的取值为第一取值,则表4所示的运动矢量差幅值列表为目标运动矢量差幅值列表
在目标运动矢量差幅值列表为表3时,编码端采用表5所示的二值化方式进行编码,解码端采用表5所示的二值化方式进行解码。在目标运动矢量差幅值列表为表4时,编码端采用表6所示的二值化方式进行编码,解码端采用表6所示的二值化方式进行解码。
实施例14:在实施例12中,解码端可以从编码比特流中解析出第一运动矢量差的幅值信息和第二运动矢量差的幅值信息,例如,可以基于第一运动矢量差的方向信息确定第一目标运动矢量差幅值列表;从编码比特流中解析第一运动矢量差的幅值索引;从第一目标运动矢量差幅值列表中选取该幅值索引对应的第一运动矢量差的幅值信息;基于第二运动矢量差的方向信息确定第二目标运动矢量差幅值列表;从编码比特流中解析第二运动矢量差的幅值索引;从第二目标运动矢量差幅值列表中选取该幅值索引对应的第二运动矢量差的幅值信息。
在一种可能的实施方式中,参见图9A所示,可以通过方形限制运动矢量差的幅值,且可以配置一个运动矢量差幅值列表,参见表7所示,为运动矢量差幅值列表的示例,显然,运动矢量差的所有方向均对应同一个运动矢量差幅值列表,该运动矢量差幅值列表中的幅值信息可以为1,2,4,8,16,当然,这里只是运动矢量差幅值列表的一个示例。从图9A可以看出,针对水平轴和垂直轴上的点,对应的是方向编号0-3(0表示向右,1表示向左,2表示向上,3表示向下),针对两个倾斜轴上的点,对应的是方向编号4-7(4表示向右上,5表示向左下,6表示向右下,7表示向左上)。
表7
基于表7,所有运动矢量差的所有方向均对应同一个运动矢量差幅值列表(1,2,4,8,16),若运动矢量差(即第一运动矢量差或者第二运动矢量差)的方向编号为0-7(0表示向右,1表示向左,2表示向上,3表示向下,4表示向右上,5表示向左下,6表示向右下,7表示向左上),则基于运动矢量差的方向信息确定目标运动矢量差幅值列表为(1,2,4,8,16),从编码比特流中解析运动矢量差的幅值索引,并从目标运动矢量差幅值列表中选取该幅值索引对应的幅值信息,如幅值信息为1,或2,或4,或8,或16,这个幅值信息就是上述实施例的A,因此,可以基于运动矢量差的幅值信息和运动矢量差的方向信息确定运动矢量差。
在另一种可能的实施方式中,参见图9B所示,可以通过圆形限制运动矢量差的幅值,且可以配置两个运动矢量差幅值列表,参见表8所示,为运动矢量差幅值列表的示例,显然,运动矢量差的所有方向对应两个运动矢量差幅值列表,运动矢量差幅值列表1中的幅值信息可以为1,2,4,8,16,运动矢量差幅值列表2中的幅值信息可以为1,2,3,6,11。从图9B可以看出,针对水平轴和垂直轴上的点,对应的是方向编号0-3(0表示向右,1表示向左,2表示向上,3表示向下),针对两个倾斜轴上的点,对应的是方向编号4-7(4表示向右上,5表示向左下,6表示向右下,7表示向左上)。
表8
参见表8所示,运动矢量差的方向(0-3)对应同一个运动矢量差幅值列表1(1,2,4,8,16),运动矢量差的方向(4-7)对应同一个运动矢量差幅值列表2(1,2,3,6,11),若运动矢量差的方向编号为0-3(0表示向右,1表示向左,2表示向上,3表示向下),则基于运动矢量差的方向信息确定目标运动矢量差幅值列表为运动矢量差幅值列表1(1,2,4,8,16),运动矢量差幅值列表1中的幅值信息为1,或2,或4,或8,或16,即上述实施例的A,若运动矢量差的方向编号为4-7(4表示向右上,5表示向左下,6表示向右下,7表示向左上),则基于运动矢量差的方向信息确定目标运动矢量差幅值列表为运动矢量差幅值列表2(1,2,3,6,11),运动矢量差幅值列表2中的幅值信息为1,或2,或3,或6,或11,即上述实施例的A。
综上所述,解码端可以基于第一运动矢量差的方向信息确定第一目标运动矢量差幅值列表;从编码比特流中解析第一运动矢量差的幅值索引;从第一目标运动矢量差幅值列表中选取该幅值索引对应的第一运动矢量差的幅值信息。以及,解码端基于第二运动矢量差的方向信息确定第二目标运动矢量差幅值列表;从编码比特流中解析第二运动矢量差的幅值索引;从第二目标运动矢量差幅值列表中选取该幅值索引对应的第二运动矢量差的幅值信息。
比如说,若第一运动矢量差的方向信息属于方向(0-3)中的一个,则第一目标运动矢量差幅值列表为运动矢量差幅值列表1(1,2,4,8,16),假设第一运动矢量差的幅值索引表示运动矢量差幅值列表1中的第四个幅值,则从运动矢量差幅值列表1(1,2,4,8,16)中选取该幅值索引对应的第一运动矢量差的幅值信息,即第一运动矢量差的幅值信息为8。
若第二运动矢量差的方向信息属于方向(4-7)中的一个,则第二目标运动矢量差幅值列表为运动矢量差幅值列表2(1,2,3,6,11),假设第二运动矢量差的幅值索引表示运动矢量差幅值列表2中的第四个幅值,则从运动矢量差幅值列表2(1,2,3,6,11)中选取该幅值索引对应的第二运动矢量差的幅值信息,即第二运动矢量差的幅值信息为6。
综上所述,解码端可以得到第一运动矢量差的幅值信息和第二运动矢量差的幅值信息,基于第一运动矢量差的幅值信息可以得到第一运动矢量差,实现方式参见实施例12。基于第二运动矢量差的幅值信息可以得到第二运动矢量差,实现方式参见实施例12。
参见上述实施例,若第一运动矢量差的方向信息表示方向为向右,或向下,或向左,或向上,第一目标运动矢量差幅值列表为第一运动矢量差幅值列表(即运动矢量差幅值列表1);若第一运动矢量差的方向信息表示方向为向左上,或向左下,或向右上,或向右下,第一目标运动矢量差幅值列表为第二运动矢量差幅值列表(即运动矢量差幅值列表2)。若第二运动矢量差的方向信息表示方向为向右,或向下,或向左,或向上,第二目标运动矢量差幅值列表为第一运动矢量差幅值列表;若第二运动矢量差的方向信息表示方向为向左上,或向左下,或向右上,或向右下,第二目标运动矢量差幅值列表为第二运动矢量差幅值列表。
在上述实施例中,表7和表8均是以运动矢量差幅值列表中存在5个幅值为例,实际应用中,运动矢量差幅值列表可能存在更多的幅值,或者存在更少的幅值,对此不做限制。
实施例15:在实施例12-实施例14的基础上,针对第一运动矢量差和第二运动矢量差,以下结合具体应用场景,角度加权预测运动矢量修正模式AWP_MVR的相关语法进行说明:
应用场景1:参见表9所示,为相关语法的示例,SkipFlag表示当前块是否为Skip模式,DirectFlag表示当前块是否为Direct模式,AwpFlag表示当前块是否为AWP模式。
awp_idx(角度加权预测模式索引):跳过模式或直接模式下的角度加权预测模式索引值,AwpIdx的值,可以等于awp_idx的值。如果码流中不存在awp_idx,则AwpIdx的值等于0。
awp_cand_idx0(角度加权预测模式的第一运动信息索引):跳过模式或直接模式下的角度加权预测模式的第一运动信息索引值。AwpCandIdx0的值等于awp_cand_idx0的值,如果码流中不存在awp_cand_idx0,则AwpCandIdx0的值等于0。
awp_cand_idx1(角度加权预测模式第二运动信息索引):跳过模式或直接模式下的角度加权预测模式的第二运动信息索引值。AwpCandIdx1的值等于awp_cand_idx1的值,如果码流中不存在awp_cand_idx1,则AwpCandIdx1的值等于0。awp_mvd_flag(角度加权预测运动矢量修正模式标志),是一个二值变量,awp_mvd_flag为第一取值(如1)时,表示当前块为增强角度加权预测模式,awp_mvd_flag为第二取值(如0)时,表示当前块为非角度加权预测运动矢量修正模式。示例性的,AwpMvdFlag的取值,可以等于awp_mvd_flag的值,如果码流中不存在awp_mvd_flag,则AwpMvdFlag的值等于0。
awp_mvr_cand_enable_flag0(角度加权预测模式第一修正标志),可以是一个二值变量,awp_mvr_cand_enable_flag0为第一取值时,表示角度加权预测模式的第一运动信息需要叠加运动信息差;awp_mvr_cand_enable_flag0为第二取值时,表示角度加权预测模式的第一运动信息不需要叠加运动信息差。AwpMvrCandEnableFlag0的值等于awp_mvr_cand_enable_flag0的值,如果码流中不存在awp_mvr_cand_enable_flag0,则AwpMvrCandEnableFlag0的值为0。
awp_mvr_cand_enable_flag1(角度加权预测模式第二修正标志),可以是一个二值变量,awp_mvr_cand_enable_flag1为第一取值时,表示角度加权预测模式的第二运动信息需要叠加运动信息差;awp_mvr_cand_enable_flag1为第二取值时,表示角度加权预测模式的第二运动信息不需要叠加运动信息差。AwpMvrCandEnableFlag1的值等于awp_mvr_cand_enable_flag1的值,如果码流中不存在awp_mvr_cand_enable_flag1,则可以存在以下情况:若AwpMvdFlag等于1,那么,AwpMvrCandEnableFlag1等于1,否则,AwpMvrCandEnableFlag1等于0。
awp_mvd_dir0(第一运动信息运动矢量差方向索引值),角度加权预测模式第一运动信息的运动矢量差方向索引值。示例性的,AwpMvdDir0的值可以等于awp_mvd_dir0的值,如果码流中不存在awp_mvd_dir0,则AwpMvdDir0的值可以等于0。
awp_mvd_step0(第一运动信息运动矢量差步长索引值),角度加权预测模式第一运动信息的运动矢量差步长索引值。示例性的,AwpMvdStep0的值可以等于awp_mvd_step0的值,如果码流中不存在awp_mvd_step0,则AwpMvdStep0的值可以等于0。
awp_mvd_dir1(第二运动信息运动矢量差方向索引值),角度加权预测模式第二运动信息的运动矢量差方向索引值。示例性的,AwpMvdIdx1的值可以等于awp_mvd_dir1的值。如果码流中不存在awp_mvd_dir1,则AwpMvdDir1的值可以等于0。
awp_mvd_step1(第二运动信息运动矢量差步长索引值),角度加权预测模式第二运动信息的运动矢量差步长索引值。示例性的,AwpMvdStep1的值可以等于awp_mvd_step1的值。如果码流中不存在awp_mvd_step1,则AwpMvdStep1的值可以等于0。
表9
示例性的,若增加角度加权预测运动矢量修正模式AWP_MVR的高层语法控制,以增加序列级控制语法awp_mvr_enable_flag为例,帧级等同理,则高层语法可以参见表10所示。
表10
在表10中,awp_enable_flag是角度加权预测模式允许标志,是二值变量。值为‘1’表示可使用角度加权预测模式;值为‘0’表示不应使用角度加权预测模式。AwpEnableFlag的值等于awp_enable_flag的值。如果位流中不存在awp_enable_flag,AwpEnableFlag的值为0。
在表10中,awp_mvr_enable_flag是角度加权预测运动矢量修正模式允许标志,是二值变量。值为‘1’表示可使用角度加权预测运动矢量修正模式;值为‘0’表示不应使用角度加权预测运动矢量修正模式。AwpMvrEnableFlag的值等于awp_mvr_enable_flag的值。如果位流中不存在awp_mvr_enable_flag,AwpMvrEnableFlag的值为0。
表9的部分语法受到角度加权预测运动矢量修正模式允许标志的控制,参见表11所示。
表11
应用场景2:参见表12所示,为相关语法的示例,SkipFlag表示当前块是否为Skip模式,DirectFlag表示当前块是否为Direct模式,AwpFlag表示当前块是否为AWP模式。
关于awp_idx,awp_cand_idx0和awp_cand_idx1,可以参见应用场景1,在此不再赘述。
awp_mvr_cand_enable_flag0(角度加权预测模式第一修正标志),可以是一个二值变量,awp_mvr_cand_enable_flag0为第一取值时,表示角度加权预测模式的第一运动信息需要叠加运动信息差;awp_mvr_cand_enable_flag0为第二取值时,表示角度加权预测模式的第一运动信息不需要叠加运动信息差。AwpMvrCandEnableFlag0的值等于awp_mvr_cand_enable_flag0的值,如果码流中不存在awp_mvr_cand_enable_flag0,则AwpMvrCandEnableFlag0等于0。
awp_mvr_cand_enable_flag1(角度加权预测模式第二修正标志),可以是一个二值变量,awp_mvr_cand_enable_flag1为第一取值时,表示角度加权预测模式的第二运动信息需要叠加运动信息差;awp_mvr_cand_enable_flag1为第二取值时,表示角度加权预测模式的第二运动信息不需要叠加运动信息差。AwpMvrCandEnableFlag1的值等于awp_mvr_cand_enable_flag1的值,如果码流中不存在awp_mvr_cand_enable_flag1,则AwpMvrCandEnableFlag1等于0。
关于awp_mvd_dir0,awp_mvd_step0,awp_mvd_dir1,awp_mvd_step1,参见应用场景1。
表12
示例性的,若增加角度加权预测运动矢量修正模式AWP_MVR的高层语法控制,以增加序列级控制语法awp_mvr_enable_flag为例,帧级等同理,则高层语法可以参见表10所示。
表12的部分语法受到角度加权预测运动矢量修正模式允许标志的控制,参见表13所示。
表13
示例性的,针对应用场景1和应用场景2,二者的区别在于:
在应用场景1中,存在语法awp_mvd_flag,在应用场景2中,不存在语法awp_mvd_flag。在应用场景1中,可以通过awp_mvd_flag控制角度加权预测运动矢量修正模式,即通过总开关控制角度加权预测运动矢量修正模式。
应用场景3:可以对应用场景1和应用场景2进行衍生,将AWP模式与AWP_MVR模式融合,即对跨度增加0跨度,从而不需要编码是否使能的标志位。例如,运动矢量差支持上,下,左,右等方向,运动矢量差支持如下步长配置:0-pel,1/4-pel,1/2-pel,1-pel,2-pel,4-pel,即增加步长配置0-pel。在此基础上,表9/表12可以更新为表14,相关语法参见表9。
表14
示例性的,若增加角度加权预测运动矢量修正模式AWP_MVR的高层语法控制,以增加序列级控制语法awp_mvr_enable_flag为例,帧级等同理,则高层语法可以参见表10所示。
表14的部分语法受到角度加权预测运动矢量修正模式允许标志的控制,参见表15所示。
表15
示例性的,针对各应用场景来说,相关语法中语法元素的顺序可进行相应调整,比如说,针对表12所示的相关语法,可以对语法元素的顺序进行相应调整,得到表16所示相关语法。
表16
示例性的,若增加角度加权预测运动矢量修正模式AWP_MVR的高层语法控制,以增加序列级控制语法awp_mvr_enable_flag为例,帧级等同理,则高层语法可以参见表10所示。
表16的部分语法受到角度加权预测运动矢量修正模式允许标志的控制,参见表17所示。
表17
从表12和表16看出,对awp_cand_idx0和awp_cand_idx1的顺序进行调整,在表16中,awp_cand_idx0和awp_cand_idx1的解析方式,可以根据AwpMvrCandEnableFlag0,AwpMvrCandEnableFlag1,AwpMvdDir0,AwpMvdStep0,AwpMvdDir1,AwpMvdStep1中一个或多个的值进行调整。
例如,当AwpMvrCandEnableFlag0,AwpMvrCandEnableFlag1均为0,或者,当AwpMvrCandEnableFlag0,AwpMvrCandEnableFlag1均为0,且AwpMvdDir0等于AwpMvdDir1,且AwpMvdStep0等于AwpMvdStep1时,awp_cand_idx0以及awp_cand_idx1的解析方式不一致,否则,解析方式完全一致。
解析方式可以是二值化的设计,上下文的选取等形式。
应用场景5:参见表18所示,还可以增加AWP_MVR技术中MVD方向(即上述实施例14中的8个MVD方向,如awp_mvr_cand_dir0表示第一MVD的方向,awp_mvr_cand_dir1表示第二MVD的方向),相关语法元素的含义可以参见表9-表17,在此不再重复赘述。
表18
示例性的,若增加角度加权预测运动矢量修正模式AWP_MVR的高层语法控制,以增加序列级控制语法awp_mvr_enable_flag为例,帧级等同理,则高层语法可以参见表10所示。
表18的部分语法受到角度加权预测运动矢量修正模式允许标志的控制,参见表19所示。
表19
在一种可能的实施方式中,AwpMvrCandEnableFlag0表示是否对第一原始运动信息(即原始运动矢量)叠加MVD(即第一运动矢量差),如果叠加,基于AwpMvdDir0和AwpMvdStep0确定出第一原始运动信息对应的MVD值,AwpMvrCandEnableFlag1表示是否对第二原始运动信息叠加MVD,如果叠加,基于AwpMvdDir1和AwpMvdStep1确定出第二原始运动信息对应的MVD值。显然,若一个原始运动信息叠加MVD,另一个原始运动信息不叠加MVD,或两个原始运动信息叠加的MVD值不同,则允许第一原始运动信息和第二原始运动信息相同,awp_cand_idx0表示第一原始运动信息的索引值,awp_cand_idx1表示第二原始运动信息的索引值,因此,awp_cand_idx0和awp_cand_idx1的解析方式完全一致,即从完整的运动信息候选列表中解析出与awp_cand_idx0对应的第一原始运动信息,并从完整的运动信息候选列表中解析出与awp_cand_idx1对应的第二原始运动信息。
若两个原始运动信息均不叠加MVD,或者,两个原始运动信息叠加的MVD值相同,则第一原始运动信息和第二原始运动信息不同,基于此,awp_cand_idx0和awp_cand_idx1的解析方式不一致,从完整的运动信息候选列表中解析出与awp_cand_idx0对应的第一原始运动信息,由于第二原始运动信息与第一原始运动信息不同,因此,不是从完整的运动信息候选列表中解析出与awp_cand_idx1对应的第二原始运动信息,而是在排除第一原始运动信息的基础上,从不完整的运动信息候选列表中解析出与awp_cand_idx1对应的第二原始运动信息。
基于运动信息候选列表AwpUniArray,从AwpUniArray中选择两个候选运动信息,基于该两个候选运动信息确定当前块的第一目标运动信息和第二目标运动信息。比如说,解码端从编码比特流中解析出AwpCandIdx0和AwpCandIdx1,将AwpUniArray中的第AwpCandIdx0+1个运动信息赋值给mvAwp0L0,mvAwp0L1,RefIdxAwp0L0,RefIdxAwp0L1。将AwpUniArray中的第AwpCandIdx1+1个运动信息赋值给mvAwp1L0,mvAwp1L1,RefIdxAwp1L0,RefIdxAwp1L1。当然,也可将AwpUniArray中第AwpCandIdx0+1个运动信息赋值给mvAwp1L0,mvAwp1L1,RefIdxAwp1L0,RefIdxAwp1L1,将AwpUniArray中第AwpCandIdx1+1个运动信息赋值给mvAwp0L0,mvAwp0L1,RefIdxAwp0L0,RefIdxAwp0L1。
AwpCandIdx0表示第一目标运动信息的索引值,因此,可以将AwpUniArray中的第AwpCandIdx0+1个运动信息赋值给第一目标运动信息。例如,若AwpCandIdx0为0,则将AwpUniArray中的第1个运动信息赋值给第一目标运动信息,以此类推。
mvAwp0L0,mvAwp0L1,RefIdxAwp0L0,RefIdxAwp0L1合起来作为第一目标运动信息,即第一目标运动信息包括指向List0的单向运动信息以及指向List1的单向运动信息。
若AwpUniArray中的第AwpCandIdx0+1个运动信息是指向List0的单向运动信息,则第一目标运动信息包括指向List0的单向运动信息,且指向List1的单向运动信息为空。
若AwpUniArray中的第AwpCandIdx0+1个运动信息是指向List1的单向运动信息,则第一目标运动信息包括指向List1的单向运动信息,且指向List0的单向运动信息为空。
示例性的,mvAwp0L0和RefIdxAwp0L0表示第一目标运动信息中指向List0的单向运动信息,mvAwp0L1和RefIdxAwp0L1表示第一目标运动信息中指向List1的单向运动信息。
若RefIdxAwp0L0有效,则表示指向List0的单向运动信息为有效,因此,第一目标运动信息的预测模式为PRED_List0。若RefIdxAwp0L1有效,则表示指向List1的单向运动信息为有效,因此,第一目标运动信息的预测模式为PRED_List1。
示例性的,AwpCandIdx1表示第二目标运动信息的索引值,因此,可以将AwpUniArray中的第AwpCandIdx1+1个运动信息赋值给第二目标运动信息。例如,若AwpCandIdx1为0,则将AwpUniArray中的第1个运动信息赋值给第二目标运动信息,以此类推。
mvAwp1L0,mvAwp1L1,RefIdxAwp1L0,RefIdxAwp1L1合起来作为第二目标运动信息,即第二目标运动信息包括指向List0的单向运动信息以及指向List1的单向运动信息。
若AwpUniArray中的第AwpCandIdx1+1个运动信息是指向List0的单向运动信息,则第二目标运动信息包括指向List0的单向运动信息,且指向List1的单向运动信息为空。
若AwpUniArray中的第AwpCandIdx1+1个运动信息是指向List1的单向运动信息,则第二目标运动信息包括指向List1的单向运动信息,且指向List0的单向运动信息为空。
示例性的,mvAwp1L0和RefIdxAwp1L0表示第二目标运动信息中指向List0的单向运动信息,mvAwp1L1和RefIdxAwp1L1表示第二目标运动信息中指向List1的单向运动信息。
若RefIdxAwp1L0有效,则表示指向List0的单向运动信息为有效,因此,第二目标运动信息的预测模式为PRED_List0。若RefIdxAwp1L1有效,则表示指向List1的单向运动信息为有效,因此,第二目标运动信息的预测模式为PRED_List1。
在一种可能的实施方式中,针对实施例11的应用场景4,在第五步之后,还可以包括第六步,以下对第六步进行说明。第六步,若AwpMvrCandFlag0或者AwpMvrCandFlag1等于1,对mvAwp0L0,mvAwp0L1以及mvAwp1L0,mvAwp1L1进行修正。
a)根据AwpMvrCandStep0和AwpMvrCandStep1的值查询表20所示的映射关系,得到运动矢量偏移量AwpMvrOffset0和AwpMvrOffset1。
表20
AwpMvrCandStep0,wpMvrCandStep1 | AwpMvrOffset0,AwpMvrOffset1 |
0 | 1 |
1 | 2 |
2 | 4 |
3 | 8 |
4 | 16 |
b)若AwpMvrCandFlag0的值等于1,修正mvAwp0L0,mvAwp0L1的值,
若RefIdxAwp0L0的值大于等于0,则mvAwp0L0(mvAwp0L0_x,mvAwp0L0_y)修正为:
表21
否则,RefIdxAwp0L1的值大于等于0,mvAwp0L1(mvAwp0L1_x,mvAwp0L1_y)修正为:
表22
c)若AwpMvrCandFlag1的值等于1,修正mvAwp1L0,mvAwp1L1的值,
若RefIdxAwp1L0的值大于等于0,则mvAwp1L0(mvAwp1L0_x,mvAwp1L0_y)修正为:
表23
否则,RefIdxAwp1L1的值大于等于0,mvAwp1L1(mvAwp1L1_x,mvAwp1L1_y)修正为:
表24
在上述表21-表24中,是以4个MVD方向(即表7和表8中的方向编号0、1、2、3)为例,在另一种可能的实施方式中,若MVD方向为8个MVD方向(即表7和表8中的方向编号0、1、2、3、4、5、6、7),针对第六步的b),若RefIdxAwp0L0的值大于等于0,则mvAwp0L0(mvAwp0L0_x,mvAwp0L0_y)还可以修正为(用于替换表21):
表25
针对第六步的b),若RefIdxAwp0L1的值大于等于0,则mvAwp0L1(mvAwp0L1_x,mvAwp0L1_y)还可以修正为(用于替换表22):
表26
针对第六步的c),若RefIdxAwp1L0的值大于等于0,则mvAwp1L0(mvAwp1L0_x,mvAwp1L0_y)还可以修正为(用于替换表23):
表27
针对第六步的c),若RefIdxAwp1L1的值大于等于0,则mvAwp1L1(mvAwp1L1_x,mvAwp1L1_y)还可以修正为(用于替换表24):
表28
实施例16:在上述实施例1-实施例3,实施例10-实施例15中,涉及当前块的第一目标运动信息和第二目标运动信息,关于如何存储当前块的目标运动信息,可以采用如下方式:
在一种可能的实施方式中,针对当前块的每个运动信息存储单元,根据运动信息存储单元的坐标,当前块的权重预测角度和当前块外部的周边位置的参考权重值确定该运动信息存储单元的存储方式;基于该运动信息存储单元的存储方式,将第一目标运动信息存储为该运动信息存储单元的目标运动信息,或者,将第二目标运动信息存储为该运动信息存储单元的目标运动信息。例如,针对运动信息存储单元,可以从该运动信息存储单元中选取一个目标像素位置(如可以基于运动信息存储单元的坐标,从该运动信息存储单元中选取一个像素位置作为目标像素位置),如运动信息存储单元的左上角的像素位置,右上角的像素位置,左下角的像素位置,右下角的像素位置,中心像素位置等。根据该权重预测角度从当前块外部的周边位置中确定该目标像素位置指向的周边匹配位置,根据该周边匹配位置关联的参考权重值确定该运动信息存储单元的存储方式。比如说,若该周边匹配位置关联的参考权重值大于预设阈值(可以根据经验配置),则确定运动信息存储单元的存储方式为存储第一目标运动信息,若该周边匹配位置关联的参考权重值不大于预设阈值,则确定运动信息存储单元的存储方式为存储第二目标运动信息;或者,若该周边匹配位置关联的参考权重值大于预设阈值,则确定运动信息存储单元的存储方式为存储第二目标运动信息,若该周边匹配位置关联的参考权重值不大于预设阈值,则确定运动信息存储单元的存储方式为存储第一目标运动信息。若运动信息存储单元的存储方式为存储第一目标运动信息,则将第一目标运动信息存储为该运动信息存储单元的目标运动信息,或者,若运动信息存储单元的存储方式为存储第二目标运动信息,则将第二目标运动信息存储为该运动信息存储单元的目标运动信息。
在另一种可能的实施方式中,针对当前块的每个运动信息存储单元,可以根据该运动信息存储单元的坐标,当前块的权重预测角度和当前块的权重预测位置确定该运动信息存储单元的存储方式;基于运动信息存储单元的存储方式,将第一目标运动信息存储为运动信息存储单元的目标运动信息,或者,将第二目标运动信息存储为运动信息存储单元的目标运动信息。比如说,若运动信息存储单元的存储方式为存储第一目标运动信息,则将第一目标运动信息存储为该运动信息存储单元的目标运动信息,或者,若运动信息存储单元的存储方式为存储第二目标运动信息,则将第二目标运动信息存储为该运动信息存储单元的目标运动信息。
示例性的,可以将当前块划分为至少一个运动信息存储单元,每个运动信息存储单元的尺寸可以任意配置,例如,1*1的运动信息存储单元、2*2的运动信息存储单元、4*4的运动信息存储单元等。针对当前块的每个运动信息存储单元,可以根据权重预测角度和权重预测位置确定该运动信息存储单元的存储方式,基于该运动信息存储单元的存储方式,可以将第一目标运动信息存储为该运动信息存储单元的目标运动信息,或者,将第二目标运动信息存储为该运动信息存储单元的目标运动信息。综上所述,针对当前块的每个运动信息存储单元(如4*4大小),根据权重预测角度和权重预测位置确定将第一目标运动信息存储为该运动信息存储单元的目标运动信息,或将第二目标运动信息存储为该运动信息存储单元的目标运动信息,其依据是每个运动信息存储单元与“划分结果”的相对位置关系。
以下结合几个具体应用场景,对上述目标运动信息的存储过程进行说明。假设当前块的尺寸为M*N,M为当前块的宽,N为当前块的高,X为权重预测角度的tan值的log2对数值,如0或1,Y为权重预测位置的索引值,如-3~3等,a,b,c,d为预设的常数值。
应用场景1:通过如下公式确定有效数量ValidLenth:ValidLenth=(N+(M>>X))<<1;通过如下公式确定参数FirstPos:FirstPos=(ValidLength>>1)-a+Y*((ValidLength-1)>>3)。针对每个运动信息存储单元,将中心位置或者左上角位置的坐标记为(x,y),基于此,若(y<<1)+((x<<1)>>X)大于或者等于FirstPos,则该运动信息存储单元的存储方式为存储第一目标运动信息;否则,该运动信息存储单元的存储方式为存储目标运动信息。
应用场景2:通过如下公式确定有效数量ValidLenth:ValidLenth=(N+(M>>X))<<1;通过如下公式确定参数FirstPos:FirstPos=(ValidLength>>1)-b+Y*((ValidLength-1)>>3)–((M<<1)>>X)。针对每个运动信息存储单元,将中心位置或者左上角位置的坐标记为(x,y),基于此,若(y<<1)-((x<<1)>>X)大于或等于FirstPos,则该运动信息存储单元的存储方式为存储第一目标运动信息;否则,该运动信息存储单元的存储方式为存储第二目标运动信息。
应用场景3:通过如下公式确定有效数量ValidLenth:ValidLenth=(M+(N>>X))<<1;通过如下公式确定参数FirstPos:FirstPos=(ValidLength>>1)–c+Y*((ValidLength-1)>>3)–((N<<1)>>X)。针对每个运动信息存储单元,将中心位置或者左上角位置的坐标记为(x,y),基于此,若(x<<1)-((y<<1)>>X)大于或等于FirstPos,则该运动信息存储单元的存储方式为存储第一目标运动信息;否则,该运动信息存储单元的存储方式为存储第二目标运动信息。
应用场景4:通过如下公式确定有效数量ValidLenth:ValidLenth=(M+(N>>X))<<1;通过如下公式确定参数FirstPos:FirstPos=(ValidLength>>1)-d+Y*((ValidLength-1)>>3)。针对每个运动信息存储单元,将中心位置或者左上角位置的坐标记为(x,y),基于此,若(x<<1)+((y<<1)>>X)大于或者等于FirstPos,则该运动信息存储单元的存储方式为存储第一目标运动信息;否则,该运动信息存储单元的存储方式可以为存储第二目标运动信息。
示例性的,基于应用场景1-应用场景4确定每个运动信息存储单元的存储方式,基于运动信息存储单元的存储方式,可以将第一目标运动信息存储为该运动信息存储单元的目标运动信息,或者,将第二目标运动信息存储为该运动信息存储单元的目标运动信息。
应用场景5:当第一目标运动信息与第二目标运动信息来自不同的参考帧列表时,可以采用如下存储方式:通过如下公式确定有效数量ValidLenth:ValidLenth=(M+(N>>X))<<1;通过如下公式确定参数FirstPos:FirstPos=(ValidLength>>1)-d+Y*((ValidLength-1)>>3)。针对每个运动信息存储单元,将中心位置或者左上角位置的坐标记为(x,y),基于此,若(x<<1)+((y<<1)>>X)大于FirstPos,则该运动信息存储单元的存储方式为存储第一目标运动信息;若(x<<1)+((y<<1)>>X)小于FirstPos,则该运动信息存储单元的存储方式为存储第二目标运动信息;若(x<<1)+((y<<1)>>X)等于FirstPos,则该运动信息存储单元的存储方式可以为存储新运动信息(即第一目标运动信息和第二目标运动信息组合成的新运动信息)。
应用场景6:当第一目标运动信息与第二目标运动信息来自不同的参考帧列表时,可以采用如下存储方式:通过如下公式确定有效数量ValidLenth:ValidLenth=(M+(N>>X))<<1;通过如下公式确定参数FirstPos:FirstPos=(ValidLength>>1)-d+Y*((ValidLength-1)>>3)。针对每个运动信息存储单元,将中心位置或者左上角位置的坐标记为(x,y),基于此,若(x<<1)+((y<<1)>>X)大于f1,则该运动信息存储单元的存储方式为存储第一目标运动信息;若(x<<1)+((y<<1)>>X)小于f2,则该运动信息存储单元的存储方式为存储第二目标运动信息;若(x<<1)+((y<<1)>>X)不大于f1,且不小于f2,则该运动信息存储单元的存储方式可以为存储新运动信息(即第一目标运动信息和第二目标运动信息组合成的新运动信息)。
示例性的,f1可以大于FirstPos,f2可以小于FirstPos,对此f1和f2的取值不做限制。如f1可以为FirstPos+2,f2可以为FirstPos-2,当然,f1和f2可以任意设置。
示例性的,基于应用场景5和应用场景6,确定每个运动信息存储单元的存储方式,基于运动信息存储单元的存储方式,可以将第一目标运动信息存储为该运动信息存储单元的目标运动信息,或者,将第二目标运动信息存储为该运动信息存储单元的目标运动信息,或者,将新运动信息存储为该运动信息存储单元的目标运动信息。
示例性的,上述各实施例可以单独实现,也可以组合实现,比如说,实施例1和实施例2组合实现,实施例1和实施例3组合实现,实施例1和实施例4-实施例9中的至少一个实施例组合实现,实施例1和实施例10-实施例16中的至少一个实施例组合实现,实施例2和实施例4-实施例9中的至少一个实施例组合实现,实施例2和实施例10-实施例16中的至少一个实施例组合实现,实施例3和实施例4-实施例9中的至少一个实施例组合实现,实施例3和实施例10-实施例16中的至少一个实施例组合实现。又例如,实施例10-实施例16中的任意至少两个可以组合实现,实施例4-实施例9中的任意至少两个可以组合实现等。
当然,上述只是组合方式的几个示例,对实施例之间的组合方式不做限制。
示例性的,上述各实施例中,编码端的内容也可以应用到解码端,即解码端可以采用相同方式进行处理,解码端的内容也可以应用到编码端,即编码端可以采用相同方式进行处理。
实施例17:基于与上述方法同样的申请构思,本申请实施例还提出一种编解码装置,所述装置应用于编码端或者解码端,参见图10A所示,为所述装置的结构图,包括:
获取模块111,用于在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;配置模块112,用于根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;确定模块113,用于针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;所述获取模块111,还用于获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;所述确定模块113,还用于根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
在一种可能的实施方式中,所述权重配置参数包括权重变换率和权重变换的起始位置,所述配置模块112根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值时具体用于:针对所述当前块外部的周边位置,根据所述周边位置的坐标值,所述权重变换的起始位置的坐标值,以及所述权重变换率,配置所述周边位置的参考权重值。
在一种可能的实施方式中,若所述当前块支持权重变换率切换模式,所述获取模块111采用如下方式获取所述当前块的权重变换率:获取所述当前块的权重变换率指示信息;根据所述权重变换率指示信息获取所述当前块的权重变换率;其中,若所述权重变换率指示信息为第一指示信息,则所述当前块的权重变换率为第一权重变换率;若所述权重变换率指示信息为第二指示信息,则所述当前块的权重变换率为第二权重变换率。
在一种可能的实施方式中,所述获取模块111获取为当前块创建的运动信息候选列表时具体用于:获取待加入到所述当前块的运动信息候选列表中的至少一个可用运动信息;基于所述至少一个可用运动信息获取所述运动信息候选列表;其中,所述至少一个可用运动信息包括如下运动信息的至少一种:时域运动信息;空域运动信息;预设运动信息。
在一种可能的实施方式中,所述获取模块111基于所述至少一个可用运动信息获取所述运动信息候选列表时具体用于:针对待加入到所述运动信息候选列表的可用运动信息,若所述可用运动信息为单向运动信息,则将所述单向运动信息加入到所述运动信息候选列表,或者,所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表。在一种可能的实施方式中,所述获取模块111基于所述至少一个可用运动信息获取所述运动信息候选列表时具体用于:针对待加入到所述运动信息候选列表的可用运动信息,若所述可用运动信息为双向运动信息,则根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息;将所述单向运动信息加入到所述运动信息候选列表,或者,所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表。
在一种可能的实施方式中,所述获取模块111基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息时具体用于:从所述运动信息候选列表中选择候选运动信息作为所述当前块的第一原始运动信息,并从所述运动信息候选列表中选择候选运动信息作为所述当前块的第二原始运动信息;根据所述第一原始运动信息确定所述当前块的第一目标运动信息;根据所述第二原始运动信息确定所述当前块的第二目标运动信息。
基于与上述方法同样的申请构思,本申请实施例提供的解码端设备(也可以称为视频解码器),从硬件层面而言,其硬件架构示意图具体可以参见图10B所示。包括:处理器121和机器可读存储介质122,其中:所述机器可读存储介质122存储有能够被所述处理器121执行的机器可执行指令;所述处理器121用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,所述处理器121用于执行机器可执行指令,以实现如下步骤:
在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;
根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;
针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
基于与上述方法同样的申请构思,本申请实施例提供的编码端设备(也可以称为视频编码器),从硬件层面而言,其硬件架构示意图具体可以参见图10C所示。包括:处理器131和机器可读存储介质132,其中:所述机器可读存储介质132存储有能够被所述处理器131执行的机器可执行指令;所述处理器131用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,所述处理器131用于执行机器可执行指令,以实现如下步骤:
在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;
根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;
针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
基于与上述方法同样的申请构思,本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本申请上述示例公开的方法,如上述上述各实施例中的编解码方法。
基于与上述方法同样的申请构思,本申请实施例还提供一种计算机应用程序,所述计算机应用程序令被处理器执行时,能够实现本申请上述示例公开的编解码方法。
本领域内的技术人员应明白,本申请实施例可提供为方法、系统、或计算机程序产品。本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (30)
1.一种编解码方法,其特征在于,所述方法包括:
在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;
根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;
针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值;
所述当前块外部的周边位置包括整像素位置,或者,亚像素位置,或者,整像素位置和亚像素位置;所述根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,包括:若所述周边匹配位置是亚像素位置,并且所述亚像素位置已设置参考权重值,则根据所述亚像素位置的参考权重值确定所述像素位置的目标权重值;若所述周边匹配位置是整像素位置,并且所述整像素位置已设置参考权重值,则根据所述整像素位置的参考权重值确定所述像素位置的目标权重值。
2.根据权利要求1所述的方法,其特征在于,
所述权重配置参数包括权重变换率和权重变换的起始位置,所述根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值,包括:
针对所述当前块外部的周边位置,根据所述周边位置的坐标值,所述权重变换的起始位置的坐标值,以及所述权重变换率,配置所述周边位置的参考权重值。
3.根据权利要求2所述的方法,其特征在于,
若所述当前块支持权重变换率切换模式,则采用如下方式获取所述当前块的权重变换率:
获取所述当前块的权重变换率指示信息;
根据所述权重变换率指示信息获取所述当前块的权重变换率;其中,若所述权重变换率指示信息为第一指示信息,则所述当前块的权重变换率为第一权重变换率;若所述权重变换率指示信息为第二指示信息,则所述当前块的权重变换率为第二权重变换率。
4.根据权利要求3所述的方法,其特征在于,所述当前块的权重变换率指示信息为所述当前块对应的权重变换率切换标识,所述第一指示信息用于指示所述当前块不需要进行权重变换率切换,所述第二指示信息用于指示所述当前块需要进行权重变换率切换。
5.根据权利要求2所述的方法,其特征在于,所述权重变换的起始位置由如下参数的至少一个确定:所述权重预测角度,所述当前块的权重预测位置,所述当前块的尺寸。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述当前块外部的周边位置的数量由如下参数的至少一个确定:所述当前块的尺寸,所述权重预测角度。
7.根据权利要求1-5任一项所述的方法,其特征在于,所述当前块外部的周边位置包括:所述当前块外部上侧一行的周边位置;或,所述当前块外部左侧一列的周边位置;
所述当前块外部的周边位置的参考权重值单调递增或者单调递减;
若所述当前块外部的周边位置包括所述当前块外部上侧一行的周边位置,则从左到右的顺序上的参考权重值是单调递增或单调递减;或,若所述当前块外部的周边位置包括所述当前块外部左侧一列的周边位置,则从上到下的顺序上的参考权重值是单调递增或单调递减。
8.根据权利要求1-5任一项所述的方法,其特征在于,所述当前块外部的周边位置包括目标区域,所述目标区域的第一邻近区域,所述目标区域的第二邻近区域;
其中,所述第一邻近区域的参考权重值均为第一参考权重值,所述第二邻近区域的参考权重值均为第二参考权重值,所述第一参考权重值与所述第二参考权重值不同;
所述目标区域包括一个参考权重值或至少两个参考权重值;若所述目标区域包括至少两个参考权重值,则所述目标区域的至少两个参考权重值单调递增或单调递减。
9.根据权利要求1-5任一所述的方法,其特征在于,
所述当前块的权重预测角度为水平角度;或者,
所述当前块的权重预测角度为垂直角度;或者,
所述当前块的权重预测角度的斜率的绝对值为2的n次方,n为整数。
10.根据权利要求1-5任一所述的方法,其特征在于,
所述获取为当前块创建的运动信息候选列表,包括:
获取待加入到所述当前块的运动信息候选列表中的至少一个可用运动信息;
基于所述至少一个可用运动信息获取所述运动信息候选列表;
其中,所述至少一个可用运动信息包括如下运动信息的至少一种:
时域运动信息;空域运动信息;预设运动信息。
11.根据权利要求10所述的方法,其特征在于,
所述获取待加入到所述当前块的运动信息候选列表中的至少一个可用运动信息,包括:
基于所述当前块的预设位置,从所述当前块的参考帧中选取与所述预设位置对应的时域相邻块,将所述时域相邻块的运动信息确定为可用运动信息。
12.根据权利要求10所述的方法,其特征在于,
所述获取待加入到所述当前块的运动信息候选列表中的至少一个可用运动信息,包括:
针对所述当前块的空域相邻块,若所述空域相邻块存在,并且所述空域相邻块采用帧间预测模式,则将所述空域相邻块的运动信息确定为可用运动信息。
13.根据权利要求10所述的方法,其特征在于,
所述获取待加入到所述当前块的运动信息候选列表中的至少一个可用运动信息,包括:
将预设运动信息确定为可用运动信息;其中,所述预设运动信息包括基于所述运动信息候选列表中已存在的候选运动信息导出的缺省运动信息。
14.根据权利要求10所述的方法,其特征在于,
所述基于所述至少一个可用运动信息获取所述运动信息候选列表,包括:针对待加入到所述运动信息候选列表的可用运动信息,若所述可用运动信息为单向运动信息,所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表。
15.根据权利要求10所述的方法,其特征在于,
所述基于所述至少一个可用运动信息获取所述运动信息候选列表,包括:
针对待加入到所述运动信息候选列表的可用运动信息,若所述可用运动信息为双向运动信息,则根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息;所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表。
16.根据权利要求15所述的方法,其特征在于,
所述根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,包括:根据所述可用运动信息的编号的奇偶属性将所述可用运动信息裁剪为单向运动信息;具体为:
若所述可用运动信息是所述当前块的相邻块的运动信息,则基于所述相邻块的遍历次序确定所述可用运动信息的编号;其中,所述相邻块为空域相邻块和/或时域相邻块;
若所述编号的奇偶属性为奇数,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若所述编号的奇偶属性为偶数,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息;或,
若所述编号的奇偶属性为偶数,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若所述编号的奇偶属性为奇数,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
17.根据权利要求15所述的方法,其特征在于,
所述根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,包括:
根据所述可用运动信息的性质将所述可用运动信息裁剪为单向运动信息;具体为:
若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;或,
若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
18.根据权利要求16或17所述的方法,其特征在于,
所述第一参考帧列表为List0,所述第二参考帧列表为List1。
19.根据权利要求14或15所述的方法,其特征在于,
针对单向运动信息与运动信息候选列表中已存在的候选运动信息的查重操作,包括:
若所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同,所述单向运动信息的运动矢量与所述候选运动信息的运动矢量相同,则确定所述单向运动信息与所述候选运动信息重复;否则,确定所述单向运动信息与所述候选运动信息不重复。
20.根据权利要求19所述的方法,其特征在于,所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧是否相同的确定过程,包括:
若所述单向运动信息指向的参考帧列表与所述候选运动信息指向的参考帧列表相同,并且所述单向运动信息指向的参考帧索引与所述候选运动信息指向的参考帧索引相同,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同;否则,确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同;
或者,
若所述单向运动信息指向的参考帧的显示顺序POC与所述候选运动信息指向的参考帧的POC相同,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同;否则,确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同;
或者,
若所述单向运动信息指向的参考帧为知识库帧,所述候选运动信息指向的参考帧为非知识库帧,或所述单向运动信息指向的参考帧为非知识库帧,所述候选运动信息指向的参考帧为知识库帧,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同;
若所述单向运动信息指向的参考帧和所述候选运动信息指向的参考帧均为非知识库帧,比较所述单向运动信息指向的参考帧的POC与所述候选运动信息指向的参考帧的POC是否相同,若是,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同;若否,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同;
若所述单向运动信息指向的参考帧和所述候选运动信息指向的参考帧均为知识库帧,确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同;
或者,
若所述单向运动信息指向的参考帧为知识库帧,所述候选运动信息指向的参考帧为非知识库帧,或所述单向运动信息指向的参考帧为非知识库帧,所述候选运动信息指向的参考帧为知识库帧,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同;
若所述单向运动信息指向的参考帧和所述候选运动信息指向的参考帧均为非知识库帧,比较所述单向运动信息指向的参考帧的POC与所述候选运动信息指向的参考帧的POC是否相同,若是,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同;若否,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同;
若所述单向运动信息指向的参考帧和所述候选运动信息指向的参考帧均为知识库帧,则比较单向运动信息指向的参考帧的知识库帧索引与候选运动信息指向的参考帧的知识库帧索引是否相等,若是,确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同,若否,确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同。
21.根据权利要求1-5任一项所述的方法,其特征在于,所述基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息,包括:
从所述运动信息候选列表中选择候选运动信息作为所述当前块的第一原始运动信息,并从所述运动信息候选列表中选择候选运动信息作为所述当前块的第二原始运动信息;
根据所述第一原始运动信息确定所述当前块的第一目标运动信息;
根据所述第二原始运动信息确定所述当前块的第二目标运动信息。
22.根据权利要求21所述的方法,其特征在于,所述从所述运动信息候选列表中选择候选运动信息作为所述当前块的第一原始运动信息,并从所述运动信息候选列表中选择候选运动信息作为所述当前块的第二原始运动信息,包括:
若高层语法允许当前块启用加权预测运动矢量修正模式,则从所述运动信息候选列表中选择候选运动信息作为所述当前块的第一原始运动信息,并从所述运动信息候选列表中选择候选运动信息作为所述当前块的第二原始运动信息。
23.根据权利要求21所述的方法,其特征在于,
所述第一原始运动信息包括第一原始运动矢量,所述第一目标运动信息包括第一目标运动矢量,根据所述第一原始运动信息确定所述当前块的第一目标运动信息,包括:获取与第一原始运动矢量对应的第一运动矢量差;根据所述第一运动矢量差和所述第一原始运动矢量确定第一目标运动矢量,或将所述第一原始运动矢量确定为第一目标运动矢量;
所述第二原始运动信息包括第二原始运动矢量,所述第二目标运动信息包括第二目标运动矢量,根据所述第二原始运动信息确定所述当前块的第二目标运动信息,包括:获取与第二原始运动矢量对应的第二运动矢量差;根据所述第二运动矢量差和所述第二原始运动矢量确定第二目标运动矢量,或将所述第二原始运动矢量确定为第二目标运动矢量。
24.根据权利要求23所述的方法,其特征在于,
所述获取与第一原始运动矢量对应的第一运动矢量差,包括:获取第一运动矢量差的方向信息和幅值信息,并根据所述第一运动矢量差的方向信息和幅值信息确定第一运动矢量差;
所述获取与第二原始运动矢量对应的第二运动矢量差,包括:获取第二运动矢量差的方向信息和幅值信息,并根据所述第二运动矢量差的方向信息和幅值信息确定第二运动矢量差。
25.根据权利要求24所述的方法,其特征在于,若所述方法应用于解码端,
所述获取第一运动矢量差的方向信息和幅值信息,包括:从所述当前块的编码比特流中解析出所述第一运动矢量差的方向信息和幅值信息;
所述获取第二运动矢量差的方向信息和幅值信息,包括:从所述当前块的编码比特流中解析出所述第二运动矢量差的方向信息和幅值信息。
26.根据权利要求25所述的方法,其特征在于,
从所述当前块的编码比特流中解析出所述第一运动矢量差的方向信息和幅值信息,包括:
从所述编码比特流中解析出用于指示是否对第一原始运动矢量叠加运动矢量差的第一修正标志;若所述第一修正标志用于指示对第一原始运动矢量叠加运动矢量差,则从所述当前块的编码比特流中解析出所述第一运动矢量差的方向信息和幅值信息;
从所述当前块的编码比特流中解析出所述第二运动矢量差的方向信息和幅值信息,包括:
从所述编码比特流中解析出用于指示是否对第二原始运动矢量叠加运动矢量差的第二修正标志;若所述第二修正标志用于指示对第二原始运动矢量叠加运动矢量差,则从所述当前块的编码比特流中解析出所述第二运动矢量差的方向信息和幅值信息。
27.根据权利要求1或5所述的方法,其特征在于,所述根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值之后,所述方法还包括:针对所述当前块的每个运动信息存储单元,根据所述运动信息存储单元的坐标,所述权重预测角度和所述当前块外部的周边位置的参考权重值确定所述运动信息存储单元的存储方式;基于所述运动信息存储单元的存储方式,将所述第一目标运动信息存储为所述运动信息存储单元的目标运动信息,或将所述第二目标运动信息存储为所述运动信息存储单元的目标运动信息;或者,
针对所述当前块的每个运动信息存储单元,根据所述运动信息存储单元的坐标,所述权重预测角度和当前块的权重预测位置确定所述运动信息存储单元的存储方式;基于所述运动信息存储单元的存储方式,将所述第一目标运动信息存储为所述运动信息存储单元的目标运动信息,或将所述第二目标运动信息存储为所述运动信息存储单元的目标运动信息。
28.一种编解码装置,其特征在于,所述装置包括:
获取模块,用于在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;
配置模块,用于根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;
确定模块,用于针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;
所述获取模块,还用于获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
所述确定模块,还用于根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值;
所述当前块外部的周边位置包括整像素位置,或者,亚像素位置,或者,整像素位置和亚像素位置;所述根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,包括:若所述周边匹配位置是亚像素位置,并且所述亚像素位置已设置参考权重值,则根据所述亚像素位置的参考权重值确定所述像素位置的目标权重值;若所述周边匹配位置是整像素位置,并且所述整像素位置已设置参考权重值,则根据所述整像素位置的参考权重值确定所述像素位置的目标权重值。
29.一种解码端设备,其特征在于,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下步骤:
在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;
根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;
针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值;
所述当前块外部的周边位置包括整像素位置,或者,亚像素位置,或者,整像素位置和亚像素位置;所述根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,包括:若所述周边匹配位置是亚像素位置,并且所述亚像素位置已设置参考权重值,则根据所述亚像素位置的参考权重值确定所述像素位置的目标权重值;若所述周边匹配位置是整像素位置,并且所述整像素位置已设置参考权重值,则根据所述整像素位置的参考权重值确定所述像素位置的目标权重值。
30.一种编码端设备,其特征在于,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下步骤:
在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;
根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;
针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值;
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少一个候选运动信息;基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述目标权重值,所述第二预测值和所述关联权重值,确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值;
所述当前块外部的周边位置包括整像素位置,或者,亚像素位置,或者,整像素位置和亚像素位置;所述根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,包括:若所述周边匹配位置是亚像素位置,并且所述亚像素位置已设置参考权重值,则根据所述亚像素位置的参考权重值确定所述像素位置的目标权重值;若所述周边匹配位置是整像素位置,并且所述整像素位置已设置参考权重值,则根据所述整像素位置的参考权重值确定所述像素位置的目标权重值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011410129.1A CN114598889B (zh) | 2020-12-03 | 2020-12-03 | 一种编解码方法、装置及其设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011410129.1A CN114598889B (zh) | 2020-12-03 | 2020-12-03 | 一种编解码方法、装置及其设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114598889A CN114598889A (zh) | 2022-06-07 |
CN114598889B true CN114598889B (zh) | 2023-03-28 |
Family
ID=81802402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011410129.1A Active CN114598889B (zh) | 2020-12-03 | 2020-12-03 | 一种编解码方法、装置及其设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114598889B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024158776A1 (en) * | 2023-01-24 | 2024-08-02 | Google Llc | Pyramid lattice vector quantization for coding motion vector differences |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017039117A1 (ko) * | 2015-08-30 | 2017-03-09 | 엘지전자(주) | 영상의 부호화/복호화 방법 및 이를 위한 장치 |
CN110933426B (zh) * | 2018-09-20 | 2022-03-01 | 杭州海康威视数字技术股份有限公司 | 一种解码、编码方法及其设备 |
CN111385569B (zh) * | 2018-12-28 | 2022-04-26 | 杭州海康威视数字技术股份有限公司 | 一种编解码方法及其设备 |
CN111510726B (zh) * | 2019-01-30 | 2023-01-24 | 杭州海康威视数字技术股份有限公司 | 一种编解码方法及其设备 |
CN111698500B (zh) * | 2019-03-11 | 2022-03-01 | 杭州海康威视数字技术股份有限公司 | 一种编解码方法、装置及其设备 |
CN113709488B (zh) * | 2020-06-30 | 2023-02-28 | 杭州海康威视数字技术股份有限公司 | 一种编解码方法、装置及其设备 |
-
2020
- 2020-12-03 CN CN202011410129.1A patent/CN114598889B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN114598889A (zh) | 2022-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210044832A1 (en) | Method for deriving a temporal predictive motion vector, and apparatus using the method | |
JP6553691B2 (ja) | 候補リスト共有方法及びこのような方法を使用する装置 | |
JP6279699B2 (ja) | マージ候補ブロック誘導方法及びこのような方法を用いる装置 | |
CN111567045A (zh) | 使用帧间预测信息的方法和装置 | |
CN113709462B (zh) | 一种编解码方法、装置及其设备 | |
CN112369021A (zh) | 用于吞吐量增强的图像编码/解码方法和设备以及存储比特流的记录介质 | |
CN113709488B (zh) | 一种编解码方法、装置及其设备 | |
CN113709460B (zh) | 一种编解码方法、装置及其设备 | |
CN113163204B (zh) | 一种编解码方法、装置及其设备 | |
CN113766222B (zh) | 一种编解码方法、装置及其设备 | |
CN114598889B (zh) | 一种编解码方法、装置及其设备 | |
CN113709499B (zh) | 一种编解码方法、装置及其设备 | |
CN112055220B (zh) | 一种编解码方法、装置及其设备 | |
CN114556922A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |