CN114079783B - 一种编解码方法、装置及其设备 - Google Patents

一种编解码方法、装置及其设备 Download PDF

Info

Publication number
CN114079783B
CN114079783B CN202010845243.0A CN202010845243A CN114079783B CN 114079783 B CN114079783 B CN 114079783B CN 202010845243 A CN202010845243 A CN 202010845243A CN 114079783 B CN114079783 B CN 114079783B
Authority
CN
China
Prior art keywords
motion information
current block
weight
value
reference frame
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
Application number
CN202010845243.0A
Other languages
English (en)
Other versions
CN114079783A (zh
Inventor
孙煜程
陈方栋
王莉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Hikvision Digital Technology Co Ltd
Original Assignee
Hangzhou Hikvision Digital Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Hikvision Digital Technology Co Ltd filed Critical Hangzhou Hikvision Digital Technology Co Ltd
Priority to CN202111155082.3A priority Critical patent/CN113709499B/zh
Priority to CN202010845243.0A priority patent/CN114079783B/zh
Publication of CN114079783A publication Critical patent/CN114079783A/zh
Application granted granted Critical
Publication of CN114079783B publication Critical patent/CN114079783B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods 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/103Selection of coding mode or of prediction mode
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods 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/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/146Data rate or code amount at the encoder output
    • H04N19/147Data rate or code amount at the encoder output according to rate distortion criteria
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/184Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being bits, e.g. of the compressed video stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/523Motion estimation or motion compensation with sub-pixel accuracy
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/577Motion compensation with bidirectional frame interpolation, i.e. using B-pictures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques

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-图9E是本申请一种实施方式中的当前块的目标位置的示意图;
图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。
示例性的,当前块外部的周边位置可以包括整像素位置,或者,亚像素位置,或者,整像素位置和亚像素位置。当前块外部的周边位置可以包括但不限于:当前块外部上侧一行的周边位置,或者,当前块外部左侧一列的周边位置,或者,当前块外部下侧一行的周边位置,或者,当前块外部右侧一列的周边位置。当然,上述只是周边位置的示例,对此不做限制。
在一种可能的实施方式中,当前块外部的周边位置的参考权重值包括目标区域的参考权重值,目标区域的第一邻近区域的参考权重值,目标区域的第二邻近区域的参考权重值。
示例性的,第一邻近区域的参考权重值均为第一参考权重值,第二邻近区域的参考权重值单调递增。或者,第一邻近区域的参考权重值均为第一参考权重值,第二邻近区域的参考权重值单调递减。或者,第一邻近区域的参考权重值均为第二参考权重值,第二邻近区域的参考权重值均为第三参考权重值,且该第二参考权重值与该第三参考权重值不同。或者,第一邻近区域的参考权重值单调递增,第二邻近区域的参考权重值单调递增。或者,第一邻近区域的参考权重值单调递减,第二邻近区域的参考权重值单调递减。
示例性的,目标区域包括一个参考权重值或者至少两个参考权重值;若目标区域包括至少两个参考权重值,则目标区域的至少两个参考权重值单调递增或单调递减。
步骤303,获取为当前块创建的运动信息候选列表,运动信息候选列表包括至少两个单向运动信息;在运动信息候选列表创建时加入单向运动信息的过程包括:针对待加入到运动信息候选列表中的可用运动信息,若可用运动信息为双向运动信息,则根据可用运动信息的属性将可用运动信息裁剪为单向运动信息,将单向运动信息加入到运动信息候选列表或者单向运动信息与运动信息候选列表中已存在的候选运动信息(将运动信息候选列表中已存在的运动信息记为候选运动信息)不重复时将单向运动信息加入到运动信息候选列表。
示例性的,可以根据可用运动信息的属性将可用运动信息裁剪为指向第一参考帧列表(也称为第一参考帧队列,即List0)中参考帧的单向运动信息;或者,将可用运动信息裁剪为指向第二参考帧列表(也称为第二参考帧队列,即List1)中参考帧的单向运动信息。
步骤304,基于运动信息候选列表获取当前块的第一目标运动信息和第二目标运动信息。
步骤305,针对当前块的每个像素位置,根据当前块的权重预测角度从当前块外部的周边位置中确定该像素位置指向的周边匹配位置;根据该周边匹配位置关联的参考权重值确定该像素位置的目标权重值,根据该像素位置的目标权重值确定该像素位置的关联权重值。
示例性的,权重预测角度表示当前块内部的像素位置所指向的角度方向,例如,基于某一种权重预测角度,该权重预测角度对应的角度方向指向当前块的某个外部周边位置。基于此,针对当前块的每个像素位置,基于该权重预测角度确定该像素位置所指向的角度方向,继而根据该角度方向从当前块外部的周边位置中确定该像素位置指向的周边匹配位置。
针对当前块的每个像素位置,在确定该像素位置指向的周边匹配位置后,基于该周边匹配位置关联的参考权重值确定该像素位置的目标权重值,例如,将该周边匹配位置关联的参考权重值确定为该像素位置的目标权重值。然后,根据该像素位置的目标权重值确定该像素位置的关联权重值,例如,每个像素位置的目标权重值与关联权重值的和,可以均为固定的预设数值,因此,关联权重值可以为预设数值与目标权重值之差。假设预设数值为8,像素位置的目标权重值为0,则该像素位置的关联权重值为8;若像素位置的目标权重值为1,则该像素位置的关联权重值为7,以此类推,只要目标权重值与关联权重值之和为8即可。
步骤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等,对此不做限制。或者,当前块外部下侧一行的周边位置,如当前块外部下侧第n3行的周边位置,n3可以为1,也可以为2、3等,对此不做限制。或者,当前块外部右侧一列的周边位置,如当前块外部右侧第n4列的周边位置,n4可以为1,也可以为2、3等,对此不做限制。
当然,上述只是周边位置的几个示例,对此不做限制,实际应用中,除了利用当前块外部周边位置,还可以利用当前块内部位置,即使用当前块的内部位置替换当前块外部周边位置,例如,位于当前块内部第n5行的内部位置,n5可以为1,也可以为2、3等,又例如,位于当前块内部第n6列的内部位置,n6可以为1,也可以为2、3等。当然,内部位置的长度可以超出当前块的范围,如第n7行的位置可以超出当前块的范围,即往两边可延伸。
当然,还可以同时使用当前块的内部位置和当前块外部周边位置。
针对使用当前块的内部位置,或者,同时使用当前块的内部位置和当前块外部周边位置的情况,可以将该当前块通过内部位置所在行分为上下两个小块,或者,通过内部位置所在列分为左右两个小块,此时,两个小块拥有相同的权重预测角度以及相同的参考权重配置。
示例性的,当前块外部周边位置可以位于像素位置之间,即亚像素位置,此时,当前块的位置不能简单描述为第x行,而是位于第x行与第y行之间的亚像素位置行。
为了方便描述,在后续实施例中,以当前块外部上侧第1行的周边位置,或者,当前块外部左侧第1列的周边位置为例,针对其它周边位置的情况,实现方式与此类似。
示例性的,针对当前块外部周边位置的范围,可以预先指定某个范围是当前块外部的周边位置的范围;或者,可以根据权重预测角度确定当前块外部的周边位置的范围,例如,根据权重预测角度确定当前块内部的每个像素位置指向的周边位置,所有像素位置指向的周边位置的边界,可以是当前块外部的周边位置的范围,对此周边位置的范围不做限制。
当前块外部周边位置可以包括整像素位置;或者,当前块外部周边位置可以包括非整像素位置,非整像素位置可以为亚像素位置,如1/2亚像素位置,1/4亚像素位置,3/4亚像素位置等,对此不做限制;或者,当前块外部周边位置可以包括整像素位置和亚像素位置。
示例性的,当前块外部的两个周边位置,可以对应一个整像素位置;或者,当前块外部的四个周边位置,可以对应一个整像素位置;或者,当前块外部的一个周边位置,可以对应一个整像素位置;或者,当前块外部的一个周边位置,可以对应两个整像素位置。当然,上述只是几个示例,对此不做限制,周边位置与整像素位置的关系可以任意配置。
参见图4A和图4B所示,是一个周边位置对应一个整像素位置,参见图4D所示,是两个周边位置对应一个整像素位置,对于其它情况,本实施例中不再赘述。
步骤a4,编码端根据周边匹配位置关联的参考权重值确定该像素位置的目标权重值。
针对当前块的每个像素位置,在确定该像素位置指向的周边匹配位置后,编码端确定该周边匹配位置关联的参考权重值,并根据该周边匹配位置关联的参考权重值确定该像素位置的目标权重值,例如,将该周边匹配位置关联的参考权重值确定为该像素位置的目标权重值。
在一种可能的实施方式中,编码端根据周边匹配位置关联的参考权重值确定该像素位置的目标权重值,可以包括:情况一、若该周边匹配位置是整像素位置,且该整像素位置已配置参考权重值,则根据该整像素位置的参考权重值确定该像素位置的目标权重值。
情况二、若该周边匹配位置是整像素位置,且该整像素位置未配置参考权重值,则可以根据该整像素位置的相邻位置的参考权重值确定该像素位置的目标权重值。例如,可以对相邻位置的参考权重值进行向上取整操作,得到该像素位置的目标权重值;或者,对相邻位置的参考权重值进行向下取整操作,得到该像素位置的目标权重值;或者,根据该整像素位置的相邻位置的参考权重值的插值确定该像素位置的目标权重值,对此不做限制。
情况三、若该周边匹配位置是亚像素位置,且该亚像素位置已配置参考权重值,则可以根据该亚像素位置的参考权重值确定该像素位置的目标权重值。
情况四、若该周边匹配位置是亚像素位置,且该亚像素位置未配置参考权重值,则可以根据该亚像素位置的相邻位置的参考权重值确定该像素位置的目标权重值。例如,可以对相邻位置的参考权重值进行向上取整操作,得到该像素位置的目标权重值;或者,对相邻位置的参考权重值进行向下取整操作,得到该像素位置的目标权重值;或者,根据该亚像素位置的相邻位置的参考权重值的插值确定该像素位置的目标权重值,对此不做限制。
情况五、根据周边匹配位置关联的多个参考权重值确定该像素位置的目标权重值,例如,周边匹配位置是整像素位置或亚像素位置时,获取周边匹配位置的多个相邻位置的参考权重值。若周边匹配位置已配置参考权重值,则根据周边匹配位置的参考权重值和多个相邻位置的参考权重值进行加权运算,得到该像素位置的目标权重值;若周边匹配位置未配置参考权重值,则根据多个相邻位置的参考权重值进行加权运算,得到该像素位置的目标权重值。
步骤a5,编码端根据该像素位置的目标权重值确定该像素位置的关联权重值。
示例性的,针对每个像素位置来说,该像素位置的目标权重值与该像素位置的关联权重值的和,可以为固定的预设数值,即关联权重值可以为预设数值与目标权重值之差。基于此,假设预设数值为8,该像素位置的目标权重值为2,则该像素位置的关联权重值为6。
步骤a6,编码端获取为当前块创建的运动信息候选列表,该运动信息候选列表包括至少两个单向运动信息,将该运动信息候选列表中包括的运动信息记为一个候选运动信息;基于该运动信息候选列表获取当前块的第一目标运动信息和第二目标运动信息。
步骤a7,针对当前块的每个像素位置,编码端根据当前块的第一目标运动信息确定该像素位置的第一预测值,并根据当前块的第二目标运动信息确定该像素位置的第二预测值。
步骤a8,编码端根据该像素位置的第一预测值,该像素位置的目标权重值,该像素位置的第二预测值和该像素位置的关联权重值,确定该像素位置的加权预测值。
例如,该像素位置的加权预测值可以为:(该像素位置的第一预测值*该像素位置的目标权重值+该像素位置的第二预测值*该像素位置的关联权重值)/固定的预设数值。
步骤a9,编码端根据当前块的所有像素位置的加权预测值确定当前块的加权预测值。
实施例3:本申请实施例提出另一种编解码方法,可以应用于解码端,该方法包括:
步骤b1,在确定对当前块启动加权预测时,解码端获取当前块的权重预测角度,当前块的权重预测位置,及当前块的权重变换率。示例性的,解码端确定是否对当前块启动加权预测,如果是,则执行步骤b1及后续步骤,如果否,则处理方式本申请不做限制。
在一种可能的实施方式中,编码端判断当前块的特征信息是否满足特定条件,如果是,则确定对当前块启动加权预测。解码端也判断当前块的特征信息是否满足特定条件,如果是,则确定对当前块启动加权预测;如果否,则确定不对当前块启动加权预测。关于解码端如何基于特征信息确定当前块是否启动加权预测,与编码端的确定方式类似,在此不再重复赘述。
在另一种可能的实施方式中,编码端根据当前块的特征信息确定当前块是否支持加权预测,在当前块支持加权预测时,还可以采用其它策略确定是否对当前块启动加权预测,如采用率失真原则确定是否对当前块启动加权预测。在确定是否对当前块启动加权预测后,编码端发送当前块的编码比特流时,编码比特流可以包括是否启动加权预测的语法,该语法表示当前块是否启动加权预测。解码端根据当前块的特征信息确定当前块是否支持加权预测,具体方式与编码端的确定方式类似,在此不再赘述。在当前块支持加权预测时,解码端可以从编码比特流中解析出是否启动加权预测的语法,根据该语法确定是否对当前块启动加权预测。
示例性的,在确定对当前块启动加权预测时,解码端还可以获取当前块的权重预测角度,当前块的权重预测位置,及当前块的权重变换率,关于该权重预测角度,该权重预测位置及该权重变换率的相关说明,可以参见步骤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中,编码端/解码端需要根据当前块的权重变换率和当前块的权重变换的起始位置为当前块外部的周边位置配置参考权重值。在一种可能的实施方式中,可以采用如下方式:获取当前块的权重预测角度、当前块的权重变换率和当前块的权重预测位置,基于当前块的权重预测位置确定当前块的权重变换的起始位置,基于该权重变换的起始位置和该权重变换率确定权重配置参数,即该权重配置参数包括权重变换的起始位置和权重变换率。然后,根据该权重配置参数确定当前块外部的周边位置的参考权重值。
以下结合具体步骤,对为当前块外部的周边位置配置参考权重值的过程进行说明。
步骤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,第二邻近区域的参考权重值从2-8单调递增。
或者,第一邻近区域的参考权重值可以均为第一参考权重值,第二邻近区域的参考权重值可以单调递减。例如,第一邻近区域的参考权重值可以均为8,目标区域包括一个参考权重值,该参考权重值为7,第二邻近区域的参考权重值从6-0单调递减。
或者,第一邻近区域的参考权重值均为第二参考权重值,第二邻近区域的参考权重值均为第三参考权重值,第二参考权重值与第三参考权重值不同。例如,第一邻近区域的参考权重值均为0,目标区域包括至少两个参考权重值,参考权重值从1-7单调递增,第二邻近区域的参考权重值均为8,显然,第一邻近区域的参考权重值与第二邻近区域的参考权重值不同。
或者,第一邻近区域的参考权重值单调递增或单调递减,第二邻近区域的参考权重值单调递增或单调递减;例如,第一邻近区域的参考权重值单调递增,第二邻近区域的参考权重值也单调递增;又例如,第一邻近区域的参考权重值单调递减,第二邻近区域的参考权重值也单调递减。例如,第一邻近区域的参考权重值从0-3单调递增,目标区域包括一个参考权重值,该参考权重值为4,第二邻近区域的参考权重值从5-8单调递增。
情况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所示。
表1
AwpIdx 权重预测位置 权重预测角度
0 -3 0
1 -3 1
7 -3 7
8 -2 0
9 -2 1
55 3 7
示例性的,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。
示例性的,可以采用如下公式确定stepIdx:stepIdx=(AwpIdx>>3)–3。
示例性的,可以根据如下公式确定modAngNum(角度编号):modAngNum=AwpIdx%8;基于modAngNum,可以采用如下方式确定angleIdx:若modAngNum等于2,则angleIdx=7;若modAngNum等于6,则angleIdx=8;否则,angleIdx=modAngNum%2。
示例性的,可以采用如下公式确定subAngleIdx:subAngleIdx=modAngNum>>1。
综上所述,编码端在确定出当前块的权重预测角度和当前块的权重预测位置后,可以基于该权重预测角度和该权重预测位置确定AwpIdx的取值,参见表1所示。编码端在向解码端发送编码比特流时,该编码比特流可以携带AwpIdx的取值,基于此,解码端可以得到AwpIdx的取值,并根据AwpIdx获取stepIdx,angleIdx以及subAngleIdx。
示例性的,angleIdx以及subAngleIdx能够唯一确定一个权重预测角度,参见表2所示,当然,也可以采用其它方式确定权重预测角度,例如,更改分区编号等。
表2
角度编号modAngNum 角度分区subAngleIdx 权重预测角度的斜率的绝对值的log2对数值angleIdx
0 0 0
1 0 1
2 1 水平,配置较大值使得((x<<1)>>angleIdx)的值为0
3 1 1
4 2 0
5 2 1
6 3 垂直,配置较大值使得((y<<1)>>angleIdx)的值为0
7 3 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。
上述步骤d2和步骤d3可联合为一个步骤,即将步骤d2(根据stepIdx,angleIdx以及subAngleIdx为当前块外部的周边位置配置参考权重值)及步骤d3(根据angleIdx和参考权重值ReferenceWeight[x]获取亮度权重值)联合为:根据stepIdx,angleIdx及subAngleIdx获取像素位置的亮度权重值,即根据周边位置的坐标值与权重变换起始位置的坐标值确定。
以情况一为例:若subAngleIdx为0,即权重预测角度位于角度分区0,如权重预测角度为权重预测角度0或权重预测角度1,则采用如下公式确定权重变换的起始位置FirstPos:FirstPos=(ValidLength_H>>1)-6+DeltaPos_H。然后,采用如下公式AwpWeightArrayY[x][y]=Clip3(0,8,(y<<1)+((x<<1)>>angleIdx)-FirstPos)确定像素位置(x,y)的亮度权重值:(y<<1)+((x<<1)>>angleIdx)表示像素位置(x,y)指向的周边匹配位置。
步骤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。当然,上述只是第一取值和第二取值的示例,对此不做限制。针对其它类型的切换控制信息,实现过程与序列级切换控制信息类似,在此不再赘述。
在一种可能的实施方式中,当前块的权重变换率指示信息可以为当前块对应的SCC(Screen Content Coding,屏幕内容编码)标识,第一指示信息用于指示当前块属于屏幕内容编码,第二指示信息用于指示当前块属于非屏幕内容编码。在此基础上,可以获取当前块对应的SCC标识,并根据该SCC标识确定当前块的权重变换率。例如,若该SCC标识用于指示当前块属于屏幕内容编码,则当前块的权重变换率为第一权重变换率;若该SCC标识用于指示当前块属于非屏幕内容编码,则当前块的权重变换率为第二权重变换率。
示例性的,第一权重变换率的绝对值可以大于第二权重变换率的绝对值。例如,第一权重变换率的绝对值可以为4,第二权重变换率的绝对值可以为1或2。又例如,第一权重变换率的绝对值可以为2,第二权重变换率的绝对值可以为1。又例如,第一权重变换率的绝对值可以为8,第二权重变换率的绝对值可以为1或2或4。又例如,第一权重变换率的绝对值可以为8或4,第二权重变换率的绝对值可以为1或2。当然,上述只是几个示例,对此不做限制,只要第一权重变换率的绝对值大于第二权重变换率的绝对值即可。
示例性的,SCC标识可以包括但不限于:序列级SCC标识,帧级SCC标识,Slice级SCC标识,Tile级SCC标识,Patch级SCC标识,CTU级SCC标识,LCU级SCC标识,块级SCC标识,CU级SCC标识,PU级SCC标识等等,对此不做限制。例如,可以将当前块对应的序列级SCC标识确定为当前块对应的SCC标识,或者,将当前块对应的帧级SCC标识确定为当前块对应的SCC标识,以此类推,只要能够得到当前块对应的SCC标识即可。
示例性的,对于编码端来说,可以决策当前块属于屏幕内容编码,还是属于非屏幕内容编码。若当前块属于屏幕内容编码,则编码端确定当前块的权重变换率为第一权重变换率。若当前块属于非屏幕内容编码,则编码端确定当前块的权重变换率为第二权重变换率。或者,对于编码端来说,可以获取当前块对应的SCC标识,若该SCC标识用于指示当前块属于屏幕内容编码,则编码端确定当前块的权重变换率为第一权重变换率。若该SCC标识用于指示当前块属于非屏幕内容编码,则编码端确定当前块的权重变换率为第二权重变换率。
编码端可以将SCC标识(如序列级SCC标识,帧级SCC标识,Slice级SCC标识等等)编码到码流,使得解码端从码流中解析出该SCC标识,并将该SCC标识确定为当前块对应的SCC标识,例如,可以将当前块对应的序列级SCC标识确定为当前块对应的SCC标识。综上所述,解码端可以获知当前块对应的SCC标识,若该SCC标识用于指示当前块属于屏幕内容编码,则解码端确定当前块的权重变换率为第一权重变换率。若该SCC标识用于指示当前块属于非屏幕内容编码,则解码端确定当前块的权重变换率为第二权重变换率。例如,若SCC标识为第一取值,则用于指示当前块属于屏幕内容编码,若SCC标识为第二取值,则用于指示当前块属于非屏幕内容编码。第一取值为1,第二取值为0,或者,第一取值为0,第二取值为1。当然,上述只是第一取值和第二取值的示例,对此不做限制。
编码端也可以不将SCC标识编码到码流,而是利用与解码端一致的信息隐式推导出SCC标识,此时解码端也可以隐式推导出SCC标识,并将该SCC标识确定为当前块对应的SCC标识。例如,若连续多帧均是屏幕内容编码,则推导出当前帧为屏幕内容编码,因此,解码端隐式推导出帧级SCC标识,并将该SCC标识确定为当前块对应的SCC标识,且该SCC标识用于指示当前块属于屏幕内容编码。例如,若连续多帧均是非屏幕内容编码,则推导出当前帧为非屏幕内容编码,因此,解码端隐式推导出帧级SCC标识,且该SCC标识用于指示当前块属于非屏幕内容编码。例如,若IBC模式占比小于一定百分比,将下一帧确定为非屏幕内容编码,否则继续为屏幕内容编码。当然,上述方式只是隐式推导出SCC标识的示例,对此隐式推导方式不做限制。综上所述,解码端可以获取当前块对应的SCC标识,若该SCC标识用于指示当前块属于屏幕内容编码,则解码端确定当前块的权重变换率为第一权重变换率。若该SCC标识用于指示当前块属于非屏幕内容编码,则解码端确定当前块的权重变换率为第二权重变换率。例如,若SCC标识为第一取值,则用于指示当前块属于屏幕内容编码,若SCC标识为第二取值,则用于指示当前块属于非屏幕内容编码。
综上所述,当前块的权重变换率可以为第一权重变换率或者第二权重变换率,即当前块的权重变换率可以进行切换,且权重变换率的切换依赖于某级的SCC显示标识或SCC隐式标识,SCC显示标识是指,将scc_flag(SCC标识)编入码流,使得解码端从码流中解析出SCC标识,SCC隐式标识是指,解码端根据能够得到的信息自适应推导出SCC标识。
某级SCC标识是指:序列级指示当前序列的SCC标识,该SCC标识作为属于当前序列的所有块的SCC标识;帧级指示当前帧的SCC标识,该SCC标识作为属于当前帧的所有块的SCC标识;Slice级指示当前Slice的SCC标识,该SCC标识作为属于当前Slice的所有块的SCC标识;Tile级指示当前Tile的SCC标识,该SCC标识作为属于当前Tile的所有块的SCC标识;Patch级指示当前Patch的SCC标识,该SCC标识作为属于当前Patch的所有块的SCC标识;CTU级指示当前CTU的SCC标识,该SCC标识作为属于当前CTU的所有块的SCC标识;LCU级指示当前LCU的SCC标识,该SCC标识作为属于当前LCU的所有块的SCC标识;块级指示当前块的SCC标识,该SCC标识作为属于当前块的所有块的SCC标识;CU级指示当前CU的SCC标识,该SCC标识作为属于当前CU的SCC标识;PU级指示当前PU的SCC标识,该SCC标识作为属于当前PU的SCC标识。
示例性的,可以将第二权重变换率作为默认的权重变换率,在SCC标识用于指示当前块属于非屏幕内容编码时,不需要对权重变换率进行切换,即确定当前块的权重变换率为第二权重变换率。在SCC标识用于指示当前块属于屏幕内容编码时,需要对权重变换率进行切换,即确定当前块的权重变换率为第一权重变换率。或者,可以将第一权重变换率作为默认的权重变换率,在SCC标识用于指示当前块属于非屏幕内容编码时,需要对权重变换率进行切换,即确定当前块的权重变换率为第二权重变换率。在SCC标识用于指示当前块属于屏幕内容编码时,不需要对权重变换率进行切换,即确定当前块的权重变换率为第一权重变换率。
综上所述,在当前块属于屏幕内容编码时,当前块的权重变换率为第一权重变换率,在当前块属于非屏幕内容编码时,当前块的权重变换率为第二权重变换率,且第一权重变换率的绝对值大于第二权重变换率的绝对值,如第一权重变换率的绝对值为4,第二权重变换率的绝对值为1,使得属于SCC序列的当前块的权重变换率的绝对值增加,即变换速度增加。
在另一种可能的实施方式中,当前块的权重变换率指示信息可以为当前块对应的权重变换率切换标识,第一指示信息用于指示当前块不需要进行权重变换率切换,第二指示信息用于指示当前块需要进行权重变换率切换。在此基础上,可以获取当前块对应的权重变换率切换标识,并根据该权重变换率切换标识确定当前块的权重变换率。例如,若该权重变换率切换标识用于指示当前块不需要进行权重变换率切换,则当前块的权重变换率可以为第一权重变换率;若该权重变换率切换标识用于指示当前块需要进行权重变换率切换,则当前块的权重变换率可以为第二权重变换率。第一权重变换率的绝对值不等于第二权重变换率的绝对值。
例如,第一权重变换率的绝对值可以大于第二权重变换率的绝对值,如第一权重变换率的绝对值可以为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中,可以得到当前块的权重变换率,如第一权重变换率或者第二权重变换率,在此基础上,采用如下方式获取当前块的权重预测角度和权重预测位置:
方式a1、编码端和解码端约定相同的权重预测角度作为当前块的权重预测角度,并约定相同的权重预测位置作为当前块的权重预测位置。例如,编码端和解码端将权重预测角度A作为当前块的权重预测角度,编码端和解码端将权重预测位置4作为当前块的权重预测位置。
方式a2、编码端构建权重预测角度列表,权重预测角度列表包括至少一个权重预测角度,如权重预测角度A和权重预测角度B。编码端构建权重预测位置列表,权重预测位置列表包括至少一个权重预测位置,如权重预测位置0-权重预测位置数6。依次遍历权重预测角度列表中的每个权重预测角度,遍历权重预测位置列表中的每个权重预测位置,即遍历每个权重预测角度及每个权重预测位置的组合。将每个组合作为步骤a1中获取的权重预测角度和权重预测位置,基于该权重预测角度,该权重预测位置及权重变换率,得到当前块的加权预测值。
例如,编码端遍历到权重预测角度A和权重预测位置0时,基于权重预测角度A和权重预测位置0得到当前块的加权预测值。遍历到权重预测角度A和权重预测位置1时,基于权重预测角度A和权重预测位置1得到当前块的加权预测值。遍历到权重预测角度B和权重预测位置0时,基于权重预测角度B和权重预测位置0得到当前块的加权预测值,以此类推。编码端可以基于权重预测角度和权重预测位置的每个组合,得到当前块的加权预测值。
编码端基于权重预测角度和权重预测位置的组合得到当前块的加权预测值后,可以根据当前块的加权预测值确定率失真代价值,对此率失真代价值的确定方式不做限制,编码端可以得到每个组合的率失真代价值,并从所有率失真代价值中选择最小率失真代价值。
然后,编码端将最小率失真代价值对应的权重预测角度和权重预测位置组合分别作为目标权重预测角度和目标权重预测位置,最后将目标权重预测角度在权重预测角度列表中的索引值和目标权重预测位置在权重预测位置列表中的索引值编入码流。
针对解码端来说,解码端构建权重预测角度列表,该权重预测角度列表与编码端的权重预测角度列表相同,权重预测角度列表包括至少一个权重预测角度。构建权重预测位置列表,该权重预测位置列表与编码端的权重预测位置列表相同,权重预测位置列表包括至少一个权重预测位置。解码端在接收到当前块的编码比特流后,从编码比特流中解析出指示信息,根据该指示信息从权重预测角度列表中选择一个权重预测角度作为当前块的权重预测角度,根据该指示信息从权重预测位置列表中选择一个权重预测位置作为当前块的权重预测位置。
应用场景1:编码端在向解码端发送编码比特流时,该编码比特流可以包括指示信息1,指示信息1用于指示当前块的权重预测角度(即目标权重预测角度)和当前块的权重预测位置(即目标权重预测位置)。例如,当指示信息1为0时,用于指示权重预测角度列表中的第一个权重预测角度,且指示权重预测位置列表中的第一个权重预测位置,当指示信息1为1时,用于指示权重预测角度列表中的第一个权重预测角度,且指示权重预测位置列表中的第二个权重预测位置,以此类推,对于指示信息1的取值,用于指示哪个权重预测角度和哪个权重预测位置,只要编码端与解码端进行约定即可,本实施例中对此不做限制。
解码端在接收到编码比特流后,从该编码比特流中解析出指示信息1,基于该指示信息1,解码端可以从权重预测角度列表中选择与该指示信息1对应的权重预测角度,该权重预测角度作为当前块的权重预测角度。基于该指示信息1,解码端可以从权重预测位置列表中选择与该指示信息1对应的权重预测位置,该权重预测位置作为当前块的权重预测位置。
应用场景2:编码端在向解码端发送编码比特流时,该编码比特流可以包括指示信息2和指示信息3。指示信息2用于指示当前块的目标权重预测角度,如目标权重预测角度在权重预测角度列表中的索引值1,索引值1表示目标权重预测角度是权重预测角度列表中的第几个权重预测角度。指示信息3用于指示当前块的目标权重预测位置,如目标权重预测位置在权重预测位置列表中的索引值2,索引值2表示目标权重预测位置是权重预测位置列表中的第几个权重预测位置。解码端接收到编码比特流后,从编码比特流中解析出指示信息2和指示信息3,基于指示信息2,从权重预测角度列表中选择与该索引值1对应的权重预测角度,该权重预测角度作为当前块的权重预测角度。基于该指示信息3,从权重预测位置列表中选择与该索引值2对应的权重预测位置,该权重预测位置作为当前块的权重预测位置。
应用场景3:编码端和解码端可以约定优选配置组合,对此优选配置组合不做限制,可以根据实际经验进行配置,例如,编码端和解码端约定包括权重预测角度A和权重预测位置4的优选配置组合1,包括权重预测角度B和权重预测位置4的优选配置组合2。
编码端确定当前块的目标权重预测角度和目标权重预测位置后,确定目标权重预测角度和目标权重预测位置是否为优选配置组合。如果是,则编码端在向解码端发送编码比特流时,该编码比特流可以包括指示信息4和指示信息5。指示信息4用于指示当前块是否采用优选配置组合,如指示信息4为第一取值(如0),表示当前块采用优选配置组合。指示信息5用于指示当前块采用哪个优选配置组合,如指示信息5为0时,用于指示当前块采用优选配置组合1,指示信息5为1时,用于指示当前块采用优选配置组合2。
解码端在接收到编码比特流后,从该编码比特流中解析出指示信息4和指示信息5,基于该指示信息4,解码端确定当前块是否采用优选配置组合。若指示信息4为第一取值,则确定当前块采用优选配置组合。在当前块采用优选配置组合时,解码端基于指示信息5,确定当前块采用哪个优选配置组合,如当指示信息5为0时,确定当前块采用优选配置组合1,即当前块的权重预测角度为权重预测角度A,当前块的权重预测位置为权重预测位置4。又例如,当指示信息5为1时,确定当前块采用优选配置组合2,即当前块的权重预测角度为权重预测角度B,当前块的权重预测位置为权重预测位置4。
示例性的,若编码端和解码端只约定一组优选配置组合,如包括权重预测角度A和权重预测位置4的优选配置组合,则该编码比特流可以包括指示信息4,而不包括指示信息5,指示信息4用于指示当前块采用优选配置组合。解码端从该编码比特流中解析出指示信息4后,若指示信息4为第一取值,则确定当前块采用优选配置组合,基于该优选配置组合,确定当前块的权重预测角度为权重预测角度A,当前块的权重预测位置为权重预测位置4。
应用场景4:编码端和解码端可以约定优选配置组合,编码端确定当前块的目标权重预测角度和目标权重预测位置后,确定目标权重预测角度和目标权重预测位置是否为优选配置组合。如果否,则编码端向解码端发送编码比特流时,该编码比特流包括指示信息4和指示信息6。指示信息4用于指示当前块是否采用优选配置组合,如指示信息4为第二取值(如1),表示当前块未采用优选配置组合。指示信息6用于指示当前块的目标权重预测角度和当前块的目标权重预测位置。例如,当指示信息6为0时,用于指示权重预测角度列表中的第一个权重预测角度,且指示权重预测位置列表中的第一个权重预测位置,以此类推。
解码端在接收到编码比特流后,从该编码比特流中解析出指示信息4和指示信息6,基于该指示信息4,解码端确定当前块是否采用优选配置组合。若指示信息4为第二取值,则确定当前块未采用优选配置组合。在当前块未采用优选配置组合时,解码端基于指示信息6,可以从权重预测角度列表中选择与该指示信息6对应的权重预测角度,该权重预测角度作为当前块的权重预测角度,基于该指示信息6,解码端可以从权重预测位置列表中选择与该指示信息6对应的权重预测位置,该权重预测位置作为当前块的权重预测位置。
应用场景5:编码端和解码端可以约定优选配置组合,编码端确定当前块的目标权重预测角度和目标权重预测位置后,确定目标权重预测角度和目标权重预测位置是否为优选配置组合。如果否,则编码端向解码端发送编码比特流时,该编码比特流包括指示信息4,指示信息7和指示信息8。示例性的,指示信息4用于指示当前块是否采用优选配置组合,如指示信息4为第二取值,表示当前块未采用优选配置组合。指示信息7用于指示当前块的目标权重预测角度,如目标权重预测角度在权重预测角度列表中的索引值1,索引值1表示目标权重预测角度是权重预测角度列表中的第几个权重预测角度。指示信息8用于指示当前块的目标权重预测位置,如目标权重预测位置在权重预测位置列表中的索引值2,索引值2表示目标权重预测位置是权重预测位置列表中的第几个权重预测位置。
解码端在接收到编码比特流后,从该编码比特流中解析出指示信息4,指示信息7和指示信息8,基于该指示信息4,解码端确定当前块是否采用优选配置组合。若指示信息4为第二取值,则确定当前块未采用优选配置组合。在当前块未采用优选配置组合时,解码端基于该指示信息7,从权重预测角度列表中选择与该索引值1对应的权重预测角度,该权重预测角度作为当前块的权重预测角度。解码端基于该指示信息8,从权重预测位置列表中选择与该索引值2对应的权重预测位置,该权重预测位置作为当前块的权重预测位置。
实施例10:在实施例1-实施例3中,编码端/解码端需要获取当前块的权重变换率,若当前块支持权重变换率切换模式,则采用如下方式获取当前块的权重变换率:获取当前块的权重变换率指示信息;从预设的查找表中选择与该权重变换率指示信息对应的权重变换率;该预设的查找表包括至少两个权重变换率。将选择的权重变换率确定为当前块的权重变换率。
由于预设的查找表包括至少两个权重变换率,因此,若当前块支持权重变换率切换模式,则可以从至少两个权重变换率中选择当前块的权重变换率,即,当前块的权重变换率是可变的,从而能够自适应的切换权重变换率,而不是采用统一的一个权重变换率。
示例性的,若切换控制信息允许当前块启用权重变换率切换模式,则当前块支持权重变换率切换模式,若切换控制信息不允许当前块启用权重变换率切换模式,则当前块不支持权重变换率切换模式,关于当前块是否支持权重变换率切换模式的内容,参见实施例8。
在一种可能的实施方式中,预设的查找表可以包括至少两个权重变换率,权重变换率指示信息可以包括权重变换率索引信息(用于指示查找表中所有权重变换率中的某个权重变换率)。基于此,可以从该查找表中选择与该权重变换率索引信息对应的权重变换率。
针对编码端来说,若只存在一个查找表,则针对查找表中的每个权重变换率,编码端可以确定与该权重变换率对应的率失真代价值,并将最小的率失真代价值对应的权重变换率作为当前块的目标权重变换率,确定目标权重变换率在查找表中的索引信息,即权重变换率索引信息,该权重变换率索引信息表示该查找表中的第几个权重变换率。
针对解码端来说,若只存在一个查找表,编码端向解码端发送当前块的编码比特流时,该编码比特流可以携带权重变换率索引信息,该权重变换率索引信息用于指示目标权重变换率在查找表中的索引信息。解码端从该查找表中选择与该权重变换率索引信息对应的权重变换率,该权重变换率作为当前块的目标权重变换率。
在另一种可能的实施方式中,预设的查找表可以包括至少两个查找表,每个查找表中可以包括至少一个权重变换率,权重变换率指示信息可以包括查找表索引信息(用于指示所有查找表中的某个查找表)和权重变换率索引信息(用于指示查找表中所有权重变换率中的某个权重变换率)。基于此,可以从至少两个查找表中选择与该查找表索引信息对应的目标查找表,并从目标查找表中选择与该权重变换率索引信息对应的权重变换率。
示例性的,预设的查找表可以包括第一查找表和第二查找表,第二查找表包括的权重变换率的绝对值的最大值,大于第一查找表包括的权重变换率的绝对值的最大值,比如说,第二查找表包括的权重变换率的绝对值为4,8,第一查找表包括的权重变换率的绝对值为5,7,显然,第二查找表包括的权重变换率的绝对值的最大值为8,第一查找表包括的权重变换率的绝对值的最大值为7。第二查找表包括的权重变换率的绝对值与第一查找表包括的权重变换率的绝对值不完全相同,比如说,第二查找表包括的权重变换率的绝对值为4,8,第一查找表包括的权重变换率的绝对值为1,2,4,两个查找表包括的权重变换率的绝对值不完全相同。或者,第二查找表包括的权重变换率的绝对值与第一查找表包括的权重变换率的绝对值完全不同,比如说,第二查找表包括的权重变换率的绝对值为4,8,第一查找表包括的权重变换率的绝对值为1,2,两个查找表包括的权重变换率的绝对值完全不同。
示例性的,权重变换率指示信息包括查找表索引信息和权重变换率索引信息,该查找表索引信息可以为当前块对应的SCC标识,且该SCC标识用于指示当前块属于屏幕内容编码,或者,该SCC标识用于指示当前块属于非屏幕内容编码。若该SCC标识用于指示当前块属于非屏幕内容编码,则与该SCC标识对应的目标查找表为第一查找表。若该SCC标识用于指示当前块属于屏幕内容编码,则与该SCC标识对应的目标查找表为第二查找表。
综上所述,可以获取当前块对应的SCC标识(即查找表索引信息)和权重变换率索引信息,若该SCC标识用于指示当前块属于非屏幕内容编码,则确定目标查找表为第一查找表,并从第一查找表中选择与该权重变换率索引信息对应的权重变换率,将选择的权重变换率确定为当前块的权重变换率。若该SCC标识用于指示当前块属于屏幕内容编码,则确定目标查找表为第二查找表,并从第二查找表中选择与该权重变换率索引信息对应的权重变换率,将选择的权重变换率确定为当前块的权重变换率。至此,成功得到当前块的权重变换率。
针对编码端来说,关于编码端获取SCC标识的过程,可以参见实施例8,在此不再赘述。
若SCC标识用于指示当前块属于非屏幕内容编码,则目标查找表可以为第一查找表,针对第一查找表中的每个权重变换率,编码端确定与该权重变换率对应的率失真代价值,并将最小的率失真代价值对应的权重变换率作为当前块的目标权重变换率,确定目标权重变换率在第一查找表中的索引信息,即权重变换率索引信息。若SCC标识用于指示当前块属于屏幕内容编码,则目标查找表可以为第二查找表,针对第二查找表中的每个权重变换率,编码端确定与该权重变换率对应的率失真代价值,并将最小的率失真代价值对应的权重变换率作为当前块的目标权重变换率,确定目标权重变换率在第二查找表中的索引信息,即权重变换率索引信息,该权重变换率索引信息表示第二查找表中的第几个权重变换率。
针对解码端来说,关于解码端获取SCC标识的过程,可以参见实施例8,在此不再赘述。
编码端向解码端发送当前块的编码比特流时,该编码比特流可以携带权重变换率索引信息,该权重变换率索引信息用于指示目标权重变换率在第一查找表或者第二查找表中的索引信息。若SCC标识用于指示当前块属于非屏幕内容编码,则目标查找表可以为第一查找表,解码端从第一查找表中选择与该权重变换率索引信息(该权重变换率索引信息表示第一查找表中的第几个权重变换率)对应的权重变换率,该权重变换率作为当前块的目标权重变换率。若SCC标识用于指示当前块属于屏幕内容编码,则目标查找表可以为第二查找表,解码端从第二查找表中选择与该权重变换率索引信息(该权重变换率索引信息表示第二查找表中的第几个权重变换率)对应的权重变换率,该权重变换率作为当前块的目标权重变换率。
示例性的,预设的查找表可以包括第一查找表和第二查找表,第二查找表包括的权重变换率的绝对值与第一查找表包括的权重变换率的绝对值不完全相同,比如说,第二查找表包括的权重变换率的绝对值可以为1,2,4,8,第一查找表包括的权重变换率的绝对值可以为3,4,5,6,显然,两个查找表包括的权重变换率的绝对值不完全相同。或者,第二查找表包括的权重变换率的绝对值与第一查找表包括的权重变换率的绝对值完全不同,比如说,第二查找表包括的权重变换率的绝对值可以为2,4,6,8,第一查找表包括的权重变换率的绝对值可以为1,3,5,7,显然,两个查找表包括的权重变换率的绝对值完全不同。
示例性的,权重变换率指示信息包括查找表索引信息和权重变换率索引信息,该查找表索引信息可以为当前块对应的查找表切换标识,且该查找表切换标识用于指示当前块需要切换查找表,或者,该查找表切换标识用于指示当前块不需要切换查找表。例如,若该查找表切换标识用于指示当前块不需要切换查找表,则目标查找表可以为第一查找表;若该查找表切换标识用于指示当前块需要切换查找表,则目标查找表可以为第二查找表。
综上所述,可以获取当前块对应的查找表切换标识(即查找表索引信息)和权重变换率索引信息,若该查找表切换标识用于指示当前块不需要切换查找表,则可以确定目标查找表为第一查找表,并从第一查找表中选择与该权重变换率索引信息对应的权重变换率,将选择的权重变换率确定为当前块的权重变换率。若该查找表切换标识用于指示当前块需要切换查找表,则可以确定目标查找表为第二查找表,并从第二查找表中选择与该权重变换率索引信息对应的权重变换率,将选择的权重变换率确定为当前块的权重变换率。
针对编码端来说,关于编码端获取查找表切换标识的过程,可以参见实施例8,将实施例8中的权重变换率切换标识替换为查找表切换标识即可,在此不再赘述。例如,编码端依次遍历每个查找表中每个权重变换率,确定每个权重变换率对应的率失真代价值,若最小率失真代价值对应的权重变换率位于第二查找表,则对当前块需要切换查找表,即查找表切换标识用于指示当前块需要切换查找表。若最小率失真代价值对应的权重变换率位于第一查找表,则对当前块不需要切换查找表,即查找表切换标识用于指示当前块不需要切换查找表。
若查找表切换标识用于指示当前块不需要进行查找表切换,目标查找表为第一查找表,针对第一查找表中的每个权重变换率,编码端确定与该权重变换率对应的率失真代价值,将最小率失真代价值对应的权重变换率作为当前块的目标权重变换率,确定目标权重变换率在第一查找表中的索引信息,即权重变换率索引信息。若查找表切换标识用于指示当前块需要切换查找表,目标查找表为第二查找表,针对第二查找表中的每个权重变换率,编码端确定与该权重变换率对应的率失真代价值,将最小率失真代价值对应的权重变换率作为当前块的目标权重变换率,确定目标权重变换率在第二查找表中的索引信息,即权重变换率索引信息。
针对解码端来说,关于解码端获取查找表切换标识的过程,可以参见实施例8,将实施例8中的权重变换率切换标识替换为查找表切换标识即可,在此不再重复赘述。
编码端向解码端发送当前块的编码比特流时,该编码比特流携带权重变换率索引信息,该权重变换率索引信息用于指示目标权重变换率在第一查找表或第二查找表中的索引信息。若查找表切换标识用于指示当前块不需要切换查找表,目标查找表为第一查找表,解码端从第一查找表中选择与该权重变换率索引信息对应的权重变换率,即当前块的目标权重变换率。若查找表切换标识用于指示当前块需要切换查找表,目标查找表为第二查找表,解码端从第二查找表中选择与该权重变换率索引信息对应的权重变换率,即当前块的目标权重变换率。
实施例11:在实施例1-实施例3中,编码端/解码端需要获取当前块的权重预测角度,当前块的权重预测位置和当前块的权重变换率,在实施例10中,可以得到当前块的权重变换率,在此基础上,可以采用如下方式获取当前块的权重预测角度和权重预测位置:
方式b1、编码端和解码端约定相同的权重预测角度作为当前块的权重预测角度,并约定相同的权重预测位置作为当前块的权重预测位置。例如,编码端和解码端将权重预测角度A作为当前块的权重预测角度,编码端和解码端将权重预测位置4作为当前块的权重预测位置。
方式b2、编码端构建权重预测角度列表,权重预测角度列表包括至少一个权重预测角度。编码端构建权重预测位置列表,权重预测位置列表包括至少一个权重预测位置。编码端构建至少两个查找表,以第一查找表和第二查找表为例,第一查找表包括至少一个权重变换率,第二查找表包括至少一个权重变换率。编码端确定出目标查找表,确定方式参见实施例10,以目标查找表是第一查找表为例。编码端依次遍历权重预测角度列表中每个权重预测角度,遍历权重预测位置列表中每个权重预测位置,遍历目标查找表中每个权重变换率,即遍历每个权重预测角度,每个权重预测位置,每个权重变换率的组合。针对权重预测角度,权重预测位置及权重变换率的每个组合,作为步骤a1中获取的权重预测角度,权重预测位置及权重变换率,基于权重预测角度,权重预测位置及权重变换率,得到当前块的加权预测值。
综上所述,编码端可以基于每个组合得到当前块的加权预测值。在得到当前块的加权预测值后,编码端可以根据当前块的加权预测值确定率失真代价值,即,编码端可以得到每个组合的率失真代价值,并从所有率失真代价值中选择最小率失真代价值。
然后,编码端将最小率失真代价值对应的权重预测角度,权重预测位置和权重变换率分别作为目标权重预测角度,目标权重预测位置和目标权重变换率,最后,将目标权重预测角度在权重预测角度列表中的索引值,目标权重预测位置在权重预测位置列表中的索引值,及目标权重变换率在目标目标查找表中的索引值,均编入当前块的码流。
针对解码端来说,解码端构建权重预测角度列表,该权重预测角度列表与编码端的权重预测角度列表相同,解码端构建权重预测位置列表,该权重预测位置列表与编码端的权重预测位置列表相同,解码端构建第一查找表和第二查找表,该第一查找表与编码端的第一查找表相同,该第二查找表与编码端的第二查找表相同。解码端在接收到当前块的编码比特流后,从该编码比特流中解析出指示信息,根据该指示信息从权重预测角度列表中选择一个权重预测角度作为当前块的权重预测角度,根据该指示信息从权重预测位置列表中选择一个权重预测位置作为当前块的权重预测位置,权重预测角度和权重预测位置的获取方式,参见实施例9,在此不再赘述。解码端在接收到当前块的编码比特流后,可以确定目标查找表(如第一查找表或者第二查找表),并根据权重变换率索引信息从目标查找表中选择一个权重变换率作为当前块的权重变换率,关于权重变换率的获取方式,参见实施例10,在此不再赘述。
实施例1-11是AWP模式的编解码过程,在AWP模式中,AWP的模式数可以在序列级,帧级,Slice级,Tile级,Patch级,CTU级,LCU级,块级,CU级,PU级开关控制大小。模式数大小的控制可以通过权重预测角度的增减或/和参考权重配置方式数量的增减。语法标识可以单独编码flag也可以依赖别的flag导出,例如通过SCC标识(scc_flag)来控制AWP模式数,如scc_flag为1时,权重预测角度为6种,scc_flag为0时,权重预测角度为8种。
实施例12:参见图8所示,为编解码方法的流程示意图,该方法可以应用于解码端(也可以称为视频解码器)或者编码端(也可以称为视频编码器),该方法可以包括:
步骤801,获取为当前块创建的运动信息候选列表,该运动信息候选列表包括至少两个单向运动信息,为了区分方便,将运动信息候选列表中已存在的运动信息称为候选运动信息。示例性的,在运动信息候选列表创建时加入单向运动信息的过程,可以包括但不限于:针对待加入到运动信息候选列表中的可用运动信息,若该可用运动信息为双向运动信息,则根据该可用运动信息的属性将该可用运动信息裁剪为单向运动信息,将该单向运动信息加入到运动信息候选列表或者该单向运动信息与运动信息候选列表中已存在的候选运动信息不重复时将该单向运动信息加入到运动信息候选列表。或者,若该可用运动信息为单向运动信息,则将该可用运动信息加入到运动信息候选列表或者该可用运动信息与运动信息候选列表中已存在的候选运动信息不重复时将该可用运动信息加入到运动信息候选列表。
步骤802,基于该运动信息候选列表确定当前块的预测值。
在一种可能的实施方式中,当确定对当前块启动角度加权预测模式时,则运动信息候选列表可以为角度加权预测模式的运动信息候选列表,基于此,可以基于该运动信息候选列表获取当前块的第一目标运动信息和第二目标运动信息。针对当前块的每个像素位置,根据第一目标运动信息确定该像素位置的第一预测值,根据第二目标运动信息确定该像素位置的第二预测值。然后,根据该第一预测值,该像素位置的目标权重值,该第二预测值和该像素位置的关联权重值,确定该像素位置的加权预测值。然后,可以根据当前块的所有像素位置的加权预测值确定当前块的加权预测值。
示例性的,基于角度加权预测模式的运动信息候选列表,可以从该运动信息候选列表中选择候选运动信息作为当前块的第一原始运动信息,并从该运动信息候选列表中选择候选运动信息作为当前块的第二原始运动信息;根据该第一原始运动信息确定当前块的第一目标运动信息,并根据该第二原始运动信息确定当前块的第二目标运动信息。
示例性的,根据该第一预测值,该像素位置的目标权重值,该第二预测值和该像素位置的关联权重值,确定该像素位置的加权预测值之前,还可以包括:在确定对当前块启动加权预测时,获取当前块的权重预测角度和权重配置参数;根据权重配置参数为当前块外部的周边位置配置参考权重值;针对当前块的每个像素位置,根据权重预测角度从当前块外部的周边位置中确定该像素位置指向的周边匹配位置;根据周边匹配位置关联的参考权重值确定该像素位置的目标权重值,根据该像素位置的目标权重值确定该像素位置的关联权重值。关于上述过程的具体实现流程,可以参见实施例1-实施例11,在此不再赘述。
在一种可能的实施方式中,当确定对当前块启动几何划分模式(GeometricPartition Mode)或者组合楔形预测模式(Compound Wedge Prediction)时,运动信息候选列表可以分别为几何划分模式的运动信息候选列表或组合楔形预测模式的运动信息候选列表。基于此,基于运动信息候选列表获取当前块的第一目标运动信息和第二目标运动信息;针对当前块的每个像素位置,根据第一目标运动信息确定该像素位置的第一预测值,根据第二目标运动信息确定该像素位置的第二预测值;根据第一预测值和第二预测值确定该像素位置的加权预测值;根据当前块的所有像素位置的加权预测值确定当前块的加权预测值。
示例性的,基于几何划分模式的运动信息候选列表或组合楔形预测模式的运动信息候选列表,可以从运动信息候选列表中选择候选运动信息作为当前块的第一原始运动信息,从运动信息候选列表中选择候选运动信息作为当前块的第二原始运动信息;根据第一原始运动信息确定当前块的第一目标运动信息;根据第二原始运动信息确定当前块的第二目标运动信息。
在一种可能的实施方式中,当确定对当前块启动组合帧间帧内预测模式(Compound inter-intra prediction)或者楔形帧间帧内预测模式(wedge inter-intramode)时,运动信息候选列表可以为组合帧间帧内预测模式的运动信息候选列表或者楔形帧间帧内预测模式的运动信息候选列表。基于此,可以基于该运动信息候选列表获取当前块的目标运动信息;针对当前块的每个像素位置,根据该目标运动信息确定该像素位置的帧间预测值;并根据帧内预测模式(如planner模块,DC模式,各种角度预测模式等,对此不做限制)确定该像素位置的帧内预测值。然后,根据该帧间预测值和该帧内预测值确定该像素位置的加权预测值,并根据当前块的所有像素位置的加权预测值确定当前块的加权预测值。
示例性的,基于组合帧间帧内预测模式的运动信息候选列表或者楔形帧间帧内预测模式的运动信息候选列表,可以从该运动信息候选列表中选择一个候选运动信息作为当前块的原始运动信息,并根据该原始运动信息确定当前块的目标运动信息。
实施例13:在实施例1-实施例3,实施例12中,编码端/解码端需要获取当前块的运动信息候选列表,例如,获取待加入到运动信息候选列表中的至少一个可用运动信息,并基于这些可用运动信息获取当前块的运动信息候选列表。示例性的,至少一个可用运动信息包括但不限于如下运动信息的至少一种:空域运动信息;时域运动信息;HMVP(History-based Motion Vector Prediction,基于历史的运动矢量预测)运动信息;预设运动信息。
示例性的,针对空域运动信息,待加入到运动信息候选列表中的可用运动信息的获取过程,可以包括:针对当前块的空域相邻块,若空域相邻块存在,且空域相邻块采用帧间预测模式,则将空域相邻块的运动信息确定为可用运动信息;和/或,针对当前块的第一空域相邻块,若第一空域相邻块存在,且第一空域相邻块采用帧间预测模式,且第一空域相邻块的运动信息与当前块的已遍历的第二空域相邻块(至少一个)的运动信息不同,则将第一空域相邻块的运动信息确定为可用运动信息。其中,在第二空域相邻块存在,且第二空域相邻块采用帧间预测模式时,需要比较第一空域相邻块的运动信息与第二空域相邻块的运动信息是否不同;在第二空域相邻块不存在,或第二空域相邻块存在,但是第二空域相邻块未采用帧间预测模式时,直接确定第一空域相邻块的运动信息与第二空域相邻块的运动信息不同。
针对时域运动信息,待加入到运动信息候选列表中的可用运动信息的获取过程,可以包括:基于当前块的预设位置(如左上角像素位置),从当前块的参考帧中选取与预设位置对应的时域相邻块,将时域相邻块的运动信息确定为可用运动信息;和/或,基于当前块的权重预测角度和权重预测位置,确定当前块的目标位置(如右上角像素位置);从当前块的参考帧中选取与目标位置对应的时域相邻块,将时域相邻块的运动信息确定为可用运动信息。
针对预设运动信息,待加入到运动信息候选列表中的可用运动信息的获取过程,可以包括:可以将预设运动信息确定为可用运动信息,示例性的,该预设运动信息可以包括但不限于如下运动信息的至少一种:零运动信息;基于运动信息候选列表中已存在的候选运动信息所导出的缺省运动信息;运动信息候选列表中已存在的候选运动信息。
在一种可能的实施方式中,针对待加入到运动信息候选列表中的可用运动信息,若该可用运动信息为单向运动信息,则可以将该可用运动信息加入到运动信息候选列表。或者,若该可用运动信息与运动信息候选列表中已存在的候选运动信息不重复,则可以将该可用运动信息加入到运动信息候选列表。或者,若该可用运动信息与运动信息候选列表中已存在的候选运动信息重复,则可以不将该可用运动信息加入到运动信息候选列表。
若该可用运动信息为双向运动信息,则可以根据该可用运动信息的属性将该可用运动信息裁剪为单向运动信息(如指向第一参考帧列表中参考帧的单向运动信息,或者,指向第二参考帧列表中参考帧的单向运动信息),并将该单向运动信息加入到运动信息候选列表。或者,若该单向运动信息与运动信息候选列表中已存在的候选运动信息不重复,则可以将该单向运动信息加入到运动信息候选列表。或者,若该单向运动信息与运动信息候选列表中已存在的候选运动信息重复,则可以不将该单向运动信息加入到运动信息候选列表。
示例性的,可以采用如下方式将可用运动信息裁剪为单向运动信息,需要注意的是,在后续方式一,方式二,方式三和方式四中出现的需要进行裁剪的可用运动信息,均是指双向运动信息。
方式一、根据可用运动信息的位置将该可用运动信息裁剪为单向运动信息。
示例性的,若可用运动信息是当前块的空域相邻块的运动信息,则可以基于空域相邻块的位置将该可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,或者,将该可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
例如,参见图9A所示,为空域相邻块的位置的示意图,F,G,C,A,B,D是当前块的空域相邻块,即F,G,C,A,B,D是空域相邻块的位置,当然,空域相邻块可以是F,G,C,A,B,D中的一个或多个。在方式一中,可以基于空域相邻块的位置将可用运动信息裁剪为单向运动信息,比如说,针对位于当前块同侧的F和A,将F的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将A的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,或者,将F的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将A的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,显然,上述方式能够保证位于当前块同侧的F和A,将指向第一参考帧列表中参考帧的单向运动信息和指向第二参考帧列表中参考帧的单向运动信息同时加入运动信息候选列表。又例如,针对位于当前块同侧的B和G,将B的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将G的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,或者,将B的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将G的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。
示例性的,若可用运动信息是当前块的时域相邻块的运动信息,则可以基于时域相邻块的位置将该可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,或者,将该可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
例如,参见图9B,图9C和图9D所示,为时域相邻块的位置的示意图,时域相邻块可以为一个或多个,时域相邻块的位置可以根据权重预测角度以及权重预测位置的索引值确定,时域相邻块的位置的确定方式参见后续实施例的方式21和方式22,在此不再赘述。图9B是当前块的右上角像素位置的时域相邻块,图9C是当前块右下角像素位置的时域相邻块,图9D是当前块左下角像素位置的时域相邻块,当然,上述只是时域相邻块的几个示例,对此不做限制。在方式一中,可以基于时域相邻块的位置将可用运动信息裁剪为单向运动信息,比如说,将右上角像素位置的时域相邻块的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息或指向第二参考帧列表中参考帧的单向运动信息;将右下角像素位置的时域相邻块的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息或指向第二参考帧列表中参考帧的单向运动信息;将左下角像素位置的时域相邻块的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息或指向第二参考帧列表中参考帧的单向运动信息。
以下结合几个具体应用场景,对方式一的实现过程进行说明。
应用场景1:将F的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将G的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将C的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将A的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将B的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将D的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。基于此,在根据可用运动信息的位置将该可用运动信息裁剪为单向运动信息,若待加入到运动信息候选列表的可用运动信息是F(F表示空域相邻块的位置)的双向运动信息,则可以将该可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,以此类推。
应用场景2:将F的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将G的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将C的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将A的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将B的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将D的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将时域相邻块(可以是任意位置的时域相邻块,参见图9B-图9D所示)的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。
应用场景3:将F的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将G的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将C的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将A的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将B的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将D的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,时域相邻块的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
应用场景4:将F的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将G的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将C的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将A的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将B的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将D的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。
应用场景5:将F的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将G的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将C的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将A的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将B的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将D的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,时域相邻块的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。
应用场景6:将F的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将G的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将C的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将A的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,将B的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,将D的双向运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。时域相邻块的双向运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
当然,上述应用场景1-应用场景6只是几个示例,对此不做限制。例如,可以更改FGCABD的顺序,或者,可以增加更多的空域相邻块的位置,或减少若干个空域相邻块的位置,例如,时域相邻块的运动信息可以为单向运动信息,时域运动信息的位置可以位于空域运动信息之前或插入在空域运动信息中间,或者,可以存在大于一个的时域运动信息等。
方式二、根据可用运动信息的实际编号将该可用运动信息裁剪为单向运动信息。
示例性的,若可用运动信息是当前块的相邻块(如空域相邻块和/或时域相邻块)的运动信息,则基于相邻块的遍历次序确定可用运动信息的实际编号,并根据该实际编号将该可用运动信息裁剪为单向运动信息。例如,若实际编号的奇偶性为奇数,则将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若实际编号的奇偶性为偶数,则将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。或者,若实际编号的奇偶性为偶数,则将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若实际编号的奇偶性为奇数,则将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
示例性的,当前块的相邻块可以是空域相邻块,参见图9A所示,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用于表示按照遍历顺序遍历的第二个空域相邻块,以此类推。
示例性的,当前块的相邻块可以是时域相邻块,参见图9B-图9D所示,假设时域相邻块的遍历次序是右上角像素位置的时域相邻块,右下角像素位置的时域相邻块,左下角像素位置的时域相邻块,则右上角像素位置的时域相邻块对应的实际编号为0,右下角像素位置的时域相邻块对应的实际编号为1,左下角像素位置的时域相邻块对应的实际编号为2。或者,右上角像素位置的时域相邻块对应的实际编号为1,右下角像素位置的时域相邻块对应的实际编号为2,左下角像素位置的时域相邻块对应的实际编号为3。当然,上述遍历次序只是示例,对此遍历次序不做限制,且上述各时域相邻块对应的实际编号也只是示例。
综上所述,若可用运动信息是右上角像素位置的时域相邻块的运动信息,则基于右上角像素位置的时域相邻块的遍历次序确定可用运动信息的实际编号为0,以此类推。
示例性的,当前块的相邻块可以是空域相邻块和时域相邻块,假设空域相邻块的遍历次序是FGCABD,时域相邻块位于任意空域相邻块的后面(如位于D的后面,或位于B的后面,或位于A的后面,或位于C的后面,或位于G的后面,或位于F的后面),或者,时域相邻块位于所有空域相邻块的前面(如位于F的前面),假设时域相邻块位于D的后面,则所有相邻块的遍历次序是FGCABDT,T用于表示时域相邻块(可以是任意位置的时域相邻块)。当然,上述FGCABDT的遍历次序只是示例,对此遍历次序不做限制。基于此,则F对应的实际编号为0,G对应的实际编号为1,C对应的实际编号为2,A对应的实际编号为3,B对应的实际编号为4,D对应的实际编号为5,T对应的实际编号为6。或者,F对应的实际编号为1,G对应的实际编号为2,C对应的实际编号为3,A对应的实际编号为4,B对应的实际编号为5,D对应的实际编号为6,T对应的实际编号为7。
综上所述,针对空域相邻块和时域相邻块来说,假设FGCABDT对应的实际编号依次为0,1,2,3,4,5,6,若可用运动信息是空域相邻块F的运动信息,基于空域相邻块F的遍历次序确定可用运动信息的实际编号为0,若可用运动信息是时域相邻块T的运动信息,基于时域相邻块T的遍历次序确定可用运动信息的实际编号为6,以此类推。
示例性的,假设FGCABDT对应的实际编号依次为0,1,2,3,4,5,6,若对FGCABDT的运动信息进行依次遍历后,F的运动信息为可用运动信息且为双向运动信息,C的运动信息为可用运动信息且为双向运动信息,B的运动信息为可用运动信息且为双向运动信息,则F的运动信息的实际编号为0,C的运动信息的实际编号为2,B的运动信息的实际编号为4。
基于此,F的运动信息的实际编号的奇偶性为偶数,将F的运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。C的运动信息的实际编号的奇偶性为偶数,将C的运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。B的运动信息的实际编号的奇偶性为偶数,将B的运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
或者,F的运动信息的实际编号的奇偶性为偶数,将F的运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。C的运动信息的实际编号的奇偶性为偶数,将C的运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。B的运动信息的实际编号的奇偶性为偶数,将B的运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。
在一种可能的实施方式中,可用运动信息还可以是HMVP运动信息,也可以根据HMVP运动信息的实际编号将HMVP运动信息裁剪为单向运动信息。示例性的,假设空域相邻块的遍历次序是FGCABD,HMVP运动信息可以位于任意空域相邻块的后面(如位于D的后面,或位于B的后面,或位于A的后面,或位于C的后面,或位于G的后面,或位于F的后面),或者,HMVP运动信息位于所有空域相邻块的前面(如位于F的前面),假设HMVP运动信息位于D的后面,则遍历次序是FGCABDH,H用于表示HMVP运动信息(HMVP运动信息可以为至少一个,HMVP运动信息为多个时,将多个HMVP运动信息按照顺序排列,对HMVP运动信息的顺序不做限制)。当然,FGCABDH的遍历次序只是示例,对此遍历次序不做限制。基于此,FGCABDH对应的实际编号依次0123456或1234567。
示例性的,假设相邻块(如空域相邻块和时域相邻块)的遍历次序是FGCABDT,HMVP运动信息可以位于任意相邻块的后面,也可以位于所有相邻块的前面,假设HMVP运动信息位于T的后面,则遍历次序是FGCABDTH。当然,FGCABDTH的遍历次序只是示例,对此遍历次序不做限制。基于此,FGCABDTH对应的实际编号依次01234567或12345678。
在一种可能的实施方式中,可用运动信息还可以是预设运动信息,也可以根据预设运动信息的实际编号将预设运动信息裁剪为单向运动信息。示例性的,假设空域相邻块的遍历次序是FGCABD,预设运动信息可以位于任意空域相邻块的后面,也可以位于所有空域相邻块的前面,假设预设运动信息位于D的后面,则遍历次序是FGCABDK,K用于表示预设运动信息(预设运动信息可以为至少一个,预设运动信息为多个时,将多个预设运动信息按照顺序排列,对预设运动信息的顺序不做限制)。当然,FGCABDK的遍历次序只是示例,对此遍历次序不做限制。基于此,FGCABDK对应的实际编号依次为0123456或1234567。
示例性的,假设相邻块(如空域相邻块和时域相邻块)的遍历次序是FGCABDT,预设运动信息可以位于任意相邻块的后面,也可以位于所有相邻块的前面,假设预设运动信息位于T的后面,则遍历次序是FGCABDTK。当然,FGCABDTK的遍历次序只是示例,对此遍历次序不做限制。基于此,FGCABDTK对应的实际编号依次为01234567或12345678。
示例性的,假设相邻块和HMVP运动信息的遍历次序是FGCABDTH,预设运动信息可以位于任意相邻块的后面,位于所有相邻块的前面,或位于HMVP运动信息的后面,假设预设运动信息位于H的后面,则遍历次序是FGCABDTHK。当然,FGCABDTHK的遍历次序只是示例,对此不做限制,FGCABDTHK对应的实际编号依次为012345678或123456789。
示例性的,假设空域相邻块和HMVP运动信息的遍历次序是FGCABDH,预设运动信息位于任意空域相邻块的后面,位于所有空域相邻块的前面,或位于HMVP运动信息的后面,假设预设运动信息位于H的后面,则遍历次序是FGCABDHK。当然,FGCABDHK的遍历次序只是示例,对此不做限制,FGCABDHK对应的实际编号依次为01234567或12345678。
方式三、根据可用运动信息的有效编号将该可用运动信息裁剪为单向运动信息。
示例性的,根据可用运动信息的遍历次序(即待加入到运动信息候选列表中的所有可用运动信息的遍历次序)确定可用运动信息的有效编号,该有效编号是指将遍历到的可用运动信息依次排列的编号,并根据该有效编号将该可用运动信息裁剪为单向运动信息。例如,若该有效编号的奇偶性为奇数,则可以将该可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若该有效编号的奇偶性为偶数,则可以将该可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。或者,若该有效编号的奇偶性为偶数,则可以将该可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若该有效编号的奇偶性为奇数,则可以将该可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
示例性的,在构建运动信息候选列表时,可以获取待加入到运动信息候选列表中的可用运动信息,可以对待加入到运动信息候选列表中的所有可用运动信息进行排列,确定每个可用运动信息的遍历次序。比如说,待加入到运动信息候选列表中的可用运动信息为可用运动信息x1,可用运动信息x2和可用运动信息x3,这些可用运动信息的遍历次序依次是可用运动信息x1,可用运动信息x2和可用运动信息x3,因此,可用运动信息x1的有效编号为0,可用运动信息x2的有效编号为1,可用运动信息x3的有效编号为2,或,可用运动信息x1的有效编号为1,可用运动信息x2的有效编号为2,可用运动信息x3的有效编号为3。
由于待加入到运动信息候选列表中的可用运动信息可能为单向运动信息(不需要裁剪为单向运动信息),也可能为双向运动信息(需要裁剪为单向运动信息),因此,在对待加入到运动信息候选列表中的所有可用运动信息进行排列时,可以对单向运动信息和双向运动信息进行排列,即上述可用运动信息x1,可用运动信息x2和可用运动信息x3可以是单向运动信息,也可以是双向运动信息。或者,可以只对双向运动信息进行排列,而不对单向运动信息进行排列,即上述可用运动信息x1,可用运动信息x2和可用运动信息x3均是双向运动信息。为了方便描述,本实施例中,以只对双向运动信息进行排列为例进行说明。
示例性的,假设空域相邻块的遍历次序是FGCABD,若对FGCABD的运动信息进行依次遍历后,F的运动信息为可用运动信息且为双向运动信息,C的运动信息为可用运动信息且为双向运动信息,B的运动信息为可用运动信息且为双向运动信息,则F的运动信息的有效编号为0,C的运动信息的有效编号为1,B的运动信息的有效编号为2。或者,F的运动信息的有效编号为1,C的运动信息的有效编号为2,B的运动信息的有效编号为3。
以FCB的有效编号依次为012为例,F的运动信息的有效编号的奇偶性为偶数,将F的运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。C的运动信息的有效编号的奇偶性为奇数,将C的运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。B的运动信息的有效编号的奇偶性为偶数,将B的运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。或者,F的运动信息的有效编号的奇偶性为偶数,将F的运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。C的运动信息的有效编号的奇偶性为奇数,将C的运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。B的运动信息的有效编号的奇偶性为偶数,将B的运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。
示例性的,假设相邻块的遍历次序是FGCABDT,若对FGCABDT的运动信息进行依次遍历后,F的运动信息为可用运动信息且为双向运动信息,C的运动信息为可用运动信息且为双向运动信息,B的运动信息为可用运动信息且为双向运动信息,T的运动信息为可用运动信息且为双向运动信息,则FCBT的运动信息的有效编号依次为0123或者1234。
示例性的,假设相邻块和HMVP运动信息的遍历次序是FGCABDTH,若对FGCABDTH的运动信息进行依次遍历后,F的运动信息为可用运动信息且为双向运动信息,C的运动信息为可用运动信息且为双向运动信息,B的运动信息为可用运动信息且为双向运动信息,T的运动信息为可用运动信息且为双向运动信息,H的运动信息为可用运动信息且为双向运动信息,则FCBTH的运动信息的有效编号依次为01234或者12345。
示例性的,假设相邻块,HMVP运动信息和预设运动信息的遍历次序是FGCABDTHK,若对FGCABDTHK的运动信息进行依次遍历后,F的运动信息为可用运动信息且为双向运动信息,B的运动信息为可用运动信息且为双向运动信息,K的运动信息为可用运动信息且为双向运动信息,则FBK的运动信息的有效编号依次为012或者123。
方式四、根据可用运动信息的性质(也可理解成类型)将该可用运动信息裁剪为单向运动信息。
示例性的,若可用运动信息是当前块的时域相邻块的运动信息,则将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,即,只要可用运动信息的性质为时域相邻块的运动信息,就将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。或者,若可用运动信息是当前块的时域相邻块的运动信息,则将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,即,只要可用运动信息的性质为时域相邻块的运动信息,就将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
示例性的,若可用运动信息是当前块的空域相邻块的运动信息,则将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,即,只要可用运动信息的性质为空域相邻块的运动信息,就将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。或者,若可用运动信息是当前块的空域相邻块的运动信息,则将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息,即,只要可用运动信息的性质为空域相邻块的运动信息,就将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
若可用运动信息是HMVP运动信息(可用运动信息的性质为HMVP运动信息),则将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。或者,若可用运动信息是HMVP运动信息,则将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
若可用运动信息是预设运动信息(即可用运动信息的性质为预设运动信息),则将可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息。或者,若可用运动信息是预设运动信息,则将可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
在一种可能的实施方式中,若可用运动信息是当前块的时域相邻块的运动信息,可以直接将可用运动信息裁剪为指向第一参考帧列表或第二参考帧列表中参考帧的单向运动信息,也可以采用方式一将该可用运动信息裁剪为单向运动信息,或者采用方式二将该可用运动信息裁剪为单向运动信息,或者采用方式三将该可用运动信息裁剪为单向运动信息。
在一种可能的实施方式中,若可用运动信息是当前块的空域相邻块的运动信息,可以直接将可用运动信息裁剪为指向第一参考帧列表或第二参考帧列表中参考帧的单向运动信息,也可以采用方式一将该可用运动信息裁剪为单向运动信息,或者采用方式二将该可用运动信息裁剪为单向运动信息,或者采用方式三将该可用运动信息裁剪为单向运动信息。
在一种可能的实施方式中,若可用运动信息是HMVP运动信息,可以直接将可用运动信息裁剪为指向第一参考帧列表或第二参考帧列表中参考帧的单向运动信息,也可以采用方式一将该可用运动信息裁剪为单向运动信息,或者采用方式二将该可用运动信息裁剪为单向运动信息,或者采用方式三将该可用运动信息裁剪为单向运动信息。
在一种可能的实施方式中,若可用运动信息是预设运动信息,可以直接将可用运动信息裁剪为指向第一参考帧列表或第二参考帧列表中参考帧的单向运动信息,也可以采用方式一将该可用运动信息裁剪为单向运动信息,或者采用方式二将该可用运动信息裁剪为单向运动信息,或者采用方式三将该可用运动信息裁剪为单向运动信息。
当然,方式一至方式四只是几个示例,对此不做限制,只要能够将可用运动信息(即双向运动信息)裁剪为指向第一参考帧列表或第二参考帧列表中参考帧的单向运动信息即可。
在上述实施例中,第一参考帧列表也称为第一参考帧队列,还可以称为前向参考帧列表,如List0。第二参考帧列表也称为第二参考帧队列,还可以称为后向参考帧列表,如List1。
在上述实施例中,待加入到运动信息候选列表中的可用运动信息可以为多个,针对不同可用运动信息,可以采用相同方式将可用运动信息裁剪为单向运动信息,或采用不同方式将可用运动信息裁剪为单向运动信息。比如说,针对第一个可用运动信息,采用方式一将可用运动信息裁剪为单向运动信息,针对第二个可用运动信息,采用方式三将可用运动信息裁剪为单向运动信息,针对第三个可用运动信息,采用方式四将可用运动信息裁剪为单向运动信息,针对第四个可用运动信息,采用方式一将可用运动信息裁剪为单向运动信息,以此类推。
在上述实施例中,需要比较单向运动信息(若可用运动信息为单向运动信息,则待比较的单向运动信息为可用运动信息,若可用运动信息为双向运动信息,则待比较的单向运动信息为对可用运动信息进行裁剪后的单向运动信息)与候选运动信息是否重复,针对单向运动信息与候选运动信息的查重操作,可以包括:若单向运动信息指向的参考帧与候选运动信息指向的参考帧相同,且单向运动信息的运动矢量与候选运动信息的运动矢量相同,则确定单向运动信息与候选运动信息重复;否则,确定单向运动信息与候选运动信息不重复。
示例性的,单向运动信息指向的参考帧与候选运动信息指向的参考帧是否相同的确定过程,可以包括:若单向运动信息指向的参考帧列表与候选运动信息指向的参考帧列表相同,且单向运动信息的refIdx(参考帧索引)与候选运动信息的refIdx相同,则确定单向运动信息指向的参考帧与候选运动信息指向的参考帧相同;否则,确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
或者,若单向运动信息指向的参考帧的POC与候选运动信息指向的参考帧的POC相同,则确定单向运动信息指向的参考帧与候选运动信息指向的参考帧相同;否则,确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
或者,若单向运动信息指向的参考帧为知识库帧,候选运动信息指向的参考帧为非知识库帧,或单向运动信息指向的参考帧为非知识库帧,候选运动信息指向的参考帧为知识库帧,则确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
或者,若单向运动信息指向的参考帧和候选运动信息指向的参考帧均为非知识库帧,则比较单向运动信息指向的参考帧的DOI与候选运动信息指向的参考帧的DOI是否相同,若是,确定单向运动信息指向的参考帧与候选运动信息指向的参考帧相同;若否,确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
或者,若单向运动信息指向的参考帧和候选运动信息指向的参考帧均为知识库帧,则比较单向运动信息指向的参考帧的知识库帧索引与候选运动信息指向的参考帧的知识库帧索引是否相等,若是,则确定单向运动信息指向的参考帧与候选运动信息指向的参考帧相同,若否,则确定单向运动信息指向的参考帧与候选运动信息指向的参考帧不同。
实施例14:针对实施例13,可以利用空域运动信息(将空域相邻块的运动信息称为空域运动信息)和/或时域运动信息(将时域相邻块的运动信息称为时域运动信息)获取运动信息候选列表,从空域运动信息和/或时域运动信息中选取出可用运动信息。参见图9A所示,空域运动信息是F,G,C,A,B,D等空域相邻块的运动信息,时域运动信息为至少一个。
针对空域运动信息,可以采用如下方式获取待加入到运动信息候选列表的可用运动信息:
方式11、参见图9A所示,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的运动信息为不可用运动信息。
方式12、F,G,C,A,B,D是当前块E的空域相邻块,确定F,G,C,A,B,D的运动信息的“可用”性。如果F存在且采用帧间预测模式,则F的运动信息为可用运动信息;否则,F的运动信息为不可用运动信息。如果G存在且采用帧间预测模式,G的运动信息与F的运动信息不相同,则G的运动信息为可用运动信息;否则,G的运动信息为不可用运动信息。如果C存在且采用帧间预测模式,C的运动信息与G的运动信息不相同,则C的运动信息为可用运动信息;否则,C的运动信息为不可用运动信息。如果A存在且采用帧间预测模式,A的运动信息与F的运动信息不相同,则A的运动信息为可用运动信息;否则,A的运动信息为不可用运动信息。如果B存在且采用帧间预测模式,B的运动信息与G的运动信息不相同,则B的运动信息为可用运动信息;否则,B的运动信息为不可用运动信息。如果D存在且采用帧间预测模式,D的运动信息与A的运动信息不相同,且D的运动信息与G的运动信息不相同,则D的运动信息为可用运动信息;否则,D的运动信息为不可用运动信息。
示例性的,在比较G的运动信息与F的运动信息是否相同时,若F存在且采用帧间预测模式,则需要比较G的运动信息与F的运动信息是否相同。若F不存在,或者,F存在且未采用帧间预测模式,则直接确定G的运动信息与F的运动信息不同。
示例性的,在比较G的运动信息与F的运动信息是否相同时,若采用“根据可用运动信息的位置将可用运动信息裁剪为单向运动信息”的实现方式,G的运动信息为双向运动信息且F的运动信息为双向运动信息,基于此,假设基于G的位置将G的双向运动信息裁剪为单向运动信息1(指向List0中参考帧的单向运动信息或者指向List1中参考帧的单向运动信息),基于F的位置将F的双向运动信息裁剪为单向运动信息2(指向List0中参考帧的单向运动信息或者指向List1中参考帧的单向运动信息),则比较单向运动信息1和单向运动信息2是否相同,而不需要比较G的双向运动信息与F的双向运动信息是否相同。
关于其它运动信息的比较过程,与G的运动信息与F的运动信息的比较过程类似。
方式13、F,G,C,A,B,D是当前块E的空域相邻块,可以确定F,G,C,A,B,D的运动信息的“可用”性。示例性的,如果F存在且采用帧间预测模式,则F的运动信息为可用运动信息;否则,F的运动信息为不可用运动信息。如果G存在且采用帧间预测模式,G的运动信息与F的运动信息不相同,则G的运动信息为可用运动信息;否则,G的运动信息为不可用运动信息。如果C存在且采用帧间预测模式,C的运动信息与G的运动信息不相同,则C的运动信息为可用运动信息;否则,C的运动信息为不可用运动信息。如果A存在且采用帧间预测模式,A的运动信息与F的运动信息不相同,则A的运动信息为可用运动信息;否则,A的运动信息为不可用运动信息。如果B存在且采用帧间预测模式,则B的运动信息为可用运动信息;否则,B的运动信息为不可用运动信息。如果D存在且采用帧间预测模式,D的运动信息与A的运动信息不相同,且D的运动信息与G的运动信息不相同,则D的运动信息为可用运动信息;否则,D的运动信息为不可用运动信息。
示例性的,在方式12和方式13中,在确定空域相邻块的运动信息是否为可用运动信息时,可能需要比较两个空域相邻块的运动信息是否相同,例如,比较G的运动信息与F的运动信息是否相同,运动信息是否相同的比较过程,实际上就是运动信息的查重操作,若查重结果为重复,则运动信息的比较结果可以为相同,若查重结果为不重复,则运动信息的比较结果可以为不同。关于运动信息的查重操作,可以参见后续实施例,在此不再赘述。
针对时域运动信息,可以采用如下方式获取待加入到运动信息候选列表的可用运动信息:
方式21、基于当前块的预设位置,从当前块的参考帧中选取与该预设位置对应的时域相邻块,并将该时域相邻块的运动信息确定为可用运动信息。比如说,若当前块所在当前帧为B帧,则根据co-located参考帧的co-located块导出单向运动信息或双向运动信息,将该单向运动信息或双向运动信息作为可用运动信息。若当前帧为P帧,则根据co-located参考帧的co-located块导出单向运动信息,将该单向运动信息作为可用运动信息。
示例性的,co-located块是co-located参考帧中与当前块的预设位置对应的时域相邻块,当前块的预设位置可以根据经验配置,对此当前块的预设位置不做限制,如当前块的左上角像素位置,当前块的右上角像素位置,当前块的左下角像素位置,当前块的右下角像素位置,当前块的中心像素位置等。关于co-located参考帧可以是预设的参考帧,如将当前块的List0中的第一个参考帧作为co-located参考帧,也可以是导出的参考帧,如将当前块的List0中与当前帧最近的参考帧作为co-located参考帧,还可以是从码流中解析出的参考帧,如针对解码端来说,可以从码流中解析出co-located参考帧的信息,继而确定co-located参考帧。
若当前块所在当前帧为B帧,则根据co-located块的运动信息导出单向运动信息或双向运动信息,若当前块所在当前帧为P帧,则根据co-located块的运动信息导出单向运动信息。
方式22、基于当前块的权重预测角度和权重预测位置,确定当前块的目标位置;从当前块的参考帧中选取与该目标位置对应的时域相邻块,并将该时域相邻块的运动信息确定为可用运动信息。比如说,基于当前块的权重预测角度和权重预测位置,可以确定当前块的目标位置,如基于当前块的权重预测角度和权重预测位置的索引值,确定当前块的目标位置。然后,可以基于当前块的目标位置确定co-located参考帧的co-located块,若当前块所在当前帧为B帧,则根据co-located参考帧的co-located块导出单向运动信息或双向运动信息,将该单向运动信息或双向运动信息作为可用运动信息。若当前帧为P帧,则根据co-located参考帧的co-located块导出单向运动信息,将该单向运动信息作为可用运动信息。
co-located块是co-located参考帧中与当前块的目标位置对应的时域相邻块,目标位置可以是当前块的左上角像素位置,右上角像素位置,左下角像素位置,右下角像素位置等。
例如,基于当前块的权重预测角度和当前块的权重预测位置,可以得到当前块的权重矩阵,参见图9B所示,由于右上侧权重部分的占比较小(黑色部分),空域运动信息与黑色部分的相关性较低,因此,时域运动信息的选择可以偏向于右上侧权重部分,以此来提供合适的候选运动信息,在此基础上,co-located块可以为当前块的右上角像素位置(即占比较小的权重部分)对应的时域相邻块,即,当前块的目标位置为当前块的右上角像素位置。
同理,参见图9C所示,基于当前块的权重预测角度和当前块的权重预测位置,可以确定当前块的目标位置为当前块的右下角像素位置。参见图9D所示,基于当前块的权重预测角度和当前块的权重预测位置,可以确定当前块的目标位置为当前块的左下角像素位置。
示例性的,时域相邻块对应的目标位置可以选取为当前块的左上角像素位置,或右上角像素位置,或左下角像素位置,或右下角像素位置,比如说,左上角像素位置的左上角坐标可以为(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),即上述四个位置的坐标可以固定。
当然,还可以采用其它方式确定时域相邻块对应的目标位置,参见图9E所示,当前块可以在LCU(Largest Coding Unit,最大编码单元)内的不同位置,根据当前块的位置将时域相邻块对应的目标位置限制在当前CTU(Coding Tree Unit,编码树单元)范围(出于硬件考虑,在解码当前LCU时,只需要加载当前LCU范围内的时域运动信息)内,对此不做限制。
由于运动信息的存储单元不一定是像素级,一般是4*4级,因此,例如坐下角位置的对应运动信息,只要在一个同一个运动信息的存储单元内,都是等价的。
针对HMVP运动信息,可以从HMVP列表中选取至少一个HMVP运动信息,并将选取的HMVP运动信息作为待加入到运动信息候选列表的可用运动信息,对此过程不再赘述。
在得到可用运动信息后,针对每个可用运动信息(如空域运动信息,时域运动信息,HMVP运动信息等),可以采用如下方式之一或组合将可用运动信息加入到运动信息候选列表:
方式31、不进行查重处理。比如说,若可用运动信息为单向运动信息,则将该单向运动信息加入到运动信息候选列表。若可用运动信息为双向运动信息,则根据该可用运动信息的属性将该可用运动信息裁剪为单向运动信息(参见实施例13中的方式一至方式四,将可用运动信息裁剪为单向运动信息),并将裁剪后的单向运动信息加入到运动信息候选列表。
方式32、进行查重处理。比如说,若可用运动信息为单向运动信息,且单向运动信息与运动信息候选列表中已存在的候选运动信息不重复,则可以将该单向运动信息加入到运动信息候选列表。若单向运动信息与候选运动信息重复,则不将该单向运动信息加入到运动信息候选列表。若可用运动信息为双向运动信息,则可以根据该可用运动信息的属性将该可用运动信息裁剪为单向运动信息,若裁剪后的单向运动信息与运动信息候选列表中已存在的候选运动信息不重复,则将该单向运动信息加入到运动信息候选列表。若裁剪后的单向运动信息与候选运动信息重复,则不将该单向运动信息加入到运动信息候选列表。
示例性的,在方式32中,需要确定单向运动信息与运动信息候选列表中已存在的候选运动信息是否重复,针对该过程,可以确定单向运动信息与运动信息候选列表中已存在的全部候选运动信息(即已存在的每个候选运动信息)是否重复,或者,可以确定单向运动信息与运动信息候选列表中已存在的部分候选运动信息(如第一个候选运动信息,或最后一个候选运动信息,或前两个候选运动信息,或后两个候选运动信息,对此不做限制)是否重复。
在上述实施例中,涉及对单向运动信息与候选运动信息进行查重操作,查重操作的结果可以为重复或者不重复。还涉及对两个空域相邻块的运动信息进行查重,查重操作的结果可以为重复或者不重复。在后续实施例中,还涉及对双向运动信息与运动信息候选列表中已存在的候选运动信息进行查重操作,查重操作的结果可以为重复或者不重复。
为了方便描述,将进行查重操作的两个运动信息称为运动信息1和运动信息2,当运动信息1为待查重的单向运动信息时,运动信息2为运动信息候选列表中已存在的候选运动信息;当运动信息1为待查重的双向运动信息时,运动信息2为运动信息候选列表中已存在的候选运动信息;当运动信息1为需要确定可用性的空域相邻块的运动信息时,运动信息2为已确定可用性的空域相邻块的运动信息,参见方式12,如F的运动信息可用时,当需要确定G的运动信息是否可用时,运动信息1为G的运动信息,运动信息2为F的运动信息。
针对运动信息1和运动信息2之间的查重操作,可以采用如下方式实现:
方式41、基于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的运动矢量相同。
方式42、基于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。
方式43、若运动信息1指向的参考帧为知识库帧,运动信息2指向的参考帧为非知识库帧,则确定运动信息1指向的参考帧与运动信息2指向的参考帧不同,并确定运动信息1与运动信息2不重复。或者,若运动信息1指向的参考帧为非知识库帧,运动信息2指向的参考帧为知识库帧,则确定运动信息1指向的参考帧与运动信息2指向的参考帧不同,并确定运动信息1与运动信息2不重复。
方式44、若运动信息1指向的参考帧和运动信息2指向的参考帧均为非知识库帧,则比较运动信息1指向的参考帧的DOI与运动信息2指向的参考帧的DOI是否相同。若否,则确定运动信息1指向的参考帧与运动信息2指向的参考帧不同,并确定运动信息1与运动信息2不重复。若是,则确定运动信息1指向的参考帧与运动信息2指向的参考帧相同,并继续查询运动信息1的运动矢量与运动信息2的运动矢量是否相同,若不同,则确定运动信息1与运动信息2不重复,若相同,则确定运动信息1与运动信息2重复。
示例性的,若运动信息1指向的参考帧和运动信息2指向的参考帧均为非知识库帧,还可以采用方式方式41或者方式42进行查重处理,对此查重处理过程不再赘述。
方式45、若运动信息1指向的参考帧和运动信息2指向的参考帧均为均为知识库帧,则比较运动信息1指向的参考帧的知识库帧索引与运动信息2指向的参考帧的知识库帧索引是否相等,若否,则确定运动信息1指向的参考帧与运动信息2指向的参考帧不同,并确定运动信息1与运动信息2不重复。若是,则确定运动信息1指向的参考帧与运动信息2指向的参考帧相同,并继续查询运动信息1的运动矢量与运动信息2的运动矢量是否相同,若不同,则确定运动信息1与运动信息2不重复,若相同,则确定运动信息1与运动信息2重复。
知识库帧索引是指:当存在多个知识库帧时,每个知识库帧具有唯一索引,例如,第一个知识库帧的索引为0,第二个知识库帧的索引为1,以此类推。基于此,当知识库帧索引相等时,表示两个知识库帧是同一帧,当知识库帧索引不等时,表示两个知识库帧不是同一帧。
在一种可能的实施方式中,知识库帧(类似长期参考帧)的POC被设置为(当前帧的POC-1),因此,在判定两个参考帧是否为同一帧时,可以考虑知识库帧的情况,即采用方式43-方式45来确定运动信息1指向的参考帧与运动信息2指向的参考帧是否相同。比如说,若运动信息1指向的参考帧和运动信息2指向的参考帧均为知识库帧,则采用方式45判定两个参考帧是否为同一帧。若运动信息1指向的参考帧和运动信息2指向的参考帧均为非知识库帧,则采用方式44判定两个参考帧是否为同一帧。若运动信息1指向的参考帧和运动信息2指向的参考帧中只有一个是知识库帧,则采用方式43判定两个参考帧是否为同一帧。
示例性的,如果两个运动信息(如两个都是单向运动信息,如运动信息1和运动信息2)满足下面一个或多个条件,则两个运动信息不重复;否则两个运动信息重复:a)参考帧一个为知识库帧,一个为非知识库帧;b)两个运动信息均指向List0,运动矢量不相等或参考帧POC不相等;c)两个运动信息均指向List1,运动矢量不相等或参考帧POC不相等;d)一个运动信息指向List0,另一个运动信息指向List1,运动矢量不相等或参考帧POC不相等。
示例性的,可以采用如下方式判断参考帧是否相同:如果两个参考帧满足下面一个或多个条件,则两个参考帧不同;否则两个参考帧相同。a)一个参考帧是非知识库帧(也可以称为非知识库图像或者非知识图像),另一个参考帧是知识库帧(也可以称为知识库图像或者知识图像);b)两个参考帧都是非知识库帧,两个参考帧对应的参考图像DOI不相等;c)两个参考帧都是知识库帧,两个参考帧对应的知识库帧索引(即知识图像索引)不相等。
示例性的,若两个运动信息满足下面一个或多个条件,则两个运动信息不重复,否则两个运动信息重复:两个运动信息的参考帧不同;两个运动信息对应的运动矢量不相等。
在一种可能的实施方式中,可以利用空域运动信息和/或时域运动信息获取运动信息候选列表,如AwpUniArray,以下结合几个具体应用场景,对运动信息候选列表的获取过程进行说明。在后续应用场景中,假设运动信息候选列表的长度为X,即需要添加X个可用运动信息,在将可用运动信息添加到运动信息候选列表后,将已添加的运动信息称为候选运动信息。
应用场景1:将空域运动信息加入到运动信息候选列表,若列表长度等于X,结束添加过程,若列表长度小于X,将预设运动信息加入到运动信息候选列表,直至列表长度为X。比如说,若添加空域运动信息后,列表长度为X-1,则添加一个预设运动信息,若添加空域运动信息后,列表长度为X-2,则添加两个预设运动信息,以此类推,只要添加预设运动信息后列表长度为X即可。
示例性的,先确定待加入到运动信息候选列表的可用运动信息(即空域运动信息)。比如说,采用方式11确定可用运动信息,或者,采用方式12确定可用运动信息,或者,采用方式13确定可用运动信息。在采用方式12或方式13确定可用运动信息时,涉及两个空域相邻块的运动信息的查重操作,可以采用方式41进行查重操作,或者,采用方式42进行查重操作,或者,采用方式43,方式44和方式45进行查重操作。
示例性的,参见图9A所示,按照F、G、C、A、B、D中可用运动信息的顺序(该顺序可变),将可用运动信息加入到运动信息候选列表。针对每个可用运动信息,可以采用方式31将该可用运动信息加入到运动信息候选列表,也可以采用方式32将该可用运动信息加入到运动信息候选列表。示例性的,在采用方式32将该可用运动信息加入到运动信息候选列表时,还可以对单向运动信息与候选运动信息进行查重操作,例如,采用方式41进行查重操作,或者,采用方式42进行查重操作,或者,采用方式43,方式44和方式45进行查重操作。
应用场景2:将时域运动信息加入到运动信息候选列表,若列表长度等于X,结束添加过程,若列表长度小于X,将预设运动信息加入到运动信息候选列表,直至列表长度为X。比如说,若添加时域运动信息后,列表长度为X-1,则添加一个预设运动信息,若添加时域运动信息后,列表长度为X-2,则添加两个预设运动信息,以此类推。
示例性的,先确定待加入到运动信息候选列表的可用运动信息(即时域运动信息)。比如说,采用方式21确定可用运动信息,或,采用方式22确定可用运动信息。
示例性的,针对每个可用运动信息,可以采用方式31将该可用运动信息加入到运动信息候选列表,也可以采用方式32将该可用运动信息加入到运动信息候选列表。在采用方式32将该可用运动信息加入到运动信息候选列表时,还可以对单向运动信息与运动信息候选列表中已存在的候选运动信息进行查重操作,例如,可以采用方式41进行查重操作,或者,采用方式42进行查重操作,或者,采用方式43,方式44和方式45进行查重操作。
应用场景3:将空域运动信息与时域运动信息一起加入运动信息候选列表(空域运动信息可以位于时域运动信息之前,时域运动信息也可以位于空域运动信息之前,为了方便描述,后续以空域运动信息位于时域运动信息之前为例),按照空域运动信息与时域运动信息依次将每个运动信息加入到运动信息候选列表,若列表长度等于X,结束添加过程,若列表长度小于X,将预设运动信息加入到运动信息候选列表,直至列表长度为X。
示例性的,确定待加入到运动信息候选列表的可用运动信息(即空域运动信息和时域运动信息)。比如说,采用方式11和方式21确定可用运动信息,或,采用方式11和方式22确定可用运动信息,或,采用方式12和方式21确定可用运动信息,或,采用方式12和方式22确定可用运动信息,或,采用方式13和方式21确定可用运动信息,或,采用方式13和方式22确定可用运动信息。当然,上述只是几个示例,对此不做限制。
在采用方式12或方式13确定可用运动信息时,涉及两个空域相邻块的运动信息的查重操作,可以采用方式41,或方式42,或方式43,或方式44,或方式45进行查重操作。
示例性的,按照F、G、C、A、B、D中可用运动信息的顺序,及时域运动信息(即可用运动信息)的顺序,将可用运动信息加入到运动信息候选列表。针对每个可用运动信息,采用方式31将该可用运动信息加入到运动信息候选列表,或采用方式32将该可用运动信息加入到运动信息候选列表。在采用方式32将该可用运动信息加入到运动信息候选列表时,还可以对单向运动信息与候选运动信息进行查重操作,例如,可以采用方式41进行查重操作,或者,采用方式42进行查重操作,或者,采用方式43,方式44和方式45进行查重操作。
综上所述,基于空域运动信息和时域运动信息的顺序,可以将空域运动信息与时域运动信息一起加入运动信息候选列表,一直到列表长度等于X,或者,遍历结束,列表长度小于X,并将预设运动信息加入到运动信息候选列表,直至列表长度为X。
应用场景4:将空域运动信息加入运动信息候选列表,将空域运动信息加入运动信息候选列表后,预留至少Y个位置给时域运动信息,时域运动信息为双向运动信息或单向运动信息。示例性的,将空域运动信息加入运动信息候选列表,若列表长度等于X-Y,则结束空域运动信息的添加过程,或直至空域运动信息遍历结束,列表长度小于X-Y,结束空域运动信息的添加过程。然后,将时域运动信息加入运动信息候选列表,若列表长度等于X,则结束时域运动信息的添加过程,或直至时域运动信息遍历结束,列表长度小于X,结束时域运动信息的添加过程,将预设运动信息加入到运动信息候选列表,直至列表长度为X。
示例性的,确定待加入到运动信息候选列表的可用运动信息(即空域运动信息和时域运动信息)。比如说,采用方式11和方式21确定可用运动信息,或,采用方式11和方式22确定可用运动信息,或,采用方式12和方式21确定可用运动信息,或,采用方式12和方式22确定可用运动信息,或,采用方式13和方式21确定可用运动信息,或,采用方式13和方式22确定可用运动信息。当然,上述只是几个示例,对此不做限制。
在采用方式12或方式13确定可用运动信息时,涉及两个空域相邻块的运动信息的查重操作,可以采用方式41,或方式42,或方式43,或方式44,或方式45进行查重操作。
示例性的,按照F、G、C、A、B、D中可用运动信息(即空域运动信息)的顺序,将可用运动信息加入到运动信息候选列表,一直到列表长度等于X-Y,或空域运动信息遍历结束。然后,将时域运动信息(即可用运动信息)加入到运动信息候选列表,一直到列表长度等于X,或时域运动信息遍历结束。在可用运动信息的添加过程中,针对每个可用运动信息,采用方式31将该可用运动信息加入到运动信息候选列表,或采用方式32将该可用运动信息加入到运动信息候选列表。示例性的,在采用方式32将该可用运动信息加入到运动信息候选列表时,还可以对单向运动信息与候选运动信息进行查重操作,例如,可以采用方式41,或方式42,或方式43,或方式44,或方式45进行查重操作。
应用场景5:在应用场景1的基础上,在将空域运动信息加入到运动信息候选列表后,若空域运动信息遍历结束时,列表长度小于X,则将HMVP运动信息加入到运动信息候选列表,若列表长度等于X,则结束HMVP运动信息的添加过程,若列表长度仍然小于X,则将预设运动信息加入到运动信息候选列表,直至列表长度为X。
在应用场景2的基础上,在将时域运动信息加入到运动信息候选列表后,若时域运动信息遍历结束时,列表长度小于X,则将HMVP运动信息加入到运动信息候选列表,若列表长度等于X,则结束HMVP运动信息的添加过程,若列表长度仍然小于X,则将预设运动信息加入到运动信息候选列表,直至列表长度为X。
在应用场景3的基础上,在将空域运动信息与时域运动信息一起加入运动信息候选列表后,若空域运动信息与时域运动信息遍历结束时,列表长度小于X,则将HMVP运动信息加入到运动信息候选列表,若列表长度等于X,则结束HMVP运动信息的添加过程,若列表长度仍然小于X,则将预设运动信息加入到运动信息候选列表,直至列表长度为X。
在应用场景4的基础上,在将空域运动信息加入到运动信息候选列表后,将时域运动信息加入到运动信息候选列表,若时域运动信息遍历结束时,列表长度小于X,则将HMVP运动信息加入到运动信息候选列表,若列表长度等于X,则结束HMVP运动信息的添加过程,若列表长度仍然小于X,则将预设运动信息加入到运动信息候选列表,直至列表长度为X。
在上述各应用场景中,X可以取任意的正整数,例如,X的取值可以4,5等。
在上述各应用场景中,均可能将预设运动信息(也可以称为缺省运动信息)加入到运动信息候选列表,关于预设运动信息的实现方式,可以包括但不限于如下方式:
方式51、预设运动信息为零运动信息,如指向ListX且refIdx小于ListX中参考帧数量的零运动矢量。比如说,可以进行补0操作,即运动信息可以为(0,0,ref_idx3,ListZ)。
方式52、基于运动信息候选列表中已存在的候选运动信息所导出的缺省运动信息。
比如说,记需要放大或缩小的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,正负号与候选运动信息的运动矢量的正负号相同。
方式53、基于运动信息候选列表中已存在的候选运动信息所导出的缺省运动信息。
比如说,以运动信息候选列表中的任意一个有效的候选运动信息(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正整数,即对运动矢量进行伸缩操作。
方式54、预设运动信息为运动信息候选列表中已存在的候选运动信息,即进行扩充(padding)操作,可采用运动信息候选列表中已存在的候选运动信息进行重复填充操作。例如,可采用运动信息候选列表中已存在的最后一个单向运动信息进行重复填充。
综上所述,在列表长度小于X,需要将预设运动信息加入到运动信息候选列表时,可以将方式51的预设运动信息加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将方式52的预设运动信息加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将方式53的预设运动信息加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将方式51和方式52的预设运动信息加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将方式51和方式53的预设运动信息加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将方式52和方式53的预设运动信息加入到运动信息候选列表,直至列表长度为X或添加结束。或者,可以将方式51,方式52和方式53的预设运动信息加入到运动信息候选列表,直至列表长度为X或添加结束。
示例性的,在采用上述方式,将预设运动信息加入到运动信息候选列表后,若列表长度仍然小于X,则可以将方式54的预设运动信息加入到运动信息候选列表,即,采用运动信息候选列表中已存在的候选运动信息进行重复填充操作,一直到列表长度为X。
在另一种可能的实施方式中,在列表长度小于X,需要将预设运动信息加入到运动信息候选列表时,可以直接将方式54的预设运动信息加入到运动信息候选列表,即,采用运动信息候选列表中已存在的候选运动信息进行重复填充操作,一直到列表长度为X。
在上述实施例中,预设运动信息可以为单向运动信息,也可以为双向运动信息。若预设运动信息为单向运动信息,在将该预设运动信息添加到运动信息候选列表时,可以进行查重操作,也可以不进行查重操作。若不进行查重操作,则直接将该预设运动信息添加到运动信息候选列表。若进行查重操作,则可以采用方式41,或方式42,或方式43,或方式44,或方式45进行查重操作。若查重操作的结果为不重复,则将该预设运动信息添加到运动信息候选列表。若查重操作的结果为重复,则不将该预设运动信息添加到运动信息候选列表。
应用场景6:第一步,F、G、C、A、B和D是当前块的相邻预测块,确定F、G、C、A和D的“可用”性,参见方式11。第二步,按F、G、C、A、B、D和时域运动信息的顺序,将可用运动信息放入到运动信息候选列表,直至运动信息候选列表长度为5或遍历结束。
示例性的,若可用运动信息为单向运动信息,将该可用运动信息与运动信息候选列表中已经存在的候选运动信息进行查重操作,若不重复则放入运动信息候选列表。
否则,按照可用运动信息的有效编号(即遍历顺序编号,从0开始)的奇偶性将双向运动信息裁剪为单向运动信息,然后,将该单向运动信息与运动信息候选列表中已经存在的候选运动信息进行查重操作,若不重复则放入运动信息候选列表。
例如,若有效编号为偶数,则将双向运动信息裁剪为指向参考帧列表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是目标运动信息)的过程,确定过程参见后续实施例,在此不再赘述。
实施例15:当确定对当前块启动角度加权预测模式时,上述运动信息候选列表为角度加权预测模式的运动信息候选列表,当确定对当前块启动几何划分模式时,上述运动信息候选列表为几何划分模式的运动信息候选列表,当确定对当前块启动组合楔形预测模式(即帧间+帧间的非矩形划分模式)时,上述运动信息候选列表为组合楔形预测模式的运动信息候选列表。在角度加权预测模式,几何划分模式,组合楔形预测模式下,可以基于该运动信息候选列表选择一个候选运动信息作为第一目标运动信息,选择另一个候选运动信息作为第二目标运动信息。或者,基于该运动信息候选列表选择一个候选运动信息叠加第一运动矢量差导出第一目标运动信息,选择一个候选运动信息叠加第二运动矢量差导出第二目标运动信息。
针对实施例1-实施例3,实施例12-实施例14,编码端/解码端在得到运动信息候选列表(参见实施例13和14)后,可以基于运动信息候选列表获取第一目标运动信息和第二目标运动信息,关于第一目标运动信息和第二目标运动信息的获取方式,可以采用如下方式实现:
方式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、从运动信息候选列表中选择候选运动信息作为当前块的第一原始运动信息,并从运动信息候选列表中选择候选运动信息作为当前块的第二原始运动信息,第一原始运动信息与第二原始运动信息可以不同,即从运动信息候选列表中选择两个不同的候选运动信息作为第一原始运动信息和第二原始运动信息;或者,第一原始运动信息与第二原始运动信息也可以相同,即从运动信息候选列表中选择相同的候选运动信息作为第一原始运动信息和第二原始运动信息。然后,根据第一原始运动信息确定当前块的第一目标运动信息,根据第二原始运动信息确定当前块的第二目标运动信息,第一目标运动信息与第二目标运动信息不同。
关于如何根据原始运动信息确定目标运动信息,本实施例中给出一种单向运动信息叠加运动矢量差(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);若第一运动矢量差的方向信息表示方向为向下,第一运动矢量差的幅值信息表示幅值为A,则第一运动矢量差为(0,-A);若第一运动矢量差的方向信息表示方向为向左,第一运动矢量差的幅值信息表示幅值为A,则第一运动矢量差为(-A,0);若第一运动矢量差的方向信息表示方向为向上,第一运动矢量差的幅值信息表示幅值为A,则第一运动矢量差为(0,A)。在根据第二运动矢量差的方向信息和第二运动矢量差的幅值信息确定第二运动矢量差时,若第二运动矢量差的方向信息表示方向为向右,第二运动矢量差的幅值信息表示幅值为A,则第二运动矢量差为(A,0);若第二运动矢量差的方向信息表示方向为向下,第二运动矢量差的幅值信息表示幅值为A,则第二运动矢量差为(0,-A);若第二运动矢量差的方向信息表示方向为向左,第二运动矢量差的幅值信息表示幅值为A,则第二运动矢量差为(-A,0);若第二运动矢量差的方向信息表示方向为向上,第二运动矢量差的幅值信息表示幅值为A,则第二运动矢量差为(0,A)。
参见上述实施例,编码端在对运动矢量差的方向信息进行编码时,可以采用定长码,截断一元码等方式,因此,解码端可以采用定长码,截断一元码等方式,对运动矢量差的方向信息进解码,得到运动矢量差的方向信息,如上,下,左,右,左上,左下,右上,右下等。
参见上述实施例,编码端在对运动矢量差的幅值信息进行编码时,可以采用定长码,截断一元码等方式,因此,解码端可以采用定长码,截断一元码等方式,对运动矢量差的幅值信息进解码,得到运动矢量差的幅值信息,如1/4-pel,1/2-pel,1-pel,2-pel等步长配置,继而根据1/2-pel,1/2-pel,1-pel,2-pel等步长配置确定出运动矢量差的幅值A的取值。
在一种可能的实施方式中,编码端还可以在编码比特流中编码增强角度加权预测模式的第一子模式标志和第二子模式标志,该第一子模式标志指示对第一原始运动信息叠加运动矢量差,或者,对第一原始运动信息不叠加运动矢量差。该第二子模式标志指示对第二原始运动信息叠加运动矢量差,或者,对第二原始运动信息不叠加运动矢量差。
解码端在接收到当前块的编码比特流后,可以先从当前块的编码比特流中解析出增强角度加权预测模式的第一子模式标志和第二子模式标志。若第一子模式标志指示对第一原始运动信息叠加运动矢量差,则从当前块的编码比特流中解析出第一运动矢量差的方向信息和幅值信息,并根据第一运动矢量差的方向信息和幅值信息确定第一运动矢量差,继而根据第一原始运动信息和第一运动矢量差确定当前块的第一目标运动信息。若第一子模式标志指示对第一原始运动信息不叠加运动矢量差,则不会解析第一运动矢量差的方向信息和幅值信息,可以直接将第一原始运动信息作为当前块的第一目标运动信息。若第二子模式标志指示对第二原始运动信息叠加运动矢量差,则从当前块的编码比特流中解析出第二运动矢量差的方向信息和幅值信息,并根据第二运动矢量差的方向信息和幅值信息确定第二运动矢量差,继而根据第二原始运动信息和第二运动矢量差确定当前块的第二目标运动信息。若第二子模式标志指示对第二原始运动信息不叠加运动矢量差,则不会解析第二运动矢量差的方向信息和幅值信息,可以直接将第二原始运动信息作为当前块的第二目标运动信息。
示例性的,当增强角度加权预测模式的第一子模式标志为第一取值时,指示对第一原始运动信息叠加运动矢量差,当增强角度加权预测模式的第一子模式标志为第二取值时,表示对第一原始运动信息不叠加运动矢量差。当增强角度加权预测模式的第二子模式标志为第一取值时,指示对第二原始运动信息叠加运动矢量差,当增强角度加权预测模式的第二子模式标志为第二取值时,表示对第二原始运动信息不叠加运动矢量差。第一取值和第二取值可以根据经验配置,如第一取值为1,第二取值为0,或者,如第一取值为0,第二取值为1。
在上述实施例中,解码端是从当前块的编码比特流中解析出第一运动矢量差的方向信息和第二运动矢量差的方向信息,在实际应用中,还可以根据当前块的权重预测角度推导第一运动矢量差的方向信息,并根据当前块的权重预测角度推导第二运动矢量差的方向信息。
比如说,当前块的权重预测角度表示一种角度方向,参见图5所示的8种角度方向,当前块的权重预测角度表示8种角度方向中的某一种角度方向,对于解码端来说,可以从所有方向信息(如上,下,左,右,左上,左下,右上,右下等)中选择与该角度方向匹配的方向信息,直接将该方向信息作为第一运动矢量差的方向信息和第二运动矢量差的方向信息。
与该角度方向匹配的方向信息,可以包括:该方向信息与该角度方向之间的角度差为预设角度或接近预设角度,或者,在所有方向信息中,该方向信息与该角度方向之间的角度差与预设角度的差值最小。该预设角度可以根据经验配置,如该预设角度可以为90度。
示例性的,针对编码端来说,也可以根据当前块的权重预测角度推导第一运动矢量差的方向信息,并根据当前块的权重预测角度推导第二运动矢量差的方向信息,而不需要采用率失真代价值的方式确定第一运动矢量差的方向信息和第二运动矢量差的方向信息。编码端在向解码端发送当前块的编码比特流时,也可以不编码第一运动矢量差的方向信息和第二运动矢量差的方向信息,由解码端推导第一运动矢量差的方向信息和第二运动矢量差的方向信息。
实施例16:在实施例15中,解码端可以从编码比特流中解析出第一运动矢量差的幅值信息和第二运动矢量差的幅值信息,在一种可能的实施方式中,编码端和解码端可以构建相同的一个运动矢量差幅值列表,编码端确定第一运动矢量差的幅值信息在该运动矢量差幅值列表中的幅值索引,且编码比特流包括第一运动矢量差的幅值索引。解码端从当前块的编码比特流中解析出第一运动矢量差的幅值索引,并从该运动矢量差幅值列表选取与该幅值索引对应的幅值信息,该幅值信息即第一运动矢量差的幅值信息。编码端确定第二运动矢量差的幅值信息在该运动矢量差幅值列表中的幅值索引,且编码比特流包括第二运动矢量差的幅值索引。解码端从当前块的编码比特流中解析出第二运动矢量差的幅值索引,并从该运动矢量差幅值列表选取与该幅值索引对应的幅值信息,该幅值信息即第二运动矢量差的幅值信息。
在另一种可能的实施方式中,编码端和解码端可以构建相同的至少两个运动矢量差幅值列表,如编码端和解码端构建相同的运动矢量差幅值列表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所示的二值化方式进行解码。
实施例17:在实施例15或实施例16的基础上,针对第一运动矢量差和第二运动矢量差,以下结合具体应用场景,对单向运动信息叠加运动矢量差AWP_MVR的相关语法进行说明:
应用场景1:参见表7所示,为相关语法的示例,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_mvd_sub_flag0(增强角度加权预测模式第一子模式标志),可以是一个二值变量,awp_mvd_sub_flag0为第一取值时,可以表示角度加权预测模式的第一运动信息需要叠加运动信息差;awp_mvd_sub_flag0为第二取值时,可以表示角度加权预测模式的第一运动信息不需要叠加运动信息差。示例性的,AwpMvdSubFlag0的值可以等于awp_mvd_sub_flag0的值,如果码流中不存在awp_mvd_sub_flag0,则AwpMvdSubFlag0的值等于0。
awp_mvd_sub_flag1(增强角度加权预测模式第二子模式标志),可以是一个二值变量,awp_mvd_sub_flag1为第一取值时,可以表示角度加权预测模式的第二运动信息需要叠加运动信息差;awp_mvd_sub_flag1为第二取值时,可以表示角度加权预测模式的第二运动信息不需要叠加运动信息差。示例性的,AwpMvdSubFlag1的值可以等于awp_mvd_sub_flag1的值,如果码流中不存在awp_mvd_sub_flag1,则还可以存在以下情况:若AwpMvdFlag等于1,那么,AwpMvdSubFlag1的值等于1,否则,AwpMvdSubFlag1的值可以等于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。
表7
Figure BDA0002642819490000591
Figure BDA0002642819490000601
应用场景2:参见表8所示,为相关语法的示例,SkipFlag表示当前块是否为Skip模式,DirectFlag表示当前块是否为Direct模式,AwpFlag表示当前块是否为AWP模式。
关于awp_idx,awp_cand_idx0和awp_cand_idx1,可以参见应用场景1,在此不再赘述。
awp_mvd_sub_flag0(增强角度加权预测模式第一子模式标志),可以是一个二值变量,awp_mvd_sub_flag0为第一取值时,可以表示角度加权预测模式的第一运动信息需要叠加运动信息差;awp_mvd_sub_flag0为第二取值时,可以表示角度加权预测模式的第一运动信息不需要叠加运动信息差。示例性的,AwpMvdSubFlag0的值可以等于awp_mvd_sub_flag0的值,如果码流中不存在awp_mvd_sub_flag0,则AwpMvdSubFlag0的值等于0。
awp_mvd_sub_flag1(增强角度加权预测模式第二子模式标志),可以是一个二值变量,awp_mvd_sub_flag1为第一取值时,可以表示角度加权预测模式的第二运动信息需要叠加运动信息差;awp_mvd_sub_flag1为第二取值时,可以表示角度加权预测模式的第二运动信息不需要叠加运动信息差。示例性的,AwpMvdSubFlag1的值可以等于awp_mvd_sub_flag1的值,如果码流中不存在awp_mvd_sub_flag1,则AwpMvdSubFlag1的值可以等于0。
关于awp_mvd_dir0,awp_mvd_step0,awp_mvd_dir1,awp_mvd_step1,参见应用场景1。
表8
Figure BDA0002642819490000602
示例性的,针对应用场景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。在此基础上,表7/表8可以更新为表9,相关语法参见表7。
表9
Figure BDA0002642819490000611
示例性的,针对各应用场景来说,相关语法中语法元素的顺序可进行相应调整,比如说,针对表8所示的相关语法,可以对语法元素的顺序进行相应调整,得到表10所示的相关语法。
表10
Figure BDA0002642819490000612
从表8和表10可以看出,可以对awp_cand_idx0和awp_cand_idx1的顺序进行调整,示例性的,在表10中,awp_cand_idx0和awp_cand_idx1的解析方式,可以根据AwpMvdSubFlag0,AwpMvdSubFlag1,AwpMvdDir0,AwpMvdStep0,AwpMvdDir1,AwpMvdStep1中一个或多个的值进行调整。例如,当AwpMvdSubFlag0,AwpMvdSubFlag1中的至少一个值为1时,awp_cand_idx0以及awp_cand_idx1的解析方式完全一致,否则,解析方式不一致。
示例性的,AwpMvdSubFlag0表示是否对第一原始运动信息叠加MVD,如果叠加,基于AwpMvdDir0和AwpMvdStep0确定出第一原始运动信息对应的MVD值,AwpMvdSubFlag1表示是否对第二原始运动信息叠加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。
实施例18:当确定对当前块启动组合帧间帧内预测模式时,运动信息候选列表为组合帧间帧内预测模式的运动信息候选列表,当确定对当前块启动楔形帧间帧内预测模式时,运动信息候选列表为楔形帧间帧内预测模式的运动信息候选列表,当然,运动信息候选列表也可以被其他需要单向运动信息列表的模式使用,对此不做限制。在组合帧间帧内预测模式,楔形帧间帧内预测模式下,基于该运动信息候选列表选择一个候选运动信息作为目标运动信息,或者,基于该运动信息候选列表选择一个候选运动信息叠加运动矢量差导出目标运动信息。
针对实施例12-实施例14,编码端/解码端得到运动信息候选列表(参见实施例13和14)后,可以基于运动信息候选列表获取目标运动信息,如采用如下方式实现:
方式C、从运动信息候选列表中选择一个候选运动信息作为当前块的目标运动信息。
示例性的,针对编码端和解码端来说,均可以获取运动信息候选列表,且编码端的运动信息候选列表与解码端的运动信息候选列表相同,对此运动信息候选列表不做限制。
针对编码端来说,可以基于率失真原则,从运动信息候选列表中选择一个候选运动信息作为当前块的目标运动信息。编码端在向解码端发送编码比特流时,该编码比特流可以携带指示信息,该指示信息用于指示当前块的目标运动信息的索引值,该索引值用于表示目标运动信息是运动信息候选列表中的第几个候选运动信息。解码端在接收到该编码比特流后,可以从编码比特流中解析出该指示信息,基于该指示信息从运动信息候选列表中选择该索引值对应的候选运动信息,该候选运动信息作为当前块的目标运动信息。
方式D、从运动信息候选列表中选择一个候选运动信息作为当前块的原始运动信息,根据该原始运动信息确定当前块的目标运动信息。例如,原始运动信息包括原始运动矢量,目标运动信息包括目标运动矢量,可以获取与原始运动矢量对应的运动矢量差,根据运动矢量差和原始运动矢量确定目标运动矢量,即将运动矢量差与原始运动矢量的和作为目标运动矢量。
示例性的,可以获取运动矢量差的方向信息和幅值信息,并根据运动矢量差的方向信息和幅值信息确定运动矢量差。针对解码端来说,可以采用如下方式获取运动矢量差的方向信息:解码端从当前块的编码比特流中解析出运动矢量差的方向信息;或者,解码端根据当前块的权重预测角度推导运动矢量差的方向信息。针对解码端来说,可以采用如下方式获取运动矢量差的幅值信息:从当前块的编码比特流中解析出运动矢量差的幅值信息。
针对编码端来说,在获取到运动信息候选列表后,依次遍历运动信息候选列表中的每个候选运动信息,针对每个候选运动信息,依次遍历每个运动矢量差,针对当前遍历的候选运动信息和运动矢量差确定率失真代价值。针对每个候选运动信息和每个运动矢量差进行上述处理,均得到率失真代价值。然后,从所有率失真代价值中选择最小率失真代价值,在当前块的编码比特流中编码最小率失真代价值对应的候选运动信息,运动矢量差的方向信息和幅值信息。
针对解码端来说,在接收到当前块的编码比特流后,可以从编码比特流中解析出原始运动信息在运动信息候选列表中的索引值,并从运动信息候选列表中选择与该索引值对应的候选运动信息,将该候选运动信息作为当前块的原始运动信息。还可以从该编码比特流中解析出运动矢量差的方向信息和幅值信息,并根据该方向信息和该幅值信息确定运动矢量差。然后,解码端可以根据运动矢量差和原始运动信息确定当前块的目标运动信息。
在一种可能的实施方式中,编码端还可以在编码比特流中编码增强角度加权预测模式的子模式标志,该子模式标志指示对原始运动信息叠加运动矢量差,或者,对原始运动信息不叠加运动矢量差。解码端在接收到当前块的编码比特流后,可以先从当前块的编码比特流中解析出增强角度加权预测模式的子模式标志。若子模式标志指示对原始运动信息叠加运动矢量差,则从当前块的编码比特流中解析出运动矢量差的方向信息和幅值信息,并根据运动矢量差的方向信息和幅值信息确定运动矢量差,继而根据原始运动信息和运动矢量差确定当前块的目标运动信息。若子模式标志指示对原始运动信息不叠加运动矢量差,则不会解析运动矢量差的方向信息和幅值信息,可以直接将原始运动信息作为当前块的目标运动信息。
示例性的,当增强角度加权预测模式的子模式标志为第一取值时,指示对原始运动信息叠加运动矢量差,当增强角度加权预测模式的子模式标志为第二取值时,表示对原始运动信息不叠加运动矢量差。示例性的,第一取值和第二取值可以根据经验配置,如第一取值为1,第二取值为0,或者,第一取值为0,第二取值为1,对此不做限制。
实施例19:在实施例1-实施例3中,实施例12-实施例14中,编码端/解码端需要获取运动信息候选列表,关于运动信息候选列表的获取方式,除了上述实施例,还可以采用如下方式:针对当前待加入到运动信息候选列表的可用运动信息,将可用运动信息加入到运动信息候选列表。比如说,针对可用运动信息,无论可用运动信息是单向运动信息还是双向运动信息,均将可用运动信息加入到运动信息候选列表。与实施例13和实施例14不同的是,当可用运动信息为双向运动信息时,不需要将双向运动信息裁剪为单向运动信息,而是直接将双向运动信息加入到运动信息候选列表,即运动信息候选列表可以包括双向运动信息。
示例性的,在将可用运动信息加入到运动信息候选列表时,可以对可用运动信息进行查重操作,也可以对可用运动信息不进行查重操作,对此不做限制。若对可用运动信息进行查重操作,则查重操作可以参见实施例14,在此不再重复赘述。
示例性的,由于运动信息候选列表中的候选运动信息,可能为单向运动信息,也可能为双向运动信息,因此,在从运动信息候选列表中选择一个候选运动信息作为当前块的原始运动信息(如实施例15-实施例18中的第一原始运动信息,第二原始运动信息,原始运动信息等)时,若选择的候选运动信息为单向运动信息,则可以直接将该单向运动信息作为当前块的原始运动信息。若选择的候选运动信息为双向运动信息,则可以将该双向运动信息裁剪为单向运动信息,将该单向运动信息作为当前块的原始运动信息。比如说,基于该双向运动信息的属性将该双向运动信息裁剪为单向运动信息,具体裁剪方式参见实施例12。
在实施例1-实施例3、实施例15-实施例17、实施例18中,编码端/解码端可以根据目标运动信息确定像素位置的帧间预测值,该过程可以参见帧间预测过程,对此不做限制。示例性的,在根据目标运动信息确定像素位置的帧间预测值时,可以采用帧间加权预测模式得到像素位置的预测值。例如,先利用目标运动信息确定像素位置的初始预测值,然后对该初始预测值乘以预设因子,得到调整预测值。若调整预测值大于最大预测值,则将最大预测值作为当前块的帧间预测值,若调整预测值小于最小预测值,则将最小预测值作为当前块的帧间预测值,若调整预测值不小于最小预测值,且不大于最大预测值,则将调整预测值作为当前块的帧间预测值。当然,上述方式只是示例,对此不做限制。
示例性的,上述各实施例可以单独实现,也可以组合实现,比如说,实施例1和实施例2组合实现,实施例1和实施例3组合实现,实施例1和实施例4-实施例11中的至少一个实施例组合实现,实施例1和实施例12-实施例17中的至少一个实施例组合实现,实施例2和实施例4-实施例11中的至少一个实施例组合实现,实施例2和实施例12-实施例17中的至少一个实施例组合实现,实施例3和实施例4-实施例11中的至少一个实施例组合实现,实施例3和实施例12-实施例17中的至少一个实施例组合实现。又例如,实施例12与实施例13组合实现,实施例12与实施例14组合实现,实施例12与实施例15-实施例17中的至少一个实施例组合实现,实施例12-实施例18组合实现,实施例12、实施例13和实施例14组合实现,实施例12-实施例14与实施例15-实施例17中的至少一个实施例组合实现,实施例12-实施例14与实施例18组合实现等,当然,对实施例之间的组合方式不做限制。
实施例20:基于与上述方法同样的申请构思,本申请实施例还提出一种编解码装置,所述装置应用于编码端或者解码端,参见图10A所示,为所述装置的结构图,包括:
获取模块111,用于获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少两个单向运动信息;其中,在所述运动信息候选列表创建时加入单向运动信息的过程包括:针对待加入到运动信息候选列表中的可用运动信息,若所述可用运动信息为双向运动信息,则根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,将所述单向运动信息加入到所述运动信息候选列表或者所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表;
确定模块112,用于基于所述运动信息候选列表确定所述当前块的预测值。
在一种可能的实施方式中,所述可用运动信息包括如下运动信息的至少一种:空域运动信息;时域运动信息;HMVP运动信息;预设运动信息。
在一种可能的实施方式中,所述获取模块111根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息时具体用于:若所述可用运动信息是所述当前块的空域相邻块的运动信息,则基于所述空域相邻块的位置将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息,或者,将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
在一种可能的实施方式中,所述获取模块111根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息时具体用于:若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;或,若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
在一种可能的实施方式中,所述获取模块111根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息时具体用于:若所述可用运动信息是所述当前块的相邻块的运动信息,则基于所述相邻块的遍历次序确定所述可用运动信息的实际编号;若所述实际编号的奇偶性为奇数,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若所述实际编号的奇偶性为偶数,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息;或者,若所述实际编号的奇偶性为偶数,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若所述实际编号的奇偶性为奇数,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
在一种可能的实施方式中,所述获取模块111根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息时具体用于:根据所述可用运动信息的遍历次序确定所述可用运动信息的有效编号;其中,所述有效编号是指将遍历到的可用运动信息依次排列的编号;
若所述有效编号的奇偶性为奇数,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若所述有效编号的奇偶性为偶数,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息;或者,若所述有效编号的奇偶性为偶数,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;若所述有效编号的奇偶性为奇数,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
在一种可能的实施方式中,所述获取模块111还用于:若所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同,且所述单向运动信息的运动矢量与所述候选运动信息的运动矢量相同,则确定所述单向运动信息与所述候选运动信息重复;否则,确定所述单向运动信息与所述候选运动信息不重复。
在一种可能的实施方式中,当确定对当前块启动角度加权预测模式时,所述确定模块112基于所述运动信息候选列表确定所述当前块的预测值时具体用于:基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;针对所述当前块的每个像素位置,根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值,所述像素位置的目标权重值,所述第二预测值和所述像素位置的关联权重值,确定所述像素位置的加权预测值;根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
所述确定模块112基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息时具体用于:从所述运动信息候选列表中选择候选运动信息作为所述当前块的第一原始运动信息,并从所述运动信息候选列表中选择候选运动信息作为所述当前块的第二原始运动信息;根据所述第一原始运动信息确定所述当前块的第一目标运动信息;根据所述第二原始运动信息确定所述当前块的第二目标运动信息。
当确定对当前块启动几何划分模式或组合楔形预测模式时,所述确定模块112基于所述运动信息候选列表确定所述当前块的预测值时具体用于:基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;针对所述当前块的每个像素位置,根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;根据所述第一预测值和所述第二预测值确定所述像素位置的加权预测值;根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
所述确定模块112基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息时具体用于:从所述运动信息候选列表中选择候选运动信息作为所述当前块的第一原始运动信息,并从所述运动信息候选列表中选择候选运动信息作为所述当前块的第二原始运动信息;根据所述第一原始运动信息确定所述当前块的第一目标运动信息;根据所述第二原始运动信息确定所述当前块的第二目标运动信息。
当确定对当前块启动组合帧间帧内预测模式或者楔形帧间帧内预测模式时,所述确定模块112基于所述运动信息候选列表确定所述当前块的预测值时具体用于:基于所述运动信息候选列表获取所述当前块的目标运动信息;针对所述当前块的每个像素位置,根据所述目标运动信息确定所述像素位置的帧间预测值;并根据帧内预测模式确定所述像素位置的帧内预测值;根据所述帧间预测值和所述帧内预测值确定所述像素位置的加权预测值;根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
所述确定模块112基于所述运动信息候选列表获取所述当前块的目标运动信息时具体用于:从所述运动信息候选列表中选择候选运动信息作为所述当前块的原始运动信息;
根据所述原始运动信息确定所述当前块的目标运动信息。
基于与上述方法同样的申请构思,本申请实施例提供的解码端设备(也可以称为视频解码器),从硬件层面而言,其硬件架构示意图具体可以参见图10B所示。包括:处理器121和机器可读存储介质122,其中:所述机器可读存储介质122存储有能够被所述处理器121执行的机器可执行指令;所述处理器121用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,所述处理器121用于执行机器可执行指令,以实现如下步骤:
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少两个单向运动信息;其中,在所述运动信息候选列表创建时加入单向运动信息的过程包括:针对待加入到运动信息候选列表中的可用运动信息,若所述可用运动信息为双向运动信息,则根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,将所述单向运动信息加入到所述运动信息候选列表或者所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表;
基于所述运动信息候选列表确定所述当前块的预测值。
基于与上述方法同样的申请构思,本申请实施例提供的编码端设备(也可以称为视频编码器),从硬件层面而言,其硬件架构示意图具体可以参见图10C所示。包括:处理器131和机器可读存储介质132,其中:所述机器可读存储介质132存储有能够被所述处理器131执行的机器可执行指令;所述处理器131用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,所述处理器131用于执行机器可执行指令,以实现如下步骤:
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少两个单向运动信息;其中,在所述运动信息候选列表创建时加入单向运动信息的过程包括:针对待加入到运动信息候选列表中的可用运动信息,若所述可用运动信息为双向运动信息,则根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,将所述单向运动信息加入到所述运动信息候选列表或者所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表;
基于所述运动信息候选列表确定所述当前块的预测值。
基于与上述方法同样的申请构思,本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本申请上述示例公开的方法,如上述上述各实施例中的编解码方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请实施例可提供为方法、系统、或计算机程序产品。本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (19)

