一种编解码方法及其设备与流程

文档序号:21407603发布日期:2020-07-07 14:41阅读:157来源:国知局
一种编解码方法及其设备与流程

本申请涉及编解码领域,尤其是涉及一种编解码方法及其设备。



背景技术:

为了达到节约空间的目的,视频图像都是经过编码后才传输的,完整的视频编码方法可以包括预测、变换、量化、熵编码、滤波等过程。其中,预测编码可以包括帧内编码和帧间编码。进一步的,帧间编码是利用视频时间域的相关性,使用邻近已编码图像的像素预测当前像素,以达到有效去除视频时域冗余的目的。此外,帧内编码是指利用视频空间域的相关性,使用当前帧图像的已经编码块的像素预测当前像素,以达到去除视频空域冗余的目的。

在帧间编码中,可以使用运动矢量(motionvector,mv)表示当前帧图像的当前块与参考帧图像的参考块之间的相对位移。例如,当前帧图像a与参考帧图像b存在很强的时域相关性,在需要传输图像a的当前块a1时,可以在图像b中进行运动搜索,找到与当前块a1最匹配的参考块b1,并确定当前块a1与参考块b1之间的相对位移,该相对位移也就是当前块a1的运动矢量。

现有技术中,当前块为矩形,而实际物体的边缘往往不是矩形,也就是说,对于处于物体边缘的某个当前块来说,往往存在两个不同的对象(如同时存在前景的物体和背景)。在这种情况下,仅采用单一的预测模式为矩形的当前块进行预测,存在预测效果不佳,编码残差较大,编码性能差等问题。



技术实现要素:

本申请提供了一种编解码方法及其设备,提高预测的准确性。

本申请提供一种编解码方法,所述方法包括:

若当前块的特征信息满足特定条件,则将当前块划分为第一三角子块和第二三角子块;

获取所述第一三角子块的第一目标运动信息和所述第二三角子块的第二目标运动信息;其中,所述第一目标运动信息与所述第二目标运动信息不同;

根据所述第一目标运动信息和所述第二目标运动信息对所述当前块进行编码处理或者解码处理。

本申请提供一种解码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可执行指令,以实现上述的方法步骤。

本申请提供一种编码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可执行指令,以实现上述的方法步骤。

由以上技术方案可见,本申请实施例中,若当前块的特征信息满足特定条件,通过将当前块划分为第一三角子块和第二三角子块,从而利用第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息对当前块进行预测,可以提高预测准确性,提高预测性能,提高编码性能,降低编码残差。

附图说明

为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。

图1是本申请一种实施方式中的视频编码框架的示意图;

图2是本申请一种实施方式中的编解码方法的流程图;

图3是本申请一种实施方式中的编解码方法的流程图;

图4a-图4b是本申请一种实施方式中的当前块的划分示意图;

图5a-图5c是本申请一种实施方式中的候选块的示意图;

图6a-图6c是本申请一种实施方式中的划分子块的示意图;

图7a-图7b是本申请一种实施方式中的运动信息存储的示意图;

图8是本申请一种实施方式中的解码端设备的硬件结构图;

图9是本申请一种实施方式中的编码端设备的硬件结构图。

具体实施方式

在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本申请实施例中提出一种编解码方法,可以涉及如下概念:

帧内预测与帧间预测(intrapredictionandinterprediction)技术:

帧内预测是指,利用视频空间域的相关性,使用当前图像已经编码块的像素预测当前像素,以达到去除视频空域冗余的目的。帧内预测中规定了多种预测模式,每一种预测模式都对应一种纹理方向(dc模式除外),当前块预测像素由其预测方向上相邻块的边界重构像素值生成。举例说明,如果图像的纹理是呈现水平状排布的,那么选择水平预测模式可以更好的预测图像信息。

帧间预测是指,利用视频时域的相关性,由于视频序列通常包含有较强的时域相关性,使用邻近已编码图像像素预测当前图像的像素,可以达到有效去除视频时域冗余的目的。主要的视频编码标准帧间预测部分都采用了基于块的运动补偿技术,主要原理是为当前图像的每一个像素块在之前的已编码图像中寻找一个最佳匹配块,该过程称为运动估计(motionestimation,me)。

运动矢量(motionvector,mv):在帧间编码中,使用运动矢量表示当前编码块与其参考图像中的最佳匹配块之间的相对位移。每个划分的块都有相应的运动矢量传输到解码端,如果对每个块的运动矢量进行独立编码和传输,特别是划分成小尺寸的块时,需要消耗相当多的比特。为了降低用于编码运动矢量的比特数,则利用相邻图像块之间的空间相关性,根据相邻已编码块的运动矢量对当前待编码块的运动矢量进行预测,然后对预测差进行编码。这样,可以有效地降低表示运动矢量的比特数。在对当前块的运动矢量编码过程中,首先使用相邻已编码块的运动矢量预测当前块的运动矢量,然后对运动矢量的预测值(mvp,motionvectorprediction)与运动矢量的真正估值之间的差值(mvd,motionvectordifference)进行编码,从而有效降低mv的编码比特数。

运动信息(motioninformation):由于运动矢量表示当前图像块与某个参考图像块的位置偏移,为了准确获取指向图像块的信息,除了运动矢量,还需要参考帧图像的索引信息来表示使用哪个参考帧图像。在视频编码技术中,对于当前帧图像,通常可以建立一个参考帧图像列表,参考帧图像索引信息则表示当前图像块采用了参考帧图像列表中的第几个参考帧图像。此外,很多编码技术还支持多个参考图像列表,因此,还可以使用一个索引值来表示使用了哪一个参考图像列表,这个索引值可以称为参考方向。在视频编码技术中,可以将运动矢量、参考帧索引、参考方向等与运动相关的信息统称为运动信息。

率失真原则(rate-distortionoptimized):评价编码效率的有两大指标:码率和psnr(peaksignaltonoiseratio,峰值信噪比),比特流越小,则压缩率越大,psnr越大,则重建图像质量越好,在模式选择时,判别公式实质上也就是对二者的综合评价。例如,模式对应的代价:j(mode)=d+λ*r,其中,d表示distortion(失真),通常可以使用sse指标来进行衡量,sse是指重建图像块与源图像的差值的均方和;λ是拉格朗日乘子,r就是该模式下图像块编码所需的实际比特数,包括编码模式信息、运动信息、残差等所需的比特总和。

ctu(codingtreeunit,编码树单元),是编码端支持的最大编码单元、以及解码端支持的最大解码单元。进一步的,一帧图像可以先分成若干个不相交的ctu,每个ctu再基于实际情况确定是否进一步划分成更小的块。

视频编码框架:参见图1所示,可以使用视频编码框架实现本申请实施例的编码端处理流程,此外,视频解码框架的示意图与图1类似,在此不再重复赘述,可以使用视频解码框架实现本申请实施例的解码端处理流程。

具体的,在视频编码框架和视频解码框架中,可以包括帧内预测、运动估计/运动补偿、参考图像缓冲器、环内滤波、重建、变换、量化、反变换、反量化、熵编码器等模块。在编码端,通过这些模块之间的配合,可以实现编码端处理流程,在解码端,通过这些模块之间的配合,可以实现解码端处理流程。

以下结合几个具体实施例,对编解码方法进行详细说明。

实施例1:参见图2所示,为本申请实施例中的编解码方法的流程示意图,该方法可以应用于解码端,该方法可以包括以下步骤:

