运动向量和块向量分辨率控制方法与流程

文档序号:12514934阅读:423来源:国知局
运动向量和块向量分辨率控制方法与流程

本发明主张在2014年11月20日提出的申请号为62/082,222的美国临时专利申请的优先权;主张在2015年3月2日提出的申请号为62/126,969的美国临时专利申请的优先权;以及主张在2015年6月22提出的申请号为62/182,685的美国临时专利申请的优先权。本发明还涉及于2014年2月21日提交的申请号为61/942,819的美国临时专利申请;涉及于2014年3月17日提交的申请号为61/954,181的美国临时专利申请;涉及于2014年9月1日提交的申请号为62/044,385的美国临时专利申请。因此在全文中合并参考这些专利申请案。

技术领域

本发明是有关于包括帧内块复制(Intra-block copy,IntraBC)模式和帧间预测模式的多个编码模式的视频编码,特别是有关于在帧间预测模式中编码的切片中处理自适应运动向量分辨率块的技术和处理用于屏幕内容编码或视频编码的帧内块复制编码模式的块向量的技术。



背景技术:

高效率视频编码(High Efficiency Video Coding,以下简称为HEVC)是近年来已经开发的新的编码标准。在高效率视频编码系统中,H.264/AVC中固定尺寸的宏块由称为编码单元(coding unit,CU)的灵活块替换。编码单元中的像素共享相同的编码参数以提高编码效率。编码单元可从最大编码单元(largest CU,LCU)开始,其在HEVC中也被称为编码树单元(coded tree unit,CTU)。除了编码单元的概念,预测单元(PU)的概念也被引入HEVC中。一旦编码单元分层树的分割完成,则根据预测类型和预测单元分割,将每个叶编码单元进一步分割成一个或多个预测单元(PU)。

在高效率视频编码标准的屏幕内容编码(screen content coding)的当前发展中,已经采用了对屏幕内容的编码效率的改进的一些工具。对于帧内块(Intra block),使用基于来自相邻块的重建像素的预测,来执行根据现有方法的帧内预测。帧内预测可从一组帧内模式中选择一个帧内模式,这组帧内模式包括垂直模式,水平模式和各种角度预测模式。对于HEVC屏幕内容编码来说,已使用称为帧内块复制(帧内块复制)的新的帧内编码模式。最初由Budagavi在AHG8中提出帧内块复制技术(Budagavi等人,AHG8:Video coding using Intra motion compensation,Joint Collaborative Team on Video Coding(JCT-VC)of ITU-T SG16WP3and ISO/IEC JTC 1/SC 29/WG11 13th Meeting:Incheon,KR,18–26Apr.2013,Document:JCTVC-M0350)(以下称为JCTVC-M0350)。根据JCTVC-M0350的示例在图1中示出。其中使用帧内运动补偿(motion compensation,MC)对当前编码单元(CU,110)进行编码。预测块(120)的位置来自当前编码单元和位移向量(112)。在该示例中,搜索区域限于当前编码树单元(coding tree unit,CTU),左侧编码树单元和左侧第二个编码树单元。从已经重建的区域获得预测块。然后,对位移向量(也称为块向量(block vector,块向量))和当前编码单元的残差进行编码。众所周知,HEVC采用编码树单元和编码单元块结构作为用于编码视频数据的基本单元。每个图像被分成多个编码树单元,并且每个编码树单元被划分成编码单元。在预测阶段期间,每个编码单元可以被划分为多个块,称为预测单元(prediction units,PU),用于执行预测处理。在针对每一编码单元形成预测残差之后,将与每一编码单元相关联的残差划分为称为变换单元(TU)的多个块以应用变换。

在JCTVC-M0350中,至少在如下方面,帧内运动补偿不同于用于帧间预测的运动补偿。

·运动向量被限制为1维(即水平或垂直)以用于帧内运动补偿,而帧间预测使用2维运动估计。

·二值化(Binarization)为固定长度以用于帧内运动补偿,而帧间预测使用指数哥伦布(exponential-Golomb)。

·帧内运动补偿引入新的语法元素以发信号指示运动向量为水平还是垂直。

基于JCTVC-M0350,Pang等在Non-RCE3中做了一些修改(Intra Motion Compensation with 2-D MVs,Joint Collaborative Team on Video Coding(JCT-VC)of ITU-T SG 16WP 3and ISO/IEC JTC 1/SC 29/WG 11,14th Meeting:Vienna,AT,25July–2Aug.2013,Document:JCTVC-N0256(在下文中记做JCTVC-N0256))。首先,帧内运动补偿被扩展以支持2维运动向量,以使得运动向量分量可以同时为非0。对于帧内运动补偿来说,这将比原来的方式提供更大的灵活性,其中原来的方式中运动向量被限制为严格地水平或垂直。

在JCTVC-N0256中,揭示两种运动向量编码方法:

·方法1:运动向量预测。左侧或上方的运动向量被选择作为运动向量预测子,以及得到的运动向量差值(motion vector difference,MVD)被编码。一个标志用于指示运动向量差值是否为0。当运动向量差值不为0,则指数哥伦布编码的第三位指数被使用以编码运动向量差值的剩余绝对水平。另一个标志被使用以编码运动向量差值的符号。

·方法2:无运动向量预测。使用用于HEVC中的运动向量差值的指数哥伦布码,编码运动向量。