1.一种编解码方法,其特征在于,所述方法包括:
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少两个单向运动信息;其中,在所述运动信息候选列表创建时加入单向运动信息的过程包括:针对待加入到运动信息候选列表中的可用运动信息,若所述可用运动信息为双向运动信息,则根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,将所述单向运动信息加入到所述运动信息候选列表或者所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表;
基于所述运动信息候选列表确定所述当前块的预测值;
其中,所述根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,包括:根据所述可用运动信息的性质将所述可用运动信息裁剪为单向运动信息;所述根据所述可用运动信息的性质将所述可用运动信息裁剪为单向运动信息,包括:若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;或,若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
2.根据权利要求1所述的方法,其特征在于,所述可用运动信息包括如下运动信息的至少一种:空域运动信息;时域运动信息;预设运动信息。
3.根据权利要求1或2所述的方法,其特征在于,针对所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息的查重操作,包括:
若所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同,且所述单向运动信息的运动矢量与所述候选运动信息的运动矢量相同,则确定所述单向运动信息与所述候选运动信息重复;否则,确定所述单向运动信息与所述候选运动信息不重复。
4.根据权利要求3所述的方法,其特征在于,所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧是否相同的确定过程,包括:
若所述单向运动信息指向的参考帧列表与所述候选运动信息指向的参考帧列表相同,且所述单向运动信息的参考帧索引refIdx与所述候选运动信息的refIdx相同,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同;否则,确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同;
或者,若所述单向运动信息指向的参考帧的显示顺序POC与所述候选运动信息指向的参考帧的POC相同,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同;否则,确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同;
或者,若所述单向运动信息指向的参考帧为知识库帧,所述候选运动信息指向的参考帧为非知识库帧,或所述单向运动信息指向的参考帧为非知识库帧,所述候选运动信息指向的参考帧为知识库帧,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同;
或者,若所述单向运动信息指向的参考帧和所述候选运动信息指向的参考帧均为非知识库帧,则比较所述单向运动信息指向的参考帧的DOI与所述候选运动信息指向的参考帧的DOI是否相同,若是,确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同;若否,确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同;
或者,若所述单向运动信息指向的参考帧和所述候选运动信息指向的参考帧均为知识库帧,则比较所述单向运动信息指向的参考帧的知识库帧索引与所述候选运动信息指向的参考帧的知识库帧索引是否相等,若是,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧相同,若否,则确定所述单向运动信息指向的参考帧与所述候选运动信息指向的参考帧不同。
5.根据权利要求1或2所述的方法,其特征在于,
待加入到运动信息候选列表中的可用运动信息的获取过程,包括:
针对所述当前块的空域相邻块,若所述空域相邻块存在,且所述空域相邻块采用帧间预测模式,则将所述空域相邻块的运动信息确定为可用运动信息。
6.根据权利要求1或2所述的方法,其特征在于,
待加入到运动信息候选列表中的可用运动信息的获取过程,包括:
基于所述当前块的预设位置,从所述当前块的参考帧中选取与所述预设位置对应的时域相邻块,将所述时域相邻块的运动信息确定为可用运动信息。
7.根据权利要求1或2所述的方法,其特征在于,
待加入到运动信息候选列表中的可用运动信息的获取过程,包括:
将预设运动信息确定为可用运动信息,所述预设运动信息包括如下运动信息的至少一种:
基于运动信息候选列表中已存在的候选运动信息所导出的缺省运动信息。
8.根据权利要求1或2所述的方法,其特征在于,当确定对当前块启动角度加权预测模式时,所述基于所述运动信息候选列表确定所述当前块的预测值,包括:
基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
针对所述当前块的每个像素位置,根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;
根据所述第一预测值,所述像素位置的目标权重值,所述第二预测值和所述像素位置的关联权重值,确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
9.根据权利要求8所述的方法,其特征在于,所述基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息,包括:
从所述运动信息候选列表中选择候选运动信息作为所述当前块的第一原始运动信息,并从所述运动信息候选列表中选择候选运动信息作为所述当前块的第二原始运动信息;
根据所述第一原始运动信息确定所述当前块的第一目标运动信息;
根据所述第二原始运动信息确定所述当前块的第二目标运动信息。
10.根据权利要求8所述的方法,其特征在于,
所述根据所述第一预测值,所述像素位置的目标权重值,所述第二预测值和所述像素位置的关联权重值,确定所述像素位置的加权预测值之前,所述方法还包括:
在确定对当前块启动加权预测时,获取所述当前块的权重预测角度和权重配置参数;
根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值;
针对所述当前块的每个像素位置,根据所述权重预测角度从所述当前块外部的周边位置中确定所述像素位置指向的周边匹配位置;根据所述周边匹配位置关联的参考权重值确定所述像素位置的目标权重值,根据所述像素位置的目标权重值确定所述像素位置的关联权重值。
11.根据权利要求10所述的方法,其特征在于,所述权重配置参数包括权重变换率,若当前块支持权重变换率切换模式,则采用如下方式获取所述当前块的权重变换率:
获取所述当前块的权重变换率指示信息;
根据所述权重变换率指示信息确定所述当前块的权重变换率:其中,若所述权重变换率指示信息为第一指示信息,则所述当前块的权重变换率为第一权重变换率;若所述权重变换率指示信息为第二指示信息,则所述当前块的权重变换率为第二权重变换率。
12.根据权利要求11所述的方法,其特征在于,所述当前块的权重变换率指示信息为所述当前块对应的权重变换率切换标识,所述第一指示信息用于指示所述当前块不需要进行权重变换率切换,所述第二指示信息用于指示所述当前块需要进行权重变换率切换。
13.根据权利要求10所述的方法,其特征在于,所述权重配置参数包括权重变换率和权重变换的起始位置,根据所述权重配置参数为所述当前块外部的周边位置配置参考权重值包括:针对所述当前块外部的周边位置,根据所述周边位置的坐标值,所述权重变换的起始位置的坐标值,以及所述权重变换率,配置所述周边位置的参考权重值。
14.根据权利要求10所述的方法,其特征在于,所述权重配置参数包括权重变换的起始位置,所述权重变换的起始位置由如下参数的至少一个确定:
所述权重预测角度,所述当前块的权重预测位置,所述当前块的尺寸。
15.根据权利要求1或2所述的方法,其特征在于,当确定对当前块启动几何划分模式或组合楔形预测模式时,基于所述运动信息候选列表确定所述当前块的预测值,包括:
基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息;
针对所述当前块的每个像素位置,根据所述第一目标运动信息确定所述像素位置的第一预测值,根据所述第二目标运动信息确定所述像素位置的第二预测值;
根据所述第一预测值和所述第二预测值确定所述像素位置的加权预测值;
根据所述当前块的所有像素位置的加权预测值确定所述当前块的加权预测值。
16.根据权利要求15所述的方法,其特征在于,所述基于所述运动信息候选列表获取所述当前块的第一目标运动信息和第二目标运动信息,包括:
从所述运动信息候选列表中选择候选运动信息作为所述当前块的第一原始运动信息,并从所述运动信息候选列表中选择候选运动信息作为所述当前块的第二原始运动信息;
根据所述第一原始运动信息确定所述当前块的第一目标运动信息;
根据所述第二原始运动信息确定所述当前块的第二目标运动信息。
17.一种编解码装置,其特征在于,所述装置包括:
获取模块,用于获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少两个单向运动信息;其中,在所述运动信息候选列表创建时加入单向运动信息的过程包括:针对待加入到运动信息候选列表中的可用运动信息,若所述可用运动信息为双向运动信息,则根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,将所述单向运动信息加入到所述运动信息候选列表或者所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表;
确定模块,用于基于所述运动信息候选列表确定所述当前块的预测值;
其中,所述获取模块根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息时具体用于:根据所述可用运动信息的性质将所述可用运动信息裁剪为单向运动信息;
其中,所述获取模块根据所述可用运动信息的性质将所述可用运动信息裁剪为单向运动信息时具体用于:若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;或,若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
18.一种解码端设备,其特征在于,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下步骤:
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少两个单向运动信息;其中,在所述运动信息候选列表创建时加入单向运动信息的过程包括:针对待加入到运动信息候选列表中的可用运动信息,若所述可用运动信息为双向运动信息,则根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,将所述单向运动信息加入到所述运动信息候选列表或者所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表;
基于所述运动信息候选列表确定所述当前块的预测值;
其中,所述根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,包括:根据所述可用运动信息的性质将所述可用运动信息裁剪为单向运动信息;所述根据所述可用运动信息的性质将所述可用运动信息裁剪为单向运动信息,包括:若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;或,若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
19.一种编码端设备,其特征在于,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下步骤:
获取为当前块创建的运动信息候选列表,所述运动信息候选列表包括至少两个单向运动信息;其中,在所述运动信息候选列表创建时加入单向运动信息的过程包括:针对待加入到运动信息候选列表中的可用运动信息,若所述可用运动信息为双向运动信息,则根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,将所述单向运动信息加入到所述运动信息候选列表或者所述单向运动信息与所述运动信息候选列表中已存在的候选运动信息不重复时将所述单向运动信息加入到所述运动信息候选列表;
基于所述运动信息候选列表确定所述当前块的预测值;
其中,所述根据所述可用运动信息的属性将所述可用运动信息裁剪为单向运动信息,包括:根据所述可用运动信息的性质将所述可用运动信息裁剪为单向运动信息;所述根据所述可用运动信息的性质将所述可用运动信息裁剪为单向运动信息,包括:若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第一参考帧列表中参考帧的单向运动信息;或,若所述可用运动信息是所述当前块的时域相邻块的运动信息,则将所述可用运动信息裁剪为指向第二参考帧列表中参考帧的单向运动信息。
CN202010845243.0A 2020-08-20 2020-08-20 一种编解码方法、装置及其设备 Active CN114079783B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111155082.3A CN113709499B (zh) 2020-08-20 2020-08-20 一种编解码方法、装置及其设备
CN202010845243.0A CN114079783B (zh) 2020-08-20 2020-08-20 一种编解码方法、装置及其设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010845243.0A CN114079783B (zh) 2020-08-20 2020-08-20 一种编解码方法、装置及其设备

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202111155082.3A Division CN113709499B (zh) 2020-08-20 2020-08-20 一种编解码方法、装置及其设备