步骤201,若当前块的特征信息满足特定条件,则解码端将当前块划分为第一三角子块和第二三角子块,也就是说,可以将当前块划分为两个三角子块。

步骤202,解码端获取第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息;该第一目标运动信息与该第二目标运动信息可以不同。

步骤203,解码端根据第一目标运动信息和第二目标运动信息对当前块进行解码处理。

具体的,解码端在接收到编码比特流后,可以根据第一目标运动信息和第二目标运动信息对接收的编码比特流中的当前块的编码数据进行解码,也就是说,解码端可以对当前块对应的编码比特流进行解码,对此解码过程不做限制。

由以上技术方案可见,本申请实施例中,若当前块的特征信息满足特定条件,通过将当前块划分为第一三角子块和第二三角子块,从而利用第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息对当前块进行预测,可以提高预测准确性,提高预测性能,提高编码性能,降低编码残差。

实施例2:参见图3所示,为本申请实施例中的编解码方法的流程示意图,该方法可以应用于编码端,该方法可以包括以下步骤:

步骤301,若当前块的特征信息满足特定条件,则编码端将当前块划分为第一三角子块和第二三角子块,也就是说,可以将当前块划分为两个三角子块。

步骤302,编码端获取第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息;该第一目标运动信息与该第二目标运动信息可以不同。

步骤303,编码端根据第一目标运动信息和第二目标运动信息对当前块进行编码处理。

具体的,编码端可以根据第一目标运动信息和第二目标运动信息对比特流进行编码得到编码比特流,即对当前块的比特流进行编码,对此过程不做限制。

由以上技术方案可见,本申请实施例中,若当前块的特征信息满足特定条件,通过将当前块划分为第一三角子块和第二三角子块,从而利用第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息对当前块进行预测,可以提高预测准确性,提高预测性能,提高编码性能,降低编码残差。

实施例3:在步骤201和步骤301中,解码端/编码端需要判断当前块的特征信息是否满足特定条件;如果是,将当前块划分为第一三角子块和第二三角子块;如果否,则不将当前块划分为第一三角子块和第二三角子块,而是采用传统方式处理,对此不再赘述。其中,特征信息包括但不限于以下一种或者多种:当前块所在当前帧的帧类型、当前块的运动信息模式、当前块的尺寸信息。

在一个例子中,若特征信息为帧类型,则当前块的特征信息满足特定条件,可以包括但不限于:若帧类型为b帧或者非i帧,则确定帧类型满足特定条件;或者,若帧类型允许帧内块拷贝,则确定帧类型满足特定条件。

在一个例子中,若特征信息为运动信息模式,则当前块的特征信息满足特定条件,可以包括但不限于:若运动信息模式为合并模式,则可以确定运动信息模式满足特定条件。当然,在运动信息模式为其它类型的模式(如amvp模式等)时,也可以确定运动信息模式满足特定条件,对此不做限制。

在一个例子中,若特征信息为尺寸信息,且尺寸信息包括当前块的宽度和当前块的高度,则当前块的特征信息满足特定条件,可以包括但不限于:若当前块的宽度大于或等于第一数值,且当前块的高度大于或等于第二数值,则确定当前块的尺寸信息满足特定条件;或者,若当前块的宽度大于或等于第三数值,或,当前块的高度大于或等于第四数值,则确定当前块的尺寸信息满足特定条件;或者,若当前块的宽度大于或等于第五数值,当前块的宽度小于或等于第六数值,且当前块的高度大于或等于第七数值,当前块的高度小于或等于第八数值,则确定当前块的尺寸信息满足特定条件;或者,若当前块的宽度大于或等于第九数值,当前块的宽度小于或等于第十数值,或者,当前块的高度大于或等于第十一数值,当前块的高度小于或等于第十二数值,则确定当前块的尺寸信息满足特定条件;或者,若当前块的宽度大于或等于第十三数值,当前块的宽度小于或等于第十四数值,当前块的高度大于或等于第十五数值,当前块的高度小于或等于第十六数值,当前块的面积大于或等于第十七数值,当前块的面积小于或等于第十八数值,则确定当前块的尺寸信息满足特定条件。

其中,上述各数值均可以根据经验进行配置,如8、16、32、64、128等,对此不做限制。在一种可能的实现方式中,第一数值可以为8,第二数值可以为8,第三数值可以为8,第四数值可以为8,第五数值可以为8,第六数值可以为128,第七数值可以为8,第八数值可以为128,第九数值可以为8,第十数值可以为32,第十一数值可以为8,第十二数值可以为32,第十三数值可以为8,第十四数值可以为64,第十五数值可以为8,第十六数值可以为64,第十七数值可以为16,第十八数值可以为1024。当然,上述只是示例,对此不做限制。

以下结合几个具体应用场景,对上述特征信息满足特定条件进行说明。

应用场景1,在满足下面所列条件时,特征信息满足特定条件,且将当前块划分为第一三角子块和第二三角子块,在不满足下面所列条件时,特征信息不满足特定条件,且不将当前块划分为第一三角子块和第二三角子块。

当前帧为b帧,即当前帧允许存在两个参考帧列表;当前运动信息模式为合并模式;当前块的面积(宽度*高度)大于或等于n*n,n优选为8。

应用场景2,在满足下面所列条件时,特征信息满足特定条件,且将当前块划分为第一三角子块和第二三角子块,在不满足下面所列条件时,特征信息不满足特定条件,且不将当前块划分为第一三角子块和第二三角子块。

当前帧为非i帧,即当前帧允许存在至少1个参考帧列表;当前运动信息模式为合并模式;当前块的面积(宽度*高度)大于或等于n*n,n优选为8。

应用场景3,在满足下面所列条件时,特征信息满足特定条件,且将当前块划分为第一三角子块和第二三角子块,在不满足下面所列条件时,特征信息不满足特定条件,且不将当前块划分为第一三角子块和第二三角子块。

当前帧为b帧,即当前帧允许存在两个参考帧列表;当前运动信息模式为合并模式;当前块的宽度或者高度,均大于或等于n,n优选为8。

应用场景4,在满足下面所列条件时,特征信息满足特定条件,且将当前块划分为第一三角子块和第二三角子块,在不满足下面所列条件时,特征信息不满足特定条件,且不将当前块划分为第一三角子块和第二三角子块。

当前帧为非i帧,即当前帧允许存在至少1个参考帧列表;当前运动信息模式为合并模式;当前块的宽度或者高度,均大于或等于n,n优选为8。

应用场景5,在满足下面所列条件时,特征信息满足特定条件,且将当前块划分为第一三角子块和第二三角子块,在不满足下面所列条件时,特征信息不满足特定条件,且不将当前块划分为第一三角子块和第二三角子块。

当前帧为非i帧,即当前帧允许存在至少1个参考帧列表;当前运动信息模式为合并模式;当前块的宽度或者高度,均大于或等于n,n优选为8;当前块的宽度或者高度,均小于或等于m,m优选为128。

应用场景6,在满足下面所列条件时,特征信息满足特定条件,且将当前块划分为第一三角子块和第二三角子块,在不满足下面所列条件时,特征信息不满足特定条件,且不将当前块划分为第一三角子块和第二三角子块。

当前帧为非i帧,即当前帧允许存在至少1个参考帧列表;当前运动信息模式为合并模式;当前块的宽度或者高度,均大于或等于n,n优选为8;当前块的面积(即宽度*高度)小于或等于m*m,m优选为32。

