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

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

Info

Publication number
CN112135126A
CN112135126A CN202010988743.XA CN202010988743A CN112135126A CN 112135126 A CN112135126 A CN 112135126A CN 202010988743 A CN202010988743 A CN 202010988743A CN 112135126 A CN112135126 A CN 112135126A
Authority
CN
China
Prior art keywords
motion vector
block
sub
current block
current
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.)
Granted
Application number
CN202010988743.XA
Other languages
English (en)
Other versions
CN112135126B (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 CN202010988743.XA priority Critical patent/CN112135126B/zh
Publication of CN112135126A publication Critical patent/CN112135126A/zh
Application granted granted Critical
Publication of CN112135126B publication Critical patent/CN112135126B/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
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • 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/109Selection of coding mode or of prediction mode among a plurality of temporal predictive coding modes
    • 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/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/12Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
    • H04N19/122Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
    • 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/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • H04N19/159Prediction type, e.g. intra-frame, inter-frame or bidirectional frame 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/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/17Methods 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 an image region, e.g. an object
    • H04N19/176Methods 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 an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • 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/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding

Abstract

本申请提供一种编解码方法、装置及其设备,包括:若如下条件满足,确定对当前块启动运动矢量调整模式:控制信息为允许当前块使用运动矢量调整模式;当前块的预测模式为普通融合模式,或当前块的预测模式为融合模式或跳过模式,当前块的预测模式不是除普通融合模式之外的其它模式;当前块的预测值通过来自两个参考帧的参考块的加权获得,且两个参考帧的显示顺序分别位于当前帧的一前一后,且两个参考帧与当前帧的距离相同;两个参考帧的加权权重相同;两个参考帧均是短期参考帧;当前块的宽度,高度和面积均在限定范围内;两个参考帧的尺寸与当前帧的尺寸均相同;若对当前块启动运动矢量调整模式,对当前块进行运动补偿。本申请能够提高编码性能。

Description

一种编解码方法、装置及其设备
技术领域
本申请涉及编解码技术领域,尤其是涉及一种编解码方法、装置及其设备。
背景技术
为了达到节约空间的目的,视频图像都是经过编码后才传输的,完整的视频编码方法可以包括预测、变换、量化、熵编码、滤波等过程。其中,预测编码包括帧内编码和帧间编码,帧间编码是利用视频时间域的相关性,使用邻近已编码图像的像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。在帧间编码中,可以使用运动矢量(MotionVector,MV)表示当前帧的当前块与参考帧的参考块之间的相对位移。例如,当前帧A与参考帧B存在很强的时域相关性,在需要传输当前帧A的当前块A1时,则可以在参考帧B中进行运动搜索,找到与当前块A1最匹配的块B1(即参考块),并确定当前块A1与参考块B1之间的相对位移,该相对位移也就是当前块A1的运动矢量。编码端可以将运动矢量发送给解码端,不是将当前块A1发送给解码端,解码端可以根据运动矢量和参考块B1得到当前块A1。显然,由于运动矢量占用的比特数小于当前块A1占用的比特数,因此可以节约大量比特。
在相关技术中,在当前块是单向块时,获得当前块的运动矢量(后续称为原始运动矢量)后,可以对原始运动矢量进行调整,并基于调整后的运动矢量进行编码/解码,从而提高编码性能。但是,在当前块是双向块时,获得当前块的第一原始运动矢量和第二原始运动矢量后,如何对第一原始运动矢量和第二原始运动矢量进行调整,目前并没有合理的解决方案,也就是说,针对双向块的场景,存在预测质量不高,预测错误等问题,从而导致编码性能较差。
发明内容
本申请提供了一种编解码方法、装置及其设备,可以提高编码性能。
本申请提供一种编解码方法,所述方法包括:
若如下条件均满足,则确定对当前块启动运动矢量调整模式:
控制信息为允许当前块使用运动矢量调整模式;
当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式;
当前块的预测值通过来自两个参考帧的参考块的加权获得,且所述两个参考帧的显示顺序分别位于当前帧的一前一后,且所述两个参考帧与当前帧的距离相同;
当前块的两个参考帧的加权权重相同;
当前块的两个参考帧均是短期参考帧;
当前块的宽度,高度和面积均在限定范围内;
当前块的两个参考帧的尺寸与当前帧的尺寸均相同;
若确定对当前块启动运动矢量调整模式,则对所述当前块进行运动补偿。
本申请提供一种编解码装置,所述装置包括:
确定模块,用于若如下条件均满足,则确定对当前块启动运动矢量调整模式:
控制信息为允许当前块使用运动矢量调整模式;
当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式;
当前块的预测值通过来自两个参考帧的参考块的加权获得,且所述两个参考帧的显示顺序分别位于当前帧的一前一后,且所述两个参考帧与当前帧的距离相同;
当前块的两个参考帧的加权权重相同;
当前块的两个参考帧均是短期参考帧;
当前块的宽度,高度和面积均在限定范围内;
当前块的两个参考帧的尺寸与当前帧的尺寸均相同;
运动补偿模块,用于若确定对当前块启动运动矢量调整模式,对当前块进行运动补偿。
本申请提供一种编码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下步骤:
若如下条件均满足,则确定对当前块启动运动矢量调整模式:
控制信息为允许当前块使用运动矢量调整模式;
当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式;
当前块的预测值通过来自两个参考帧的参考块的加权获得,且所述两个参考帧的显示顺序分别位于当前帧的一前一后,且所述两个参考帧与当前帧的距离相同;
当前块的两个参考帧的加权权重相同;
当前块的两个参考帧均是短期参考帧;
当前块的宽度,高度和面积均在限定范围内;
当前块的两个参考帧的尺寸与当前帧的尺寸均相同;
若确定对当前块启动运动矢量调整模式,则对所述当前块进行运动补偿。
本申请提供一种解码端设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下步骤:
若如下条件均满足,则确定对当前块启动运动矢量调整模式:
控制信息为允许当前块使用运动矢量调整模式;
当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式;
当前块的预测值通过来自两个参考帧的参考块的加权获得,且所述两个参考帧的显示顺序分别位于当前帧的一前一后,且所述两个参考帧与当前帧的距离相同;
当前块的两个参考帧的加权权重相同;
当前块的两个参考帧均是短期参考帧;
当前块的宽度,高度和面积均在限定范围内;
当前块的两个参考帧的尺寸与当前帧的尺寸均相同;
若确定对当前块启动运动矢量调整模式,则对所述当前块进行运动补偿。
由以上技术方案可见,本申请实施例中,若确定对当前块启动运动矢量调整模式,则根据第一原始运动矢量和第二原始运动矢量获得第一目标运动矢量和第二目标运动矢量,根据第一目标运动矢量和第二目标运动矢量确定预测值,而不是根据第一原始运动矢量和第二原始运动矢量确定预测值,解决预测质量不高,预测错误等问题,提高编码性能和编码效率。
附图说明
图1A是本申请一种实施方式中的插值的示意图;
图1B是本申请一种实施方式中的视频编码框架的示意图;
图2是本申请一种实施方式中的编解码方法的流程图;
图3是本申请一种实施方式中的编解码方法的流程图;
图4是本申请一种实施方式中的编解码方法的流程图;
图5是本申请一种实施方式中获得的参考块的示意图;
图6是本申请一种实施方式中的运动矢量迭代的示意图;
图7A-图7G是本申请一种实施方式中的候选点的顺序示意图;
图8是本申请一种实施方式中的对参考块进行扩展的示意图;
图9A是本申请一种实施方式中的编解码装置的结构图;
图9B是本申请一种实施方式中的解码端设备的硬件结构图;
图9C是本申请一种实施方式中的编码端设备的硬件结构图。
具体实施方式
在本申请实施例中使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请实施例。本申请实施例和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本申请实施例中提出一种编解码方法、装置及其设备,可以涉及如下概念:
帧内预测与帧间预测(intra prediction and inter prediction)技术:帧内预测是指,利用视频空间域的相关性,使用当前图像已经编码块的像素预测当前像素,以达到去除视频空域冗余的目的。帧间预测是指,利用视频时域的相关性,由于视频序列通常包含有较强的时域相关性,使用邻近已编码图像像素预测当前图像的像素,可以达到有效去除视频时域冗余的目的。主要的视频编码标准帧间预测部分都采用了基于块的运动补偿技术,主要原理是为当前图像的每一个像素块在之前的已编码图像中寻找一个最佳匹配块,该过程称为运动估计。
运动矢量(Motion Vector,MV):在帧间编码中,使用运动矢量表示当前块与其参考图像中的最佳匹配块之间的相对位移。每个划分的块都有相应的运动矢量传输到解码端,若对每个块的运动矢量进行独立编码和传输,特别是划分成小尺寸的块时,需要消耗相当多的比特。为了降低用于编码运动矢量的比特数,则利用相邻图像块之间的空间相关性,根据相邻已编码块的运动矢量对当前块的运动矢量进行预测,然后对预测差进行编码,从而有效地降低表示运动矢量的比特数。在对当前块的运动矢量编码时,使用相邻已编码块的运动矢量预测当前块的运动矢量,对运动矢量的预测值(MVP,Motion VectorPrediction)与运动矢量的真正估值之间的差值(MVD,MotionVector Difference)进行编码,有效降低编码比特数。
运动信息(Motion Information):由于运动矢量表示当前块与某个参考块的位置偏移,为了准确获取指向图像块的信息,除了运动矢量,还需要参考帧图像的索引信息来表示使用哪个参考帧图像。对于当前帧图像,可以建立一个参考帧图像列表,参考帧图像索引信息则表示当前块采用了参考帧图像列表中的第几个参考帧图像。很多编码技术还支持多个参考图像列表,因此,可以使用一个索引值来表示使用哪一个参考图像列表,这个索引值称为参考方向。可以将运动矢量、参考帧索引、参考方向等与运动相关的信息统称为运动信息。
插值(Interpolation):若当前运动矢量为非整像素精度,则无法直接从当前块对应的参考帧中拷贝已有像素值,当前块的所需像素值只能通过插值获得。参见图1A所示,若需要获得偏移为1/2像素的像素值Y1/2,则可以通过对周围的已有像素值X进行插值获得。示例性的,若采用抽头数为N的插值滤波器,则需要通过周围N个整像素插值获得。
运动补偿:运动补偿就是通过插值或拷贝获得当前块所有像素值的过程。
融合模式(Merge mode):包括普通融合模式(即Normal Merge模式,也可以称为regular Merge模式),子块融合模式(采用子块运动信息的融合模式,可以称为Subblock融合模式),MMVD模式(编码运动差的融合模式,可以称为merge with MVD模式),CIIP模式(帧间帧内预测联合生成新的预测值的融合模式,可以称为combine inter intra predicitonmode),TPM模式(用于三角预测的融合模式),GEO模式(基于任意几何划分形状的融合模式)。
跳过模式(skip mode):跳过模式是一种特殊的融合模式,跳过模式与融合模式不同的是,跳过模式不需要编码残差。若当前块为跳过模式时,则CIIP模式默认为关闭,而普通融合模式,子块融合模式,MMVD模式,TPM模式,GEO模式仍然可以适用。
示例性的,可以基于普通融合模式,子块融合模式,MMVD模式,CIIP模式,TPM模式,GEO模式等,确定如何生成预测值。在生成预测值后,对于融合模式,可以利用预测值和残差值来获取重建值;对于跳过模式,不存在残差值,直接利用预测值来获取重建值。
序列参数集(SPS,sequence parameter set):在序列参数集中,存在确定整个序列中是否允许某些工具开关的标志位。若标志位为1,则视频序列中,允许启用该标志位对应的工具;若标志位为0,则视频序列中,不允许该标志位对应的工具在编码过程中启用。
普通融合模式:从候选运动信息列表中选择一个运动信息,基于该运动信息生成当前块的预测值,该候选运动信息列表包括:空域相邻块候选运动信息,时域相邻块候选运动信息,空域非相邻块候选运动信息,基于已有运动信息进行组合获取的运动信息,默认运动信息等。
MMVD模式:基于普通融合模式的候选运动信息列表,从普通融合模式的候选运动信息列表中选择一个运动信息作为基准运动信息,通过查表方法获取运动信息差。基于基准运动信息和运动信息差获取最终的运动信息,基于该最终的运动信息生成当前块的预测值。
CIIP模式:通过结合帧内预测值和帧间预测值获取当前块新的预测值。
子块融合模式:子块融合模式包括Affine融合模式和子块TMVP模式。
Affine(仿射)融合模式,类似于普通融合模式,也是从候选运动信息列表中选择一个运动信息,基于该运动信息生成当前块的预测值。与普通融合模式不同的是,普通融合模式的候选运动信息列表中的运动信息是2参数的平移运动矢量,而Affine融合模式的候选运动信息列表中的运动信息是4参数的Affine运动信息,或者,6参数的Affine运动信息。
子块TMVP(subblock-based temporal motion vector prediction)模式,在时域参考帧中,直接复用某块运动信息用于生成当前块的预测值,该块内的各子块的运动信息可不相同。
TPM模式:将一个块分成两个三角子块(存在45度和135度两种三角子块),这两个三角子块拥有不同的单向运动信息,TPM模式仅用于预测过程,不影响后续的变换、量化过程,这里的单向运动信息也是直接从候选运动信息列表中获取的。
GEO模式:GEO模式与TPM模式类似,只是划分形状不同。GEO模式将一个方形块分成任意形状的两个子块(除了TPM的两个三角子块的形状外的任意其它形状),如一个三角子块,一个五边形子块;或者,一个三角子块,一个四边形子块;或者,两个梯形子块等,对此划分形状不做限制。TPM模式划分的这两个子块拥有不同的单向运动信息。
从上述例子可以看出,本实施例涉及的融合模式和跳过模式,是指一类直接从候选运动信息列表中选择一个运动信息,生成当前块的预测值的一类预测模式,这些预测模式在编码端不需要进行运动搜索过程,除了MMVD模式外,其它模式都不需要编码运动信息差。
视频编码框架:参见图1B所示,可以使用视频编码框架实现本申请实施例的编码端处理流程,此外,视频解码框架的示意图与图1B类似,在此不再赘述,而且,可以使用视频解码框架实现本申请实施例的解码端处理流程。具体的,在视频编码框架和视频解码框架中,包括帧内预测、运动估计/运动补偿、参考图像缓冲器、环内滤波、重建、变换、量化、反变换、反量化、熵编码器等模块。在编码端,通过这些模块之间的配合,可以实现编码端处理流程,在解码端,通过这些模块之间的配合,可以实现解码端处理流程。
在相关技术中,在当前块是双向块时,获得当前块的第一原始运动矢量和第二原始运动矢量后,如何对第一原始运动矢量和第二原始运动矢量进行调整,并没有合理的解决方案。
本申请实施例中,在当前块是双向块时,考虑到来自两个不同方向的运动矢量往往存在镜像对称的关系,可以基于该特性来进一步去除冗余,比如说,可以提供一种运动矢量调整模式,在运动矢量调整模式中,基于原始运动矢量获得的预测值,通过解码端局部搜索的方法,微调了运动矢量,以获得更好的运动矢量来生成失真更小的预测值。
示例性的,若确定对当前块启动运动矢量调整模式,则针对当前块的每个子块,可以根据该子块的第一原始运动矢量确定该子块对应的第一参考块,根据该子块的第二原始运动矢量确定该子块对应的第二参考块,并根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到第一目标运动矢量和第二目标运动矢量,继而可以根据第一目标运动矢量和第二目标运动矢量确定该子块的预测值,上述方式能够解决预测质量不高,预测错误等问题,并提高编码性能和编码效率。
以下结合几个具体实施例,对本申请的编解码方法进行详细说明。
实施例1:参见图2所示,为本申请实施例中提出的编解码方法的流程示意图,该编解码方法可以应用于解码端或者编码端,该编解码方法可以包括以下步骤:
步骤201,若如下条件均满足,则确定对当前块启动运动矢量调整模式:
控制信息为允许当前块使用运动矢量调整模式;
当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式;
当前块的预测值通过来自两个参考帧的参考块的加权获得,且两个参考帧的显示顺序分别位于当前帧的一前一后,且两个参考帧与当前帧的距离相同;
当前块的两个参考帧的加权权重相同;
当前块的两个参考帧均是短期参考帧;
当前块的宽度,高度和面积均在限定范围内;
当前块的两个参考帧的尺寸与当前帧的尺寸均相同。
在一种可能的实施方式中,若如下条件中的任意一个条件不满足,则确定不对当前块启动运动矢量调整模式:控制信息为允许当前块使用运动矢量调整模式;
当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式;
当前块的预测值通过来自两个参考帧的参考块的加权获得,且两个参考帧的显示顺序分别位于当前帧的一前一后,且两个参考帧与当前帧的距离相同;
当前块的两个参考帧的加权权重相同;
当前块的两个参考帧均是短期参考帧;
当前块的宽度,高度和面积均在限定范围内;
当前块的两个参考帧的尺寸与当前帧的尺寸均相同。
在上述实施例中,给出了7个条件,基于所述7个条件确定是否对当前块启动运动矢量调整模式。在实际应用中,还可以从所述7个条件中选取部分条件,基于选取的部分条件确定是否对当前块启动运动矢量调整模式。例如,从所述7个条件中选取5个条件,对此选取方式不做限制,可以是任意5个条件,若选取的5个条件均满足,则确定对当前块启动运动矢量调整模式;若选取的5个条件中的任意一个条件不满足,则确定不对当前块启动运动矢量调整模式。当然,还可以从所述7个条件中选取其它数量的条件,对此不做限制。
在上述实施例中,融合模式或跳过模式包括普通融合模式,子块融合模式,MMVD模式,CIIP模式,TPM模式,GEO模式。当前块的预测模式不是除普通融合模式之外的其它模式是指:预测模式不是子块融合模式,MMVD模式,CIIP模式,TPM模式,GEO模式等。
例如,当前块的预测模式为融合模式或跳过模式时,当前块的预测模式不是MMVD模式,当前块的预测模式也不是CIIP模式。
在上述实施例中,当前块的预测值通过来自两个参考帧的参考块的加权获得是指:当前块采用双向预测模式,即当前块的预测值通过来自两个参考帧的参考块的加权获得。
在上述实施例中,当前块可以对应两个列表的运动信息,记为第一运动信息和第二运动信息,第一运动信息包括第一参考帧和第一原始运动矢量,第二运动信息包括第二参考帧和第二原始运动矢量。上述两个参考帧可以是第一参考帧和第二参考帧。两个参考帧的显示顺序分别位于当前帧的一前一后是指:第一参考帧位于当前块所处当前帧的前面,第二参考帧位于当前帧的后面。示例性的,第一参考帧也可以称为前向参考帧,前向参考帧位于第一列表(如list0),第二参考帧也可以称为后向参考帧,后向参考帧位于第二列表(如list1)。
在上述实施例中,当前块的宽度,高度和面积均在限定范围内包括:宽度大于或者等于第一阈值,高度大于或者等于第二阈值,面积大于或者等于第三阈值。或者,宽度大于或者等于第一阈值,高度大于或者等于第二阈值,面积大于第四阈值。示例性的,该第三阈值可以大于该第四阈值。例如,第一阈值可以为8,第二阈值可以为8,第三阈值可以为128,第四阈值可以为64。当然,上述数值只是几个示例,对此不做限制。
在上述实施例中,控制信息为允许当前块使用运动矢量调整模式可以包括但不限于:序列级控制信息(如多帧图像的控制信息)为允许当前块使用运动矢量调整模式;和/或,帧级控制信息(如一帧图像的控制信息)为允许当前块使用运动矢量调整模式。
步骤202,若确定对当前块启动运动矢量调整模式,则对当前块进行运动补偿。
在一种可能的实施方式中,若确定对当前块启动运动矢量调整模式,则针对当前块包括的至少一个子块中的每个子块:根据该子块的第一原始运动矢量确定该子块对应的第一参考块,根据该子块的第二原始运动矢量确定该子块对应的第二参考块;根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量和第二原始运动矢量进行调整,得到第一原始运动矢量对应的第一目标运动矢量和第二原始运动矢量对应的第二目标运动矢量;根据第一目标运动矢量和第二目标运动矢量确定该子块的预测值。在得到每个子块的预测值之后,则可以根据每个子块的预测值确定当前块的预测值。
示例性的,根据该子块的第一原始运动矢量确定该子块对应的第一参考块,根据该子块的第二原始运动矢量确定该子块对应的第二参考块,可以包括但不限于:
基于该子块的第一原始运动矢量,从第一参考帧中确定该子块对应的第一参考块;该第一参考块中每个像素点的像素值,是通过对该第一参考块中的相邻像素点的像素值进行插值得到,或者,通过对该第一参考块中的相邻像素点的像素值进行拷贝得到。
基于该子块的第二原始运动矢量,从第二参考帧中确定该子块对应的第二参考块;该第二参考块中每个像素点的像素值,是通过对该第二参考块中的相邻像素点的像素值进行插值得到,或者,通过对该第二参考块中的相邻像素点的像素值进行拷贝得到。
示例性的,第一参考块的尺寸与第二参考块的尺寸相同,第一参考块的宽度基于该子块的宽度与搜索范围确定,第一参考块的高度值基于该子块的高度与搜索范围确定。
示例性的,针对当前块包括的每个子块:根据该子块对应的第一参考块的第一像素值和该子块对应的第二参考块的第二像素值,对该子块的第一原始运动矢量和该子块的第二原始运动矢量进行调整,得到第一原始运动矢量对应的第一目标运动矢量和第二原始运动矢量对应的第二目标运动矢量,即该子块的第一目标运动矢量和第二目标运动矢量。
在一种可能的实施方式中,可以以初始运动矢量为中心,从该初始运动矢量周围的包括该初始运动矢量的运动矢量中选择部分或者全部运动矢量,并将选择的运动矢量确定为候选运动矢量;该初始运动矢量为第一原始运动矢量或者第二原始运动矢量。然后,可以根据第一参考块的第一像素值和第二参考块的第二像素值,从该初始运动矢量和各个候选运动矢量中选择一个运动矢量作为最优运动矢量。然后,可以根据最优运动矢量对第一原始运动矢量进行调整,得到第一原始运动矢量对应的第一目标运动矢量,并根据最优运动矢量对第二原始运动矢量进行调整,得到第二原始运动矢量对应的第二目标运动矢量。
示例性的,根据所述最优运动矢量对第一原始运动矢量进行调整,得到第一原始运动矢量对应的第一目标运动矢量,并根据最优运动矢量对第二原始运动矢量进行调整,得到第二原始运动矢量对应的第二目标运动矢量,可以包括:根据最优运动矢量确定子块的第一整像素运动矢量调整值,第二整像素运动矢量调整值,第一分像素运动矢量调整值和第二分像素运动矢量调整值;根据第一整像素运动矢量调整值和第一分像素运动矢量调整值,对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第二整像素运动矢量调整值和第二分像素运动矢量调整值,对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。
示例性的,针对当前块包括的至少一个子块中的每个子块:可以根据该子块的第一目标运动矢量和该子块的第二目标运动矢量确定该子块的预测值,对此过程不再赘述。
在一种可能的实施方式中,若最优运动矢量与初始运动矢量相同,则可以基于该子块的第一目标运动矢量,从第一参考帧中确定该子块对应的第三参考块;基于该子块的第二目标运动矢量,从第二参考帧中确定该子块对应的第四参考块。然后,可以对该第三参考块的像素值和该第四参考块的像素值进行加权,得到该子块的预测值。
在另一种可能的实施方式中,若最优运动矢量与初始运动矢量不同,则可以从第一参考帧中确定第五参考块,并对该第五参考块进行扩展,得到第六参考块;然后,基于该子块的第一目标运动矢量,从该第六参考块中选择该子块对应的第三参考块。以及,可以从第二参考帧中确定第七参考块,并对该第七参考块进行扩展,得到第八参考块;基于该子块的第二目标运动矢量,从该第八参考块中选择该子块对应的第四参考块。然后,可以对该第三参考块的像素值和该第四参考块的像素值进行加权,得到该子块的预测值。
在上述实施例中,对第三参考块的像素值和第四参考块的像素值进行加权,得到该子块的预测值,可以包括但不限于:对第三参考块的像素值,第三参考块的像素值对应的第一权重,第四参考块的像素值,第四参考块的像素值对应的第二权重进行加权处理,得到该子块的预测值;示例性的,第一权重与第二权重可以相同。
示例性的,在得到每个子块的预测值后,可以将每个子块的预测值组合在一起,得到当前块的预测值,对此当前块的预测值的确定过程不做限制。
由以上技术方案可见,本申请实施例中,若确定对当前块启动运动矢量调整模式,则根据第一原始运动矢量和第二原始运动矢量获得第一目标运动矢量和第二目标运动矢量,根据第一目标运动矢量和第二目标运动矢量确定预测值,而不是根据第一原始运动矢量和第二原始运动矢量确定预测值,解决预测质量不高,预测错误等问题,提高编码性能和编码效率。
实施例2:基于与上述方法同样的构思,参见图3所示,为本申请实施例中提出的另一种编解码方法的流程示意图,该方法可以应用于编码端,该方法可以包括以下步骤:
步骤301,编码端确定是否对当前块启动运动矢量调整模式。如果是,则执行步骤302,如果否,则不需要采用本申请提出的运动矢量调整方式,对此情况的处理不做限制。
在一个例子中,若编码端确定对当前块启动运动矢量调整模式,则说明当前块的运动信息不够准确,因此,对当前块启动运动矢量调整模式(即本申请技术方案),执行步骤302。
若编码端确定不对当前块启动运动矢量调整模式,则说明当前块的运动信息已经足够准确,因此,可以不对当前块启动运动矢量调整模式,不采用本申请提出的运动矢量调整方式。
步骤302,针对当前块包括的至少一个子块中的每个子块:编码端根据该子块的第一原始运动矢量,从第一参考帧中确定该子块对应的第一参考块;根据该子块的第二原始运动矢量,从第二参考帧中确定该子块对应的第二参考块。为了区分方便,将第一参考块中每个像素点的像素值称为第一像素值,将第二参考块中每个像素点的像素值称为第二像素值。
在一个例子中,若当前块是采用双向预测的块,则针对当前块的每个子块,可以存在双向运动信息,这个双向运动信息可以包括两个参考帧和两个原始运动矢量,该双向运动信息可以包括第一参考帧和第一原始运动矢量、第二参考帧和第二原始运动矢量。
基于第一原始运动矢量,编码端从第一参考帧中确定子块对应的第一参考块,将第一参考块中每个像素点的像素值称为第一像素值。基于第二原始运动矢量,编码端从第二参考帧中确定子块对应的第二参考块,将第二参考块中每个像素点的像素值称为第二像素值。
在一个例子中,当前块所在当前帧与第一参考帧的距离和第二参考帧与当前块所在当前帧的距离可以相同。例如,第一参考帧为第1帧,当前帧为第5帧,第二参考帧为第9帧。
在一个例子中,第一原始运动矢量和第二原始运动矢量可以存在镜像对称关系,例如,第一原始运动矢量为(4,4),第二原始运动矢量为(-4,-4);第一原始运动矢量为(2.5,3.5),第二原始运动矢量为(-2.5,-3.5)。当然,上述只是一个示例,对此不做限制。
针对确定第一参考块和第二参考块的方式,可以参见后续实施例,在此不再赘述。
步骤303,编码端根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第一参考块的第一像素值和第二参考块的第二像素值,对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。
在一个例子中,若针对当前块启动运动矢量调整模式,则编码端可以基于第一参考块的第一像素值和第二参考块的第二像素值,通过局部搜索的方法,对第一原始运动矢量和第二原始运动矢量进行微调,以获得更好的第一目标运动矢量和第二目标运动矢量,继而利用第一目标运动矢量和第二目标运动矢量来生成失真更小的预测值。
在一个例子中,当前块可以包括至少一个子块,若当前块只包括一个子块,则该子块就是当前块本身。针对当前块的每个子块,该子块可以对应第一原始运动矢量和第二原始运动矢量,在进行调整后,该子块可以对应第一目标运动矢量和第二目标运动矢量。
示例性的,若当前块包括子块A和子块B,针对子块A,子块A对应第一原始运动矢量A1和第二原始运动矢量A2,在进行调整后,子块A对应第一目标运动矢量A3和第二目标运动矢量A4。针对子块B,子块B对应第一原始运动矢量B1和第二原始运动矢量B2,在进行调整后,子块B对应第一目标运动矢量B3和第二目标运动矢量B4。
示例性的,子块A对应的第一原始运动矢量A1与子块B对应的第一原始运动矢量B1可以相同,均是当前块的第一原始运动矢量;子块A对应的第二原始运动矢量A2与子块B对应的第二原始运动矢量B2可以相同,均是当前块的第二原始运动矢量。
由于针对每个子块的第一原始运动矢量分别进行调整,因此,子块A对应的第一目标运动矢量A3与子块B对应的第一目标运动矢量B3可以相同,也可以不同。
由于针对每个子块的第二原始运动矢量分别进行调整,因此,子块A对应的第二目标运动矢量A4与子块B对应的第二目标运动矢量B4可以相同,也可以不同。
针对原始运动矢量的调整方式,可以参见后续实施例,在此不再赘述。
步骤304,编码端根据第一目标运动矢量和第二目标运动矢量确定子块的预测值。
步骤305,编码端根据每个子块的预测值确定当前块的预测值。
例如,若当前块包括子块A和子块B,则可以利用子块A的第一目标运动矢量和第二目标运动矢量确定子块A的预测值,并利用子块B的第一目标运动矢量和第二目标运动矢量确定子块B的预测值,而子块A的预测值和子块B的预测值,就是当前块的预测值。
示例性的,编码端保存当前块的每个子块的第一目标运动矢量和第二目标运动矢量,或者,保存当前块的每个子块的第一原始运动矢量和第二原始运动矢量,或者,保存当前块的每个子块的第一原始运动矢量,第二原始运动矢量,第一目标运动矢量和第二目标运动矢量。
实施例3:基于与上述方法同样的构思,参见图4所示,为本申请实施例中提出的另一种编解码方法的流程示意图,该方法可以应用于解码端,该方法可以包括以下步骤:
步骤401,解码端确定是否对当前块启动运动矢量调整模式。如果是,则执行步骤402,如果否,则不需要采用本申请提出的运动矢量调整方式,对此情况的处理不做限制。
在一个例子中,若解码端确定对当前块启动运动矢量调整模式,则说明当前块的运动信息不够准确,因此,对当前块启动运动矢量调整模式(即本申请技术方案),执行步骤402。
若解码端确定不对当前块启动运动矢量调整模式,则说明当前块的运动信息已经足够准确,因此,可以不对当前块启动运动矢量调整模式,不采用本申请提出的运动矢量调整方式。
步骤402,针对当前块包括的至少一个子块中的每个子块:解码端根据该子块的第一原始运动矢量,从第一参考帧中确定该子块对应的第一参考块;根据该子块的第二原始运动矢量,从第二参考帧中确定该子块对应的第二参考块。为了区分方便,将第一参考块中每个像素点的像素值称为第一像素值,将第二参考块中每个像素点的像素值称为第二像素值。
步骤403,解码端根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第一参考块的第一像素值和第二参考块的第二像素值,对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。
步骤404,解码端根据第一目标运动矢量和第二目标运动矢量确定子块的预测值。
步骤405,解码端根据每个子块的预测值确定当前块的预测值。
示例性的,解码端保存当前块的每个子块的第一目标运动矢量和第二目标运动矢量,或者,保存当前块的每个子块的第一原始运动矢量和第二原始运动矢量,或者,保存当前块的每个子块的第一原始运动矢量,第二原始运动矢量,第一目标运动矢量和第二目标运动矢量。
示例性的,步骤401-步骤405可以参见步骤301-步骤305,在此不再赘述。
实施例4:在上述实施例中,涉及是否对当前块启动运动矢量调整模式,以下进行说明。
在一种可能的实施方式中,可以给出如下启动条件,当然,如下这些启动条件只是一个示例,在实际应用中,如下这些启动条件可以任意组合,对此不做限制。示例性的,当如下启动条件中的所有启动条件均满足时,确定对当前块启动运动矢量调整模式。
1、控制信息为允许当前块使用运动矢量调整模式。
示例性的,该控制信息可以包括但不限于:序列级控制信息和/或帧级控制信息。
在一种可能的实施方式中,序列级(如多帧图像)控制信息可以包括控制标志位(如sps_cur_tool_enabled_flag),帧级(如一帧图像)控制信息可以包括控制标志位(如pic_cur_tool_disabled_flag)。当sps_cur_tool_enabled_flag为第一取值,并且pic_cur_tool_disabled_flag为第二取值,则表示允许当前块使用运动矢量调整模式。
示例性的,sps_cur_tool_enabled_flag表示序列中的所有图像是否允许使用运动矢量调整模式。pic_cur_tool_disabled_flag表示是否不允许当前图像内的各个块使用运动矢量调整模式。当sps_cur_tool_enabled_flag为第一取值时,表示序列中的所有图像允许使用运动矢量调整模式。当pic_cur_tool_disabled_flag为第二取值时,表示允许当前图像内的各个块使用运动矢量调整模式。
示例性的,当sps_cur_tool_enabled_flag为第二取值和/或pic_cur_tool_disabled_flag为第一取值时,表示不允许当前块使用运动矢量调整模式,即控制信息为不允许当前块使用运动矢量调整模式。
在另一种可能的实施方式中,序列级(如多帧图像)控制信息可以包括控制标志位(如sps_cur_tool_disabled_flag),帧级(如一帧图像)控制信息可以包括控制标志位(如pic_cur_tool_disabled_flag)。当sps_cur_tool_disabled_flag为第二取值,并且pic_cur_tool_disabled_flag为第二取值,则表示允许当前块使用运动矢量调整模式。
示例性的,sps_cur_tool_disabled_flag表示序列中的所有图像是否不允许使用运动矢量调整模式。pic_cur_tool_disabled_flag表示是否不允许当前图像内的各个块使用运动矢量调整模式。当sps_cur_tool_disabled_flag为第二取值时,表示序列中的所有图像允许使用运动矢量调整模式。当pic_cur_tool_disabled_flag为第二取值时,表示允许当前图像内的各个块使用运动矢量调整模式。
示例性的,当sps_cur_tool_disabled_flag为第一取值和/或pic_cur_tool_disabled_flag为第一取值时,表示不允许当前块使用运动矢量调整模式,即控制信息为不允许当前块使用运动矢量调整模式。
在另一种可能的实施方式中,序列级(如多帧图像)控制信息可以包括控制标志位(如sps_cur_tool_enabled_flag),帧级(如一帧图像)控制信息可以包括控制标志位(如pic_cur_tool_enabled_flag)。当sps_cur_tool_enabled_flag为第一取值,并且pic_cur_tool_enabled_flag为第一取值,则表示允许当前块使用运动矢量调整模式。
示例性的,sps_cur_tool_enabled_flag表示序列中的所有图像是否允许使用运动矢量调整模式。pic_cur_tool_enabled_flag表示是否允许当前图像内的各个块使用运动矢量调整模式。当sps_cur_tool_enabled_flag为第一取值时,表示序列中的所有图像允许使用运动矢量调整模式。当pic_cur_tool_enabled_flag为第一取值时,表示允许当前图像内的各个块使用运动矢量调整模式。
示例性的,当sps_cur_tool_enabled_flag为第二取值和/或pic_cur_tool_enabled_flag为第二取值时,表示不允许当前块使用运动矢量调整模式,即控制信息为不允许当前块使用运动矢量调整模式。
在另一种可能的实施方式中,序列级(如多帧图像)控制信息可以包括控制标志位(如sps_cur_tool_disabled_flag),帧级(如一帧图像)控制信息可以包括控制标志位(如pic_cur_tool_enabled_flag)。当sps_cur_tool_disabled_flag为第二取值,并且pic_cur_tool_enabled_flag为第一取值,则表示允许当前块使用运动矢量调整模式。
示例性的,sps_cur_tool_disabled_flag表示序列中的所有图像是否不允许使用运动矢量调整模式。pic_cur_tool_enabled_flag表示是否允许当前图像内的各个块使用运动矢量调整模式。当sps_cur_tool_disabled_flag为第二取值时,表示序列中的所有图像允许使用运动矢量调整模式。当pic_cur_tool_enabled_flag为第一取值时,表示允许当前图像内的各个块使用运动矢量调整模式。
示例性的,当sps_cur_tool_disabled_flag为第一取值和/或pic_cur_tool_enabled_flag为第二取值时,表示不允许当前块使用运动矢量调整模式,即控制信息为不允许当前块使用运动矢量调整模式。
在上述实施例中,第一取值可以为1,第二取值可以为0,或者,第一取值可以为0,第二取值可以为1,当然,上述只是示例,对此不做限制。
示例性的,本文的帧等同于图像,如当前帧表示当前图像,参考帧表示参考图像。
2、当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式。
在一种可能的实施方式中,若当前块的预测模式(如帧间预测模式)为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式(如子块融合模式,MMVD模式,CIIP模式,TPM模式,GEO模式等),则表示允许当前块使用运动矢量调整模式。例如,当前块的预测模式为融合模式或跳过模式时,当前块的预测模式不是MMVD模式,当前块的预测模式也不是CIIP模式时,则表示允许当前块使用运动矢量调整模式。
示例性的,若当前块的预测模式不是融合模式,且当前块的预测模式不是跳过模式,则表示不允许当前块使用运动矢量调整模式,即启动条件2不满足。
示例性的,若当前块的预测模式为融合模式或跳过模式,且当前块的预测模式是除普通融合模式之外的其它模式(如子块融合模式,MMVD模式,CIIP模式,TPM模式,GEO模式等),则表示不允许当前块使用运动矢量调整模式,即启动条件2不满足。
在另一种可能的实施方式中,若当前块的预测模式为普通融合模式(如regularmerge模式),则表示允许当前块使用运动矢量调整模式。示例性的,普通融合模式为:复用当前块运动信息列表中的某一运动信息作为当前块的运动信息来生成当前块的预测值。
示例性的,若当前块的预测模式不为普通融合模式,则表示不允许当前块使用运动矢量调整模式,即启动条件2不满足。
3、当前块的预测值通过来自两个参考帧的参考块的加权获得,且两个参考帧的显示顺序分别位于当前帧的一前一后,且两个参考帧与当前帧的距离相同。当前块的预测值通过来自两个参考帧的参考块的加权获得是指:当前块采用双向预测模式,即当前块的预测值通过来自两个参考帧的参考块的加权获得。示例性的,当前块可以对应两个列表的运动信息,记为第一运动信息和第二运动信息,第一运动信息包括第一参考帧和第一原始运动矢量,第二运动信息包括第二参考帧和第二原始运动矢量。两个参考帧的显示顺序分别位于当前帧的一前一后是指:第一参考帧位于当前块所处当前帧的前面,第二参考帧位于当前帧的后面。
在一种可能的实施方式中,若当前块存在两个列表(如list0和list1)的运动信息(如两个参考帧和两个运动矢量),且两个参考帧的显示顺序分别位于当前帧的一前一后,且两个参考帧到当前帧的距离相同,则表示允许当前块使用运动矢量调整模式。
两个参考帧的显示顺序分别位于当前帧的一前一后,且两个参考帧到当前帧的距离相同,可以通过当前帧的显示顺序号POC_Cur,list0的参考帧的显示顺序号POC_0,list1的参考帧的显示顺序号POC_1的相对关系来表示:即,(POC_0-POC_Cur)完全等于(POC_Cur-POC_0)。
示例性的,当前块采用双向预测,且当前块对应的两个参考帧来自不同方向,也就是说,当前块对应的一个参考帧位于当前帧之前,当前块对应的另一个参考帧位于当前帧之后。
示例性的,上述条件“当前块存在两个参考帧,且两个参考帧的显示顺序分别位于当前帧的一前一后,且两个参考帧与当前帧的距离相同”可以通过如下内容表示:
示例性的,若当前块只存在一个参考帧,则表示不允许当前块使用运动矢量调整模式,即启动条件3不满足。或者,若当前块存在两个参考帧,但是两个参考帧的显示顺序均位于当前帧的前面,则表示不允许当前块使用运动矢量调整模式,即启动条件3不满足。或者,若当前块存在两个参考帧,但是两个参考帧的显示顺序均位于当前帧的后面,则表示不允许当前块使用运动矢量调整模式,即启动条件3不满足。或者,若当前块存在两个参考帧,且两个参考帧的显示顺序分别位于当前帧的一前一后,但是两个参考帧与当前帧的距离不同,则表示不允许当前块使用运动矢量调整模式,即启动条件3不满足。
4、当前块的两个参考帧的加权权重相同。
在一种可能的实施方式中,若当前块的两个参考帧的加权权重相同,则表示允许当前块使用运动矢量调整模式。示例性的,若两个参考帧的帧级加权权重相同,如参考帧refIdxL0的亮度加权权重(luma_weight_l0_flag[refIdxL0]),可以等于参考帧refIdxL1的亮度加权权重(luma_weight_l1_flag[refIdxL1]),则表示当前块的两个参考帧的加权权重相同。或者,若两个参考帧的块级加权权重相同,如当前块的块级加权值的索引BcwIdx[xCb][yCb]为0,则表示当前块的两个参考帧的加权权重相同。或者,若两个参考帧的帧级加权权重相同,且两个参考帧的块级加权权重相同,则表示当前块的两个参考帧的加权权重相同。
示例性的,若当前块的两个参考帧的加权权重不同,则表示不允许当前块使用运动矢量调整模式,即启动条件4不满足。例如,若两个参考帧的帧级加权权重不同,则表示当前块的两个参考帧的加权权重不同。或者,若两个参考帧的块级加权权重不同,则表示当前块的两个参考帧的加权权重不同。或者,若两个参考帧的帧级加权权重不同,且两个参考帧的块级加权权重不同,则表示当前块的两个参考帧的加权权重不同。
示例性的,当前块的两个参考帧的加权权重是指双向加权补偿时采用的权重。例如,针对当前块的每个子块,在得到该子块的两个预测值(获取过程参见后续实施例)后,需要对这两个预测值进行加权,得到该子块的最终预测值。在对这两个预测值进行加权时,这两个预测值对应的权重,就是当前块的两个参考帧的加权权重,即这两个预测值对应的权重相同。
5、当前块的两个参考帧均是短期参考帧。或者说当前块的两个参考帧均不是长期参考帧。
在一种可能的实施方式中,若当前块的两个参考帧都为短期参考帧,则表示允许当前块使用运动矢量调整模式。短期参考帧表示离当前帧较近的参考帧,一般是实际的图像帧。
示例性的,若当前块的两个参考帧不都为短期参考帧,则表示不允许当前块使用运动矢量调整模式,即启动条件5不满足。或者,若当前块的一个参考帧不是短期参考帧,则表示不允许当前块使用运动矢量调整模式,即启动条件5不满足。或者,若当前块的两个参考帧都不是短期参考帧,则表示不允许当前块使用运动矢量调整模式,即启动条件5不满足。
在另一种可能的实施方式中,若当前块的两个参考帧都不是长期参考帧,则表示允许当前块使用运动矢量调整模式。长期参考帧的显示序号POC并没有实际含义,长期参考帧表示离当前帧较远的参考帧,或者是通过几帧实际图像合成出来的图像帧。
示例性的,若当前块的一个参考帧是长期参考帧,则表示不允许当前块使用运动矢量调整模式,即启动条件5不满足。或者,若当前块的两个参考帧都是长期参考帧,则表示不允许当前块使用运动矢量调整模式,即启动条件5不满足。
6、当前块的宽度,高度和面积均在限定范围内。
在一种可能的实施方式中,若当前块的宽cbWidth大于或者等于第一阈值(如8),且当前块的高cbHeight大于或者等于第二阈值(如8),且当前块的面积(cbHeight*cbWidth)大于或者等于第三阈值(如128),则表示允许当前块使用运动矢量调整模式。
示例性的,若当前块的宽cbWidth小于第一阈值,则表示不允许当前块使用运动矢量调整模式,即启动条件6不满足。或者,若当前块的高cbHeight小于第二阈值,则表示不允许当前块使用运动矢量调整模式,即启动条件6不满足。或者,且当前块的面积小于第三阈值,则表示不允许当前块使用运动矢量调整模式,即启动条件6不满足。
在另一种可能的实施方式中,若当前块的宽cbWidth大于或者等于第一阈值(如8),且当前块的高cbHeight大于或者等于第二阈值(如8),且当前块的面积(cbHeight*cbWidth)大于第四阈值(如64),则表示允许当前块使用运动矢量调整模式。
示例性的,若当前块的宽cbWidth小于第一阈值,则表示不允许当前块使用运动矢量调整模式,即启动条件6不满足。或者,若当前块的高cbHeight小于第二阈值,则表示不允许当前块使用运动矢量调整模式,即启动条件6不满足。或者,且当前块的面积小于或者等于第四阈值,则表示不允许当前块使用运动矢量调整模式,即启动条件6不满足。
7、当前块的两个参考帧的尺寸与当前帧的尺寸相同。
在一种可能的实施方式中,若list0的参考帧的尺寸与当前帧的尺寸相同,例如,list0的参考帧的宽与当前帧的宽相同,list0的参考帧的高与当前帧的高相同,并且,list1的参考帧的尺寸与当前帧的尺寸相同,例如,list1的参考帧的宽与当前帧的宽相同,list1的参考帧的高与当前帧的高相同,则表示允许当前块使用运动矢量调整模式。
示例性的,若当前块的两个参考帧中的至少一个参考帧的尺寸与当前帧的尺寸不同,则表示不允许当前块使用运动矢量调整模式,即启动条件7不满足。例如,若list0的参考帧的宽与当前帧的宽不同,则表示不允许当前块使用运动矢量调整模式。或者,若list0的参考帧的高与当前帧的高不同,则表示不允许当前块使用运动矢量调整模式。或者,若list1的参考帧的宽与当前帧的宽不同,则表示不允许当前块使用运动矢量调整模式。或者,若list1的参考帧的高与当前帧的高不同,则表示不允许当前块使用运动矢量调整模式。
实施例5:在上述实施例中,涉及针对当前块的每个子块,根据该子块的第一原始运动矢量,从第一参考帧中确定该子块对应的第一参考块,第一参考块中每个像素点的像素值称为第一像素值;根据该子块的第二原始运动矢量,从第二参考帧中确定该子块对应的第二参考块,第二参考块中每个像素点的像素值称为第二像素值,以下对此进行说明。
第一参考块中的每个像素点的第一像素值,是通过对第一参考块中的相邻像素点的像素值进行插值得到,或者,通过对第一参考块中的相邻像素点的像素值进行拷贝得到。
第二参考块中的每个像素点的第二像素值,是通过对第二参考块中的相邻像素点的像素值进行插值得到,或者,通过对第二参考块中的相邻像素点的像素值进行拷贝得到。
第一参考块的尺寸与第二参考块的尺寸相同,第一参考块/第二参考块的宽度基于子块的宽度与搜索范围确定,第一参考块/第二参考块的高度基于子块的高度与搜索范围确定。
例如,针对当前块的每个dx*dy的子块(如16*16的子块,或更小的子块,或更大的子块,更小的子块可以为8*8,更大的子块可以为32*32,对此不做限制,示例性的,子块的大小可以与当前块的大小相同,即子块就是当前块,例如,当前块为8*16时,则当前块只包括一个子块,该子块的大小为8*16,子块的大小也可以与当前块的大小不同,例如,当前块为8*32时,则当前块可以包括两个8*16的子块,当然,上述只是示例,为了方便描述,后续以16*16的子块为例进行说明),子块的宽度为dx,子块的高度为dy,第一原始运动矢量记为MV0,第二原始运动矢量记为MV1。
从第一原始运动矢量MV0在第一参考帧的对应位置,得到面积为(dx+filtersize-1)*(dy+filtersize-1)的整像素块,可以将这个整像素块记为整像素块A。
从第二原始运动矢量MV1在第二参考帧的对应位置,得到面积为(dx+filtersize-1)*(dy+filtersize-1)的整像素块,可以将这个整像素块记为整像素块B。
在一种可能的实施方式中,基于面积为(dx+filtersize-1)*(dy+filtersize-1)的整像素块A,可以通过双线性插值的方式,获得尺寸为(dx+2*IterNum)*(dy+2*IterNum)的初始参考像素块,可以将这个初始参考像素块记为第一参考块。基于面积为(dx+filtersize-1)*(dy+filtersize-1)的整像素块B,可以通过双线性插值的方式,获得尺寸为(dx+2*IterNum)*(dy+2*IterNum)的初始参考像素块,可以将这个初始参考像素块记为第二参考块。
在另一种可能的实施方式中,基于面积为(dx+filtersize-1)*(dy+filtersize-1)的整像素块A,通过直接拷贝(无需插值)的方式,获得尺寸为(dx+2*IterNum)*(dy+2*IterNum)的初始参考像素块,将这个初始参考像素块记为第一参考块。基于面积为(dx+filtersize-1)*(dy+filtersize-1)的整像素块B,可以通过直接拷贝的方式,获得尺寸为(dx+2*IterNum)*(dy+2*IterNum)的初始参考像素块,将这个初始参考像素块记为第二参考块。
示例性的,可以仅针对亮度分量(因为后续的搜索过程仅用亮度分量计算代价值,以降低复杂度),基于面积为(dx+filtersize-1)*(dy+filtersize-1)的整像素块(如整像素块A和整像素块B),获得尺寸为(dx+2*IterNum)*(dy+2*IterNum)的初始参考像素块,该初始参考像素块为第一参考块(如Pred_Inter0)和第二参考块(如Pred_Inter1)。
在一个例子中,filtersize可以为插值滤波器的抽头数,如可以为8等,对此不做限制。
在一个例子中,通过双线性插值获得第一参考块/第二参考块是指:第一参考块/第二参考块中每个像素点的像素值,通过对第一参考块/第二参考块中的相邻像素点的像素值进行插值得到。通过拷贝获得第一参考块/第二参考块是指:第一参考块/第二参考块中每个像素点的像素值,通过对第一参考块/第二参考块中的相邻像素点的像素值进行拷贝得到。
参见上述实施例,第一参考块的面积为(dx+2*IterNum)*(dy+2*IterNum),第二参考块的面积为(dx+2*IterNum)*(dy+2*IterNum),比如说,第一参考块/第二参考块的宽度值为dx+2*IterNum,第一参考块/第二参考块的高度值为dy+2*IterNum。dx为子块的宽,dy为子块的高,IterNum可以为搜索范围SR,比如说,后续实施例的迭代次数,IterNum可以为目标运动矢量与原始运动矢量的最大水平/竖直分量插值,如IterNum可以为2等。
参见图5所示,针对16*16的子块,基于第一原始运动矢量MV0在第一参考帧的对应位置,得到面积为23(即16+8-1)*23的整像素块A。基于面积为23*23的整像素块A,可以通过双线性插值的方式,获得尺寸为20(即16+2*2)*20的第一参考块。同理,针对16*16的子块,基于第二原始运动矢量MV1在第二参考帧的对应位置,得到面积为23*23的整像素块B。基于面积为23*23的整像素块B,获得尺寸为20*20的第二参考块。
针对第一参考块和第二参考块,用于后续过程中的运动矢量调整。
实施例6:在上述实施例中,涉及针对当前块的每个子块,根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第一参考块的第一像素值和第二参考块的第二像素值,对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。以一个子块(如当前块的每个dx*dy大小的子块)的处理过程为例,介绍原始运动矢量的调整过程。
步骤a1、将第一原始运动矢量或者第二原始运动矢量确定为中心运动矢量。
例如,假设第一原始运动矢量为(4,4),第二原始运动矢量为(-4,-4),将第一原始运动矢量(4,4)或第二原始运动矢量(-4,-4)确定为中心运动矢量。
为了方便描述,后续以将第一原始运动矢量(4,4)确定为中心运动矢量为例,将第二原始运动矢量(-4,-4)确定为中心运动矢量的流程类似,在此不再赘述。
步骤a2、确定与中心运动矢量对应的边缘运动矢量。
例如,可以将中心运动矢量(x,y)向不同方向偏移S,得到不同方向的边缘运动矢量(x,y+S)、边缘运动矢量(x,y-S)、边缘运动矢量(x+S,y)、边缘运动矢量(x-S,y)、边缘运动矢量(x+right,y+down)。示例性的,right可以为S或者-S,down可以为S或者-S,关于right和down的确定方式,可以参见后续实施例。参见图6所示,将中心运动矢量(x,y)作为中心,即中心运动矢量为(0,0),以S为1,right和down均为1为例,则中心运动矢量(0,0)对应的边缘运动矢量包括:边缘运动矢量(0,1),边缘运动矢量(0,-1),边缘运动矢量(1,0),边缘运动矢量(-1,0),边缘运动矢量(1,1)。
步骤a3、根据第一参考块的第一像素值和第二参考块的第二像素值,获取中心运动矢量对应的第一代价值、每个边缘运动矢量对应的第二代价值。
例如,从第一参考块中复制获取中心运动矢量(0,0)对应的子参考块A1,子参考块A1是中心运动矢量(0,0)在第一参考块中的子参考块。从第二参考块中复制获取中心运动矢量(0,0)对应的子参考块B1,子参考块B1是中心运动矢量(0,0)在第二参考块中的子参考块。然后,利用子参考块A1的第一像素值和子参考块B1的第二像素值,获取中心运动矢量(0,0)对应的代价值1,关于代价值的确定方式可以参见后续实施例。
从第一参考块中复制获取边缘运动矢量(0,1)对应的子参考块A2,子参考块A2是边缘运动矢量(0,1)在第一参考块中的子参考块。从第二参考块中复制获取边缘运动矢量(0,1)的对称运动矢量(0,-1)对应的子参考块B2,子参考块B2是对称运动矢量(0,-1)在第二参考块中的子参考块。利用子参考块A2的第一像素值和子参考块B2的第二像素值,获取边缘运动矢量(0,1)对应的代价值2,关于代价值的确定方式可以参见后续实施例。
基于边缘运动矢量(0,1)对应的代价值2的确定方式,可以确定边缘运动矢量(0,-1)对应的代价值3、边缘运动矢量(1,0)对应的代价值4、边缘运动矢量(-1,0)对应的代价值5、边缘运动矢量(1,1)对应的代价值6,在此不再重复赘述。
步骤a4、根据第一代价值和第二代价值,从中心运动矢量和边缘运动矢量中选择一个运动矢量,作为最优运动矢量。例如,可以将代价值最小的运动矢量作为最优运动矢量。
例如,假设边缘运动矢量(0,1)对应的代价值2最小,则可以将代价值2对应的边缘运动矢量(0,1)作为最优运动矢量。当然,这里只是一个示例,对此不做限制。
步骤a5、判断是否满足结束条件。如果否,则可以将该最优运动矢量确定为中心运动矢量,并返回步骤a2。如果是,则可以执行步骤a6。
在一个例子中,若迭代次数/搜索范围达到阈值,则满足结束条件;若迭代次数/搜索范围未达到阈值,则不满足结束条件。例如,假设SR为2,即阈值为2,若迭代次数/搜索范围已经达到2次,即步骤a2-步骤a4已经执行两次,则满足结束条件;否则,不满足结束条件。
在另一个例子中,从中心运动矢量和边缘运动矢量中选择一个运动矢量作为最优运动矢量后,若选择中心运动矢量作为最优运动矢量,则可以满足结束条件。
步骤a6、根据最优运动矢量确定第一整像素运动矢量调整值(用于调整第一原始运动矢量)和第二整像素运动矢量调整值(用于调整第二原始运动矢量)。
在一个例子中,可以根据最优运动矢量和第一原始运动矢量确定第一整像素运动矢量调整值,并根据第一整像素运动矢量调整值确定第二整像素运动矢量调整值,示例性的,第二整像素运动矢量调整值可以与第一整像素运动矢量调整值对称。
例如,第一次迭代过程,最优运动矢量为边缘运动矢量(0,1),以边缘运动矢量(0,1)为中心进行第二次迭代,第二次迭代过程,最优运动矢量为边缘运动矢量(0,1),假设至此完成迭代过程,则第一整像素运动矢量调整值为(0,2),即边缘运动矢量(0,1)与边缘运动矢量(0,1)的和。基于此,假设第一原始运动矢量为(4,4),第一次迭代过程,最优运动矢量为边缘运动矢量(0,1),即最优运动矢量可以对应最优运动矢量(4,5)。以边缘运动矢量(0,1)为中心进行第二次迭代,第二次迭代过程,最优运动矢量为边缘运动矢量(0,1),即最优运动矢量可以对应最优运动矢量(4,6)。综上所述,根据最优运动矢量(4,6)和第一原始运动矢量(4,4)确定第一整像素运动矢量调整值,第一整像素运动矢量调整值为最优运动矢量(4,6)与第一原始运动矢量(4,4)的差,即第一整像素运动矢量调整值为(0,2)。根据第一整像素运动矢量调整值(0,2)确定第二整像素运动矢量调整值,第二整像素运动矢量调整值可以为(0,-2),即(0,2)的对称值。
步骤a7、根据最优运动矢量确定第一分像素运动矢量调整值(用于调整第一原始运动矢量)和第二分像素运动矢量调整值(用于调整第二原始运动矢量)。
在一个例子中,可以根据最优运动矢量对应的代价值、与最优运动矢量对应的边缘运动矢量对应的代价值,确定第一分像素运动矢量调整值,然后,可以根据所述第一分像素运动矢量调整值确定第二分像素运动矢量调整值。例如,x0=N*(E(-1,0)–E(1,0))/(E(-1,0)+E(1,0)–2*E(0,0)),y0=N*(E(0,-1)–E(0,1))/(E(0,-1)+E(0,1)–2*E(0,0)),对于1/2、1/4、1/8和1/16的运动矢量像素精度,则N=1、2、4和8。然后,将(x0,y0)赋值给deltaMv,SPMV=deltaMv/2N,若当前为1/16的运动矢量像素精度,则SPMV为(x0/16,y0/16)。
在上述公式中,SPMV可以是第一分像素运动矢量调整值,N可以与运动矢量像素精度有关,例如,运动矢量像素精度可以为1/2,N为1,运动矢量像素精度为1/4,N为2,运动矢量像素精度为1/8,N为4,运动矢量像素精度为1/16,N为8。
在上述公式中,E(0,0)表示最优运动矢量的代价值;E(-1,0)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(-1,0)的代价值;E(1,0)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(1,0)的代价值;E(0,-1)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(0,-1)的代价值;E(0,1)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(0,1)的代价值。针对各运动矢量的代价值,确定方式参见上述示例,在此不再赘述。
在采用上述方式确定第一分像素运动矢量调整值后,可以根据第一分像素运动矢量调整值确定第二分像素运动矢量调整值,第二分像素运动矢量调整值是第一分像素运动矢量调整值的对称值。例如,若第一分像素运动矢量调整值为(1,0),则第二分像素运动矢量调整值可以为(-1,0),即第一分像素运动矢量调整值(1,0)的对称值。
步骤a8、根据第一整像素运动矢量调整值和/或第一分像素运动矢量调整值,对第一原始运动矢量进行调整,得到第一目标运动矢量。例如,第一目标运动矢量=第一原始运动矢量+第一整像素运动矢量调整值+第一分像素运动矢量调整值。
步骤a9、根据第二整像素运动矢量调整值和/或第二分像素运动矢量调整值,对第二原始运动矢量进行调整,得到第二目标运动矢量。例如,第二目标运动矢量=第二原始运动矢量+第二整像素运动矢量调整值+第二分像素运动矢量调整值。
实施例7:在上述实施例中,涉及针对当前块的每个子块,根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第一参考块的第一像素值和第二参考块的第二像素值,对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。以一个子块(如当前块的每个dx*dy大小的子块)的处理过程为例,介绍原始运动矢量的调整过程。
本实施例中,将第一原始运动矢量记为Org_MV0,将第二原始运动矢量记为Org_MV1,对第一原始运动矢量Org_MV0进行调整后,得到的第一目标运动矢量记为Refined_MV0,对第二原始运动矢量Org_MV1进行调整后,得到的第二目标运动矢量记为Refined_MV1。
步骤b1、进行SR次迭代,获得最优的整像素MV点的整像素偏移,将其记为IntegerDeltaMV,IntegerDeltaMV就是上述实施例中的第一整像素运动矢量调整值。例如,先将IntegerDeltaMV初始化为(0,0),每次迭代执行如下过程:
步骤b11、将deltaMV设为(0,0)。若为首次迭代,基于第一原始运动矢量在第一参考块中的参考像素,复制获得预测值块A1(即第一参考块最中心的dx*dy的块);基于第二原始运动矢量在第二参考块中的参考像素,复制获得预测值块B1(即第二参考块最中心的dx*dy的块)。基于预测值块A1和预测值块B1获得初始代价值cost(初始代价值为基于预测值块A1和预测值块B1的SAD(绝对值差和,sum of abstract distortion),确定方式参见后续实施例)。若该初始代价值cost小于dx*dy,dx和dy是当前子块的宽度和高度,则直接跳过后续搜索过程,执行步骤b2,并将notZeroCost设为false。
步骤b12、如图6所示,以上述初始点为中心,按照{Mv(0,1),Mv(0,-1),Mv(1,0),Mv(-1,0),Mv(right,down)}的顺序得到五个偏移MV(这五个偏移MV均称为MVOffset),并进行这五个偏移MV的代价值的计算与比较过程。例如,基于某个MVOffset(如Mv(0,1)等),在第一参考块和第二参考块中,通过这个MVOffset获得两块预测值块(如第一参考块中进行中心位置偏移MVOffset的dx*dy块、第二参考块中进行中心位置偏移-MVOffset(与MVOffset相反)的dx*dy块),计算两个预测值块的下采样SAD作为MVOffset的代价值。
然后,保留代价值最小的MVOffset,将代价值最小的MVOffset更新为deltaMV的值,且代价值最小的MVOffset作为下一次迭代的新中心偏移点。
基于deltaMV更新IntegerDeltaMV的值,更新后的IntegerDeltaMV=更新前的IntegerDeltaMV+deltaMV,即在当前IntegerDeltaMV的基础上加上deltaMV。
步骤b13、经过迭代后,若最优MV仍为初始MV(即不是MVOffset)或者最小代价值为0,则不进行下一次迭代搜索过程,执行步骤b2,并将notZeroCost设为false。
否则,若迭代次数达到SR,则执行步骤b2,若迭代次数未达到SR,则可以将最优MV作为中心,进行下一次的迭代搜索过程,即返回步骤b11。
在迭代搜索过程结束后,得到IntegerDeltaMV的取值,即IntegerDeltaMV的最终取值,就是第一整像素运动矢量调整值,后续记为IntegerDeltaMV。
步骤b2、可以以步骤b1的最优整像素MV点为中心,获得最优的分像素偏移MV,记为SPMV,而SPMV就是上述实施例中的第一分像素运动矢量调整值。
例如,可以先将SPMV初始化为(0,0),然后执行如下过程:
步骤b21、只有notZeroCost不为false,且deltaMV为(0,0)时,才可以进行后续处理(即需要获取SPMV),否则,可以直接利用IntegerDeltaMV对原始运动矢量进行调整,而不是利用IntegerDeltaMV和SPMV对原始运动矢量进行调整。
步骤b22、将E(x,y)表示为步骤b1所得最优MV点偏移(x,y)的MV对应代价值(步骤b1计算的代价值)。基于中心及上下左右五个点的E(x,y),可得E(x,y)最小的点的偏移(x0,y0)为:x0=N*(E(-1,0)–E(1,0))/(E(-1,0)+E(1,0)–2*E(0,0)),y0=N*(E(0,-1)–E(0,1))/(E(0,-1)+E(0,1)–2*E(0,0))。在一个例子中,对于1/2、1/4、1/8和1/16的运动矢量像素精度,则N=1、2、4和8。然后,可以将(x0,y0)赋值给deltaMv,SPMV=deltaMv/2N,若当前为1/16的运动矢量像素精度,则SPMV可以为(x0/16,y0/16)。
若E(-1,0)=E(0,0),则水平向左偏移半个像素(deltaMv[0]=-N)。
若E(1,0)=E(0,0),则水平向右偏移半个像素(deltaMv[0]=N)。
若E(0,-1)=E(0,0),则垂直向上偏移半个像素(deltaMv[1]=-N)。
若E(0,1)=E(0,0),则垂直向下偏移半个像素(deltaMv[1]=N)。
基于上述处理,可以得到SPMV的取值,即第一分像素运动矢量调整值。
步骤b3、基于步骤b1的整像素偏移IntegerDeltaMV和步骤b2的分像素偏移SPMV,获得最优偏移MV,可以将这个最优偏移MV记为BestMVoffset。而且,BestMVoffset=IntegerDeltaMV+SPMV。基于BestMVoffset可以获得两个方向的目标运动矢量:Refined_MV0=Org_MV0+BestMVoffset;Refined_MV1=Org_MV1-BestMVoffset。
显然,BestMVoffset=IntegerDeltaMV+SPMV,即第一整像素运动矢量调整值与第一分像素运动矢量调整值的和。而且,-IntegerDeltaMV是IntegerDeltaMV的对称值,即第二整像素运动矢量调整值,-SPMV是SPMV的对称值,即第二分像素运动矢量调整值,因此,-BestMVoffset=(-IntegerDeltaMV)+(-SPMV)时,即第二整像素运动矢量调整值与第二分像素运动矢量调整值的和。
实施例8:在一个例子中,为了将第一原始运动矢量Org_MV0和第二原始运动矢量Org_MV1调整为第一目标运动矢量Refined_MV0和第二目标运动矢量Refined_MV1,实现方式与实施例7类似,不同之处在于:将步骤b11中的“若该初始代价值cost小于dx*dy,则直接跳过后续搜索过程”移除,也就是说,即使初始代价值cost小于dx*dy,也不会“直接跳过后续搜索过程”,而是继续后续搜索过程,即需要执行步骤b12。
实施例9:为了将第一原始运动矢量Org_MV0和第二原始运动矢量Org_MV1调整为第一目标运动矢量Refined_MV0和第二目标运动矢量Refined_MV1,实现方式与实施例7类似,不同之处在于:将步骤b11中的“若该初始代价值cost小于dx*dy,则直接跳过后续搜索过程”移除,也就是说,即使初始代价值cost小于dx*dy,也不会“直接跳过后续搜索过程”,而是继续后续搜索过程,即需要执行步骤b12。将步骤b13中的“若最优MV仍为初始MV(即不是MVOffset)或者最小代价值为0,则不进行下一次迭代搜索过程”移除,也就是说,即使最优MV仍为初始MV或者最小代价值为0,也可以进行下一次迭代搜索过程。
实施例10:在一个例子中,为了将第一原始运动矢量Org_MV0和第二原始运动矢量Org_MV1调整为第一目标运动矢量Refined_MV0和第二目标运动矢量Refined_MV1,实现方式与实施例7类似,不同之处在于:将“notZeroCost”的相关过程移除,也就是说,在步骤b11和步骤b13中,不设置和保存notZeroCost的值。在步骤b21中,只要deltaMV为(0,0),就可以进行分像素偏移计算过程(即步骤b22),而不是只有当notZeroCost不为false、且deltaMV为(0,0)时,才可以进行分像素偏移计算过程。
实施例11:在一个例子中,为了将第一原始运动矢量Org_MV0和第二原始运动矢量Org_MV1调整为第一目标运动矢量Refined_MV0和第二目标运动矢量Refined_MV1,实现方式与实施例7类似,不同之处在于:将步骤b21中的“只有notZeroCost不为false,且deltaMV为(0,0)时,才进行后续处理,否则,直接利用IntegerDeltaMV对原始运动矢量进行调整”,修改为“只有notZeroCost不为false,且当前最优整像素的上下左右相隔1个整像素的四个点的代价值已在步骤b1计算获得时,才进行后续处理,否则,直接利用IntegerDeltaMV对原始运动矢量进行调整”。在一个例子中,“后续处理”是指步骤b22的分像素偏移计算过程。
在一个例子中,步骤b22的分像素偏移计算过程,需要使用最优整像素的上下左右相隔1个整像素的四个点的代价值,因此,步骤b1中已经计算获得“最优整像素的上下左右相隔1个整像素的四个点的代价值”,可以是一个必要条件。
实施例12:为了将第一原始运动矢量Org_MV0和第二原始运动矢量Org_MV1调整为第一目标运动矢量Refined_MV0和第二目标运动矢量Refined_MV1,实现方式与实施例7类似,不同之处在于:将步骤b21中的“只有notZeroCost不为false,且deltaMV为(0,0)时,才进行后续处理,否则直接利用IntegerDeltaMV对原始运动矢量进行调整”,修改为“只要当前最优整像素的上下左右相隔1个整像素的四个点的代价值已在步骤b1计算获得时,才进行后续处理(即分像素偏移计算过程),否则利用IntegerDeltaMV对原始运动矢量进行调整”。
实施例13:为了将第一原始运动矢量Org_MV0和第二原始运动矢量Org_MV1调整为第一目标运动矢量Refined_MV0和第二目标运动矢量Refined_MV1,实现方式与实施例7类似,不同之处在于:将步骤b21中的“只有notZeroCost不为false,且deltaMV为(0,0)时,才进行后续处理,否则,直接利用IntegerDeltaMV对原始运动矢量进行调整”,修改为“若当前最优整像素的上下左右相隔1个整像素的四个点的代价值已在步骤b1计算获得时,才进行后续处理(步骤b22的分像素偏移计算过程),否则采用步骤b23进行处理”。
步骤b23、将当前最优整像素点MV_inter_org设为距离其最近的,且周围的上下左右相隔1个整像素的四个点的代价值已在步骤b1计算获得的整像素点MV_inter_nearest。然后,以MV_inter_nearest为中心,进行步骤b22的分像素偏移计算过程,也就是说,以MV_inter_nearest为中心获取SPMV。例如,若当前最优整像素点MV_inter_org的上下左右相隔1个整像素的四个点的代价值,没有全部在步骤b1计算获得,则从最优整像素点MV_inter_org的周围选择一个整像素点MV_inter_nearest,且整像素点MV_inter_nearest的上下左右相隔1个整像素的四个点的代价值,均已经在步骤b1计算获得。
然后,可以将整像素点MV_inter_nearest作为当前的最优整像素点,并以整像素点MV_inter_nearest为中心获取SPMV,具体获取方式参见步骤b22。在以整像素点MV_inter_nearest为中心获取SPMV时,参见步骤b22,在计算x0和y0时,x0和y0可以限制在[-2N,2N]的范围内。若x0/y0大于2N,则可以将x0/y0赋值为2N;若x0/y0小于-2N,则可以将x0/y0赋值为-2N。对于1/2、1/4、1/8和1/16的运动矢量像素精度,则N=1、2、4和8。
实施例14:在上述实施例中,需要确定与中心运动矢量对应的边缘运动矢量。如将中心运动矢量(x,y)向不同方向偏移S,顺序得到不同方向的边缘运动矢量(x,y+S)、边缘运动矢量(x,y-S)、边缘运动矢量(x+S,y)、边缘运动矢量(x-S,y)、边缘运动矢量(x+right,y+down)。或者,将中心运动矢量(x,y)向不同方向偏移S,顺序得到不同方向的边缘运动矢量(x,y-S)、边缘运动矢量(x,y+S)、边缘运动矢量(x-S,y)、边缘运动矢量(x+S,y)、边缘运动矢量(x+right,y+down)。例如,假设(x,y)为(0,0),S为1,则按照(0,1)、(0,-1)、(1,0)、(-1,0)、(right,down)的顺序,得到5个边缘运动矢量。或者,按照(0,-1)、(0,1)、(-1,0)、(1,0)、(right,down)的顺序,得到5个边缘运动矢量。
实施例15:在上述实施例中,边缘运动矢量(x+right,y+down)的默认值为(x-S,y-S)。若边缘运动矢量(x+S,y)的代价值小于边缘运动矢量(x-S,y)的代价值,则right为S(从-S修改为S);若边缘运动矢量(x,y+S)的代价值小于边缘运动矢量(x,y-S)的代价值,则down为S(从-S修改为S)。或者,若边缘运动矢量(x+S,y)的代价值小于或等于边缘运动矢量(x-S,y)的代价值,则right为S(从-S修改为S);若边缘运动矢量(x,y+S)的代价值小于或等于边缘运动矢量(x,y-S)的代价值,则down为S(从-S修改为S)。
按照(0,1)、(0,-1)、(1,0)、(-1,0)、(right,down)的顺序,得到5个边缘运动矢量,(right,down)的默认值为(-1,-1)。若边缘运动矢量(1,0)的代价值小于边缘运动矢量(-1,0)的代价值,则right为1;若边缘运动矢量(0,1)的代价值小于边缘运动矢量(0,-1)的代价值,则down为1。或,若边缘运动矢量(1,0)的代价值小于或等于边缘运动矢量(-1,0)的代价值,则right为1;若边缘运动矢量(0,1)的代价值小于或等于边缘运动矢量(0,-1)的代价值,则down为1。例如,按照(0,-1)、(0,1)、(-1,0)、(1,0)、(right,down)的顺序,得到5个边缘运动矢量,(right,down)的默认值为(-1,-1)。若边缘运动矢量(1,0)的代价值小于边缘运动矢量(-1,0)的代价值,则right为1;若边缘运动矢量(0,1)的代价值小于边缘运动矢量(0,-1)的代价值,则down为1。或,若边缘运动矢量(1,0)的代价值小于或等于边缘运动矢量(-1,0)的代价值,则right为1;若边缘运动矢量(0,1)的代价值小于或等于边缘运动矢量(0,-1)的代价值,则down为1。
实施例16:在上述实施例中,涉及针对当前块的每个子块,根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第一参考块的第一像素值和第二参考块的第二像素值,对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。以一个子块(如当前块的每个dx*dy大小的子块)的处理过程为例,介绍原始运动矢量的调整过程。
步骤c1、以初始运动矢量为中心,从初始运动矢量周围的包括该初始运动矢量的运动矢量中选择部分或全部运动矢量,将选择的运动矢量作为候选运动矢量。示例性的,初始运动矢量可以为第一原始运动矢量或者第二原始运动矢量。例如,可以以第一原始运动矢量为中心,从第一原始运动矢量周围的包括第一原始运动矢量的运动矢量中选择部分或全部运动矢量,作为候选运动矢量,对此选择方式参见后续实施例。或者,可以以第二原始运动矢量为中心,从第二原始运动矢量周围的包括第二原始运动矢量的运动矢量中选择部分或全部运动矢量,作为候选运动矢量,对此选择方式参见后续实施例。为了方便描述,后续实施例中,后续以第一原始运动矢量为中心为例,即初始运动矢量为第一原始运动矢量。
示例性的,可以以初始运动矢量为中心,从该初始运动矢量周围的包括该初始运动矢量的(2*SR+1)*(2*SR+1)个运动矢量中,选择部分或者全部运动矢量,并将选择的运动矢量确定为候选运动矢量;其中,所述SR为搜索范围。在从初始运动矢量周围的包括该初始运动矢量的(2*SR+1)*(2*SR+1)个运动矢量中,选择部分或者全部运动矢量,将选择的运动矢量确定为候选运动矢量时,运动矢量的搜索顺序可以包括从左到右,从上到下。
当SR为2时,则从初始运动矢量周围的包括初始运动矢量的25个运动矢量中选择全部运动矢量,将选择的运动矢量确定为候选运动矢量;运动矢量的搜索顺序依次为:{Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}。或者,{Mv(0,0),Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}。
当SR为2时,则从初始运动矢量周围的包括初始运动矢量的25个运动矢量中选择部分运动矢量,将选择的运动矢量确定为候选运动矢量;运动矢量的搜索顺序依次为:{Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-1,2),Mv(0,2),Mv(1,2)}。或者,{Mv(0,0),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-1,2),Mv(0,2),Mv(1,2)}。
步骤c2、根据第一参考块的第一像素值和第二参考块的第二像素值,获取第一原始运动矢量(即初始运动矢量)对应的第三代价值、各个候选运动矢量对应的第四代价值。
例如,可以从第一参考块中复制获取第一原始运动矢量对应的子参考块A1,该子参考块A1可以是该第一原始运动矢量在第一参考块中的子参考块。然后,可以从第二参考块中复制获取第二原始运动矢量对应的子参考块B1,该子参考块B1是该第二原始运动矢量在第二参考块中的子参考块。然后,可以利用子参考块A1的第一像素值和子参考块B1的第二像素值,获取第一原始运动矢量对应的第三代价值。针对每个候选运动矢量,可以从第一参考块中复制获取候选运动矢量对应的子参考块A2,该子参考块A2是候选运动矢量在第一参考块中的子参考块。然后,从第二参考块中复制获取候选运动矢量的对称运动矢量对应的子参考块B2,该子参考块B2是对称运动矢量在第二参考块中的子参考块。利用子参考块A2的第一像素值和子参考块B2的第二像素值,获取候选运动矢量对应的第四代价值。
步骤c3、根据第三代价值和第四代价值,从第一原始运动矢量和各个候选运动矢量中选择一个运动矢量,并将选择的运动矢量确定为最优运动矢量。例如,可以将代价值最小的运动矢量(如第一原始运动矢量、或任意一个候选运动矢量)作为最优运动矢量。
步骤c4、根据最优运动矢量确定第一整像素运动矢量调整值(用于调整第一原始运动矢量)和第二整像素运动矢量调整值(用于调整第二原始运动矢量)。如根据最优运动矢量和第一原始运动矢量确定第一整像素运动矢量调整值,根据第一整像素运动矢量调整值确定第二整像素运动矢量调整值,第二整像素运动矢量调整值与第一整像素运动矢量调整值对称。
例如,假设最优运动矢量为(4,6),第一原始运动矢量为(4,4),则根据最优运动矢量(4,6)和第一原始运动矢量(4,4)确定第一整像素运动矢量调整值,第一整像素运动矢量调整值为最优运动矢量(4,6)与第一原始运动矢量(4,4)的差,即第一整像素运动矢量调整值为(0,2)。然后,根据第一整像素运动矢量调整值(0,2)确定第二整像素运动矢量调整值,第二整像素运动矢量调整值可以为(0,-2),即(0,2)的对称值。
步骤c5、根据最优运动矢量确定第一分像素运动矢量调整值(用于调整第一原始运动矢量)和第二分像素运动矢量调整值(用于调整第二原始运动矢量)。如根据最优运动矢量对应的代价值、与最优运动矢量对应的边缘运动矢量对应的代价值,确定第一分像素运动矢量调整值,然后,根据所述第一分像素运动矢量调整值确定第二分像素运动矢量调整值。
例如,x0=N*(E(-1,0)–E(1,0))/(E(-1,0)+E(1,0)–2*E(0,0)),y0=N*(E(0,-1)–E(0,1))/(E(0,-1)+E(0,1)–2*E(0,0)),对于1/2、1/4、1/8和1/16的运动矢量像素精度,则N=1、2、4和8。然后,将(x0,y0)赋值给deltaMv,SPMV=deltaMv/2N,若当前为1/16的运动矢量像素精度,则SPMV为(x0/16,y0/16)。SPMV是第一分像素运动矢量调整值。E(0,0)表示最优运动矢量的代价值;E(-1,0)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(-1,0)的代价值;E(1,0)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(1,0)的代价值;E(0,-1)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(0,-1)的代价值;E(0,1)是以最优运动矢量为中心,最优运动矢量(0,0)的边缘运动矢量(0,1)的代价值。针对各运动矢量的代价值,确定方式参见上述实施例。在采用上述方式确定第一分像素运动矢量调整值后,可以根据第一分像素运动矢量调整值确定第二分像素运动矢量调整值,第二分像素运动矢量调整值是第一分像素运动矢量调整值的对称值。例如,若第一分像素运动矢量调整值为(1,0),则第二分像素运动矢量调整值为(-1,0),即(1,0)的对称值。
步骤c6、根据第一整像素运动矢量调整值和/或第一分像素运动矢量调整值,对第一原始运动矢量进行调整,得到第一原始运动矢量对应的第一目标运动矢量。例如,第一目标运动矢量=第一原始运动矢量+第一整像素运动矢量调整值+第一分像素运动矢量调整值。
步骤c7、根据第二整像素运动矢量调整值和/或第二分像素运动矢量调整值,对第二原始运动矢量进行调整,得到第二原始运动矢量对应的第二目标运动矢量。例如,第二目标运动矢量=第二原始运动矢量+第二整像素运动矢量调整值+第二分像素运动矢量调整值。
实施例17:在上述实施例中,涉及针对当前块的每个子块,根据第一参考块的第一像素值和第二参考块的第二像素值,对第一原始运动矢量进行调整,得到子块的第一目标运动矢量;根据第一参考块的第一像素值和第二参考块的第二像素值,对第二原始运动矢量进行调整,得到子块的第二目标运动矢量。以一个子块(如当前块的每个dx*dy大小的子块)的处理过程为例,介绍原始运动矢量的调整过程。
可以将第一原始运动矢量记为Org_MV0,将第二原始运动矢量记为Org_MV1,将第一目标运动矢量记为Refined_MV0,将第二目标运动矢量记为Refined_MV1。
步骤d1、以第一原始运动矢量为中心,从第一原始运动矢量周围的包括第一原始运动矢量的(2*SR+1)*(2*SR+1)个点中,选择部分或者全部运动矢量。例如,若SR=2,则从第一原始运动矢量周围的包括第一原始运动矢量的25个点中选择部分或者全部运动矢量,将选择的这些运动矢量作为候选运动矢量。确定第一原始运动矢量的代价值,并确定每个候选运动矢量的代价值。将代价值最小的运动矢量作为最优运动矢量。与上述实施例的步骤b1相比,在步骤d1中,不需要进行迭代过程,即一次就可以选取所有待处理的候选运动矢量,而不是通过迭代过程,第一次迭代选取部分运动矢量,第二次迭代再选取部分运动矢量。基于此,由于可以一次性的选取所有待处理的候选运动矢量,因此,可以对这些候选运动矢量进行并行处理,得到每个候选运动矢量的代价值,从而能够减少计算复杂度,并提高编码性能。
步骤d2、根据最优运动矢量确定IntegerDeltaMV的取值,IntegerDeltaMV的最终取值就是第一整像素运动矢量调整值,对此确定方式不再赘述,可以参见上述实施例。
步骤d3、以最优运动矢量为中心,获得最优的分像素偏移MV,将最优的分像素偏移记为SPMV,而SPMV的取值就是第一分像素运动矢量调整值。
步骤d3的实现过程可以参见上述步骤b2,在此不再重复赘述。
步骤d4、基于IntegerDeltaMV和SPMV,获得BestMVoffset。例如,BestMVoffset=IntegerDeltaMV+SPMV。然后,可以基于BestMVoffset获得目标运动矢量:Refined_MV0=Org_MV0+BestMVoffset;Refined_MV1=Org_MV1-BestMVoffset。
实施例18:为了将第一原始运动矢量Org_MV0和第二原始运动矢量Org_MV1调整为第一目标运动矢量Refined_MV0和第二目标运动矢量Refined_MV1,实现方式与实施例16、实施例17类似。本实施例中,以原始运动矢量为中心,可以从原始运动矢量周围的包括该原始运动矢量的共(2*SR+1)*(2*SR+1)个点中,选择全部运动矢量。例如,若SR=2,则可以从原始运动矢量周围的包括该原始运动矢量的25个点中选择全部运动矢量,确定这些运动矢量的代价值,并确定每个运动矢量的代价值。将代价值最小的运动矢量作为最优运动矢量。
实施例19:为了将第一原始运动矢量Org_MV0和第二原始运动矢量Org_MV1调整为第一目标运动矢量Refined_MV0和第二目标运动矢量Refined_MV1,实现方式与实施例16、实施例17类似。本实施例中,由于一次性的选取所有待处理的候选运动矢量,因此,可以对这些候选运动矢量进行并行处理,得到每个候选运动矢量的代价值,从而减少计算复杂度,提高编码性能。本实施例中,以原始运动矢量为中心,从原始运动矢量周围的包括原始运动矢量的共(2*SR+1)*(2*SR+1)个点中,选择偏移不超过SR范围内的部分运动矢量。
例如,从包括原始运动矢量在内的(2*SR+1)*(2*SR+1)个点中,选择N个(N大于等于1,小于等于(2*SR+1)*(2*SR+1))候选点。然后,确定这N个点对应的运动矢量的代价值。示例性的,可以按一定顺序扫描这N个点的代价值,选择最小代价值的运动矢量作为最优运动矢量。若代价值相等则优先选取顺序靠前的候选点。示例性的,代价值的确定方式可以为:基于候选运动矢量获得的两个预测值的下采样SAD确定代价值。
在一个例子中,假设SR=2,则候选点可以为25个,针对这些候选点的顺序,可以采用从左到右,从上到下的顺序。参见图7A所示,这些候选点的顺序可以为:{Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}。或者,参见图7B所示,这些候选点的顺序可以为:{Mv(0,0),Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}。
确定这25个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移MV,利用最优偏移MV可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例,在此不再重复赘述。
在另一例子中,假设SR=2,候选点可以为21个,针对这些候选点的顺序,可以采用从左到右,从上到下的顺序。参见图7C所示,这些候选点的顺序为:{Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-1,2),Mv(0,2),Mv(1,2)}。或者,参见图7D所示,这些候选点的顺序为:{Mv(0,0),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-1,2),Mv(0,2),Mv(1,2)}。
确定这21个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移MV,利用最优偏移MV可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例,在此不再重复赘述。
在另一个例子中,假设SR=2,则候选点可以为25个,针对这些候选点的顺序,以运动矢量(0,0)为中心,采用距离中心从近到远的顺序。参见图7E所示,这些候选点的顺序可以为:{Mv(0,0),Mv(-1,0),Mv(0,-1),Mv(1,0),Mv(0,1),Mv(-1,1),Mv(-1,-1),Mv(1,-1),Mv(1,1),Mv(0,2),Mv(-2,0),Mv(0,-2),Mv(2,0),Mv(1,2),Mv(-1,2),Mv(-2,1),Mv(-2,-1),Mv(-1,-2),Mv(1,-2),Mv(2,-1),Mv(2,1),Mv(-2,2),Mv(-2,-2),Mv(2,-2),Mv(2,2)}。确定这25个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移MV,利用最优偏移MV可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例,在此不再重复赘述。
在另一个例子中,假设SR=2,则候选点可以为21个,针对这些候选点的顺序,以运动矢量(0,0)为中心,采用距离中心从近到远的顺序。参见图7F所示,这些候选点的顺序为:{Mv(0,0),Mv(-1,0),Mv(0,-1),Mv(1,0),Mv(0,1),Mv(-1,1),Mv(-1,-1),Mv(1,-1),Mv(1,1),Mv(0,2),Mv(-2,0),Mv(0,-2),Mv(2,0),Mv(1,2),Mv(-1,2),Mv(-2,1),Mv(-2,-1),Mv(-1,-2),Mv(1,-2),Mv(2,-1),Mv(2,1)}。确定这21个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移MV,利用最优偏移MV确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
在另一个例子中,假设SR=2,则候选点可以为13个,针对这些候选点的顺序,以运动矢量(0,0)为中心,采用距离中心从近到远的顺序。参见图7G所示,这些候选点的顺序为:{Mv(0,0),Mv(-1,0),Mv(0,-1),Mv(1,0),Mv(0,1),Mv(-1,1),Mv(-1,-1),Mv(1,-1),Mv(1,1),Mv(0,2),Mv(-2,0),Mv(0,-2),Mv(2,0)}。确定这13个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移MV,利用最优偏移MV可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
在上述实施例中,当第一个候选运动矢量为Mv(0,0)时,对第一个候选运动矢量Mv(0,0)的代价SAD(0,0)进行如下处理:SAD(0,0)=SAD(0,0)-SAD(0,0)/4,即将其强制减少1/4,针对其它候选运动矢量的代价SAD不进行上述处理。
在一种可能的实施方式中,在上述候选运动矢量的检验过程中,存在如下提前结束机制:
若第一个候选运动矢量(Mv(0,0))的代价SAD(0,0)小于阈值dx*dy,则不进行后续候选运动矢量的检验,即子块的最优整数像素偏移为Mv(0,0)。
若某个候选运动矢量的代价为0,则不进行后续候选运动矢量的检验,将当前的候选运动矢量作为最优整数像素偏移。
若在上述候选运动矢量的检验过程中,存在上述任何一个提前结束的情况,则不进行后续分像素偏移的计算过程,即直接通过整像素偏移获得子块的目标运动矢量。
实施例20:为了将第一原始运动矢量Org_MV0和第二原始运动矢量Org_MV1调整为第一目标运动矢量Refined_MV0和第二目标运动矢量Refined_MV1,实现方式与实施例16、实施例17类似。本实施例中,由于一次性的选取所有待处理的候选运动矢量,因此,可以对这些候选运动矢量进行并行处理,得到每个候选运动矢量的代价值,从而减少计算复杂度,提高编码性能。本实施例中,以原始运动矢量为中心,从(2*SR+1)*(2*SR+1)个点中,选择偏移不超过SR范围内的部分运动矢量。例如,从包括原始运动矢量在内的(2*SR+1)*(2*SR+1)个点中,选择N个(N大于等于1,小于等于(2*SR+1)*(2*SR+1))候选点。确定这N个点对应的运动矢量的代价值。按一定顺序扫描这N个点的代价值,选择最小代价值的运动矢量作为最优运动矢量。若代价值相等则优先选取顺序靠前的候选点。
与实施例19不同的是,实施例19的候选点的位置均是固定的,即与原始运动矢量无关,实施例20的候选点的位置与原始运动矢量相关,以下结合几个具体例子进行说明。
在一个例子中,假设SR=2,则候选点可以为13个,针对这些候选点的顺序,以运动矢量(0,0)为中心,采用距离中心从近到远的顺序。而且,在距离中心的第一层候选点,顺序与原始运动矢量的大小无关,而距离中心的第二层候选点,顺序与原始运动矢量的大小有关。这些候选点的顺序为:{Mv(0,0),Mv(-1,0),Mv(0,-1),Mv(1,0),Mv(0,1),Mv(-1,1),Mv(-1,-1),Mv(1,-1),Mv(1,1),Mv(sign_H*2,0),Mv(sign_H*2,sign_V*1),Mv(0,sign_V*2),Mv(0,sign_V*2)}。第一原始运动矢量记为MV0,水平分量为MV0_Hor,垂直分量为MV0_Ver。若MV0_Hor大于等于0,则sign_H=1;否则sign_H=-1;若MV0_Ver大于等于0,则sign_V=1;否则sign_V=-1。确定这13个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移MV,利用最优偏移MV可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
在另一个例子中,假设SR=2,则候选点可以为13个,针对这些候选点的顺序,以运动矢量(0,0)为中心,采用距离中心从近到远的顺序。而且,在距离中心的第一层候选点,顺序与原始运动矢量的大小无关,而距离中心的第二层候选点,顺序与原始运动矢量的大小有关,这些候选点的顺序为:{Mv(0,0),Mv(-1,0),Mv(0,-1),Mv(1,0),Mv(0,1),Mv(-1,1),Mv(-1,-1),Mv(1,-1),Mv(1,1),Mv(sign_H*2,0),Mv(sign_H*2,sign_V*1),Mv(0,sign_V*2),Mv(0,sign_V*2)}。第一原始运动矢量记为MV0,水平分量为MV0_Hor,垂直分量为MV0_Ver。若MV0_Hor大于0,则sign_H=1;否则sign_H=-1;若MV0_Ver大于0,则sign_V=1;否则sign_V=-1。确定这13个点的运动矢量对应的代价值,并按照上述顺序进行扫描,获得代价值最小的运动矢量作为最优偏移MV,利用最优偏移MV可以确定整像素运动矢量调整值和分像素运动矢量调整值,确定方式参见上述实施例。
实施例21:在上述实施例中,涉及根据第一参考块的第一像素值和第二参考块的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值。根据第一参考块的第一像素值和第二参考块的第二像素值,获取第一原始运动矢量对应的第三代价值、候选运动矢量对应的第四代价值。在一个例子中,根据未下采样的第一像素值和未下采样的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值、第一原始运动矢量对应的第三代价值、候选运动矢量对应的第四代价值。或者,对第一像素值进行下采样操作,对第二像素值进行下采样操作;根据下采样后的第一像素值和下采样后的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值、第一原始运动矢量对应的第三代价值、候选运动矢量对应的第四代价值。或者,对第一像素值进行移位和下采样操作,对第二像素值进行移位和下采样操作;然后,根据操作后的第一像素值和操作后的第二像素值,获取中心运动矢量对应的第一代价值、边缘运动矢量对应的第二代价值、第一原始运动矢量对应的第三代价值、候选运动矢量对应的第四代价值。
针对不同的情况,确定代价值的方式类似。例如,为了获取中心运动矢量对应的代价值,可以从第一参考块中复制获取中心运动矢量对应的子参考块A1,从第二参考块中复制获取中心运动矢量的对称运动矢量对应的子参考块B1,利用子参考块A1的第一像素值和子参考块B1的第二像素值,获取中心运动矢量对应的代价值。为了获取边缘运动矢量对应的代价值,可以从第一参考块中复制获取边缘运动矢量对应的子参考块A2,从第二参考块中复制获取边缘运动矢量的对称运动矢量对应的子参考块B2,利用子参考块A2的第一像素值和子参考块B2的第二像素值,获取边缘运动矢量对应的代价值,以此类推。
综上所述,为了获取运动矢量对应的代价值,可以从第一参考块中获取该运动矢量对应的子参考块,并从第二参考块中获取该运动矢量的对称运动矢量对应的子参考块,然后利用两个子参考块的像素值获取该运动矢量对应的代价值,对此过程不再赘述。
实施例22:在实施例21的基础上,根据未下采样的第一像素值(即第一参考块中的子参考块的未下采样的像素值)和未下采样的第二像素值(即第二参考块中的子参考块的未下采样的像素值),获取运动矢量对应的代价值。例如,假设第一参考块中的子参考块为pred0,第二参考块中的子参考块为pred1,则根据子参考块pred0和子参考块pred1的所有像素值的SAD确定代价值,不需要对子参考块pred0和子参考块pred1的像素进行垂直下采样。
基于子参考块pred0和子参考块pred1的所有像素值,代价值计算公式为:
Figure BDA0002690104060000261
在上述公式中,cost可以表示代价值,W可以为子参考块的宽度值,H可以为子参考块的高度值,pred0(i,j)可以表示子参考块pred0的第i列第j行的像素值,pred1(i,j)可以表示子参考块pred1的第i列第j行的像素值,abs(x)可以表示x的绝对值。
实施例23:在实施例21的基础上,可以对第一像素值进行下采样操作,对第二像素值进行下采样操作;可以根据下采样后的第一像素值(即第一参考块中的子参考块的下采样后的像素值)和下采样后的第二像素值(即第二参考块中的子参考块的下采样后的像素值),获取运动矢量对应的代价值。例如,假设第一参考块中的子参考块为pred0,第二参考块中的子参考块为pred1,则根据子参考块pred0和子参考块pred1的所有像素值的SAD确定代价值。在利用所有像素值的SAD确定代价值时,对子参考块pred0和子参考块pred1的像素值进行垂直N倍(N为大于0的整数,可以为2)下采样。
基于子参考块pred0和子参考块pred1的所有像素值,代价值计算公式为:
Figure BDA0002690104060000271
在上述公式中,cost可以表示代价值,W可以为子参考块的宽度值,H可以为子参考块的高度值,N可以表示下采样的参数,为大于0的整数,可以为2,pred0(1+N(i-1),j)可以表示子参考块pred0的第1+N(i-1)列第j行的像素值,pred1(1+N(i-1),j)可以表示子参考块pred1的第1+N(i-1)列第j行的像素值,abs(x)可以表示x的绝对值。
实施例24:在实施例21的基础上,对第一像素值进行移位和下采样操作,对第二像素值进行移位和下采样操作;根据操作后的第一像素值(第一参考块中的子参考块的移位和下采样后的像素值)和操作后的第二像素值(第二参考块中的子参考块的移位和下采样后的像素值),获取运动矢量对应的代价值。例如,假设第一参考块中的子参考块为pred0,第二参考块中的子参考块为pred1,pred0和pred1均采用D比特的存储方式,即,pred0中的每个像素值均采用D比特进行存储,pred1中的每个像素值均采用D比特进行存储。
若D小于等于8,则根据子参考块pred0和子参考块pred1的所有像素值的SAD确定代价值。在利用所有像素值的SAD确定代价值时,对子参考块pred0和子参考块pred1的像素值进行垂直N倍(N为大于0的整数,可以为2)下采样。基于子参考块pred0和子参考块pred1的所有像素值,代价值计算公式为:
Figure BDA0002690104060000273
在上述公式中,cost表示代价值,W为子参考块的宽度值,H为子参考块的高度值,N表示下采样的参数,为大于0的整数,可以为2,pred0(1+N(i-1),j)表示子参考块pred0的第1+N(i-1)列第j行的像素值,pred1(1+N(i-1),j)表示子参考块pred1的第1+N(i-1)列第j行的像素值,abs(x)表示x的绝对值,综上可以看出,即仅计算第1行,第N+1行,第2N+1行…的差的绝对值和。
若D大于8,先将子参考块pred0和子参考块pred1的所有像素值移位到8比特,获得8比特的pred0和8比特的pred1,记为pred0-8bit(i,j)和pred1-8bit(i,j)。其目的是为了节省SAD计算的存储代价,8位的存储可以实现更高并行度。
pred0_8bit(i,j)=pred0(i,j)>>(D-8),pred1_8bit(i,j)=pred1(i,j)>>(D-8)
然后,对8比特的pred0和8比特的pred1的像素值进行垂直N倍(N为大于0的整数,可以为2)下采样,这样,代价值的计算公式可以为:
Figure BDA0002690104060000272
在上述公式中,各个表达式的含义参见上述实施例,在此不再重复赘述。
实施例25:在上述实施例中,针对当前块的每个子块,根据该子块的第一目标运动矢量和第二目标运动矢量,确定该子块的预测值,并根据每个子块的预测值确定当前块的预测值。例如,基于子块的第一目标运动矢量和第二目标运动矢量,通过插值(如8抽头插值)获得两个方向的参考块(即第三参考块和第四参考块,可以包括三个分量的预测值,由于目标运动矢量可能为分像素,所以需要插值)。然后,根据第三参考块的第三像素值和第四参考块的第四像素值进行加权,得到最终的预测值(如三个分量的预测值)。
在一种可能的实施方式中,若最优运动矢量与初始运动矢量(即第一原始运动矢量或者第二原始运动矢量)相同,则基于子块的第一目标运动矢量,从第一参考帧中确定该子块对应的第三参考块;基于该子块的第二目标运动矢量,从第二参考帧中确定该子块对应的第四参考块。对该第三参考块的像素值和该第四参考块的像素值进行加权,得到该子块的预测值。
例如,假设子块的大小为dx*dy,基于第一目标运动矢量从第一参考帧中确定大小为dx*dy的第三参考块。例如,从第一参考帧中确定大小为A*B的参考块,A*B的大小与插值方式有关,如A大于dx,B大于dy,对此不做限制。通过对该参考块中的像素值进行插值,可以得到大小为dx*dy的第三参考块,对此插值方式不做限制。基于第二目标运动矢量从第二参考帧中确定大小为dx*dy的第四参考块。例如,从第二参考帧中确定大小为A*B的参考块,A*B的大小与插值方式有关,如A大于dx,B大于dy,对此不做限制。通过对该参考块中的像素值进行插值,可以得到大小为dx*dy的第四参考块,对此插值方式不做限制。
在另一种可能的实施方式中,若最优运动矢量与初始运动矢量不同,则可以从第一参考帧中确定第五参考块,并对该第五参考块进行扩展,得到第六参考块;然后,基于该子块的第一目标运动矢量,从该第六参考块中选择该子块对应的第三参考块。以及,可以从第二参考帧中确定第七参考块,并对该第七参考块进行扩展,得到第八参考块;基于该子块的第二目标运动矢量,从该第八参考块中选择该子块对应的第四参考块。然后,可以对该第三参考块的像素值和该第四参考块的像素值进行加权,得到该子块的预测值。
例如,假设子块的大小为dx*dy,基于第一原始运动矢量从第一参考帧中确定大小为dx*dy的第五参考块。例如,从第一参考帧中确定大小为A*B的参考块,A*B的大小与插值方式有关,如A大于dx,B大于dy,对此不做限制。通过对该参考块中的像素值进行插值,可以得到大小为dx*dy的第五参考块,对此插值方式不做限制。然后,对第五参考块进行扩展,得到第六参考块,例如,通过临近值拷贝的方式,对第五参考块进行上下左右的填充,将填充后的参考块作为第六参考块,第六参考块的大小可以大于dx*dy。然后,基于子块的第一目标运动矢量,从第六参考块中选择子块对应的大小为dx*dy的第三参考块。
假设子块的大小为dx*dy,基于第二原始运动矢量从第二参考帧中确定大小为dx*dy的第七参考块。例如,从第二参考帧中确定大小为A*B的参考块,A*B的大小与插值方式有关,如A大于dx,B大于dy,对此不做限制。通过对该参考块中的像素值进行插值,可以得到大小为dx*dy的第七参考块,对此插值方式不做限制。然后,可以对第七参考块进行扩展,得到第八参考块,例如,通过临近值拷贝的方式,对第七参考块进行上下左右的填充,将填充后的参考块作为第八参考块,第八参考块的大小可以大于dx*dy。然后,基于子块的第二目标运动矢量,从第八参考块中选择子块对应的大小为dx*dy的第四参考块。
实施例26:在获得目标运动矢量后,基于每个子块的目标运动矢量,通过8抽头插值滤波器获得两个方向的预测值(即YUV三个分量,即上述第三参考块的预测值和第四参考块的预测值),并加权获得最终的预测值。或者,基于每个子块的目标运动矢量,通过双线性插值滤波器(此处不再是8抽头插值滤波器)获得两个方向的预测值(即YUV三个分量,即上述第三参考块的预测值和第四参考块的预测值),并加权获得最终的预测值。
实施例27:在获得两个方向的预测值后,通过均值加权平均(即两个方向的预测值的权重相同),获得最终的预测值。或者,在获得两个方向的预测值后,通过加权平均获得最终的预测值,两个预测值的权值可以不同。例如,两个预测值的权值比例可以为1:2,1:3,2:1等。对于编码端,权重表中可以包括1:2,1:3,2:1等权值比例,编码端可以确定每个权值比例的代价值,并确定代价值最小的权值比例,这样,编码端可以基于代价值最小的权值比例,通过加权平均获得最终的预测值。编码端向解码端发送编码比特流时,该编码比特流携带权值比例在权重表中的索引值。这样,解码端通过解析编码比特流的索引值,从权重表中获取与该索引值对应的权值比例,基于权值比例通过加权平均获得最终的预测值。
在一个例子中,权重表可以包括但不限于{-2,3,4,5,10}。示例性的,两个权重的和可以为8,针对每个权重来说,权重可以是负值,只要两个权重的和为8即可。
例如,权重“-2”就是一个负值,当一个预测值的权重为-2时,另一个预测值的权重就是10,即两个权重的和为8,在此情况下,最终预测值=(预测值1*(-2)+预测值2*(8-(-2)))。
又例如,权重“10”表示一个预测值的权重为10,而另一个预测值的权重就是-2,即两个权重的和为8,在此情况下,最终预测值=(预测值1*(10)+预测值2*(-2))。
又例如,权重“3”表示一个预测值的权重为3,而另一个预测值的权重就是5,即两个权重的和为8,在此情况下,最终预测值=(预测值1*(3)+预测值2*(5))。
又例如,权重“5”表示一个预测值的权重为5,而另一个预测值的权重就是3,即两个权重的和为8,在此情况下,最终预测值=(预测值1*(5)+预测值2*(3))。
又例如,权重“4”表示一个预测值的权重为4,而另一个预测值的权重就是4,即两个权重的和为8,在此情况下,最终预测值=(预测值1*(4)+预测值2*(4))。
在一种可能的实施方式中,针对当前块的每个子块,参见上述实施例,可以得到第三参考块的第三像素值和第四参考块的第四像素值,然后,根据第三参考块的第三像素值和第四参考块的第四像素值进行加权,得到最终的预测值。例如,对第三像素值,第三像素值对应的第一权重,第四像素值,第四像素值对应的第二权重进行加权处理,得到该子块的预测值。若通过均值加权平均(即两个权重相同)获得最终的预测值,则第一权重与第二权重相同。
实施例28:在上述实施例中,可以保存当前块的每个子块的第一目标运动矢量和第二目标运动矢量,或者,保存当前块的每个子块的第一原始运动矢量和第二原始运动矢量,或者,保存当前块的每个子块的第一原始运动矢量,第二原始运动矢量,第一目标运动矢量和第二目标运动矢量。针对保存的运动矢量,这些运动矢量可以用于后续块的编码/解码参考。
例如,以保存当前块的每个子块的第一目标运动矢量和第二目标运动矢量为例进行说明,第一目标运动矢量和第二目标运动矢量用于当前帧的环路滤波;第一目标运动矢量和第二目标运动矢量用于后续帧的时域参考;和/或,第一目标运动矢量和第二目标运动矢量用于当前帧的空域参考。例如,当前块的每个子块的第一目标运动矢量和第二目标运动矢量,可以用于当前块的运动补偿,也可以用于后续帧的时域参考。又例如,当前块的每个子块的第一目标运动矢量和第二目标运动矢量,可以用于当前块的运动补偿,也可以用于当前块的环路滤波过程,还可以用于后续帧的时域参考。又例如,当前块的每个子块的第一目标运动矢量和第二目标运动矢量,可以用于当前块的运动补偿,也可以用于当前块的环路滤波过程,还可以用于后续帧的时域参考,还可以用于当前帧的空域参考,以下对此进行说明。
当前块的每个子块的第一目标运动矢量和第二目标运动矢量,可以用于空域中某些LCU(Largest Coding Unit,最大编码单元)内的块的空域参考。由于编解码顺序是从上到下,从左到右,因此,当前块的运动矢量可以被当前LCU内的其他块参考,也可以被后续相邻LCU内的块参考。由于获得的目标运动矢量所需要的计算量较大,若后续块参考当前块的目标运动矢量,则需要等待较长时间。为了避免过多等待引起的时延,只允许少数空域相邻块参考当前块的目标运动矢量,其他块则参考当前块的原始运动矢量。
示例性的,这些少数的块包括位于当前LCU下侧的下侧LCU和右下侧LCU内的子块,而位于右侧LCU和左侧LCU内的子块,则不可参考当前块的目标运动矢量。
实施例29:以下结合一个具体例子,对运动矢量的调整过程进行说明。运动矢量调整的具体步骤可以如下,下文中的“复制”说明不需要插值即可获得,MV(即运动矢量)为整像素偏移则可直接从参考帧中复制,否则需要进行插值获得。
步骤e1、若针对当前块启动运动矢量调整模式,则执行下面的过程。
步骤e2、准备参考像素值(假设当前块的宽为W,高为H)。
准备用于步骤e3的整像素块:基于原始运动矢量(list0的原始运动矢量记为Org_MV0,list1的原始运动矢量记为Org_MV1),在对应参考帧的对应位置复制两块面积为(W+FS-1)*(H+FS-1)的三个分量的整像素块。此外,准备用于步骤e4的整像素块:在上述(W+FS-1)*(H+FS-1)的整像素块的基础上,将(W+FS-1)*(H+FS-1)的三个分量的整像素块,进行上下左右各SR行/列的扩展,扩展后得到面积为(W+FS-1+2*SR)*(H+FS-1+2*SR)的三个分量的整像素块,记为Pred_Inter0和Pred_Inter1,参考图8所示。示例性的,内层黑色区域的尺寸为当前块的尺寸,外拓白色区域为原始运动矢量进行8抽头滤波器插值所需额外参考像素,外层黑色区域为目标运动矢量进行8抽头滤波器插值所需的额外参考像素。
针对内层W*H的黑色区域和白色区域,是从参考帧中获取的像素值,针对外层黑色区域的像素值,不需要从参考帧中获取,而是可以采用拷贝相邻像素值的方式获得。在一个例子中,将白色区域的第一行W+FS-1个像素值,复制给外层黑色区域的前SR行的像素值。将白色区域的最后一行W+FS-1个像素值,复制给外层黑色区域的最后SR行的像素值。然后,将白色区域第一列的H+FS-1个像素值以及上下各SR个已获得的外层黑色区域的像素值,复制给外层黑色区域的前SR列的像素值。将白色区域最后一列的H+FS-1个像素值及上下各SR个已获得的外层黑色区域的像素值,复制给外层黑色的最后SR列的像素值。在另一个例子中,将白色区域的第一列H+FS-1个像素值,复制给外层黑色区域的前SR列的像素值。将白色区域的最后一列H+FS-1个像素值,复制给外层黑色区域的最后SR列的像素值。然后,将白色区域第一行的W+FS-1个像素值及左右各SR个已获得的外层黑色区域的像素值,复制给外层黑色区域的前SR行的像素值。将白色区域的最后一行的W+FS-1个像素值及左右各SR个已获得的外层黑色区域的像素值,复制给外层黑色区域最后SR行的像素值。
基于两个不同方向的运动信息进行第一次运动补偿。如对亮度分量(因为后续搜索过程用亮度分量计算代价值),基于两块面积为(W+FS-1)*(H+FS-1)的整像素参考块,通过双线性插值获得两块尺寸为(W+2*SR)*(H+2*SR)的初始参考预测值(记为Pred_Bilinear0和Pred_Bilinear1),FS为滤波器抽头数,默认为8,SR为搜索范围,即目标运动矢量与原始运动矢量最大水平/竖直分量插值,默认为2。Pred_Bilinear0/1用于步骤e3的使用。
步骤e3、对于当前块的每个dx*dy子块,分别获得目标运动矢量(两个方向的目标运动矢量分别记为Refined_MV0和Refined_MV1)。
步骤e31,进行SR次迭代,获得最优的整像素MV点的整像素偏移,记为IntegerDeltaMV,将IntegerDeltaMV初始化为(0,0),每次迭代执行如下过程:
步骤e311,将deltaMV设为(0,0)。若为首次迭代过程,则基于原始运动矢量在参考像素Pred_Bilinear0/1中,复制获得两块预测值块(其实就是Pred_Bilinear0/1最中心的W*H的块),基于这两个预测值块,获得初始代价值,也就是两个方向预测值块的垂直2倍下采样后的SAD。若该初始代价值小于dx*dy,dx和dy是当前子块的宽度和高度,则直接跳过后续搜索过程,执行步骤步骤e32,并将notZeroCost设为false。
步骤e312,以上述初始点为中心,按照{Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}的顺序得到24个偏移MV(这24个偏移MV均称为MVOffset),并进行这些偏移MV的代价值的计算与比较过程。例如,基于某MVOffset,在参考像素Pred_Bilinear0/1中,通过MVOffset获得两块预测值块(即Pred_Bilinear0中进行中心位置偏移MVOffset的W*H的块,Pred_Bilinear1中进行中心位置偏移-MVOffset(与list0相反)的W*H的块),计算这两个块的下采样SAD作为MVOffset的代价值。保留代价值最小的MVOffset(存于deltaMV)。
基于deltaMV值更新IntegerDeltaMV:IntegerDeltaMV=deltaMV。
步骤e313,经过一次迭代后,若最优MV仍为初始MV或者最小代价值为0,则不进行下一次迭代搜索过程,执行步骤e32,并将notZeroCost设为false。
步骤e32、可以以步骤e31的最优整像素MV点为中心,获得最优的分像素偏移MV,记为SPMV(即subMV),将SPMV初始化为(0,0),然后执行如下过程:
步骤e321、只有notZeroCost不为false,且deltaMV为(0,0)时,才进行后续处理,否则,直接利用IntegerDeltaMV对原始运动矢量进行调整。
步骤e322、将E(x,y)表示为步骤e31所得最优MV点偏移(x,y)的MV对应代价值(步骤e31计算的代价值)。基于中心及上下左右五个点的E(x,y),可得E(x,y)最小的点的偏移(x0,y0)为:x0=N*(E(-1,0)–E(1,0))/(E(-1,0)+E(1,0)–2*E(0,0)),y0=N*(E(0,-1)–E(0,1))/(E(0,-1)+E(0,1)–2*E(0,0))。在一个例子中,对于1/2、1/4、1/8和1/16的运动矢量像素精度,则N=1、2、4和8。然后,可以将(x0,y0)赋值给deltaMv,SPMV=deltaMv/2N,若当前为1/16的运动矢量像素精度,则SPMV可以为(x0/16,y0/16)。
若E(-1,0)=E(0,0),则水平向左偏移半个像素(deltaMv[0]=-N)。
若E(1,0)=E(0,0),则水平向右偏移半个像素(deltaMv[0]=N)。
若E(0,-1)=E(0,0),则垂直向上偏移半个像素(deltaMv[1]=-N)。
若E(0,1)=E(0,0),则垂直向下偏移半个像素(deltaMv[1]=N)。
步骤e33、基于步骤e31的整像素偏移IntegerDeltaMV和步骤e32的分像素偏移SPMV,获得最优偏移MV,将最优偏移MV记为BestMVoffset。BestMVoffset=IntegerDeltaMV+SPMV。基于BestMVoffset可以获得两个方向的目标运动矢量:Refined_MV0=Org_MV0+BestMVoffset;Refined_MV1=Org_MV1-BestMVoffset。
步骤e4、基于每个子块的目标运动矢量,进行8抽头插值获得两个方向的三个分量的预测值,并加权获得最终的预测值(如三个分量的预测值)。例如,基于每个子块的目标运动矢量Refined_MV0和Refined_MV1,在步骤e2准备的Pred_Inter0/1中,通过插值获得对应预测块(运动矢量可能为分像素,需插值才能获得对应像素块)。
步骤e5、目标运动矢量,用于当前块的运动补偿(即获得每个子块的预测值和当前块的预测值)和后续帧的时域参考,不用于当前帧的环路滤波使用和空域参考。
实施例30:与实施例29不同的是,参考像素的准备过程移动到每个dx*dy的子块中进行。在准备参考像素时,仅准备(dx+(filtersize-1))*(dy+(filtersize-1))的像素块,若搜索得到的最优运动矢量不是原始运动矢量,进行参考像素的扩充,否则不进行扩充。对于当前块的每个dx*dy的子块,分别获得目标运动矢量,基于目标运动矢量进行运动补偿,加权获得最终的预测值,下面过程是针对当前块的每个dx*dy的子块:
步骤f1、若针对当前块启动运动矢量调整模式,则执行下面的过程。
步骤f2、准备用于步骤f3的整像素块:例如,仅对亮度分量进行:基于原始运动矢量(list0的原始运动矢量记为Org_MV0,list1的原始运动矢量记为Org_MV1),从对应参考帧的对应位置中获取两块面积为(dx+(filtersize-1))*(dy+(filtersize-1))的整像素块。
示例性的,filtersize可以是滤波器抽头数,默认为8。
步骤f3、对于当前块的每个dx*dy子块,分别获得目标运动矢量(两个方向的目标运动矢量分别记为Refined_MV0和Refined_MV1)。
示例性的,步骤f3的实现过程可以参见步骤e3,在此不再详加赘述。
例如,基于原始运动矢量进行第一次运动矢量补偿。仅对亮度分量,基于bilinear插值获得尺寸为(dx+2*IterNum)*(dy+2*IterNum)的初始预测值,IterNum默认为2,IterNum可以为搜索范围SR,IterNum可以为目标运动矢量与原始运动矢量的最大水平/竖直分量插值。上述得到的原始运动矢量的初始预测值存于m_cYuvPredTempL0/1中。
进行25个点的代价值计算,获得最优的整像素MV点的整像素偏移。若为第一个点(MV偏移(0,0)),则获得初始cost(cost为两个方向预测值的垂直2倍下采样的SAD,若该cost小于dx*dy,则直接跳过后续搜索过程(notZeroCost设为false)。以上述初始点为中心,进行24个点的cost计算与比较,保留cost最小的点,作为下一步的新中心点。以最优的整像素MV点为中心,获得最优的1/16像素的分像素偏移。基于整像素偏移和分像素偏移,获得最优偏移MV,将最优偏移MV记为BestMVoffset。BestMVoffset=IntegerDeltaMV+SPMV。基于BestMVoffset可以获得两个方向的目标运动矢量:Refined_MV0=Org_MV0+BestMVoffset;Refined_MV1=Org_MV1-BestMVoffset。
步骤f4、若最优偏移MV为(0,0),则不进行下面步骤(即采用原始运动矢量时不进行额外扩充)。若最优偏移MV不为(0,0),则重新获取整像素(由于上述步骤没有进行参考像素扩充,偏移后所需的参考像素超过上述步骤获得的参考像素的范围),则执行如下步骤:
针对list0的参考帧和list1的参考帧,对U/V分量分别进行(因为步骤f2获取了亮度分量):从参考帧中获取(dxc+(filtersizeC-1))*(dyc+(filtersizeC-1))的整像素值,dxc和dyc与采样率有关,当YUV为420采样率时,dxc=dx/2,dyc=dy/2,当然,这里只是示例,对此dxc和dyc不做限制。filtersizeC可以为4,当然,这里只是示例,对此filtersizeC不做限制。又例如,可以直接从参考帧中获取dx*dy的整像素值,对此不做限制。
针对list0的参考帧和list1的参考帧,对三个分量分别进行进行填充。例如,通过临近值边拷贝的方法,在上述步骤得到的整像素值(如(dxc+(filtersizeC-1))*(dyc+(filtersizeC-1))的整像素值)的基础上,进行上下左右填充(如填充宽度亮度分量为2,420的色度分量为1)。示例性的,这里并没有采用当前子块周围(在当前CU块内)可以使用的整像素值。
步骤f5、基于每个子块的目标运动矢量和两个参考像素块(步骤f4得到),进行8抽头插值获得两个方向的三个分量的预测值,加权获得最终的预测值(如三个分量的预测值)。
实施例31:上述实施例可以单独实现,也可以任意组合实现,对此不做限制。
例如,实施例4可以和实施例2组合实现;实施例4可以和实施例3组合实现。
实施例5可以和实施例2组合实现;实施例5可以和实施例2、实施例4组合实现;实施例5可以和实施例3组合实现;实施例5可以和实施例3、实施例4组合实现。
实施例6可以单独实现,实施例7可以单独实现,实施例8可以和实施例7组合实现;实施例9可以和实施例7组合实现;实施例10可以和实施例7组合实现;实施例11可以和实施例7组合实现;实施例12可以和实施例7组合实现;实施例13可以和实施例7组合实现;实施例14可以和实施例7组合实现;实施例15可以和实施例7组合实现。
实施例16可以单独实现,实施例17可以单独实现,实施例18可以和实施例17组合实现;实施例19可以和实施例17组合实现;实施例20可以和实施例17组合实现。
实施例21可以和实施例6组合实现,实施例21可以和实施例16组合实现,实施例21可以和实施例7组合实现,实施例21可以和实施例17组合实现,实施例22可以和实施例21组合实现,实施例23可以和实施例21组合实现,实施例24可以和实施例21组合实现。
实施例25可以和实施例2组合实现;实施例25可以和实施例2、实施例4组合实现;实施例25可以和实施例3组合实现;实施例25可以和实施例3、实施例4组合实现。
实施例26可以和实施例25组合实现;实施例27可以和实施例25组合实现。
实施例28可以和实施例2组合实现;实施例28可以和实施例2、实施例4组合实现;实施例28可以和实施例3组合实现;实施例28可以和实施例3、实施例4组合实现。
实施例29可以单独实现,实施例29可以和实施例4组合实现。实施例30可以单独实现,实施例30可以和实施例4组合实现。当然,上述只是本申请的几个示例,对此不做限制,本申请涉及的所有实施例,均可以单独实现或者组合实现,对此不再详加赘述。
实施例32:
基于与上述方法同样的申请构思,本申请实施例还提出一种编解码装置,应用于编码端或者解码端,如图9A所示,为所述装置的结构图,所述装置包括:
确定模块911,用于若如下条件均满足,则确定对当前块启动运动矢量调整模式:
控制信息为允许当前块使用运动矢量调整模式;
当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式;
当前块的预测值通过来自两个参考帧的参考块的加权获得,且所述两个参考帧的显示顺序分别位于当前帧的一前一后,且所述两个参考帧与当前帧的距离相同;
当前块的两个参考帧的加权权重相同;
当前块的两个参考帧均是短期参考帧;
当前块的宽度,高度和面积均在限定范围内;
当前块的两个参考帧的尺寸与当前帧的尺寸均相同;
运动补偿模块912,用于若确定对当前块启动运动矢量调整模式,则对当前块进行运动补偿。
所述运动补偿模块912具体用于:针对所述当前块包括的至少一个子块中的每个子块:
根据所述子块的第一原始运动矢量确定所述子块对应的第一参考块,根据所述子块的第二原始运动矢量确定所述子块对应的第二参考块;根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对所述第一原始运动矢量和所述第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;根据所述第一目标运动矢量和所述第二目标运动矢量确定所述子块的预测值;
根据每个子块的预测值确定所述当前块的预测值。
所述确定模块911还用于:若如下条件中的任意一个条件不满足,则确定不对当前块启动运动矢量调整模式:控制信息为允许当前块使用运动矢量调整模式;
当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式;
当前块的预测值通过来自两个参考帧的参考块的加权获得,且所述两个参考帧的显示顺序分别位于当前帧的一前一后,且所述两个参考帧与当前帧的距离相同;
当前块的两个参考帧的加权权重相同;
当前块的两个参考帧均是短期参考帧;
当前块的宽度,高度和面积均在限定范围内;
当前块的两个参考帧的尺寸与当前帧的尺寸均相同。
所述控制信息为允许当前块使用运动矢量调整模式包括:序列级控制信息为允许当前块使用运动矢量调整模式;和/或,帧级控制信息为允许当前块使用运动矢量调整模式。
当前块的宽度,高度和面积均在限定范围内包括:宽度大于或等于第一阈值,高度大于或等于第二阈值,面积大于或等于第三阈值;或者,宽度大于或等于第一阈值,高度大于或等于第二阈值,面积大于第四阈值;其中,所述第三阈值大于所述第四阈值。
所述第一阈值为8,所述第二阈值为8,所述第三阈值为128,所述第四阈值为64。
所述运动补偿模块912根据所述子块的第一原始运动矢量确定所述子块对应的第一参考块,根据所述子块的第二原始运动矢量确定所述子块对应的第二参考块时具体用于:
基于所述子块的第一原始运动矢量,从第一参考帧中确定所述子块对应的第一参考块;所述第一参考块中每个像素点的像素值,是通过对第一参考块中的相邻像素点的像素值进行插值得到,或者,通过对第一参考块中的相邻像素点的像素值进行拷贝得到;
基于所述子块的第二原始运动矢量,从第二参考帧中确定所述子块对应的第二参考块;所述第二参考块中每个像素点的像素值,是通过对第二参考块中的相邻像素点的像素值进行插值得到,或,通过对第二参考块中的相邻像素点的像素值进行拷贝得到。
所述运动补偿模块912根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对所述第一原始运动矢量和所述第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量时具体用于:
以初始运动矢量为中心,从所述初始运动矢量周围的包括所述初始运动矢量的运动矢量中选择部分或者全部运动矢量,并将选择的运动矢量确定为候选运动矢量;其中,所述初始运动矢量为所述第一原始运动矢量或者所述第二原始运动矢量;
根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,从所述初始运动矢量和各个候选运动矢量中选择一个运动矢量作为最优运动矢量;
根据所述最优运动矢量对所述第一原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量,并根据所述最优运动矢量对所述第二原始运动矢量进行调整,得到所述第二原始运动矢量对应的第二目标运动矢量。
所述运动补偿模块912根据所述最优运动矢量对所述第一原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量,并根据所述最优运动矢量对所述第二原始运动矢量进行调整,得到所述第二原始运动矢量对应的第二目标运动矢量时具体用于:
根据所述最优运动矢量确定所述子块的第一整像素运动矢量调整值,第二整像素运动矢量调整值,第一分像素运动矢量调整值和第二分像素运动矢量调整值;
根据所述第一整像素运动矢量调整值和所述第一分像素运动矢量调整值,对所述第一原始运动矢量进行调整,得到所述子块的第一目标运动矢量;
根据所述第二整像素运动矢量调整值和所述第二分像素运动矢量调整值,对所述第二原始运动矢量进行调整,得到所述子块的第二目标运动矢量。
若所述最优运动矢量与所述初始运动矢量相同,所述运动补偿模块912根据所述第一目标运动矢量和所述第二目标运动矢量确定所述子块的预测值时具体用于:
基于所述子块的第一目标运动矢量,从第一参考帧中确定所述子块对应的第三参考块;
基于所述子块的第二目标运动矢量,从第二参考帧中确定所述子块对应的第四参考块;
对第三参考块的像素值和第四参考块的像素值进行加权,得到所述子块的预测值。
若所述最优运动矢量与所述初始运动矢量不同,所述运动补偿模块912根据所述第一目标运动矢量和所述第二目标运动矢量确定所述子块的预测值时具体用于:
从第一参考帧中确定第五参考块,并对所述第五参考块进行扩展,得到第六参考块;基于所述子块的第一目标运动矢量,从所述第六参考块中选择所述子块对应的第三参考块;
从第二参考帧中确定第七参考块,并对所述第七参考块进行扩展,得到第八参考块;基于所述子块的第二目标运动矢量,从所述第八参考块中选择所述子块对应的第四参考块;
对第三参考块的像素值和第四参考块的像素值进行加权,得到所述子块的预测值。
所述运动补偿模块912对第三参考块的像素值和第四参考块的像素值进行加权,得到所述子块的预测值时具体用于:对所述第三参考块的像素值,所述第三参考块的像素值对应的第一权重,所述第四参考块的像素值,所述第四参考块的像素值对应的第二权重进行加权处理,得到所述子块的预测值;其中,所述第一权重与所述第二权重相同。
本申请实施例提供的解码端设备,从硬件层面而言,其硬件架构示意图具体可以参见图9B所示。包括:处理器921和机器可读存储介质922,所述机器可读存储介质922存储有能够被所述处理器921执行的机器可执行指令;所述处理器921用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,处理器用于执行机器可执行指令,以实现如下步骤:
若如下条件均满足,则确定对当前块启动运动矢量调整模式:
控制信息为允许当前块使用运动矢量调整模式;
当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式;
当前块的预测值通过来自两个参考帧的参考块的加权获得,且所述两个参考帧的显示顺序分别位于当前帧的一前一后,且所述两个参考帧与当前帧的距离相同;
当前块的两个参考帧的加权权重相同;
当前块的两个参考帧均是短期参考帧;
当前块的宽度,高度和面积均在限定范围内;
当前块的两个参考帧的尺寸与当前帧的尺寸均相同;
若确定对当前块启动运动矢量调整模式,则对所述当前块进行运动补偿。
本申请实施例提供的编码端设备,从硬件层面而言,其硬件架构示意图具体可以参见图9C所示。包括:处理器931和机器可读存储介质932,所述机器可读存储介质932存储有能够被所述处理器931执行的机器可执行指令;所述处理器931用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,处理器用于执行机器可执行指令,以实现如下步骤:
若如下条件均满足,则确定对当前块启动运动矢量调整模式:
控制信息为允许当前块使用运动矢量调整模式;
当前块的预测模式为普通融合模式;或者,当前块的预测模式为融合模式或跳过模式,且当前块的预测模式不是除普通融合模式之外的其它模式;
当前块的预测值通过来自两个参考帧的参考块的加权获得,且所述两个参考帧的显示顺序分别位于当前帧的一前一后,且所述两个参考帧与当前帧的距离相同;
当前块的两个参考帧的加权权重相同;
当前块的两个参考帧均是短期参考帧;
当前块的宽度,高度和面积均在限定范围内;
当前块的两个参考帧的尺寸与当前帧的尺寸均相同;
若确定对当前块启动运动矢量调整模式,则对所述当前块进行运动补偿。
基于与上述方法同样的申请构思,本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本申请上述示例公开的编解码方法。其中,上述机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (15)

1.一种解码方法,其特征在于,应用于解码端,所述方法包括:
若如下条件均满足,则确定对当前块启用运动矢量调整模式:
帧级控制信息用于表示当前帧内的图像块启用运动矢量调整模式;
当前块启用普通融合模式;
当前块不启用帧内帧间加权CIIP模式和编码运动差的融合MMVD模式;
当前块启用双向预测,其中,当前块的预测值通过当前块用于双向预测的两个参考帧的参考块的加权获得,且所述加权的权重相同;所述两个参考帧来的方向不同,一个参考帧位于当前帧之前,另一个参考帧位于当前帧之后,且所述两个参考帧与所述当前帧的距离相同;其中,所述加权的权重相同包括帧级加权权重相同和块级加权权重相同;
所述两个参考帧均是短期参考帧;所述两个参考帧的尺寸与所述当前帧的尺寸均相同;
当前块的尺寸满足:宽度大于或等于8,高度大于或等于8,宽与高乘积大于或等于128;
若确定对当前块启用所述运动矢量调整模式,则根据所述运动矢量调整模式对所述当前块进行运动补偿得到所述当前块的预测值。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若如下条件中的任意一个条件不满足,则确定不对当前块启用运动矢量调整模式:
帧级控制信息用于表示当前帧内的图像块启用运动矢量调整模式;
当前块启用普通融合模式;
当前块不启用帧内帧间加权CIIP模式和编码运动差的融合MMVD模式;
当前块启用双向预测,其中,当前块的预测值通过当前块用于双向预测的两个参考帧的参考块的加权获得,且所述加权的权重相同;所述两个参考帧来的方向不同,一个参考帧位于当前帧之前,另一个参考帧位于当前帧之后,且所述两个参考帧与所述当前帧的距离相同;其中,所述加权的权重相同包括帧级加权权重相同和块级加权权重相同;
所述两个参考帧均是短期参考帧;所述两个参考帧的尺寸与所述当前帧的尺寸均相同;
当前块的尺寸满足:宽度大于或等于8,高度大于或等于8,宽与高乘积大于或等于128。
3.根据权利要求1或2所述的方法,其特征在于,所述根据所述运动矢量调整模式对所述当前块进行运动补偿得到所述当前块的预测值,包括:
针对所述当前块包括的至少一个子块中的每个子块:
根据所述子块的第一原始运动矢量确定所述子块对应的第一参考块,根据所述子块的第二原始运动矢量确定所述子块对应的第二参考块;根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对所述第一原始运动矢量和所述第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;根据所述第一目标运动矢量和所述第二目标运动矢量确定所述子块的预测值;
根据每个子块的预测值确定所述当前块的预测值。
4.根据权利要求3所述的方法,其特征在于,
所述根据所述子块的第一原始运动矢量确定所述子块对应的第一参考块,根据所述子块的第二原始运动矢量确定所述子块对应的第二参考块,包括:
基于所述子块的第一原始运动矢量,从第一参考帧中确定所述子块对应的第一参考块;所述第一参考块中每个像素点的像素值,是通过对第一参考块中的相邻像素点的像素值进行插值得到,或者,通过对第一参考块中的相邻像素点的像素值进行拷贝得到;
基于所述子块的第二原始运动矢量,从第二参考帧中确定所述子块对应的第二参考块;所述第二参考块中每个像素点的像素值,是通过对第二参考块中的相邻像素点的像素值进行插值得到,或,通过对第二参考块中的相邻像素点的像素值进行拷贝得到。
5.一种编码方法,其特征在于,应用于编码端,所述方法包括:
若如下条件均满足,则确定对当前块启用运动矢量调整模式:
帧级控制信息用于表示当前帧内的图像块启用运动矢量调整模式;
当前块启用普通融合模式;
当前块不启用帧内帧间加权CIIP模式和编码运动差的融合MMVD模式;
当前块启用双向预测,其中,当前块的预测值通过当前块用于双向预测的两个参考帧的参考块的加权获得,且所述加权的权重相同;所述两个参考帧来的方向不同,一个参考帧位于当前帧之前,另一个参考帧位于当前帧之后,且所述两个参考帧与所述当前帧的距离相同;其中,所述加权的权重相同包括帧级加权权重相同和块级加权权重相同;
所述两个参考帧均是短期参考帧;所述两个参考帧的尺寸与所述当前帧的尺寸均相同;
当前块的尺寸满足:宽度大于或等于8,高度大于或等于8,宽与高乘积大于或等于128;
若确定对当前块启用所述运动矢量调整模式,则根据所述运动矢量调整模式对所述当前块进行编码。
6.根据权利要求5所述的方法,其特征在于,
所述根据所述运动矢量调整模式对所述当前块进行编码,包括:
针对所述当前块包括的至少一个子块中的每个子块:
根据所述子块的第一原始运动矢量确定所述子块对应的第一参考块,根据所述子块的第二原始运动矢量确定所述子块对应的第二参考块;根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对所述第一原始运动矢量和所述第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;根据所述第一目标运动矢量和所述第二目标运动矢量确定所述子块的预测值;
根据每个子块的预测值确定所述当前块的预测值。
7.一种解码装置,其特征在于,应用于解码端,所述装置包括:
确定模块,用于若如下条件均满足,则确定对当前块启用运动矢量调整模式:
帧级控制信息用于表示当前帧内的图像块启用运动矢量调整模式;
当前块启用普通融合模式;
当前块不启用帧内帧间加权CIIP模式和编码运动差的融合MMVD模式;
当前块启用双向预测,其中,当前块的预测值通过当前块用于双向预测的两个参考帧的参考块的加权获得,且所述加权的权重相同;所述两个参考帧来的方向不同,一个参考帧位于当前帧之前,另一个参考帧位于当前帧之后,且所述两个参考帧与所述当前帧的距离相同;其中,所述加权的权重相同包括帧级加权权重相同和块级加权权重相同;
所述两个参考帧均是短期参考帧;所述两个参考帧的尺寸与所述当前帧的尺寸均相同;
当前块的尺寸满足:宽度大于或等于8,高度大于或等于8,宽与高乘积大于或等于128;
运动补偿模块,用于若确定对当前块启用所述运动矢量调整模式,则根据所述运动矢量调整模式对所述当前块进行运动补偿得到所述当前块的预测值。
8.根据权利要求7所述的装置,其特征在于,所述确定模块还用于:
若如下条件中的任意一个条件不满足,则确定不对当前块启用运动矢量调整模式:
帧级控制信息用于表示当前帧内的图像块启用运动矢量调整模式;
当前块启用普通融合模式;
当前块不启用帧内帧间加权CIIP模式和编码运动差的融合MMVD模式;
当前块启用双向预测,其中,当前块的预测值通过当前块用于双向预测的两个参考帧的参考块的加权获得,且所述加权的权重相同;所述两个参考帧来的方向不同,一个参考帧位于当前帧之前,另一个参考帧位于当前帧之后,且所述两个参考帧与所述当前帧的距离相同;其中,所述加权的权重相同包括帧级加权权重相同和块级加权权重相同;
所述两个参考帧均是短期参考帧;所述两个参考帧的尺寸与所述当前帧的尺寸均相同;
当前块的尺寸满足:宽度大于或等于8,高度大于或等于8,宽与高乘积大于或等于128。
9.根据权利要求7或8所述的装置,其特征在于,所述运动补偿模块具体用于:
针对所述当前块包括的至少一个子块中的每个子块:
根据所述子块的第一原始运动矢量确定所述子块对应的第一参考块,根据所述子块的第二原始运动矢量确定所述子块对应的第二参考块;根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对所述第一原始运动矢量和所述第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;根据所述第一目标运动矢量和所述第二目标运动矢量确定所述子块的预测值;
根据每个子块的预测值确定所述当前块的预测值。
10.根据权利要求9所述的装置,其特征在于,
所述所述运动补偿模块根据所述子块的第一原始运动矢量确定所述子块对应的第一参考块,根据所述子块的第二原始运动矢量确定所述子块对应的第二参考块时具体用于:
基于所述子块的第一原始运动矢量,从第一参考帧中确定所述子块对应的第一参考块;所述第一参考块中每个像素点的像素值,是通过对第一参考块中的相邻像素点的像素值进行插值得到,或者,通过对第一参考块中的相邻像素点的像素值进行拷贝得到;
基于所述子块的第二原始运动矢量,从第二参考帧中确定所述子块对应的第二参考块;所述第二参考块中每个像素点的像素值,是通过对第二参考块中的相邻像素点的像素值进行插值得到,或,通过对第二参考块中的相邻像素点的像素值进行拷贝得到。
11.一种编码装置,其特征在于,应用于编码端,所述装置包括:
确定模块,用于若如下条件均满足,则确定对当前块启用运动矢量调整模式:
帧级控制信息用于表示当前帧内的图像块启用运动矢量调整模式;
当前块启用普通融合模式;
当前块不启用帧内帧间加权CIIP模式和编码运动差的融合MMVD模式;
当前块启用双向预测,其中,当前块的预测值通过当前块用于双向预测的两个参考帧的参考块的加权获得,且所述加权的权重相同;所述两个参考帧来的方向不同,一个参考帧位于当前帧之前,另一个参考帧位于当前帧之后,且所述两个参考帧与所述当前帧的距离相同;其中,所述加权的权重相同包括帧级加权权重相同和块级加权权重相同;
所述两个参考帧均是短期参考帧;所述两个参考帧的尺寸与所述当前帧的尺寸均相同;
当前块的尺寸满足:宽度大于或等于8,高度大于或等于8,宽与高乘积大于或等于128;
运动补偿模块,用于若确定对当前块启用所述运动矢量调整模式,则根据所述运动矢量调整模式对所述当前块进行编码。
12.根据权利要求11所述的装置,其特征在于,所述运动补偿模块具体用于:
针对所述当前块包括的至少一个子块中的每个子块:
根据所述子块的第一原始运动矢量确定所述子块对应的第一参考块,根据所述子块的第二原始运动矢量确定所述子块对应的第二参考块;根据所述第一参考块的第一像素值和所述第二参考块的第二像素值,对所述第一原始运动矢量和所述第二原始运动矢量进行调整,得到所述第一原始运动矢量对应的第一目标运动矢量和所述第二原始运动矢量对应的第二目标运动矢量;根据所述第一目标运动矢量和所述第二目标运动矢量确定所述子块的预测值;
根据每个子块的预测值确定所述当前块的预测值。
13.一种解码端设备,其特征在于,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现上述权利要求1-4任一项所述的方法步骤。
14.一种编码端设备,其特征在于,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现上述权利要求5-6任一项所述的方法步骤。
15.一种机器可读存储介质,其特征在于,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现上述权利要求1-4任一项所述的方法步骤,或者,实现上述权利要求5-6任一项所述的方法步骤。
CN202010988743.XA 2019-11-05 2019-11-05 一种编解码方法、装置、设备及机器可读存储介质 Active CN112135126B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010988743.XA CN112135126B (zh) 2019-11-05 2019-11-05 一种编解码方法、装置、设备及机器可读存储介质

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010988743.XA CN112135126B (zh) 2019-11-05 2019-11-05 一种编解码方法、装置、设备及机器可读存储介质
CN201911072766.XA CN112770113A (zh) 2019-11-05 2019-11-05 一种编解码方法、装置及其设备

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201911072766.XA Division CN112770113A (zh) 2019-11-05 2019-11-05 一种编解码方法、装置及其设备

Publications (2)

Publication Number Publication Date
CN112135126A true CN112135126A (zh) 2020-12-25
CN112135126B CN112135126B (zh) 2021-09-21

Family

ID=74036798

Family Applications (3)

Application Number Title Priority Date Filing Date
CN202010990344.7A Active CN112135127B (zh) 2019-11-05 2019-11-05 一种编解码方法、装置、设备及机器可读存储介质
CN202010988743.XA Active CN112135126B (zh) 2019-11-05 2019-11-05 一种编解码方法、装置、设备及机器可读存储介质
CN201911072766.XA Pending CN112770113A (zh) 2019-11-05 2019-11-05 一种编解码方法、装置及其设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202010990344.7A Active CN112135127B (zh) 2019-11-05 2019-11-05 一种编解码方法、装置、设备及机器可读存储介质

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201911072766.XA Pending CN112770113A (zh) 2019-11-05 2019-11-05 一种编解码方法、装置及其设备

Country Status (5)

Country Link
US (1) US20240073437A1 (zh)
JP (1) JP2022550592A (zh)
KR (1) KR20220050227A (zh)
CN (3) CN112135127B (zh)
WO (1) WO2021088695A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113938690A (zh) * 2021-12-03 2022-01-14 北京达佳互联信息技术有限公司 视频编码方法、装置、电子设备及存储介质
CN115529851A (zh) * 2021-04-26 2022-12-27 腾讯美国有限责任公司 具有运动矢量差信令的几何分割模式和合并模式

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113411581B (zh) * 2021-06-28 2022-08-05 展讯通信(上海)有限公司 视频序列的运动补偿方法、系统、存储介质及终端

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101299799A (zh) * 2008-06-13 2008-11-05 北京中星微电子有限公司 图像检测、修复方法和图像检测、修复装置
US20110299600A1 (en) * 2002-07-15 2011-12-08 Yoshinori Suzuki Moving Picture Encoding Method And Decoding Method
EP2700231A2 (en) * 2011-04-19 2014-02-26 Samsung Electronics Co., Ltd. Method and apparatus for encoding and decoding motion vector of multi-view video
CN105338362A (zh) * 2014-05-26 2016-02-17 富士通株式会社 运动目标检测方法和运动目标检测装置
CN106101716A (zh) * 2016-07-11 2016-11-09 北京大学 一种视频帧率检测方法
CN109089119A (zh) * 2017-06-13 2018-12-25 浙江大学 一种运动矢量预测的方法及设备
CN110312132A (zh) * 2019-03-11 2019-10-08 杭州海康威视数字技术股份有限公司 一种编解码方法、装置及其设备

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI254571B (en) * 2004-12-07 2006-05-01 Sunplus Technology Co Ltd Method for fast multiple reference frame motion estimation
CN102387360B (zh) * 2010-09-02 2016-05-11 乐金电子(中国)研究开发中心有限公司 视频编解码帧间图像预测方法及视频编解码器
CN104427345B (zh) * 2013-09-11 2019-01-08 华为技术有限公司 运动矢量的获取方法、获取装置、视频编解码器及其方法
CN105578197B (zh) * 2015-12-24 2019-04-30 福州瑞芯微电子股份有限公司 一种实现帧间预测主控系统
US10271062B2 (en) * 2016-03-18 2019-04-23 Google Llc Motion vector prediction through scaling
CN116708780A (zh) * 2017-08-11 2023-09-05 华为技术有限公司 视频图像编码和解码的方法、装置及设备
CN109996081B (zh) * 2017-12-31 2023-09-12 华为技术有限公司 图像预测方法、装置以及编解码器
CN109495746A (zh) * 2018-11-07 2019-03-19 建湖云飞数据科技有限公司 一种基于运动矢量调整的视频编码方法
CN110213590B (zh) * 2019-06-25 2022-07-12 浙江大华技术股份有限公司 时域运动矢量获取、帧间预测、视频编码的方法及设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110299600A1 (en) * 2002-07-15 2011-12-08 Yoshinori Suzuki Moving Picture Encoding Method And Decoding Method
CN101299799A (zh) * 2008-06-13 2008-11-05 北京中星微电子有限公司 图像检测、修复方法和图像检测、修复装置
EP2700231A2 (en) * 2011-04-19 2014-02-26 Samsung Electronics Co., Ltd. Method and apparatus for encoding and decoding motion vector of multi-view video
CN105338362A (zh) * 2014-05-26 2016-02-17 富士通株式会社 运动目标检测方法和运动目标检测装置
CN106101716A (zh) * 2016-07-11 2016-11-09 北京大学 一种视频帧率检测方法
CN109089119A (zh) * 2017-06-13 2018-12-25 浙江大学 一种运动矢量预测的方法及设备
CN110312132A (zh) * 2019-03-11 2019-10-08 杭州海康威视数字技术股份有限公司 一种编解码方法、装置及其设备

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115529851A (zh) * 2021-04-26 2022-12-27 腾讯美国有限责任公司 具有运动矢量差信令的几何分割模式和合并模式
CN113938690A (zh) * 2021-12-03 2022-01-14 北京达佳互联信息技术有限公司 视频编码方法、装置、电子设备及存储介质
CN113938690B (zh) * 2021-12-03 2023-10-31 北京达佳互联信息技术有限公司 视频编码方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
KR20220050227A (ko) 2022-04-22
CN112770113A (zh) 2021-05-07
CN112135126B (zh) 2021-09-21
WO2021088695A1 (zh) 2021-05-14
CN112135127A (zh) 2020-12-25
JP2022550592A (ja) 2022-12-02
CN112135127B (zh) 2021-09-21
US20240073437A1 (en) 2024-02-29

Similar Documents

Publication Publication Date Title
CN112511827B (zh) 一种编解码方法、装置及其设备
CN112135126B (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