在JCTVC-N0256中揭示的其他差异是,2维帧内运动补偿被进一步与管线(pipeline)友好的方式结合:

1.不使用插值滤波器,

2.运动向量搜索区域被限制。分两种情况进行讨论:

a搜索区域为当前编码树单元和左侧编码树单元或者

b搜索区域为当前编码树单元和左侧编码树单元的最右边4列采样。

在JCTVC-R0309(Pang,et al.,Non-SCCE1:Combination of JCTVC-R0185and JCTVC-R0203,Joint Collaborative Team on Video Coding(JCT-VC)of ITU-T SG16WP3and ISO/IEC JTC 1/SC29/WG11,18th Meeting:Sapporo,JP,30June–9July 2014,Document:JCTVC-R0309)中,块向量编码被修改为利用相邻块向量和已编码的块向量作为块向量预测子。块向量预测子技术在SCM 2.0(高效率视频编码屏幕内容编码测试模型2.0)中被采用。块向量预测子以与在HEVC中的先进运动向量预测(advanced motion vector prediction,AMVP)的方法相似的方式来得到。根据图2所示的优先顺序,通过先检查空间相邻块A1和B1处的块向量的可用性,预测子候选列表被构建。若空间相邻块均不包括块向量或者空间相邻块中的一个不包括块向量,则最后两个已编码的块向量或最后两个已编码的块向量的其中一个被用于填充块向量候选列表。替代的块向量利用(-2*CU_width,0)和(-CU_width,0)来初始化。为避免需要线缓冲器,在当前编码树单元之外的上方块向量被视为不可用。最后两个编码的块向量被重置为(0,0)以用于每一个编码树单元来避免数据依赖。

在美国临时专利申请序列号62/044,385中,公开了一种用于帧内块复制模式的合并模式的方法,其中合并索引指向帧内块复制编码的合并候选。在某些情况下,块向量预测子可能指向无效块。图3A示出指向无效块的块向量预测子的一个示例。如图3A所示,块向量预测子312从显示为实心正方形的先前处理块314指向如虚线正方形所示的参考块316。如果当前块向量322使用块向量312作为预测子,则显示为实心正方形的当前块324将指向被显示为虚线正方形的参考区域326。如图3A所示,用于当前块的参考块326的一半在当前块中,其尚未重建。图3B示出指向无效块的块向量预测子的另一示例。如图3B所示,块向量预测子332从显示为实心矩形的先前处理块334指向显示为虚线矩形的参考块336。如果当前块向量342使用块向量332作为预测子,则显示为实线矩形的当前块344将指向被显示为虚线矩形的参考区域346。如图3B所示,参考块346的一半在尚未处理的区域中。

因此,应该对块向量预测子施加一些约束,以确保有效块向量用于当前帧内块复制的块。特别地,块向量预测子的x轴分量和/或y轴分量应满足一些要求。

近来,已经由Li等人在HEVC平面内容编码中提出了一种称为自适应运动向量分辨率的技术,该技术记载于JCTVC-S0085中(Li et al.,Adaptive motion vector resolution for screen content,Joint Collaborative Team on Video Coding(JCT-VC)of ITU-T SG 16WP 3and ISO/IEC JTC 1/SC 29/WG 11,19th Meeting:Strasbourg,FR,17–24Oct.2014,Document:JCTVC-S0085),其中使用切片层标志来指示用于帧间编码的预测单元的运动向量的分辨率是否是整数精度或是1/4像素精度。在美国临时专利申请序列号61/942,819和序列号61/954,181中,当前图像被视为帧内块复制操作的参考图像之一。该当前图像被放置在参考图像列表中,或者替换列表中的一个现有参考图像。

如前所述,在当前的HEVC屏幕内容编码测试模型中,块向量总是使用整数分辨率,而运动向量可以是整数分辨率和四分之一像素分辨率。块向量与运动向量之间的推导过程存在差异。块向量和运动向量的推导的相应文本如表1A,表1B和表1C所示。

表1A

表1B

如上所述的mvLX[0]和mvLX[1]的值将始终在-215至215-1的范围内,包括端值。在表1A和表1B中,predFlagLX是指示相应块的预测是否可以从参考图像列表L0或参考图像列表L1导出的标志。当predFlagLX等于1时,表示相应块的预测可以从参考图像列表L0或参考图像列表L1导出。表1A对应于帧间预测编码块的运动向量的推导。表1B对应于帧内块复制的编码块的块向量的推导。由于整数值的块向量以四分之一像素分辨率而存储,因此块向量必须右移2位,以在块向量用作表1B所示的预测子之前导出整数值。在以上表格中,mvpLX[0]和mvpLX[1]对应于与运动/块向量预测子相关联的运动/块向量分量,mvdLX[0]和mvdLX[1]对应于列表LX中的当前运动/块向量和运动/块向量预测子之间的运动/块向量差值,其中X等于0或1。

在应用插值之前,如表1C所示,当整数分辨率被选择用于帧间预测编码块时,导出的运动向量被剪切。

表1C

运动向量的分辨率由标志“use_integer_mv_flag”表示。标志use_integer_mv_flag的语法表被并入切片头中,如下所示。

if(motion_vector resolution_control_idc==2)

use_integer_mv_flag