应用场景7,在满足下面所列条件时,特征信息满足特定条件,且将当前块划分为第一三角子块和第二三角子块,在不满足下面所列条件时,特征信息不满足特定条件,且不将当前块划分为第一三角子块和第二三角子块。

当前帧为非i帧,即当前帧允许存在至少1个参考帧列表;当前运动信息模式为合并模式;当前块的宽度在[wmin,wmax]范围内,wmin优选为8,wmax优选为64;当前块的高度在[hmin,hmax]范围内,hmin优选为8,hmax优选为64;当前块的面积(即宽度*高度)在[smin,smax]范围内,hmin优选为16,hmax优选为1024;其中,上述[a,b]表示大于等于a,小于等于b。

应用场景8,针对应用场景1-应用场景7中的任意一个应用场景,可以将帧类型限制修改成:帧类型允许帧内块拷贝(即当前帧允许采用帧内块拷贝),其它限制条件不变。例如,针对应用场景1,则限制条件可以变为:

当前帧为允许采用帧内块拷贝;当前运动信息模式为合并模式;当前块的面积(宽度*高度)大于或等于n*n,n优选为8。

其中,当前帧为允许采用帧内块拷贝是指:当前块可通过在当前帧的已解码重建块(而不是其它帧的已解码重建块)中搜索相似块的技术。

应用场景9,针对应用场景1-应用场景8的任一应用场景,当前运动信息模式为合并模式,可以为:采用合并模式,且不采用子块划分模式、多假设模式、编码运动信息差的合并模式中的一种或多种模式,也就是说,当子块划分模式、多假设模式、编码运动信息差的合并模式中的任意一种模式开启时,则特征信息不满足特定条件,不将当前块划分为第一三角子块和第二三角子块。

实施例4:步骤201和步骤301中,解码端/编码端需要将当前块划分为第一三角子块和第二三角子块。具体的,按照主对角线方式将当前块划分为第一三角子块和第二三角子块,即按照与水平向右方向呈45度夹角方向,将当前块划分为第一三角子块和第二三角子块,参见图4a所示。或者,按照副对角线方式将当前块划分为第一三角子块和第二三角子块,即按照与水平向右方向呈135度夹角方向,将当前块划分为第一三角子块和第二三角子块,参见图4b所示。

为了将当前块划分为第一三角子块和第二三角子块,可以采用如下方式:

方式一、编码端通过协议约定默认使用主对角线方式进行当前块划分,解码端通过协议约定默认使用主对角线方式进行前块的划分。在此基础上,则编码端可以按照主对角线方式将当前块划分为第一三角子块和第二三角子块,解码端可以按照主对角线方式将当前块划分为第一三角子块和第二三角子块。

方式二、编码端通过协议约定默认使用副对角线方式进行当前块划分,解码端通过协议约定默认使用副对角线方式进行前块的划分。在此基础上,则编码端可以按照副对角线方式将当前块划分为第一三角子块和第二三角子块,解码端可以按照副对角线方式将当前块划分为第一三角子块和第二三角子块。

方式三、编码端确定主对角线划分方式对应的率失真代价1、副对角线划分方式对应的率失真代价2,对率失真代价1和率失真代价2的确定方式不做限制。

若率失真代价1小于率失真代价2,则编码端按照主对角线方式将当前块划分为第一三角子块和第二三角子块。编码端在向解码端发送编码比特流时,编码比特流携带第一指示信息,第一指示信息用于指示使用主对角线方式进行当前块划分。解码端接收来自编码端的编码比特流,若编码比特流携带第一指示信息,则按照主对角线方式将当前块划分为第一三角子块和第二三角子块。

若率失真代价1大于率失真代价2,则编码端按照副对角线方式将当前块划分为第一三角子块和第二三角子块。编码端在向解码端发送编码比特流时,编码比特流携带第二指示信息,第二指示信息用于指示使用副对角线方式进行当前块划分。解码端接收来自编码端的编码比特流,若编码比特流携带第二指示信息,则按照副对角线方式将当前块划分为第一三角子块和第二三角子块。

实施例5:步骤202和步骤302中,解码端/编码端需要获取第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息,可以采用如下方式:

方式一、构建第一候选列表,该第一候选列表可以包括多个候选运动信息;从该第一候选列表中选择一个候选运动信息作为第一三角子块的第一目标运动信息;从该第一候选列表中排除第一目标运动信息,并从该第一候选列表剩余的候选运动信息中,选择一个候选运动信息作为第二三角子块的第二目标运动信息,这样,从而保证该第一目标运动信息与该第二目标运动信息不同。

在一个例子中,构建第一候选列表,可以包括但不限于:获取当前块对应的候选块,并将候选块的运动信息添加到第一候选列表中;其中,若候选块为单向预测块,则候选块的运动信息包括:候选块的单向运动信息;若候选块为双向预测块,则候选块的运动信息包括:候选块的第一运动信息(即候选块的l0运动信息)和/或候选块的第二运动信息(即候选块的l1运动信息),但是,不包括候选块的第一运动信息与候选块的第二运动信息的加权运动信息。

其中,当前块对应的候选块,可以参见图5a所示,可以将这7个位置的块作为当前块对应的候选块。在图5a中,块1、块2、块3、块4和块5为当前帧中的候选块,而块6和块7为其它帧中的候选块(即时域对应块)。

在一个例子中,可以收集这7个位置的候选块的运动信息,若候选块为单向预测块,则候选块的运动信息包括候选块的单向运动信息;若候选块为双向预测块,则候选块的运动信息包括候选块的l0运动信息和/或候选块的l1运动信息,但不包括候选块的l0运动信息与候选块的l1运动信息的加权运动信息。

在收集这7个位置的候选块的运动信息后,若第一候选列表的长度仍未达到预设的最大长度maxl(maxl优选为7),则在第一候选列表的最后,加入若干个可用的空域非相邻子块的运动信息,即将空域非相邻子块也作为当前块对应的候选块,空域非相邻子块是指与当前块没有交界线或结界点的子块。

在一个例子中,在收集候选块的运动信息后,可以按照单向运动信息、双向预测的l0运动信息、双向预测的l1运动信息的顺序,对所有运动信息进行排序,按照排序结果将每个运动信息依次添加到第一候选列表。或者,按照双向预测的l0运动信息、双向预测的l1运动信息、单向运动信息的顺序,对所有运动信息进行排序,按照排序结果将每个运动信息依次添加到第一候选列表。

在一个例子中,每次向第一候选列表中添加运动信息时,需要判断第一候选列表中的运动信息数量是否已经达到数量上限值m。如果是,则拒绝添加运动信息,结束运动信息的添加过程。如果否,则继续添加运动信息,在当前的运动信息添加完成后,继续向第一候选列表中添加下一个运动信息。

其中,数量上限值m的取值根据经验配置,如数量上限值m优选为5。

在一个例子中,每次向第一候选列表中添加运动信息时,可以判断该运动信息与第一候选列表中的已有运动信息是否重复,如果重复,则拒绝将该运动信息添加到第一候选列表中,如果不重复,则将该运动信息添加到第一候选列表中,这样,可以避免第一候选列表中存在重复的运动信息。或者,也可以不判断运动信息是否重复,而是直接将运动信息添加到第一候选列表中。

在一个例子中,在收集候选块的运动信息,并将运动信息添加到第一候选列表后,若第一候选列表中的候选运动信息数量小于数量上限值m,则可以使用零运动信息进行填充,对此过程不再赘述,数量上限值m优选为5。