Publications (2)

Publication Number Publication Date
CN114079783A CN114079783A (zh) 2022-02-22
CN114079783B true CN114079783B (zh) 2022-12-23

Family

ID=78668985

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202111155082.3A Active CN113709499B (zh) 2020-08-20 2020-08-20 一种编解码方法、装置及其设备
CN202010845243.0A Active CN114079783B (zh) 2020-08-20 2020-08-20 一种编解码方法、装置及其设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202111155082.3A Active CN113709499B (zh) 2020-08-20 2020-08-20 一种编解码方法、装置及其设备

Country Status (1)

Country Link
CN (2) CN113709499B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024000581A1 (zh) * 2022-07-01 2024-01-04 Oppo广东移动通信有限公司 排序方法、解码方法、编码方法、装置、解码器和编码器

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109963155A (zh) * 2017-12-23 2019-07-02 华为技术有限公司 图像块的运动信息的预测方法、装置及编解码器
CN110225346A (zh) * 2018-12-28 2019-09-10 杭州海康威视数字技术股份有限公司 一种编解码方法及其设备
CN110933426A (zh) * 2018-09-20 2020-03-27 杭州海康威视数字技术股份有限公司 一种解码、编码方法及其设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109963155A (zh) * 2017-12-23 2019-07-02 华为技术有限公司 图像块的运动信息的预测方法、装置及编解码器
CN110933426A (zh) * 2018-09-20 2020-03-27 杭州海康威视数字技术股份有限公司 一种解码、编码方法及其设备
CN110225346A (zh) * 2018-12-28 2019-09-10 杭州海康威视数字技术股份有限公司 一种编解码方法及其设备
CN111385569A (zh) * 2018-12-28 2020-07-07 杭州海康威视数字技术股份有限公司 一种编解码方法及其设备