语法元素motion_vector_resolution_control_idc在序列参数集(SPS)中被发送以指示运动向量分辨率模式。定义了三种模式。当模式为0时,序列中的所有运动向量均为1/4像素分辨率。当模式为1时,序列中的所有运动向量都以全像素分辨率(即整数分辨率)进行编码。此外,语法元素motion_vector_resolution_control_idc等于2,指示在切片头处标志use_integer_mv_flag会被发送以自适应地选择整数像素分辨率或四分之一像素分辨率。标志use_integer_mv_flag等于1,指示当前切片的解码过程中运动向量分辨率为整数。标志use_integer_mv_flag等于0,指示当前切片的解码处理中运动向量分辨率是四分之一像素。当不存在时,推断标志use_integer_mv_flag的值等于语法元素motion_vector_resolution_control_idc。

当标志use_integer_mv_flag等于1时,切片中的所有运动向量将以整数分辨率解码,并以整数像素分辨率存储。当标志use_integer_mv_flag等于0时,切片中的所有运动向量将以四分之一像素分辨率解码并以四分之一像素分辨率存储。当整数运动向量被用于切片时,所有存储的运动向量将在运动补偿(插值)阶段之前左移两位。在解码滤波器阶段可能会出现问题,其中运动向量用作边界强度(BS)决策的参数。要求解块(deblocking)中的块的运动向量是四分之一像素分辨率。另外,当存储的运动向量用作运动向量预测的预测子时,预测的运动向量及其预测子可能不具有相同的分辨率。因此,由于自适应运动向量分辨率,存在分辨率不匹配的问题。

在高级语法中,在参考图像列表构造的初始化期间,将当前图像放置在所有短期(short term)参考图像和所有其他长期(long term)参考图像之后。列表0的相关描述如下所示。类似的过程可应用于列表1。

在每个切片的解码处理开始时,用于P切片的参考图像列表RefPicList0以及用于B切片的参考图像列表RefPicList0和RefPicList1如下所示:

表2

在表2中,标志curr_pic_as_ref_enabled_flag等于1,指示参考序列参数集(SPS)的图像可以被包括在图像本身的参考图像列表中。标志curr_pic_as_ref_enabled_flag等于0,指定参考序列参数集的图像从不包括在图像本身的任意参考图像列表中。当不存在时,推断标志curr_pic_as_ref_enabled_flag的值等于0。

在初始化之后,参考图像列表RefPicList0被构造如下:

for(rIdx=0;rIdx<=num_ref_idx_l0_active_minus1;rIdx++)

RefPicList0[rIdx]=ref_pic_list_modification_flag_l0?

RefPicListTemp0[list_entry_l0[rIdx]]:RefPicListTemp0[rIdx]

然而,当活跃参考图像的数量(即,num_ref_idx_l0_active_minus1+1)小于与存储当前图像的RefPicListTemp0阵列相关联的列表(NumRpsCurrTempList0)中的参考图像的数量时,当前图像可能不包含在活跃参考图像列表中。

在基于现有HEVC的编码系统中,存在与帧内块复制的解码图像缓冲器(Decoded Picture Buffer,DPB)管理相关联的问题。当使用帧内块复制时,当前图像的重建部分可以用作参考图像以预测当前图像。帧内块复制的参考图像被称为“当前图像的未过滤版本”。另一方面,最终将通过诸如解块和采样自适应偏移(SAO)之类的过滤操作的当前图像的版本被称为当前图像的过滤版本。

参考图像必须处于解码图像缓冲器(DPB)中,以便由当前图像使用。解码图像缓冲器的大小被限制为MaxDpbSize,如表3所示。

表3

在表3中,MaxLumaP是最大亮度图像尺寸,maxDpbPicBuf是最大解码图像缓冲器尺寸,例如6。然而,当使用帧内块复制时(当前图像作为参考图像),当前解码图像缓冲器管理操作存在一些问题。

期望开发一种技术,以解决当切片中的块被编码于帧内块复制模式和帧间预测模式时,与自适应运动向量分辨率相关的问题。



技术实现要素:

根据本发明的实施方式,揭示了一种视频编码方法。该视频编码方法利用用于图像的包括帧内块复制模式和帧间预测模式的多个编码模式。在一个实施方式中,当选择自适应运动向量分辨率以允许自适应使用整数分辨率或分数像素分辨率时,具有对应于使用用于所有运动向量和所有块向量的整数分辨率的值的分辨率指示符在当前为切片中被发送。此外,若当前图像为用于当前切片唯一参考图像,在已编码的比特流中与当前切片相关的分辨率指示符具有对应于使用用于当前切片的所有运动向量和所有块向量的整数分辨率的值。当参考序列参数集的当前图像被允许包括在当前图像的参考图像列表中时,序列参数集中的分辨率控制指示符不能被设置为允许包含当前切片的序列的分数像素分辨率的数值。或者,如果当前图像是当前切片的唯一参考图像,则跳过发送分辨率指示符。示范性的分辨率指示符对应于语法元素use_integer_mv_flag,其中语法元素use_integer_mv_flag等于1,指定整数分辨率,以及语法元素use_integer_mv_flag等于0,指定分数像素分辨率。