在一个例子中,在构建第一候选列表时,每次收集当前块的候选块的运动信息时,无需比较所述候选块的运动信息与为当前块收集的运动信息是否一致,而是直接收集所述候选块的运动信息,基于收集的运动信息执行上述实施例。

以下结合几个应用场景,对方式一的第一候选列表构建进行说明。

应用场景1:从当前块对应的候选块中,按照图5a所示的位置顺序获取运动信息(如运动矢量)后,按照单向运动矢量、双向预测的l0运动矢量、双向预测的l1运动矢量的顺序进行排序(没有双向预测的l0运动矢量与l1运动矢量的均值)。在填充过程中,若第一候选列表中的候选运动信息数量达到n时(n优选为5),则停止填充。填充过程需要不停进行查重,保证第一候选列表没有相同的运动信息。当候选运动信息数量小于n时,使用零运动矢量填充。

应用场景2:从当前块对应的候选块中,按照图5a所示的位置顺序获取运动信息(如运动矢量)后,按照单向运动矢量、双向预测的l0运动矢量、双向预测的l1运动矢量的顺序进行排序(没有双向预测的l0运动矢量与l1运动矢量的均值)。在填充过程中,若第一候选列表中的候选运动信息数量达到n时(n优选为5),则停止运动信息的填充过程。在填充过程中,不需要对运动信息进行查重。当候选运动信息数量小于n时,使用零运动矢量填充。

应用场景3:从当前块对应的候选块中,按照图5a所示的位置顺序获取运动信息(如运动矢量)后,按照双向预测的l0运动矢量、双向预测的l1运动矢量、单向运动矢量的顺序排序(没有双向预测的l0运动矢量与l1运动矢量的均值)。在填充过程中,若第一候选列表中的候选运动信息数量达到n时(n优选为5),则停止填充。填充过程需要不停进行查重,保证第一候选列表没有相同的运动信息。当候选运动信息数量小于n时,使用零运动矢量填充。

应用场景4:从当前块对应的候选块中,按照图5a所示的位置顺序获取运动信息(如运动矢量)。其中,若候选块为单向预测块,即候选块采用单向运动信息,则直接选择单向运动信息,并将其按顺序放入第一候选列表中,即第一候选列表包括的是候选块的单向运动信息。若候选块为双向预测块,则采用双向运动信息,则选择l0运动信息或l1运动信息,并将其按顺序放入第一候选列表中,即第一候选列表包括的是候选块的l0运动信息或l1运动信息。

在填充过程中,若第一候选列表中的候选运动信息数量达到n时(n优选为5),则停止填充。填充过程需要不停进行查重,保证第一候选列表没有相同的运动信息。当候选运动信息数量小于n时,则使用零运动矢量填充。

应用场景5:在进行候选块的运动信息收集时,在遍历完图5a所示的所有候选块后,若发现第一候选列表的长度仍未达到预设的最大长度maxl(maxl优选为7),则在该第一候选列表的最后再加入若干个可用的空域非相邻子块的运动信息。其中,空域非相邻子块指与当前块没有交界线或结界点的子块。

应用场景6:从当前块对应的候选块中,按照图5a所示的位置顺序获取运动信息(如运动矢量)后,按照单向运动矢量、双向预测的l0运动矢量、双向预测的l1运动矢量的顺序进行排序(没有双向预测的l0运动矢量与l1运动矢量的均值)。在填充过程中,若第一候选列表中的候选运动信息数量达到n时(n优选为5),则停止运动信息的填充过程。填充过程中,对于单向运动矢量、双向预测的l0运动矢量,需要与第一候选列表中的已有单向运动信息进行查重处理,以保证第一候选列表中没有相同的运动信息;而对于双向预测的l1运动矢量,考虑到第一候选列表中的运动信息已经较多,查重代价较高(需要与第一候选列表中的所有运动信息比较),则不需要进行查重处理。

应用场景7:在向第一候选列表中添加运动信息时,涉及两个过程,一个过程为运动信息收集过程,即收集候选块的运动信息,第二个过程为运动信息添加过程,即将运动信息添加到第一候选列表,上述排序、查重等均是针对运动信息添加过程,以下对运动信息收集过程的实施例进行说明。

在收集候选块的运动信息的过程中,需要比较当前候选块的运动信息与先前已收集的运动信息是否完全一样,若一样,则跳过当前候选块的运动信息的收集过程,本实施例中,只将当前候选块的运动信息与较近的候选块的运动信息进行比较,而不再与其它候选块的运动信息进行比较,以下对此进行说明。

参见图5a所示,首先,收集候选块1的运动信息,由于是候选块1第一个候选块,因此,不需要进行比较,直接进行候选块1的运动信息收集。

然后,在收集候选块2的运动信息时,判断候选块1是否可用,若可用,则比较候选块2的运动信息与候选块1的运动信息是否完全一样,若完全一样,则不进行候选块2的运动信息收集,若不一样,进行候选块2的运动信息收集。

然后,在收集候选块3的运动信息时,判断候选块2是否可用,若可用,则比较候选块3的运动信息与候选块2的运动信息是否完全一样,若完全一样,则不进行候选块3的运动信息收集,若不一样,则进行候选块3的运动信息收集,需要注意的是,这里不再与候选块1的运动信息进行比较。

然后,在收集候选块4的运动信息时,判断候选块1是否可用,若可用,则比较候选块4的运动信息与候选块1的运动信息是否完全一样,若完全一样,则不进行候选块4的运动信息收集,若不一样,则进行候选块4的运动信息收集,需要注意的是,这里不再与候选块2、3的运动信息进行比较。

然后,在收集候选块5的运动信息时,判断候选块1是否可用,若可用,则比较候选块5的运动信息与候选块1的运动信息是否完全一样,若完全一样,则不进行候选块5的运动信息收集,若不一样,则判断候选块2是否可用,若可用,则比较候选块5的运动信息与候选块2的运动信息是否完全一样,若完全一样,则不进行候选块5的运动信息收集,若不一样,则进行候选块5的运动信息收集,需要注意的是,这里不再与候选块3、4的运动信息进行比较。

应用场景8:在向第一候选列表中添加运动信息时,涉及两个过程,一个过程为运动信息收集过程,即收集候选块的运动信息,第二个过程为运动信息添加过程,即将运动信息添加到第一候选列表,以下对运动信息收集过程的实施例进行说明。在收集候选块的运动信息的过程中,无需比较当前候选块的运动信息与先前已收集的运动信息是否完全一样,而是直接收集当前候选块的运动信息。其原因在于:即使当前候选块的运动信息与先前已收集的运动信息完全一样,后续也可以通过查重操作,避免第一候选列表中存在相同的运动信息。

在方式一中,还需要从第一候选列表中选择一个候选运动信息作为第一三角子块的第一目标运动信息,以下对第一目标运动信息的确定过程进行说明。

方式a1、编码端可以通过协议约定默认第一目标运动信息,例如,编码端默认第一候选列表中的第一个候选运动信息为第一三角子块的第一目标运动信息。解码端通过协议约定默认第一目标运动信息,例如,解码端可以默认第一候选列表中的第一个候选运动信息为第一三角子块的第一目标运动信息。

方式a2、编码端确定第一候选列表中的每个候选运动信息对应的率失真代价,对此确定方式不做限制,并将最小率失真代价对应的候选运动信息作为第一三角子块的第一目标运动信息。编码端向解码端发送编码比特流时,编码比特流携带第三指示信息,第三指示信息用于指示第一目标运动信息在第一候选列表中的索引值。解码端接收来自编码端的编码比特流,若编码比特流携带第三指示信息,则利用第三指示信息指示的索引值,从第一候选列表中选择与该索引值对应的候选运动信息,并将该候选运动信息作为第一目标运动信息。