Also Published As

Publication number Publication date
CN113709499B (zh) 2022-12-23
CN113709499A (zh) 2021-11-26
CN114079783A (zh) 2022-02-22

Similar Documents

Publication Publication Date Title
CN110463201B (zh) 使用参考块的预测方法和装置
EP4221202A1 (en) Image encoding and decoding method and image decoding device
CN111567045A (zh) 使用帧间预测信息的方法和装置
CN116320496A (zh) 用于滤波的方法和装置
WO2013042888A2 (ko) 머지 후보 블록 유도 방법 및 이러한 방법을 사용하는 장치
US11595664B2 (en) Affine model-based image encoding/decoding method and device
CN113873249B (zh) 一种编解码方法、装置及其设备
CN113709462B (zh) 一种编解码方法、装置及其设备
WO2019072372A1 (en) MOTION VECTOR REFINEMENT OF A MOTION VECTOR POINTING TO A FRACTIONAL SAMPLE POSITION
CN113709460B (zh) 一种编解码方法、装置及其设备
CN111919448A (zh) 用于使用时间运动信息的图像编码和图像解码的方法和设备
CN114079783B (zh) 一种编解码方法、装置及其设备
CN113766222B (zh) 一种编解码方法、装置及其设备
Marzuki et al. Overview of Potential Technologies for Future Video Coding Standard (FVC) in JEM Software: Status and Review: Status and Review
CN114598889B (zh) 一种编解码方法、装置及其设备
CN114270828A (zh) 用于使用基于块类型的预测的图像编码和图像解码的方法和设备
RU2809701C1 (ru) Способ, оборудование и устройство для кодирования и декодирования
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