在其他实施方式中,系统接收已编码的运动向量或块向量以用于已编码的块。若已编码的块被编码于帧间预测模式或帧内块复制模式,若用于已编码的块的分辨率指示符指示整数分辨率,已编码的运动向量或块向量被转换为具有分数像素分辨率的已转换的运动向量或块向量,以用于中间存储和计算。然后,系统存储已转换的运动向量和块向量以用于候选块的编码或解码。分数像素分辨率的转换可通过将已编码的运动向量或块向量左移N位而实现,例如N=2。在已转换的运动向量或块向量被存储之前,已转换的运动向量或块向量被进一步剪切。当已转换的运动向量或块向量用作预测子以用于与帧间预测或帧内块复制已编码的当前块相关的当前运动向量或块向量时,在已转换的运动向量或块向量被用作预测子之前,已转换的运动向量或块向将先被转换为整数分辨率。已转换的运动向量或块向量可通过右移N位而被转换为整数分辨率,例如,N=2。此外,在右移N位之后,在已转换的运动向量或块向量被用于预测子以用于当前运动向量或块向量之前,结果被剪切至有效的范围。

在又一实施方式中,若当前块是以帧内块复制模式或帧间预测模式而被编码,则无论当前向量对应于一个运动向量还是一个块向量,使用相同的分辨率对当前向量进行编码或解码,或者无论当前向量是对应于一个运动向量还是一个块向量,根据当前向量的当前块利用相同的分辨率而被编码或解码。此外,若用于当前块的分辨率指示符指示整数分辨率,当前向量被转换为分数像素分辨率,以及已转换的向量被存储以用于编码或解码后续块或后续块向量。

在又一实施方式中,若当前图片是用于当前图像的唯一参考图像,则隐式地确定当前图像的分辨率指示符而不用发送分辨率指示符,其中分辨率指示符指示是否对在当前图像中的运动向量和块向量使用整数分辨率或分数像素分辨率。分辨率指示符被推断为具有指示整数分辨率的值。

在又一实施方式中,根据分辨率指示符和分辨率控制指示符,确定同一切片中的帧内块复制编码块以及帧间预测编码块的运动向量和块向量的单一的分辨率。其中,分辨率控制指示符指定固定分辨率或自适应分辨率,以及当分辨率控制指示符指示自适应分辨率时,分辨率指示符指示是否使用整数分辨率或分数像素分辨率以用于运动向量。分辨率控制指示符可对应于第一语法元素use_integer_mv_flag,以及分辨率控制指示符可对应于第二语法元素motion_vector_resolution_control_idc。举例来说,如果当前图像是切片的唯一参考图像,则单一的分辨率总是被确定为整数分辨率。在一个示例中,分辨率指示符被设置为指示使用整数分辨率。或者,如果当前图像是切片的唯一参考图像,跳过发送分辨率指示符。

附图说明

图1示出了根据帧内块复制模式的帧内运动补偿的示例,其中水平位移向量被使用。

图2示出了用于导出帧内块复制模式的运动向量预测子的相邻块配置的示例。

图3A-图3B示出了无效块向量预测子的示例。

图4示出了包含本发明的实施例的示例性编码系统的流程图,其中系统使用包括用于图像的帧内块复制模式和帧间预测模式的多个编码模式。

图5示出了包含本发明的实施例的另一示例性编码系统的流程图,其中系统使用包括用于图像的帧内块复制模式和帧间预测模式的多个编码模式。

具体实施方式

如上所述,自适应运动向量分辨率可以用于帧间预测。在具有包括帧间预测模式和帧内块复制模式的多个编码模式的编码系统中,运动向量或块向量可以具有与运动向量或块向量预测子不同的分辨率。为了克服这个问题,这里公开了各种技术。

使用整数向量的信令

在一个实施例中,对于每个切片,使用标志来通知该切片中的运动向量是否使用整数分辨率。当当前图像被视为参考图像时,在编码或解码当前图像(例如,序列的第一张图像)期间,当前图像在某些情况下可能是唯一参考图像。在这种情况下,根据本实施例,如果当前图像是用于当前编码/解码图像的唯一参考图像,则不再用信号通知使用整数运动向量。相反,推断使用整数运动向量。换句话说,在这种情况下,总是使用整数运动向量(块向量)。

块向量/运动向量预测之间的相互作用

在现有的运动向量预测中,如果空间/时间候选位置中的块以帧内块复制模式被编码,则该位置被认为对于运动向量预测目的是不可用的。本发明的实施例使用来自空间/时间相邻候选位置的块向量,来预测当前块的运动向量。该块向量以帧内块复制模式编码。

类似地,对于块向量预测,如果空间/时间候选位置中的块中的块在帧间模式中被编码,则该位置被认为对于块向量预测目的是不可用的。本发明的实施例使用来自空间/时间相邻候选位置的运动向量,来预测当前块的块向量。该块向量以帧内块复制模式编码。

如果在当前切片中仅整数运动向量的使用被禁用,则运动向量的表示是子像素精度(sub-pel accuracy)。在这种情况下,本发明的实施例使用用于预测块向量或运动向量的缩放处理,该缩放处理用于块向量或运动向量的预测。例如,来自相邻块的运动向量可以用于预测当前块的块向量。在这种情况下,运动向量被右移N位,以便在用于预测当前块的块向量之前转换为整数精度。N是诸如N=2的整数值,以将1/4像素分辨率转换为整数分辨率。在另一示例中,来自相邻块的块向量用于预测当前块的运动向量。在这种情况下,在预测当前块的运动向量之前,将块向量左移N以对子像素精度进行调整。N是诸如N=2的整数值,以将1/4像素分辨率转换为整数分辨率。