在方式一中,还需要从第一候选列表中选择一个候选运动信息作为第二三角子块的第二目标运动信息,在选择第二目标运动信息时,需要先从第一候选列表中排除第一运动信息,以下对第二目标运动信息的确定过程进行说明。

方式b1、编码端可以通过协议约定默认第二目标运动信息,例如,编码端默认第一候选列表中的第二个候选运动信息为第二三角子块的第二目标运动信息。解码端通过协议约定默认第二目标运动信息,例如,解码端可以默认第一候选列表中的第二个候选运动信息为第二三角子块的第二目标运动信息。

方式b2、编码端从第一候选列表中排除第一目标运动信息(即不选择第一候选列表中的第一目标运动信息),在此基础上,编码端确定第一候选列表中剩余的每个候选运动信息(即排除第一目标运动信息后剩余的候选运动信息)对应的率失真代价,并将最小率失真代价对应的候选运动信息作为第二三角子块的第二目标运动信息。编码端向解码端发送编码比特流时,编码比特流携带第四指示信息,第四指示信息用于指示第二目标运动信息在第一候选列表中的索引值。解码端接收来自编码端的编码比特流,若编码比特流携带第四指示信息,则利用第四指示信息指示的索引值,从第一候选列表中选择与该索引值对应的候选运动信息,并将该候选运动信息作为第二目标运动信息。

实施例6:步骤202和步骤302中,解码端/编码端需要获取第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息,可以采用如下方式:

方式二、构建与第一三角子块对应的第二候选列表,构建与第二三角子块对应的第三候选列表,第二候选列表包括多个候选运动信息,第三候选列表包括多个候选运动信息。从第二候选列表中选择一个候选运动信息作为第一三角子块的第一目标运动信息,从第三候选列表中选择一个候选运动信息作为第二三角子块的第二目标运动信息,第一目标运动信息与第二目标运动信息不同。

在一个例子中,构建与第一三角子块对应的第二候选列表,可以包括但不限于:获取第一三角子块对应的第一候选块,将第一候选块的运动信息添加到第二候选列表中。其中,若第一候选块为单向预测块,则第一候选块的运动信息包括:第一候选块的单向运动信息;若第一候选块为双向预测块,则第一候选块的运动信息包括:第一候选块的第一运动信息(即第一候选块的l0运动信息)和/或第一候选块的第二运动信息(即第一候选块的l1运动信息),但不包括第一候选块的第一运动信息与第一候选块的第二运动信息的加权运动信息。

在一个例子中,构建与第二三角子块对应的第三候选列表,可以包括但不限于:获取第二三角子块对应的第二候选块;将第二候选块的运动信息添加到第三候选列表;其中,若第二候选块为单向预测块,则第二候选块的运动信息包括:第二候选块的单向运动信息;若第二候选块为双向预测块,则第二候选块的运动信息包括:第二候选块的第一运动信息(即第二候选块的l0运动信息)和/或第二候选块的第二运动信息(即第二候选块的l1运动信息),但不包括第二候选块的第一运动信息与第二候选块的第二运动信息的加权运动信息。

其中,若按照副对角线方式将当前块划分为第一三角子块和第二三角子块,则第一三角子块为上侧三角子块(即右上角的三角子块),第二三角子块为下侧三角子块(即左下角的三角子块),在此基础上,则:第一三角子块对应的第一候选块可以包括但不限于:当前块上侧的相邻块,当前块所在当前帧之外的其它帧中的时域块。第二三角子块对应的第二候选块可以包括但不限于:当前块左侧的相邻块,当前块所在当前帧之外的其它帧中的时域块。

例如,参见图5b所示,可以将这5个位置的块作为第一三角子块对应的第一候选块,在图5b中,块2、块3和块5为当前帧中的候选块,而块6和块7为其它帧中的候选块(即时域对应块)。又例如,参见图5c所示,可以将这5个位置的块作为第二三角子块对应的第二候选块,在图5c中,块1、块4和块5为当前帧中的候选块,而块6和块7为其它帧中的候选块(即时域对应块)。

在一个例子中,可以收集候选块的运动信息,若候选块为单向预测块,则候选块的运动信息包括候选块的单向运动信息;若候选块为双向预测块,则候选块的运动信息包括候选块的l0运动信息和/或候选块的l1运动信息,但不包括候选块的l0运动信息与候选块的l1运动信息的加权运动信息。

在一个例子中,在收集候选块(如图5b或者图5c所示)的运动信息后,可以按照单向运动信息、双向预测的l0运动信息、双向预测的l1运动信息的顺序,对所有运动信息进行排序,按照排序结果将每个运动信息依次添加到第二候选列表或者第三候选列表。或者,按照双向预测的l0运动信息、双向预测的l1运动信息、单向运动信息的顺序,对所有运动信息进行排序,按照排序结果将每个运动信息依次添加到第二候选列表或者第三候选列表。

在一个例子中,每次向第二候选列表或者第三候选列表中添加运动信息时,需要判断第二候选列表或者第三候选列表中的运动信息数量是否已经达到数量上限值m。如果是,则拒绝添加运动信息,结束运动信息的添加过程。如果否,则继续添加运动信息,在当前的运动信息添加完成后,继续向第二候选列表或者第三候选列表中添加下一个运动信息。数量上限值m优选为4。

在一个例子中,每次向第二候选列表或者第三候选列表中添加运动信息时,判断运动信息与第二候选列表或者第三候选列表中的已有运动信息是否重复,如果重复,拒绝将该运动信息添加到第二候选列表或者第三候选列表中,如果不重复,将该运动信息添加到第二候选列表或者第三候选列表中,这样,避免第二候选列表或者第三候选列表中存在重复的运动信息。或者,不判断运动信息是否重复,而是直接将运动信息添加到第二候选列表或者第三候选列表中。

在一个例子中,在收集候选块(如图5b或者图5c所示)的运动信息,并将运动信息添加到第二候选列表或者第三候选列表后,若第二候选列表或者第三候选列表中的候选运动信息数量小于数量上限值m,则可以使用零运动信息进行填充,对此过程不再赘述,数量上限值m优选为4。

在一个例子中,在构建第二候选列表或者第三候选列表时,每次收集当前块的候选块的运动信息时,无需比较所述候选块的运动信息与为当前块收集的运动信息是否一致,而是直接收集所述候选块的运动信息。

需要注意的是,实施例5的应用场景1-应用场景8,也可以适用于实施例6,只是第一候选列表变为第二候选列表或者第三候选列表,候选块从图5a所示的候选块变为图5b或者图5c所示的候选块,其它过程类似,在此不再赘述。

在方式二中,还需要从第二候选列表中选择一个候选运动信息作为第一三角子块的第一目标运动信息,以下对第一目标运动信息的确定过程进行说明。

方式c1、编码端可以通过协议约定默认第一目标运动信息,例如,编码端默认第二候选列表中的第一个候选运动信息为第一三角子块的第一目标运动信息。解码端通过协议约定默认第一目标运动信息,例如,解码端可以默认第二候选列表中的第一个候选运动信息为第一三角子块的第一目标运动信息。

方式c2、编码端确定第二候选列表中的每个候选运动信息对应的率失真代价,对此确定方式不做限制,并将最小率失真代价对应的候选运动信息作为第一三角子块的第一目标运动信息。编码端向解码端发送编码比特流时,编码比特流携带第五指示信息,第五指示信息用于指示第一目标运动信息在第二候选列表中的索引值。解码端接收来自编码端的编码比特流,若编码比特流携带第五指示信息,则利用第五指示信息指示的索引值,从第二候选列表中选择与该索引值对应的候选运动信息,并将该候选运动信息作为第一目标运动信息。

在方式二中,还需要从第三候选列表中选择一个候选运动信息作为第二三角子块的第二目标运动信息,以下对第二目标运动信息的确定过程进行说明。

方式d1、编码端可以通过协议约定默认第二目标运动信息,例如,编码端默认第三候选列表中的第一个候选运动信息为第二三角子块的第二目标运动信息。解码端通过协议约定默认第二目标运动信息,例如,解码端可以默认第三候选列表中的第一个候选运动信息为第二三角子块的第二目标运动信息。

方式d2、编码端确定第三候选列表中的每个候选运动信息对应的率失真代价,对此确定方式不做限制,并将最小率失真代价对应的候选运动信息作为第二三角子块的第二目标运动信息。编码端向解码端发送编码比特流时,编码比特流携带第六指示信息,第六指示信息用于指示第二目标运动信息在第三候选列表中的索引值。解码端接收来自编码端的编码比特流,若编码比特流携带第六指示信息,则利用第六指示信息指示的索引值,从第三候选列表中选择与该索引值对应的候选运动信息,并将该候选运动信息作为第二目标运动信息。

实施例7:步骤202和步骤302中,解码端/编码端需要获取第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息,具体的,若按照主对角线方式将当前块划分为第一三角子块和第二三角子块,则构建第一候选列表,并基于第一候选列表确定第一目标运动信息和第二目标运动信息,即可以采用实施例5的方式实现。若按照副对角线方式将当前块划分为第一三角子块和第二三角子块,则构建与第一三角子块对应的第二候选列表,构建与第二三角子块对应的第三候选列表,并基于第二候选列表确定第一目标运动信息,基于第三候选列表确定第二目标运动信息,即可以采用实施例6的方式实现。

在一个例子中,无论是按照主对角线方式对当前块进行划分,还是按照副对角线方式对当前块进行划分,均可以采用实施例5。在另一个例子中,若按照主对角线方式对当前块进行划分,即按照45度方向对当前块进行划分,则可以采用实施例5,数量上限值m优选为4,在此不再赘述。若按照副对角线方式对当前块进行划分,即按照135度方向对当前块进行划分,则可以采用实施例6。

参见实施例6所示,第一三角子块为上侧三角子块,参见图5b所示,第一三角子块的第一候选块,按照顺序依次为块2、块3、块5、块6和块7,即将距离第一三角子块较远的块1和块4移除。参见图5c所示,第二三角子块的第二候选块,按照顺序依次为块1、块1、块5、块6和块7,即将距离第二三角子块较远的块2和块3移除,此外,数量上限值m也可以优选为4。

在一个例子中,基于上述方式,对于运动信息索引的编码方法,可以为编码1个标志位表示45角度划分还是135度角度划分。若角度为45度,则按照截断一元码的方式编码m*(m-1)个组合的索引;若角度为135度,则按照截断一元码的方式编码m*m个组合的索引。具体的,若角度为45度,由于采用实施例5,即从第一候选列表中选择第一目标运动信息和第二目标运动信息,由于第一候选列表中存在m个(m优选为4)候选运动信息,因此,第一目标运动信息有m种可能,而从第一候选列表中排除第一目标运动信息后,第二目标运动信息有(m-1)种可能,因此,运动信息索引为m*(m-1)个组合的索引。

若角度为135度,由于采用实施例6,即从第二候选列表中选择第一目标运动信息,并从第三候选列表中选择第二目标运动信息,由于第二候选列表中存在m个(m优选为4)候选运动信息,因此,第一目标运动信息有m种可能,由于第三候选列表中存在m个(m优选为4)候选运动信息,因此,第二目标运动信息有m种可能,因此,运动信息索引为m*m个组合的索引。

实施例8:在获取第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息之后,还可以根据第一目标运动信息和第二目标运动信息对第一三角子块和第二三角子块进行运动补偿,以下对运动补偿的方式进行说明:

方式1、将当前块划分为多个子块,每个子块的宽度均大于或者等于2,且每个子块的高度均大于或者等于2。针对每个子块,则:若所述子块位于第一三角子块内,则根据第一三角子块的第一目标运动信息对所述子块进行运动补偿,得到预测值。若所述子块位于第二三角子块内,则根据第二三角子块的第二目标运动信息对所述子块进行运动补偿,得到预测值。若所述子块同时位于第一三角子块和第二三角子块内,则根据第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息对所述子块进行加权补偿,得到预测值。

其中,根据第一三角子块的第一目标运动信息和第二三角子块的第二目标运动信息对所述子块进行加权补偿,可以包括但不限于:根据所述第一目标运动信息确定所述子块的第一预测值;根据所述第二目标运动信息确定所述子块的第二预测值;根据第一预测值、所述第一预测值对应的第一权重系数、第二预测值、所述第二预测值对应的第二权重系数对所述子块进行加权补偿。

例如,参见图6a所示,将当前块划分为子块1、子块2、子块3和子块4,实际应用中,还可以将当前块划分为更多的子块,只要每个子块的宽度均大于或者等于2,且每个子块的高度均大于或者等于2即可,以图6a为例进行说明。

针对子块2,由于子块2位于第一三角子块内,因此,利用第一目标运动信息对子块2进行运动补偿,得到预测值,对此运动补偿过程不做限制。针对子块3,由于子块3位于第二三角子块内,因此,利用第二目标运动信息对子块3进行运动补偿,得到预测值。针对子块1,由于子块1同时位于第一三角子块和第二三角子块内,因此,根据第一目标运动信息确定子块1的预测值p1,并根据第二目标运动信息确定子块1的预测值p2,假设预测值p1的第一权重系数为a(如0.5),预测值p2的第二权重系数为b(如0.5),则根据预测值p1、a、预测值p2和b对子块1加权补偿,即加权补偿后的预测值为预测值p1*a+预测值p2*b。针对子块4,其处理过程参见子块1,在此不再重复赘述。

方式2、将当前块划分为第一区域子块、第二区域子块和第三区域子块;其中,第一区域子块位于第一三角子块内,第二区域子块位于第二三角子块内,第三区域子块内的每个子块的中心与对角线之差小于预设阈值。进一步的,根据第一三角子块的第一目标运动信息对该第一区域子块进行运动补偿;根据第二三角子块的第二目标运动信息对该第二区域子块进行运动补偿;根据该第一目标运动信息和该第二目标运动信息对该第三区域子块进行加权补偿。

其中,根据该第一目标运动信息和该第二目标运动信息对该第三区域子块进行加权补偿,可以包括但不限于:针对第三区域子块内的每个子块,根据第一目标运动信息确定所述子块的第一预测值,并根据第二目标运动信息确定所述子块的第二预测值;根据所述第一预测值、所述第一预测值对应的第一权重系数、所述第二预测值、所述第二预测值对应的第二权重系数对所述子块进行加权补偿。其中,若所述子块位于第一三角子块内,则第一权重系数大于第二权重系数;若所述子块位于第二三角子块内,则第一权重系数小于第二权重系数;若所述子块位于对角线,则第一权重系数等于第二权重系数。