在运动向量预测过程中,如果相邻块的参考图像不同于当前块的参考图像,则来自该相邻块的运动向量预测子可能在用于预测之前可能需要缩放。当使用运动向量来预测块向量时,根据本发明的实施例应用运动向量缩放方法。需要考虑参考图像和当前图像之间的距离。距离可以根据两张照片之间的图像序列号(POC,picture order count)的差值进行评估。在一个实施例中,在预测当前块向量之前,运动向量被缩放,好像是当前帧内块复制的已编码块的参考图像是按照图像序列号的值在当前图像右边的图像。在这种情况下,“DiffPicOrderCnt”的值被分配,以表示在两图像之间的图像序列号的差值。表示当前图像与其“参考图像”之间的图像序列号的差值的currPocDiff被设置为+1或-1,而不是0。在一个实施例中,如果相邻块的参考图像的图像序列号大于包含相邻块的图像的图像序列号,currPocDiff设置为+1。否则,如果相邻块的参考图像的图像序列号小于包含相邻块的图像的图像序列号,则currPocDiff被设置为-1。

该值(即+1或-1)用于在运动向量缩放过程中计算缩放值(distScaleFactor)。在相邻块的参考图像依照图像序列号恰好在当前图像旁边的情况下,不需要运动向量的缩放处理。在另一个实施例中,对于指向任何参考图像的运动向量,不需要缩放。

当使用块向量来预测运动向量时,可以施加约束。例如,当当前块的参考图像是每个参考列表中的第一个参考图像(即L0和/或L1中的索引=0)时,块向量只能用于预测当前块的运动向量。否则,相邻块将被标记为运动向量预测“不可用”。

当使用运动向量来预测块向量时,可以施加约束。例如,仅当相邻块的参考图像是每个参考列表中的第一个(即,在L0和/或L1中的索引=0)时,才可以使用运动向量。否则,相邻块将被标志为块向量预测“不可用”。

块向量剪切

当使用块向量作为当前块的块向量的预测子时,如果块向量不是有效值,块向量预测子被剪切为有效值。剪切可以扩展到使用运动向量作为当前块的块向量的预测子的情况。如果预测子不指向有效的参考块区域,则应用剪切操作将运动向量剪切为有效值。无效参考块区域可以对应于参考块的一部分不可用或在当前编码树单元边界之外的情况。请注意,这里的运动向量可以是根据上述本发明的实施例的用于运动补偿的、相邻块使用的原始运动向量,或者缩放运动向量。

在2015年2月在日内瓦举行的第20次JCT-VC会议上,同意将帧内块复制与帧间编码模式进行统一,其记载于JCTVC-T0227中(Pang等人,Non-CE2Test1:Intra block copy and inter signalling unification,Joint Collaborative Team on Video Coding(JCT-VC)of ITU-T SG 16WP 3and ISO/IEC JTC 1/SC 29/WG 11,20th Meeting:Geneva,CH,10–18Feb.2015,Document:JCTVC-T0227)。根据JCTVC-T0227,当前图像被视为参考图像并插入到一个或两个参考图像列表中。执行与帧间运动向量预测和编码相同的块向量预测和编码。统一简化了编解码器设计。但是还有一些问题。因为当前HEVC屏幕内容编码测试模型中的块向量总是使用整数分辨率,而运动向量可以自适应地使用整数分辨率和四分之一像素分辨率,出现了一个问题。自适应运动向量分辨率下的四分之一像素和整数分辨率之间的选择在切片层切换,如JCTVC-S0085所述。为了解决这个问题,在如下所述的应用中公开了几种解决方案。

自适应运动/块向量分辨率控制

在当前屏幕内容编码草案标准中,在每个切片头中发送标志“use_integer_mv_flag”,以指定切片头中的运动向量是整数还是四分之一分辨率。语法和语义如表4所示。

表4

在表4中,标志use_integer_mv_flag等于1,指定当前切片的解码处理中的运动向量分辨率是整数。标志use_integer_mv_flag等于0,表示当前切片的解码过程中运动向量分辨率为四分之一像素。当不存在时,推断标志use_integer_mv_flag的值等于语法元素motion_vector_resolution_control_idc。语法元素motion_vector_resolution_control_idc在序列参数集(SPS)中被发送,以指示运动向量分辨率控制模式。定义了三种模式。当模式为0时,以1/4像素分辨率编码运动向量。当模式为1时,参考序列参数集的切片中的所有运动向量都以全像素分辨率(即整数分辨率)进行编码。此外,语法元素motion_vector_resolution_control_idc等于2,指定自适应四分之一像素和整数分辨率。在这种情况下,如注释(4-1)和(4-2)所示,标志use_integer_mv_flag可以在切片头中被发送,以选择整数或四分之一像素分辨率。当语法元素motion_vector_resolution_control_idc等于0或1时,在切片头处不发送标志use_integer_mv_flag。

虽然使用use_integer_mv_flag作为选择整数或四分之一像素分辨率的示例,但是本发明可应用于在整数分辨率和任意分数的像素分辨率之间选择的任意分辨率指示符。