其中,针对第三区域子块内的每个子块,可以为1*1的子块,即单个像素块,也可以为n*m的子块,n可以大于等于1,m也可以大于等于1。

例如,参见图6b所示,针对第一区域子块,由于第一区域子块位于第一三角子块内,则利用第一三角子块的第一目标运动信息对第一区域子块进行运动补偿,得到预测值,对此运动补偿过程不做限制。针对第二区域子块,由于第二区域子块位于第二三角子块内,则利用第二三角子块的第二目标运动信息对第二区域子块进行运动补偿,得到预测值,对此运动补偿过程不做限制。

针对第三区域子块,可以包括所有标记为1的子块,所有标记为2的子块,所有标记为4的子块,所有标记为6的子块,所有标记为7的子块。

针对标记为7的每个子块,后续称为子块7,可以根据第一目标运动信息确定子块7的预测值p1,并根据第二目标运动信息确定子块7的预测值p2,假设预测值p1的第一权重系数为a,预测值p2的第二权重系数为b,则对子块7进行加权补偿后,加权补偿后的预测值可以为:预测值p1*a+预测值p2*b。而且,由于子块7位于第一三角子块内,因此,第一权重系数a大于第二权重系数b,假设a为7/8,b为1/8,则加权补偿后的预测值为p1*7/8+预测值p2*1/8。

针对标记为6的每个子块,后续称为子块6,其处理过程参见子块7,在此不再赘述。由于子块6位于第一三角子块内,因此,第一权重系数a大于第二权重系数b,又由于与子块7相比,子块6更靠近第二区域子块,因此,子块6的第一权重系数a可以小于子块7的第一权重系数a,如子块6的第一权重系数a为6/8,b为2/8,则加权补偿后的预测值为p1*6/8+预测值p2*2/8。

针对标记为4的每个子块,后续称为子块4,其处理过程参见子块7,在此不再赘述。由于子块4位于对角线,因此,第一权重系数a等于第二权重系数b,如a为4/8,b为4/8,则加权补偿后的预测值为p1*4/8+预测值p2*4/8。

针对标记为2的每个子块,后续称为子块2,其处理过程参见子块7,在此不再赘述。由于子块2位于第二三角子块内,因此,第一权重系数a小于第二权重系数b,如a为2/8,b为6/8,则加权补偿后的预测值为p1*2/8+预测值p2*6/8。

针对标记为1的每个子块,后续称为子块1,其处理过程参见子块1,在此不再赘述。由于子块1位于第二三角子块内,因此,第一权重系数a小于第二权重系数b。又由于与子块2相比,子块2更靠近第一区域子块,因此,子块1的第一权重系数a可以小于子块2的第一权重系数a,如子块16的第一权重系数a为1/8,b为7/8,则加权补偿后的预测值为p1*1/8+预测值p2*7/8。

在上述实施例中,每个子块的第一权重系数a与第二权重系数b的和为1。越靠近第一区域子块的子块,则第一权重系数a越大,第二权重系数b越小。越靠近第二区域子块的子块,则第一权重系数a越小,第二权重系数b越大。

在一个例子中,针对第三区域子块内的每个子块,可以为亮度分量配置第一组权重系数,例如,从第一区域子块到第二区域子块的方向,每个子块的第一权重系数a依次为{7/8,6/8,4/8,2/8,1/8}。例如,参见图6b所示,子块7的第一权重系数a为7/8,子块6的第一权重系数a为6/8,子块4的第一权重系数a为4/8,子块2的第一权重系数a为2/8,子块1的第一权重系数a为1/8。

在另一个例子中,针对第三区域子块内的每个子块,可以为亮度分量配置第二组权重系数,例如,从第一区域子块到第二区域子块的方向,每个子块的第一权重系数a依次为{7/8,6/8,5/8,4/8,3/8,2/8,1/8}。例如,参见图6b所示,子块7的第一权重系数a为7/8,子块6的第一权重系数a为6/8,子块5(子块5可以位于子块4和子块6之间,图6b中并未示出子块5)的第一权重系数a为5/8,子块4的第一权重系数a为4/8,子块3(子块3可以位于子块2和子块4之间,图6b中并未示出子块3)的第一权重系数a为3/8,子块2的第一权重系数a为2/8,子块1的第一权重系数a为1/8。

其中,上述亮度分量是指预测值p1为亮度预测值,预测值p2为亮度预测值,且加权补偿后的预测值p1*a+预测值p2*b,也为亮度预测值。

在一个例子中,针对第三区域子块内的每个子块,可以为色度分量配置第一组权重系数,例如,从第一区域子块到第二区域子块的方向,每个子块的第一权重系数a依次为{7/8,4/8,1/8}。参见图6c所示,子块7的第一权重系数a为7/8,子块4的第一权重系数a为4/8,子块1的第一权重系数a为1/8。

在另一个例子中,针对第三区域子块内的每个子块,可以为色度分量配置第二组权重系数,例如,从第一区域子块到第二区域子块的方向,每个子块的第一权重系数a依次为{6/8,4/8,2/8}。参见图6c所示,子块7的第一权重系数a为6/8,子块4的第一权重系数a为4/8,子块1的第一权重系数a为2/8。

其中,上述色度分量是指预测值p1为色度预测值,预测值p2为色度预测值,且加权补偿后的预测值p1*a+预测值p2*b,也为色度预测值。

以下结合几个具体应用场景,对上述运动补偿过程进行说明。

应用场景1:对于运动补偿,可以将当前块划分为第一区域子块、第二区域子块和第三区域子块,基于第一三角子块的第一目标运动信息对第一区域子块运动补偿,基于第二三角子块的第二目标运动信息对第二区域子块运动补偿。基于第一目标运动信息和第二目标运动信息对第三区域子块进行加权补偿。

具体的,可以将当前块均分成多个m*m(m优选为4)的子块。针对每个m*m的子块,若该子块不在对角线上,在该小块采用单向运动信息进行运动补偿,如该子块位于第一三角子块内,则该子块称为第一区域子块,利用第一目标运动信息进行运动补偿,如该子块位于第二三角子块内,则该子块称为第二区域子块,利用第二目标运动信息进行运动补偿。若该子块处于对角线上,则该子块称为第三区域子块,可以基于两个单向运动信息(即第一目标运动信息和第二目标运动信息)进行加权补偿,具体加权方式参见上述实施例。

应用场景2:对于运动补偿,可以将当前块划分为第一区域子块、第二区域子块和第三区域子块。基于第一三角子块的第一目标运动信息对第一区域子块运动补偿,基于第二三角子块的第二目标运动信息对第二区域子块运动补偿。基于第一目标运动信息和第二目标运动信息对第三区域子块进行加权补偿,加权系数仅有一套,为:用于亮度分量的权重系数:{7/8,6/8,4/8,2/8,1/8},用于色度分量的权重系数:{7/8,4/8,1/8},具体加权方式参见上述实施例。

应用场景3:对于运动补偿,将当前块划分为第一区域子块、第二区域子块和第三区域子块。基于第一三角子块的第一目标运动信息对第一区域子块运动补偿,基于第二三角子块的第二目标运动信息对第二区域子块运动补偿。基于第一目标运动信息和第二目标运动信息对第三区域子块进行加权补偿,加权系数仅有一套,为:用于亮度分量的权重系数:{7/8,6/8,5/8,4/8,3/8,2/8,1/8},用于色度分量的权重系数:{6/8,4/8,2/8},具体方式参见上述实施例。