在自适应运动/块向量分辨率控制的第一实施例中,切片中的块向量的分辨率由标志“use_integer_mv_flag”和语法元素“motion_vector_resolution_control_idc”的值确定,标志“use_integer_mv_flag”和语法元素“motion_vector_resolution_control_idc”的值与使用整数像素还是四分之一像素相关。换句话说,切片中的块向量的分辨率与同一切片中的常规的运动向量的分辨率相同。

为了优化编码过程,当当前图像是该切片的唯一参考图像时,编码器应当始终将标志“use_integer_mv_flag”设置为1(即,将块/运动向量分辨率设置为整数)。

在自适应运动/块向量分辨率控制的第二实施例中,上述编码器行为要求是标准的或比特流一致的。换句话说,当当前图像是该切片的唯一参考图像时,需要将标志“use_integer_mv_flag”设置为1(即,将块/运动向量分辨率设置为整数)。否则比特流无效。

在自适应运动/块向量分辨率控制的第三实施例中,当当前图像是该切片的唯一参考图像时,跳过发送标志“use_integer_mv_flag”。推断标志“use_integer_mv_flag”的值为1(即,将块/运动向量分辨率设置为整数)。

结合本发明的实施例的示例性切片头语法示于表5中。

表5

在表5中,如注释(5-1)所示添加附加条件(即,&&!(curr_pic_as_ref_enabled_flag&&slice_type==P&&num_ref_idx_l0_active_minus1==0))。该附加条件对应于当前图像是该切片的唯一参考图像。

结合本发明的实施例的另一示例性切片头语法示于表6中。

表6

在表6中,如注释(6-1)所示添加附加条件(即,&&!(curr_pic_as_ref_enabled_flag&&slice_type==B&&num_ref_idx_l0_active_minus1==0&&num_ref_idx_l1_active_minus1==0))。该附加条件对应于当前图像是该切片的唯一参考图像。在表6中,标志use_integer_mv_flag的定义与表5中的相同。但是,如果不存在,则标志use_integer_mv_flag的数值的推导如下所示:

如果当前图像是当前切片的唯一参考图像,

推断标志use_integer_mv_flag的值等于1,

否则,

推断标志use_integer_mv_flag的值

等于语法元素motion_vector_resolution_control_idc。

在自适应运动/块向量分辨率控制的第四实施例中,当参考图像用于预测单元以用于运动补偿(包括帧内块复制)时,使能标志被用于当前切片的每一个参考图像,以发送运动向量分辨率。对于特定参考图像,如果该标志为使能,则对于当前图像内的所有块,当当前图像中的块使用该图像作为参考时,运动向量/块向量将使用整数分辨率。在解码运动向量/块向量之后,向量应该左移两位以恢复四分之一像素精度。当该标志关闭时,对于当前图像中的所有块,当块使用该图像作为参考时,运动向量/块向量将使用四分之一像素分辨率。在一个实施例中,上述参考图像的分辨率指示标志可以应用于列表0及/或列表1中的参考图像。在另一个实施例中,每个参考图像将具有分辨率指示标志,无论参考图像被放置到哪个参考列表中。当帧内块复制参考图像被用作当前切片的参考图像时,不需要发送用于帧内块复制参考图像的分辨率指示标志。在这种情况下,分辨率指示标志可被推断为开启(即,使用整数分辨率)。

对于上述方法,可以使用序列参数集层标志来发信号通知是否应用该方法。

运动向量/块向量分辨率统一

如上所述,在当前的屏幕内容编码草案标准中,在每个切片头中发送标志“use_integer_mv_flag”,以指定该切片中的运动向量是否是整数(即,标志use_integer_mv_flag=1)或四分之一像素分辨率(即,标志use_integer_mv_flag=0)。虽然运动向量分辨率由标志“use_integer_mv_flag”自适应地控制,但是根据现有标准,块向量总是处于整数分辨率。为了克服这个问题,本文公开了协调或统一运动向量/块向量分辨率的各种技术。

在运动向量/块向量分辨率协调/统一的第一实施例中,解码的运动向量始终以分数的像素分辨率存储,而与标志use_integer_mv_flag的设置值无关。例如,当将本实施例应用于现有HEVC时,解码的运动向量将总是以四分之一像素分辨率存储。转换为四分之一像素分辨率可以基于左移操作。例如,当整数分辨率标志为真时,解码的运动向量可以左移N位(例如,对于HEVC,例如N=2)为分数的像素分辨率。左移的运动向量将通过剪切(clipping)进一步处理,以确保结果在有效范围内,例如HEVC的-215和215-1。对应于四分之一像素分辨率的左移和剪切运动向量将被存储并由随后的块用于运动向量/块向量预测。当整数分辨率标志为假时,解码的运动向量将经过剪切处理,以确保结果在有效范围内,例如HEVC的-215和215-1。剪切的运动向量将以四分之一像素分辨率存储。由于在推导MV期间,执行剪切处理,因此在运动补偿(插值)之前不需要进行额外的剪切操作。此外,当使用存储的向量来预测整数运动向量时,在应用预测之前,预测子应该被右移,例如对于HEVC来说右移2位,以使其处于整数像素分辨率。

结合本发明的实施例的示例性运动向量/块向量分辨率的统一如表7A和表7B所示。

表7A

表7B

上面指定的mvLX[0]和mvLX[1]的结果值将始终在-215到215-1的范围内,包括端值。

根据现有标准,在应用插值之前将执行剪切。然而,基于本发明的实施例,将不执行如表1C所示的现有的HEVC的剪切处理。换句话说,该过程被跳过。

表7A中的语法与等于0(即,四分之一像素分辨率)和1(即,整数分辨率)的标志use_integer_mv_flag的运动向量的推导有关。如表7A所示,由于标志use_integer_mv_flag的值等于0(即,(2*use_integer_mv_flag)=0),“右移2位”操作将不会执行四分之一像素分辨率。表7B与块向量的推导相关,其与表1B所示的现有的HEVC的块向量的推导相同。

结合本发明的实施例的另一示例性的块向量/运动向量分辨率的统一如表8A和表8B所示。

表8A

表8B

同样,上面指定的mvLX[0]和mvLX[1]的结果值总是在-215到215-1的范围内,包括端值。类似地,将不执行如表1C所示的剪切处理。

表8A与具有整数分辨率的运动向量相关,并且表8B与具有四分之一像素分辨率的运动向量和块向量推导相关。再次,不需要如表1C所示的剪切处理。

在运动向量/块向量分辨率协调/统一的第二实施例中,块向量和运动向量的推导过程是统一的。换句话说,当标志use_integer_mv_flag为真时,所有向量(即,块向量和运动向量)将使用整数分辨率。当标志use_integer_mv_flag为假时,所有向量(即,块向量和运动向量)将使用四分之一像素分辨率。此外,上述的协调/统一的运动向量/块向量分辨率的第一实施例可以与第二实施例组合。因此,无论标志use_integer_mv_flag的值如何,解码的块向量和运动向量都将按照组合方式存储在四分之一像素分辨率中。当用作向量预测子来预测整数向量时,解码块向量和运动向量都将被转换为整数分辨率。例如,在应用预测之前,解码块向量和运动向量都可以右移N位(例如,对于HEVC,N=2)而为整数分辨率。

结合本发明实施例的示例性运动向量/块向量分辨率的协调/统一如表9A所示。

表9A

表9A与统一的运动向量导出和块向量导出有关。由于统一的推导,跳过用于predFlagLX等于1的亮度运动向量mvLX和如表1B所述的当前图像的参考图像的推导。此外,将不执行如表1C所示的剪切处理。

结合本发明的实施例的另一示例性协调/统一的块向量/运动向量的分辨率如表10A和表10B所示。

表10A

表10B

表10A和表10B分别类似于表1A和表1B。然而,表10A和表10B中的语法被应用于根据标志use_integer_mv_flag为0(即,表10A)或1(即,表10B)的向量,而不管该向量是运动向量还是块向量。将不执行如表1C所示的剪切处理。

在块向量/运动向量分辨率协调/统一的第三实施例中,修改标志use_integer_mv_flag和语法元素motion_vector_resolution_control_idc的语法和语义,以解决块向量/运动向量的分辨率问题。结合本实施例的一些示例描述如下:

在第一示例中,标志use_integer_mv_flag等于1,指定在当前切片的解码过程中运动向量分辨率是整数。标志use_integer_mv_flag等于0,表示当前切片的解码过程中运动向量分辨率为四分之一像素。当不存在时,标志use_integer_mv_flag被推定为语法元素motion_vector_resolution_control_idc。运动向量指向除当前图像以外的参考画面。

在第二个示例中,当以下语句之一为真时,推导标志use_integer_mv_flag的值:

1.语法元素motion_vector_resolution_control_idc不等于2;

2.语法元素motion_vector_resolution_control_idc等于2(即切片层自适应),当前图像被用作参考图像,它是切片的唯一参考图像。

结合该实施例的示例性语法表描述在表11中示出。

表11

在上述示例中,添加附加条件(即,&&(!curr_pic_as_ref_enabled_flag||NumPicTotalCurr>1)),用于发送标志use_integer_mv_flag。该附加条件对应于当前图像是该切片的唯一参考图像。

在第三示例中,标志use_integer_mv_flag等于1,指示当前切片的解码处理中的运动向量分辨率是整数。标志use_integer_mv_flag等于0,指示当前切片的解码过程中运动向量分辨率为四分之一像素。当不存在时,推断标志use_integer_mv_flag的值如下所示:

-当标志curr_pic_as_ref_enabled_flag等于0时,推断标志use_integer_mv_flag等于语法元素motion_vector_resolution_control_idc。

-否则推断标志use_integer_mv_flag为1。

在第四示例中,标志use_integer_mv_flag等于1,指定在当前切片的解码处理中运动向量分辨率是整数。标志use_integer_mv_flag等于0,指定当前切片的解码过程中的运动向量分辨率为四分之一像素。当不存在时,推断标志use_integer_mv_flag的值等于语法元素motion_vector_resolution_control_idc。当标志curr_pic_as_ref_enabled_flag等于1且NumPicTotalCurr等于1(即当前参考图像是唯一的参考图像)时,标志use_integer_mv_flag的值应为1。

在第五示例中,当使用当前图像作为参考图像(即标志curr_pic_as_ref_enabled_flag等于1)时,指向当前图像的运动向量应为整数分辨率。

在第六个示例中,如果块向量始终为整数分辨率,则标志use_integer_mv_flag不应为0。当使用当前图像作为参考图像(标志curr_pic_as_ref_enabled_flag等于1)的情况下,要求比特流一致性,该序列的运动向量分辨率不应为1/4像素分辨率。换句话说,motion_vector_resolution_control idc不能为0。