方式3、将当前块划分为第一区域子块、第二区域子块和第三区域子块;其中,第一区域子块位于第一三角子块内,第二区域子块位于第二三角子块内,第三区域子块内的每个子块的中心与对角线之差小于预设阈值。进一步的,根据第一目标运动信息对第一区域子块进行运动补偿;根据第二目标运动信息对第二区域子块进行运动补偿;根据第一目标运动信息对第三区域子块进行运动补偿,或者,根据第二目标运动信息对第三区域子块进行运动补偿。

其中,根据第一目标运动信息对第三区域子块进行运动补偿,或者,根据第二目标运动信息对第三区域子块进行运动补偿,可以包括:若当前块的尺寸信息满足第一条件(如当前块的宽度大于或等于当前块的高度),则采用第一目标运动信息对第三区域子块进行运动补偿;或者,若当前块的尺寸信息满足第二条件(如当前块的宽度小于当前块的高度),则采用第二目标运动信息对第三区域子块进行运动补偿。当然,上述只是示例,还可以采用其它方式确定采用第一目标运动信息还是第二目标运动信息进行运动补偿,对此不做限制。

其中,针对第三区域子块内的每个子块,可以为1*1的子块,即单个像素块,也可以为n*m的子块,n可以大于等于1,m也可以大于等于1。

例如,对于运动补偿,可以将当前块划分为第一区域子块、第二区域子块和第三区域子块,具体划分方式参见上述实施例,在此不再赘述。基于第一三角子块的第一目标运动信息对第一区域子块运动补偿,基于第二三角子块的第二目标运动信息对第二区域子块运动补偿。对于第三区域子块,不再利用第一目标运动信息和第二目标运动信息进行加权补偿,而是采用第一目标运动信息对第三区域子块运动补偿,或者,采用第二目标运动信息对第三区域子块运动补偿,即,该实施例中,不存在双向预测补偿的子块,即不需要加权补偿。

至于是采用第一目标运动信息对第三区域子块进行运动补偿,还是采用第二目标运动信息对第三区域子块进行运动补偿,可以采用如下方式:(1)默认采用第一目标运动信息对第三区域子块进行运动补偿;(2)默认采用第二目标运动信息对第三区域子块进行运动补偿;(3)基于当前块的尺寸决定,具体的,若当前块的宽度大于或等于当前块的高度,则采用第一目标运动信息对第三区域子块进行运动补偿;若当前块的宽度小于当前块的高度,则采用第二目标运动信息对第三区域子块进行运动补偿。当然,上述只是示例,对此不做限制。

实施例9:编码端首先判断当前块的特征信息是否满足特定条件。如果否,则决策不采用三角子块模式,而是采用传统方式,在此不再赘述。如果是,则编码端进一步判断是否启动三角子块模式,若启动三角子块模式,则执行上述各实施例,在此不再重复赘述,若不启动三角子块模式,则采用传统方式。

其中,编码端进一步判断是否启动三角子块模式,可以包括:编码端可以默认启动三角子块模式。或者,编码端确定三角子块模式对应的率失真代价,对此确定方式不做限制,若三角子块模式对应的率失真代价小于其它模式(为传统方式的各模式,可以为一个或者多个,对此不做限制)对应的率失真代价,则可以启动三角子块模式;若三角子块模式对应的率失真代价大于其它模式对应的率失真代价,则可以不启动三角子块模式,采用传统方式处理即可。

进一步的,编码端在向解码端发送编码比特流时,该编码比特流还可以携带第七指示信息,所述第七指示信息用于指示启动三角子块模式。

解码端首先判断当前块的特征信息是否满足特定条件。如果否,则决策不采用三角子块模式,而是采用传统方式,在此不再赘述。如果是,则解码端可以进一步判断是否启动三角子块模式,若启动三角子块模式,则执行上述各实施例,在此不再重复赘述,若不启动三角子块模式,则采用传统方式。

其中,解码端进一步判断是否启动三角子块模式,可以包括:解码端可以默认启动三角子块模式。或者,解码端接收来自编码端的编码比特流,若编码比特流携带第七指示信息,则基于第七指示信息可以确定启动三角子块模式。若编码比特流未携带第七指示信息,则可以不启动三角子块模式。

实施例10:编码端/解码端还需要存储第一目标运动信息和第二目标运动信息,为了存储该第一目标运动信息和该第二目标运动信息,则可以采用如下方式:若第一目标运动信息对应的候选块为单向预测块,则为第一三角子块存储该第一目标运动信息;若第一目标运动信息对应的候选块为双向预测块,则为第一三角子块存储该第一目标运动信息和第三目标运动信息,该第三目标运动信息为双向预测块的另一个运动信息。若第二目标运动信息对应的候选块为单向预测块,则为第二三角子块存储该第二目标运动信息;若第二目标运动信息对应的候选块为双向预测块,则为第二三角子块存储该第二目标运动信息和第四目标运动信息,该第四目标运动信息为双向预测块的另一个运动信息。

例如,针对上述第一区域子块,若第一区域子块的第一目标运动信息为mv1,且mv1来自于单向预测块r1,即单向预测块r1是当前块的候选块,且上述运动信息列表中包括单向预测块r1的运动信息mv1,且将mv1选择为第一区域子块的第一目标运动信息,则为第一区域子块存储mv1,参见图7a所示。针对上述第二区域子块,若第二区域子块的第二目标运动信息为mv2,且mv2来自于单向预测块r2,即单向预测块r2是当前块的候选块,且上述运动信息列表中包括单向预测块r2的运动信息mv2,且将mv2选择为第二区域子块的第二目标运动信息,则为第二区域子块存储mv2,参见图7a所示。

又例如,针对上述第一区域子块,若第一区域子块的第一目标运动信息为mv1,且mv1来自于双向预测块r3,即双向预测块r3是当前块的候选块,且上述运动信息列表中包括双向预测块r3的运动信息mv1和mv2,且将mv1选择为第一区域子块的第一目标运动信息,则可以为第一区域子块存储mv1和mv2,而不是仅为第一区域子块存储mv1,参见图7b所示。

又例如,针对上述第二区域子块,若第二区域子块的第二目标运动信息为mv3,且mv3来自于双向预测块r4,即双向预测块r4是当前块的候选块,且上述运动信息列表中包括双向预测块r3的运动信息mv3和mv4,且将mv3选择为第二区域子块的第二目标运动信息,则可以为第二区域子块存储mv3和mv4,而不是仅为第二区域子块存储mv3,参见图7b所示。

在上述例子中,参见图7a和图7b所示,可以以4*4为单元存储运动信息。

实施例11:

本申请实施例提供的解码端设备,从硬件层面而言,其硬件架构示意图具体可以参见图8所示。包括:处理器81和机器可读存储介质82,其中:所述机器可读存储介质82存储有能够被所述处理器81执行的机器可执行指令;所述处理器81用于执行机器可执行指令,以实现本申请上述示例公开的方法。

本申请实施例提供的编码端设备,从硬件层面而言,其硬件架构示意图具体可以参见图9所示。包括:处理器91和机器可读存储介质92,其中:所述机器可读存储介质92存储有能够被所述处理器91执行的机器可执行指令;所述处理器91用于执行机器可执行指令,以实现本申请上述示例公开的方法。

基于与上述方法同样的申请构思,本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本申请上述示例公开的方法。

其中,上述机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radomaccessmemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1