在块向量/运动向量分辨率协调/统一的第六实施例中,帧内块复制编码块的解码图像缓冲器的尺寸管理公开如下:

在第一示例中,当当前图像的滤波和未滤波版本在当前图像的解码之前被放置到解码图像缓冲器中时,解码图像缓冲器的尺寸(maxDpbPicBuf)保持不变。

在第二示例中,当前图像的滤波版本在当前图像的解码之前被放置到解码图像缓冲器中,而另一方面,未滤波的图像未被放置到解码图像缓冲器中。或者,当前图像的解码之前,当前图像的未滤波版本可以被放置到解码图像缓冲器中,而滤波图像不被放入解码图像缓冲器中。在这两种情况下,maxDpbPicBuf被修改为maxDpbPicBuf-curr_pic_as_ref_enabled_flag。如果标志curr_pic_as_ref_enabled_flag等于1,则一个缓冲器被保留以用于不在解码图像缓冲器中的一个版本。标志curr_pic_as_ref_enabled_flag可以并入序列层,图像层或切片层标志,以指示当前图像可以用作整个相应序列/图像/切片的参考图像。

在第三示例中,当前图像的解码之前将当前图像的滤波版本放置在解码图像缓冲器中,而未滤波的图像未被放入解码图像缓冲器中。或者,当前图像的解码之前,当前图像的未滤波版本可以被放置到解码图像缓冲器中,而滤波图像不被放入解码图像缓冲器中。在这两种情况下,maxDpbPicBuf被修改为maxDpbPicBuf–1。一个缓冲器被保留给不在解码图像缓冲器中的一个版本。

图4示出了包含本发明的实施例的示例性编码系统的流程图,其中系统使用包括用于图像的帧内块复制模式和帧间预测模式的编码模式。如步骤410所示,系统接收与当前图像中的块相关联的输入数据。为了编码,输入数据对应于要编码的像素数据。对于解码,输入数据对应于要解码的编码像素数据。可以从存储器(例如,计算机存储器,缓冲器(RAM或DRAM)或其他介质)或从处理器检索输入数据。在步骤420中,针对当前切片中的所有的运动向量和所有的块向量,具有对应于利用整数分辨率的数值的分辨率指示符被发送。

图5示出了结合本发明实施例的示例性编码系统的流程图,其中系统使用包括用于图像的帧内块复制模式和帧间预测模式的编码模式。如步骤510所示,系统接收用于已编码的块的已编码运动向量或块向量。可以从存储器(例如,计算机存储器,缓冲器(RAM或DRAM)或其他介质)或从处理器中检索输入数据。在步骤520中检查已编码的块是否以帧间预测模式或帧内块复制模式编码。如果结果为“是”,则执行步骤530和步骤540。否则(即,“否”路径),步骤530和步骤540被跳过。在步骤530中,如果已编码的块的分辨率指示符指定整数分辨率,则编码的运动向量或块向量被转换为具有分数的像素分辨率的已转换的运动向量或块向量。在步骤540中,已转换的运动向量或块向量被存储以用于后续块的编码或解码。

上述的流程图用于描述根据本发明实施方式的帧内块复制编码和帧间编码的示例。本领域技术人员可在不脱离本发明精神的前提下,修改、重排列、拆分、或组合各个步骤,以实现本发明。在本公开中,已经使用特定语法和语义来说明实现本发明的实施方式的示例。本领域技术人员可以在不脱离本发明的精神的情况下,通过用等同的语法和语义代替上述语法和语义来实践本发明。

在提供特定应用和其需求的情况下,以上描述使得本领域技术人员能够实现本发明。对本领域技术人员来说,各种修饰是清楚的,以及在此定义的基本原理可以应用与其他实施方式。因此,本发明并不限于描述的特定实施方式,而应与在此公开的原则和新颖性特征相一致的最广范围相符合。在上述详细描述中,为全面理解本发明,描述了各种特定细节。然而,本领域技术人员能够理解本发明可以实现。

以上描述的本发明的实施方式可在各种硬件、软件编码或两者组合中进行实施。例如,本发明的实施方式可为集成入视频压缩芯片的电路或集成入视频压缩软件以执行上述过程的程序代码。本发明的实施方式也可为在数据信号处理器(Digital Signal Processor,DSP)中执行上述程序的程序代码。本发明也可涉及计算机处理器、数字信号处理器、微处理器或现场可编程门阵列(Field Programmable Gate Array,FPGA)执行的多种功能。可根据本发明配置上述处理器执行特定任务,其通过执行定义了本发明揭示的特定方法的机器可读软件代码或固件代码来完成。可将软件代码或固件代码发展为不同的程序语言与不同的格式或形式。也可为了不同的目标平台编译软件代码。然而,根据本发明执行任务的软件代码与其他类型配置代码的不同代码样式、类型与语言不脱离本发明的精神与范围。

在不脱离本发明精神或本质特征的情况下,可以其他特定形式实施本发明。描述示例被认为仅在所有方面进行说明并且不是限制性的。因此,本发明的范围由权利要求书指示,而非前面描述。所有在权利要求等同的方法与范围中的变化都属于本发明的涵盖范围。

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