视频编码方法、视频解码方法、视频编码设备、视频解码设备以及程序与流程

文档序号:15885987发布日期:2018-11-09 18:53阅读:202来源:国知局
视频编码方法、视频解码方法、视频编码设备、视频解码设备以及程序与流程

本发明涉及一种使用基于四叉树和二叉树的块划分结构的视频编码技术。

背景技术

在非专利文献1中描述的视频编码系统中,数字化视频的每个帧被分割成编码树单元(ctu),并且按照光栅扫描的顺序对每个ctu编码。

在四叉树结构中,每个ctu被分割成编码单元(cu)并且被编码。每个cu被分割成预测单元(pu)并且被预测编码。预测编码包括帧内预测(intraprediction)和帧间预测(inter-frameprediction)。

在四叉树结构中,每个cu的预测误差被分割成变换单元(tu)并且基于频率变换而被变换编码。

最大尺寸的cu被称为最大cu(最大编码单元:lcu),并且最小尺寸的cu被称为最小cu(最小编码单元:scu)。lcu尺寸和ctu尺寸相同。

下面描述帧内预测和帧间预测、以及ctu、cu、pu和tu的信号通知。

帧内预测是用于从与待编码帧具有相同显示时间的重构图像中生成预测图像的预测。非专利文献1定义了如图9所示的33种角度帧内预测。在角度帧内预测中,使用靠近待编码块的重构像素以用于在33个方向中的任何一个方向上外插,以生成帧内预测信号。除了33种角度帧内预测之外,非专利文献1还定义了用于对靠近待编码块的重构像素平均的dc帧内预测,以及用于对靠近待编码块的重构像素线性插值的平面帧内预测。下文中,基于帧内预测而被编码的cu被称为帧内cu。

帧间预测是用于从与待编码帧的显示时间不同的重构图像(参考图片)中生成预测图像的预测。下文中,帧间预测被称为帧间预测(interprediction)。图10是描绘了帧间预测的示例的说明图。运动向量mv=(mvx,mvy)指示参考图片的重构图像块相对于待编码块的平移量。在帧间预测中,基于参考图片的重构图像块来生成帧间预测信号(如有必要,使用像素插值)。下文中,基于帧间预测而被编码的cu被称为“帧间cu”。

编码后的仅包括帧内cu的帧被称为“i帧”(或“i图片”)。编码后的不仅包括帧内cu还包括帧间cu的帧被称为“p帧”(或“p图片”)。编码后的包括帧间cu、且每个帧间cu使用不止一个参考图片而是同时使用两个参考图片以用于块的帧间预测的帧被称为“b帧”(或“b图片”)。

跳过模式是指:基于下面提到的pu划分形状的2n×2n形状和下面提到的变换量化值不存在,通过帧预测来对待处理的cu预测编码。每个cu是否为跳过模式由非专利文献1中描述的skip_flag语法来信号通知。

每个不为跳过模式的cu是帧内cu还是帧间cu由非专利文献1中描述的pred_mode_flag语法来信号通知。

图11是描绘了在帧的空间分辨率为通用中间格式(cif)并且ctu尺寸为64的情况下、帧t的ctu划分的示例和帧t中包括的第8个ctu(ctu8)的cu划分的示例的说明图。

图12是描绘了与ctu8的cu划分示例相对应的四叉树结构的说明图。每个ctu的四叉树结构、即cu划分形状,由非专利文献1中描述的cu_split_flag语法来信号通知。

图13是描绘了cu的pu划分形状的说明图。在cu是帧内cu的情况下,可选择方形pu划分。在cu是帧间cu的情况下,不仅可选择方形pu划分,还可选择矩形pu划分。每个cu的pu划分形状由非专利文献1中描述的part_mode语法来信号通知。

图14是描绘了cu的tu划分的示例的说明图。在该图的上半部分中描绘了具有2n×2n的pu划分形状的帧内cu的tu划分的示例。在cu是帧内cu的情况下,四叉树的根位于pu中,并且每个pu的预测误差由四叉树结构表示。在该图的下半部分中描绘了具有2n×n的pu划分形状的帧间cu的tu划分的示例。在cu是帧间cu的情况下,四叉树的根位于cu中,并且每个cu的预测误差由四叉树结构表示。预测误差的四叉树结构、即每个cu的tu划分形状,由非专利文献1中描述的split_tu_flag语法来信号通知。

这完成了对帧内预测和帧间预测,以及ctu、cu、pu和tu的信号通知的描述。

下面参照图15中的框图来描述典型视频编码设备的结构和操作,该视频编码设备接收数字化视频的每个帧的每个cu作为输入图像并且输出比特流。

图15中描绘的视频编码设备包括变换器/量化器101、熵编码器102、逆量化器/逆变换器103、缓冲器104、预测器105和多路复用器106。

预测器105针对每个ctu来确定用于确定使编码成本最小化的cu划分形状的cu_split_flag语法值。

预测器105然后针对每个cu来确定用于确定帧内预测/帧间预测的pred_mode_flag语法值、用于确定pu划分形状的part_mode语法值、用于确定tu划分形状的split_tu_flag语法值、帧内预测方向、以及使编码成本最小化的运动向量。

预测器105进一步确定用于确定跳过模式的skip_flag语法值。

详细地讲,对于待处理的cu而言,在确定的pred_mode_flag指示帧间预测、确定的part_mode指示2n×2n、并且下面提到的变换量化值不存在的情况下,预测器105将skip_flag设置为1(即,设置跳过模式)。否则,预测器105将skip_flag设置为0(即,不设置跳过模式)。

预测器105基于确定的cu_split_flag语法值、pred_mode_flag语法值、part_mode语法值、split_tu_flag语法值、帧内预测方向、运动向量等来生成与每个cu的输入图像信号相对应的预测信号。该预测信号是基于上面提到的帧内预测或者帧间预测来生成的。

变换器/量化器101基于由预测器105确定的tu划分形状,对通过从输入图像信号减去预测信号而获得的预测误差图像进行频率变换。

变换器/量化器101进一步对频率变换后的预测误差图像(频率变换系数)进行量化。下文中,量化的频率变换系数被称为“变换量化值”。

熵编码器102熵编码变换量化值以及由预测器105确定的cu_split_flag语法值、skip_flag语法值、pred_mode_flag语法值、part_mode语法值、split_tu_flag语法值、帧内预测方向的差异信息和运动向量的差异信息(下文中,这些与预测相关的信息也都被称为“预测参数”)。

逆量化器/逆变换器103对变换量化值进行逆量化。逆量化器/逆变换器103进一步对通过逆量化获得的频率变换系数进行逆频率变换。预测信号被添加到通过逆频率变换而获得的重构预测误差图像,并且结果被供应给缓冲器104。缓冲器104存储重构图像。

多路复用器106多路复用并且输出从熵编码器102供应的熵编码后的数据作为比特流。

该典型视频编码设备通过上述操作生成比特流。

下面参照图16描述典型视频解码设备的结构和操作,该视频解码设备接收比特流作为输入并且输出解码后的视频帧。

图16中描绘的视频解码设备包括多路分用器201、熵解码器202、逆量化器/逆变换器203、预测器204和缓冲器205。

多路分用201对输入的比特流进行多路分用以提取熵编码后的视频比特流。

熵解码器202熵解码视频比特流。熵解码器202熵解码预测参数和变换量化值,并且将它们供应给逆量化器/逆变换器203和预测器204。

逆量化器/逆变换器203对变换量化值进行逆量化。逆量化器/逆变换器203进一步对通过逆量化获得的频率变换系数进行逆频率变换。

在逆频率变换之后,预测器204基于熵解码后的预测参数、使用缓冲器205中存储的重构图像来生成预测信号。

在生成预测信号之后,从预测器204供应的预测信号被添加到通过逆量化器/逆变换器203进行的逆频率变换而获得的重构预测误差图像,并且结果被供应给缓冲器205作为重构图像。

缓冲器205中存储的重构图像然后被输出作为解码后的图像(解码后的视频)。

该典型视频解码设备通过上述操作生成解码后的图像。

非专利文献2公开了一种使用基于四叉树和二叉树(bt)的块划分结构的视频编码技术,该块划分结构被称为四叉树加二叉树(quadtreeplusbinarytree,qtbt),并且是对非专利文献1中描述的上面提到的系统的拓展。

在qtbt结构中,基于四叉树结构将编码树单元(ctu)递归地分割成方形编码单元(cu)。基于二叉树结构进一步将每个递归分割的cu递归地分割成矩形或方形块,以便进行预测过程或变换过程。在qtbt结构中,不使用part_mode语法。

图17是描绘了非专利文献2中描述的qtbt结构的说明图。图17的(a)中示出了ctu的块划分的示例,并且图17中的(b)中示出了其树结构。在图17中,每条实线指示基于四叉树结构的划分,并且每条虚线指示基于二叉树结构的划分。在基于二叉树结构的划分中,允许矩形块,以使得指示分割方向(分割线延伸的方向)的信息是必需的。在图17的(b)中,0指示水平方向上的分割,而1指示竖直方向上的分割。qtbt结构能够更灵活地表达矩形的划分形状,并且因此增强了基于非专利文献1中描述的块划分结构的视频系统的压缩效率。

引用列表

非专利文献

非专利文献(npl)1:highefficiencyvideocoding(hevc)textspecificationdraft10(forfdis&lastcall)ofitu-tsg16wp3andiso/iecjtc1/sc29/wg1112thmeeting:geneva,ch,14-23january2013

非专利文献2:jichengan,etal.,“quadtreeplusbinarytreestructureintegrationwithjemtools”,jvet-b0023,jointvideoexplorationteam(jvet)ofitu-tsg16wp3andiso/iecjtc1/sc29/wg112ndmeeting:sandiego,usa,20-26february2016



技术实现要素:

技术问题

图18是描绘了基于qtbt结构的ctu的块划分的示例及其树结构的说明图。

首先描述图18中使用的cu_split_flag、bt_split_flag、bt_split_vertical_flag和skip_flag的定义。

cu_split_flag指示是否执行基于四叉树结构的划分。当cu_split_flag为0时,不执行基于四叉树结构的划分(即,该块是四叉树结构中的端节点的块)。当cu_split_flag为1时,执行基于四叉树结构的划分。

bt_split_flag指示是否执行基于二叉树结构的划分。当bt_split_flag为0时,不执行基于二叉树结构的划分(即,该块是二叉树结构中的端节点的块)。当bt_split_flag为1时,执行基于二叉树结构的划分。

当bt_split_flag为1时,存在bt_split_vertical_flag。bt_split_vertical_flag指示分割方向。当bt_split_vertical_flag为0时,在水平方向上执行分割。当bt_split_vertical_flag为1时,在竖直方向上执行分割。

skip_flag=0指示接替的编码数据存在,而skip_flag=1指示接替的编码数据不存在。

图18的(a)中示出了块划分的示例。在图18的(b)中示出了与图18的(a)中示出的划分相对应的语法元素和qtbt结构。

在图18的(a)中描绘的示例中,基于四叉树结构将64×64(64像素×64像素)块分割成四个32×32块。因此,在qt第0层(深度0),cu_split_flag值指示划分(在本示例中为1)。

在qt第1层(深度1),右下方的32×32块在竖直方向上被分割成二。对于该32×32块,cu_split_flag值指示非划分(在本示例中为0),但是在bt第1层(深度1)处的bt_split_flag值指示划分(在本示例中为1)。而且,bt_split_vertical_flag值指示竖直方向(在本示例中为1)。对于其它三个32×32块,与二叉树结构相关的bt_split_flag值指示非划分(在本示例中为0)。进一步地,skip_flag的值为1。

在bt第2层(深度2)处,对于右下方的32×32块中包括的左侧的16×32块a,bt_split_flag值指示非划分(在本示例中为0),因为该块不再进行更多划分。skip_flag的值为1。

对于右侧的16×32块b,bt_split_flag值指示划分(在本示例中为1),因为该块要进行进一步划分。bt_split_vertical_flag值指示竖直方向(在本示例中为1)。

在bt第3层(深度3)处,右下方的16×32块b中包括的左侧的8×32块不进行划分,使得bt_split_flag值指示非划分(在本示例中为0)。skip_flag的值为1。

右侧的8×32块要进行划分,以使得bt_split_flag值指示划分(在本示例中为1)。bt_split_vertical_flag值指示水平方向(在本示例中为0)。

在bt第4层(深度4)处,右下方的8×32块中包括的上侧的8×16块和下侧的8×16块都不进行划分。因此,对于这两个块中的每一个块,bt_split_flag值都指示非划分(在本示例中为0)。skip_flag的值为1。

当使用上面提到的qtbt结构时,除了基于四叉树结构的块划分/非划分信息(下文中称为“四叉树分割标记”)之外,还需要发送基于二叉树结构的块划分/非划分信息(下文中称为“二叉树分割标记”)和水平/竖直分割方向信息(下文中称为“二叉树分割方向标记”)。

由于针对每个块发送了二叉树分割标记和二叉树分割方向标记,因此尤其是在低比特率的条件下,比特数会明显增加。

因此,这些标记信息产生开销代码量并且使压缩效率降低,并且还使熵编码/解码处理量增加。

在使用qtbt结构的情况下,可以设置最小块尺寸。最小尺寸是一种包括最小宽度和最小高度两者的概念。假设将最小尺寸设置为“n”。如果块的宽度(水平方向上的像素数)达到n,则无法在竖直方向上对该块进一步分割。这是因为这种分割产生的宽度为n/2。如果块的高度(竖直方向上的像素数量)达到n,则无法在水平方向上对该块进一步分割。这是因为这种分割产生的高度为n/2。

因此,在基于二叉树划分对宽度或高度为最小尺寸的块进行分割的情况下,分割方向被唯一地确定。然而,在图18的(b)中描绘的系统中,即使在这种情况下,也发送了不必要的(即,冗余的)bt_split_vertical_flag。

本发明的目的是改进压缩性能,并且减少使用基于四叉树和二叉树的块划分结构的视频编码过程和视频解码过程中的熵编码处理量和熵解码处理量。

问题的解决方案

根据本发明的一种视频编码方法为包括熵编码四叉树分割标记、跳过标记、二叉树分割标记和二叉树分割方向标记的熵编码步骤的视频编码方法,该视频编码方法包括:将指示基于二叉树结构的划分的最小尺寸的信息多路复用在比特流中的步骤;以及熵编码控制步骤,该熵编码控制步骤在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记接替的情况下使熵编码步骤熵编码二叉树分割标记和二叉树分割方向标记、并且在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记未接替的情况下使熵编码步骤不熵编码二叉树分割标记和二叉树分割方向标记,其中在尺寸等于最小尺寸的节点基于二叉树结构而被进一步划分的情况下,熵编码控制步骤使熵编码步骤不熵编码该节点处的二叉树分割方向标记。

根据本发明的一种视频解码方法为包括熵解码四叉树分割标记、跳过标记、二叉树分割标记和二叉树分割方向标记的熵解码步骤的视频解码方法,该视频解码方法包括:从比特流中提取指示基于二叉树结构的划分的最小尺寸的信息的步骤;以及熵解码控制步骤,该熵解码控制步骤在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记接替的情况下使熵解码步骤熵解码二叉树分割标记和二叉树分割方向标记、并且在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记未接替的情况下使熵解码步骤不熵解码二叉树分割标记和二叉树分割方向标记,其中在尺寸等于最小尺寸的节点基于二叉树结构而被进一步划分的情况下,熵解码控制步骤使熵解码步骤不熵解码该节点处的二叉树分割方向标记。

根据本发明的一种视频编码设备包括:熵编码装置,用于至少熵编码四叉树分割标记、跳过标记、二叉树分割标记和二叉树分割方向标记;尺寸多路复用装置,用于将指示基于二叉树结构的划分的最小尺寸的信息多路复用在比特流中;以及熵编码控制装置,用于控制熵编码装置,其中熵编码控制装置在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记接替的情况下使熵编码装置熵编码二叉树分割标记和二叉树分割方向标记、并且在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记未接替的情况下使熵编码装置不熵编码二叉树分割标记和二叉树分割方向标记,以及其中在尺寸等于最小尺寸的节点基于二叉树结构而被进一步划分的情况下,熵编码控制装置使熵编码装置不熵编码该节点处的二叉树分割方向标记。

根据本发明的一种视频解码设备包括:熵解码装置,用于至少熵解码四叉树分割标记、跳过标记、二叉树分割标记和二叉树分割方向标记;尺寸提取装置,用于从比特流中提取指示基于二叉树结构的划分的最小尺寸的信息;以及熵解码控制装置,用于控制熵解码装置,其中熵解码控制装置在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记接替的情况下使熵解码装置熵解码二叉树分割标记和二叉树分割方向标记、并且在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记未接替的情况下使熵解码装置不熵解码二叉树分割标记和二叉树分割方向标记,以及其中在尺寸等于最小尺寸的节点基于二叉树结构而被进一步划分的情况下,熵解码控制装置使熵解码装置不熵解码该节点处的二叉树分割方向标记。

根据本发明的一种视频编码程序为用于使计算机执行过程的视频编码程序,该过程包括熵编码四叉树分割标记、跳过标记、二叉树分割标记和二叉树分割方向标记的熵编码过程,该视频编码程序进一步使计算机执行:将指示基于二叉树结构的划分的最小尺寸的信息多路复用在比特流中的过程;以及熵编码控制过程,该熵编码控制过程在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记接替的情况下使熵编码过程熵编码二叉树分割标记和二叉树分割方向标记、并且在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记未接替的情况下使得熵编码过程不熵编码二叉树分割标记和二叉树分割方向标记,其中在熵编码控制过程中,在尺寸等于最小尺寸的节点基于二叉树结构而被进一步划分的情况下,视频编码程序进一步使熵编码过程不熵编码该节点处的二叉树分割方向标记。

根据本发明的一种视频解码程序为用于使计算机执行过程的视频解码程序,该过程包括熵解码四叉树分割标记、跳过标记、二叉树分割标记和二叉树分割方向标记的熵解码过程,该视频解码程序进一步使计算机执行:从比特流提取指示基于二叉树结构的划分的最小尺寸的信息的过程;以及熵解码控制过程,该熵解码控制过程在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记接替的情况下使熵解码过程熵解码二叉树分割标记和二叉树分割方向标记、并且在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记未接替的情况下使熵解码过程不熵解码二叉树分割标记和二叉树分割方向标记,其中在熵解码控制过程中,在尺寸等于最小尺寸的节点基于二叉树结构而被进一步划分的情况下,视频解码程序进一步使熵解码过程不熵解码该节点处的二叉树分割方向标记。

本发明的有益效果

根据本发明,改进了压缩性能,并且减少了熵编码处理量和熵解码处理量。

附图说明

[图1]图1是描绘了根据示例性实施例1的视频编码设备的框图。

[图2]图2是描绘了熵编码控制器和熵编码器的操作的流程图。

[图3]图3是描绘了示例性实施例1中的qtbt结构的说明图。

[图4]图4是描绘了根据示例性实施例2的视频解码设备的框图。

[图5]图5是描绘了熵解码控制器和熵解码器的操作的流程图。

[图6]图6是描绘了能够实现视频编码设备的功能的信息处理系统的结构的示例的框图。

[图7]图7是描绘了视频编码设备的主要部分的框图。

[图8]图8是描绘了视频解码设备的主要部分的框图。

[图9]图9是描绘了33种角度帧内预测的示例的说明图。

[图10]图10是描绘了帧间预测的示例的说明图。

[图11]图11是描绘了帧t的ctu划分的示例和帧t的ctu8的cu划分的示例的说明图。

[图12]图12是描绘了与ctu8的cu划分的示例相对应的四叉树结构的说明图。

[图13]图13是描绘了cu的pu划分的示例的说明图。

[图14]图14是描绘了cu的tu划分的示例的说明图。

[图15]图15是描绘了典型视频编码设备的结构的示例的框图。

[图16]图16是描绘了典型视频解码设备的结构的示例的框图。

[图17]图17是描绘了在非专利文献2中描述的ctu的块划分的示例及其树结构的说明图。

[图18]图18是描绘了基于qtbt结构的ctu的块划分的示例及其树结构的说明图。

具体实施方式

示例性实施例1

图1是描绘了视频编码设备的示例性实施例(示例性实施例1)的框图。图1中描绘的视频编码设备包括变换器/量化器101、熵编码器102、逆量化器/逆变换器103、缓冲器104、预测器105、多路复用器106和熵编码控制器107。

在本示例性实施例中的cu_split_flag、bt_split_flag、bt_split_vertical_flag和skip_flag的定义如前所述。cu_split_flag、bt_split_flag、bt_split_vertical_flag和skip_flag的定义如前所述。

在本示例性实施例中,使用bt_skip_flag。bt_skip_flag存在于在四叉树结构中的端节点的块中。bt_skip_flag指示接替的编码数据是否存在。在本示例性实施例中,当bt_skip_flag存在时,bt_skip_flag=0指示接替的编码数据(bt_split_flag)存在,而bt_skip_flag=1指示接替的编码数据(bt_split_flag)不存在。在bt_skip_flag不存在的情况下,视频解码侧隐式地将bt_skip_flag解释为0。在本示例性实施例中,即使在bt_split_flag为1时,bt_split_vertical_flag也可能不存在。

skip_flag=0指示接替的编码数据存在,而skip_flag=1指示接替的编码数据不存在。在skip_flag不存在于比特流中的情况下,视频解码侧隐式地将skip_flag解释为等于bt_skip_flag。

作为基于四叉树结构或二叉树结构进行划分的结果所生成的块在下文中也称为“子块”。

预测器105针对每个ctu来确定使编码成本最小化的cu_split_flag、bt_split_flag和bt_split_vertical_flag。顺便提及,cu_split_flag、bt_split_flag和bt_split_vertical_flag确定qtbt划分形状。

预测器105然后针对基于确定的cu_split_flag、bt_split_flag和bt_split_vertical_flag而由qtbt划分生成的每个子块,确定用于确定帧内预测/帧间预测的pred_mode_flag、用于确定tu划分形状的split_tu_flag、帧内预测方向和运动向量。待确定的pred_mode_flag、split_tu_flag、帧内预测方向和运动向量使编码成本最小化。

预测器105然后确定用于确定跳过模式的skip_flag。具体地,对于待处理的子块而言,在确定的pred_mode_flag指示帧间预测并且变换量化值不存在的情况下,预测器105将skip_flag设置为1(即,设置跳过模式)。否则,预测器105将skip_flag设置为0(即,不设置跳过模式)。

预测器105进一步确定用于确定二叉树跳过模式的bt_skip_flag。详细地,对于每个子块,在该子块为四叉树结构中的端节点的块(即,cu_split_flag为0)、为二叉树结构中的端节点的块(即,bt_split_flag为0)、以及为跳过模式(即,skip_flag为1)的情况下,预测器105将bt_skip_flag设置为1(即,设置二叉树跳过模式)。否则,预测器105将bt_skip_flag设置为0(即,不设置二叉树跳过模式)。

预测器105基于确定的cu_split_flag语法值、bt_skip_flag语法值、bt_split_flag语法值、bt_split_vertical_flag语法值、skip_flag语法值、pred_mode_flag语法值、split_tu_flag语法值、帧内预测方向和运动向量而生成与每个子块的输入图像信号相对应的预测信号。该预测信号是基于上面提到的帧内预测或者帧间预测而生成的。

变换器/量化器101基于预测器105确定的tu划分形状对通过从输入图像信号减去预测信号而获得的预测误差图像进行频率变换。变换器/量化器101进一步对频率变换后的预测误差图像(频率变换系数)进行量化以生成变换量化值。

熵编码控制器107针对每个待处理子块来监测从预测器105供应给熵编码器102的cu_split_flag、bt_skip_flag、bt_split_flag、bt_split_vertical_flag和skip_flag,并且按照如下方式设置相应的熵编码控制(“编码on”或“编码off”)。

当待处理子块的cu_split_flag为0时,熵编码控制器107为bt_skip_flag的熵编码控制设置“编码on”。否则,熵编码控制器107设置“编码off”。

当为待处理子块的bt_skip_flag的熵编码控制设置“编码on”并且bt_skip_flag为0时,熵编码控制器107为bt_split_flag的熵编码控制设置“编码on”。否则,熵编码控制器107设置“编码off”。

当为待处理子块的bt_split_flag的熵编码控制设置“编码on”并且bt_split_flag为1时,熵编码控制器107为bt_split_vertical_flag的熵编码控制设置“编码on”。否则,熵编码控制器107设置“编码off”。

这里,即使是在待处理子块的bt_split_flag为1的情况下,如果待处理子块的宽度或高度等于最小尺寸,则熵编码控制器107也为bt_split_vertical_flag的熵编码控制设置“编码off”。

也就是说,熵编码控制器107基于从预测器105供应给熵编码器102的二叉树结构来监测各个子块的尺寸,并且对bt_split_vertical_flag执行熵编码控制(“编码on”或“编码off”)。

详细地,在待处理子块的宽度或高度等于最小尺寸的情况下,在对块进一步划分时,熵编码控制器107使得熵编码器102跳过对bt_split_vertical_flag的熵编码过程(如上所述,设置“编码off”)。在下文中,最小尺寸用minbtsize表示。可以将最小尺寸设置为任何尺寸。在本示例性实施例中,作为示例,最小尺寸为“8”。待处理子块的宽度和高度分别用curpartw和curparth表示。

当为待处理子块的bt_skip_flag的熵编码控制设置“编码off”并且bt_split_flag为0时,熵编码控制器107为skip_flag的熵编码控制设置“编码on”。否则,熵编码控制器107设置“编码off”。

熵编码器102对变换量化值以及由预测器105确定的cu_split_flag语法值、bt_skip_flag语法值、bt_split_flag语法值、bt_split_vertical_flag语法值、skip_flag语法值、pred_mode_flag语法值、split_tu_flag语法值、帧内预测方向的差异信息和运动向量的差异信息进行熵编码。

这里,当为bt_skip_flag、bt_split_flag、bt_split_vertical_flag和skip_flag的熵编码控制设置了“编码off”时,熵编码器102跳过对其进行的熵编码。

通过上面提到的控制,仅针对四叉树结构中的端节点的块来信号通知bt_skip_flag。因此,当bt_skip_flag为1时,防止了bt_split_flag、bt_split_vertical_flag和skip_flag的冗余信号通知。

而且,通过上面提到的控制,防止了bt_split_vertical_flag的冗余信号通知。

逆量化器/逆变换器103对变换量化值进行逆量化。逆量化器/逆变换器103进一步对通过逆量化获得的频率变换系数进行逆频率变换。预测信号被添加到通过逆频率变换获得的重构预测误差图像,并且结果被供应给缓冲器104。缓冲器104存储重构图像。

多路复用器106多路复用并且输出从熵编码器102供应的熵编码后的数据作为比特流。

根据本示例性实施例的视频编码设备通过上述操作生成比特流。

下面参照图2中的流程图,针对bt_skip_flag、bt_split_flag、bt_split_vertical_flag和skip_flag来更详细地描述熵编码控制器107和熵编码器102的操作,它们都是本示例性实施例中的特征部分。

在步骤s101中,熵编码控制器107确定cu_split_flag是否为0。在cu_split_flag为0的情况下,该过程前进到步骤s102。在cu_split_flag为1的情况下,该过程前进到对下一个四叉树子块(在基于四叉树结构进行划分之后的块)进行处理。

在步骤s102中,熵编码器102对bt_skip_flag进行熵编码。在步骤s103中,熵编码控制器107确定bt_skip_flag是否为0。在bt_skip_flag为0的情况下,该过程前进到步骤s104。在bt_skip_flag为1的情况下,该过程结束。

在步骤s104中,熵编码器102对bt_split_flag进行熵编码。在步骤s105中,熵编码控制器107确定bt_split_flag是否为0。在bt_split_flag为0的情况下,该过程前进到步骤s108。在bt_split_flag为1的情况下,该过程前进到步骤s106。

在步骤s106中,熵编码控制器107确定curpartw或curparth是否等于minbtsize。当curpartw和curparth中的任何一个等于minbtsize时,该过程前进到对下一个二叉树子块(在基于二叉树结构进行划分之后的块)进行处理。换言之,熵编码控制器107跳过对bt_split_vertical_flag的熵编码过程(设置“编码off”)。对下一个二叉树子块的处理与从步骤s102开始的过程相对应。当curpartw和curparth均不等于minbtsize时,该过程前进到步骤s107。

在步骤s107中,熵编码器102对bt_split_vertical_flag进行熵编码。该过程然后前进到对下一个二叉树子块进行处理。

在步骤s105到s107中,在待处理子块的bt_split_flag为1(即,基于二叉树结构对待处理块进一步划分)并且curpartw和curparth中的任何一个等于minbtsize的情况下,熵编码控制器107跳过对bt_split_vertical_flag的熵编码过程。

在步骤s108中,熵编码器102确定bt_skip_flag是否进行了熵编码。在bt_skip_flag未进行熵编码的情况下,该过程前进到步骤s109。在bt_skip_flag进行了熵编码的情况下,该过程结束。

在步骤s109中,熵编码器102对skip_flag进行熵编码。该过程随后结束。

下面描述本示例性实施例的具体示例。图3是描绘了示例性实施例1中的qtbt结构的说明图。

图3的(a)中示出了块划分的示例。在图3的(b)中,示出了与图3的(a)中示出的划分相对应的语法元素和qtbt结构。

在图3的(a)中示出的示例中,基于四叉树结构将一个64×64(64像素×64像素)块分割成四个32×32块(子块)。因此,在qt第0层(深度0)处,cu_split_flag值指示划分(在本示例性实施例中为1)。

在qt第1层(深度1)处,右下方的32×32块在竖直方向上被分割成2。对于该32×32块,cu_split_flag值指示非划分(在本示例性实施例中为0),但是在bt第1层(深度1)处的bt_split_flag值指示划分(在本示例性实施例中为1)。而且,bt_split_vertical_flag值指示竖直方向(在本示例性实施例中为1)。对于其它32×32块,指示接替的编码数据是否存在的bt_skip_flag值不存在(在本示例性实施例中为1)。虽然为四个32×32块的bt_skip_flag设置了“编码on”,但仅针对右下方的32×32块将bt_split_flag的熵编码控制设置为“编码on”。针对其它三个32×32块设置“编码off”。

在bt第2层(深度2)处,对于右下方的32×32块中包括的左侧16×32块a,bt_split_flag值指示未划分(在本示例实施例中为0),因为该块不再进行更多划分。skip_flag的值为1。

对于右侧的16×32块b,bt_split_flag值指示划分(在本示例性实施例中为1),因为该块要进行进一步划分。bt_split_vertical_flag值指示竖直方向(在本示例性实施例中为1)。宽度(curpartw)(即16)和高度(curparth)(即32)中的任何一个均未达到minbtsize。

在bt第3层(深度3)处,右下方的16×32块中包括的左侧的8×32块不再进行划分。因此,bt_split_flag值指示非划分(在本示例性实施例中为0),并且skip_flag的值为1。

对于右侧的8×32块(被图3的(a)中的粗线包围的块),bt_split_flag值指示划分(在本示例性实施例中为1),因为该块要进行进一步划分。同时,由于curpartw等于minbtsize(=8),所以不对bt_split_vertical_flag进行熵编码和发送。换言之,熵编码控制器107为bt_split_vertical_flag的熵编码控制设置“编码off”。

在bt第4层(深度4)处,右下方的8×32块中包括的上侧的8×16块和下侧的8×16块都不进行划分。因此,对于这两个块中的每个块,bt_split_flag值都指示非划分(在本示例性实施例中为0),并且skip_flag的值为1。

图3的(a)中示出的示例与图18的(a)中示出的示例相同。在图18的(b)中,示出了严格使用四叉树分割标记、二叉树分割标记和二叉树分割方向标记的示例。在图18的(b)中示出的示例中,表达qtbt结构所需的比特数为21。另一方面,在图3的(b)中示出的示例中,表达qtbt结构所需的比特数(bin的数目)被减少到21。

利用使用了根据本示例性实施例的上面提到的熵编码控制器107和熵编码器102的视频编码设备,防止了二叉树分割标记和二叉树分割方向标记的冗余传输以改进压缩性能。而且,减少了二叉树分割标记和二叉树分割方向标记的冗余熵编码处理,并且降低了处理复杂度。

示例性实施例2

图4是描绘了视频解码设备的示例性实施例(示例性实施例2)的框图。图4中描绘的视频解码设备包括多路分用器201、熵解码器202、逆量化器/逆变换器203、预测器204、缓冲器205和熵解码控制器206。

多路分用器201对输入的比特流进行多路分用以提取熵编码后的数据。

熵解码器202对熵编码后的数据进行熵解码。熵解码器202将熵解码后的变换量化值供应给逆量化器/逆变换器203,并且进一步供应cu_split_flag、bt_skip_flag、bt_split_flag、bt_split_vertical_flag、skip_flag、pred_mode_flag、split_tu_flag、帧内预测方向和运动向量。

这里,当为从熵解码控制器206供应的bt_skip_flag、bt_split_flag、bt_split_vertical_flag和skip_flag中的任何一个的熵解码控制设置了“解码off”时,本示例性实施例中的熵解码器202跳过对其进行的熵解码。在跳过时的每个解码值按照如下方式设置。

当跳过bt_skip_flag的熵解码控制时,熵解码器202将bt_skip_flag设置为0。换言之,在bt_skip_flag不存在于比特流中的情况下,熵解码器202隐式地解释bt_skip_flag=0。

当跳过bt_split_flag和bt_split_vertical_flag的熵解码控制时,熵解码器202将bt_split_flag设置为0。换言之,在bt_split_flag不存在于比特流中的情况下,熵解码器202隐式地解释bt_split_flag=0。当跳过bt_split_vertical_flag的熵解码控制时,熵解码器202可以将bt_split_vertical_flag设置为0和1中的任何一个。

当跳过skip_flag的熵解码控制时,在bt_skip_flag的解码值为1的情况下,熵解码控制器206将skip_flag设置为1。否则,熵解码控制器206将skip_flag设置为0。

熵解码控制器206监测从熵解码器202供应的cu_split_flag、bt_skip_flag、bt_split_flag、bt_split_vertical_flag和skip_flag,并且按照如下方式设置相应的熵解码控制(“解码on”或“解码off”)。

当待处理子块的熵解码后的cu_split_flag为0时,熵解码控制器206为bt_skip_flag的熵解码控制设置“解码on”。否则,熵解码控制器206设置“解码off”。

当待处理子块的熵解码后的bt_skip_flag为0时,熵解码控制器206为bt_split_flag的熵解码控制设置“解码on”。否则,熵解码控制器206设置“解码off”。

当待处理子块的熵解码后的bt_split_flag为1时,熵解码控制器206为bt_split_vertical_flag的熵解码控制设置“解码on”。否则,熵解码控制器206设置“解码off”。

这里,即使是在待处理子块的bt_split_flag为1的情况下,如果待处理子块的宽度或高度等于最小尺寸,则熵解码控制器206也为bt_split_vertical_flag的熵解码控制设置“解码off”。

当待处理子块的bt_skip_flag的熵解码控制为“解码off”并且熵解码后的bt_split_flag为0时,熵解码控制器206为skip_flag的熵解码控制设置“解码on”。否则,熵解码控制器206设置“解码off”。

通过上面提到的设置,仅针对四叉树结构中的端节点的块来对bt_skip_flag进行熵解码,并且当值为1时,不执行bt_split_flag、bt_split_vertical_flag和skip_flag的熵解码。

逆量化器/逆变换器203利用量化步长对变换量化值进行逆量化。逆量化器/逆变换器203进一步对通过逆量化获得的频率变换系数进行逆频率变换。

预测器204基于cu_split_flag、bt_skip_flag、bt_split_flag、bt_split_vertical_flag、skip_flag、pred_mode_flag、split_tu_flag、帧内预测方向和运动向量来生成每个子块的预测信号。该预测信号是基于上面提到的帧内预测或者帧间预测来生成的。

从预测器204供应的预测信号被添加到通过逆量化器/逆变换器203进行的逆频率变换而获得的重构预测误差图像,并且结果被供应给缓冲器205作为重构图片。存储在缓冲器205中的重构图片然后作为解码后的图像输出。

根据本示例性实施例的视频解码设备通过上述操作生成解码后的图像。

下面参照图5中的流程图,针对bt_skip_flag、bt_split_flag、bt_split_vertical_flag和skip_flag来更详细地描述熵解码控制器206和熵解码器202的操作,它们都是本示例性实施例中的特征部分。

在步骤s201中,熵解码控制器206确定熵解码后的cu_split_flag是否为0。在cu_split_flag为0的情况下,该过程前进到步骤s202。在cu_split_flag为1的情况下,该过程前进到对下一个四叉树子块进行处理。

在步骤s202中,熵解码器202对bt_skip_flag进行熵解码。这里,当跳过bt_skip_flag的熵解码控制时,熵解码器202将bt_skip_flag设置为0,如上所述。

在步骤s203中,熵解码控制器206确定熵解码后的bt_skip_flag是否为0。在bt_skip_flag为0的情况下,该过程前进到步骤s204。在bt_skip_flag为1的情况下,该过程前进到步骤s214。

在步骤s204中,熵解码器202对bt_split_flag进行熵解码。之后,在步骤s205中,熵解码控制器206确定熵解码后的bt_split_flag是否为0。在bt_split_flag为0的情况下,该过程前进到步骤s211。在bt_split_flag为1的情况下,该过程前进到步骤s206。

在步骤s206中,熵解码控制器206确定curpartw或curparth是否等于minbtsize。在curpartw和curparth中的任何一个等于minbtsize的情况下,该过程前进到步骤s208。换言之,熵解码控制器206使得熵解码器202跳过bt_split_vertical_flag的熵解码过程(设置“解码off”)。在curpartw和curparth均不等于minbtsize的情况下,该过程前进到步骤s207。

在s207中,熵解码器202对待处理子块的bt_split_vertical_flag进行熵解码。该过程然后进入对下一个二叉树子块(在基于二叉树结构进行划分之后的块)进行处理。对下一个二叉树子块的处理与从步骤s202开始的过程相对应。

在步骤s208到s210中,熵解码控制器206导出被跳过熵解码过程的bt_split_vertical_flag值。

详细地,在步骤s208中,熵解码控制器206确定min(curpartw)/(1+bt_split_flag)<minbtsize是否成立。在min(curpartw)/(1+bt_split_flag)<minbtsize的情况下,在步骤s209中,熵解码控制器206将bt_split_vertical_flag值设置为0(指示在水平方向上进行分割)。在min(curpartw)/(1+bt_split_flag)≥minbtsize的情况下,在步骤s210中,熵解码控制器206将bt_split_vertical_flag值设置为1(指示在竖直方向上进行分割)。该过程然后进入对下一个二叉树子块(在基于二叉树结构进行划分之后的块)进行处理。

min(curpartw)/(1+bt_split_flag)<minbtsize是指如下条件:当基于二叉树结构对待处理子块进行进一步划分时,该划分之后得到的子块的宽度小于minbtsize。因此,熵解码控制器206可以使用步骤s208中的条件“min(curparth)/(1+bt_split_flag)<minbtsize”来在min(curparth)/(1+bt_split_flag)<minbtsize成立的情况下将bt_split_vertical_flag设置为1(指示在垂直方向上进行分割),并且在min(curparth)/(1+bt_split_flag)≥minbtsize成立的情况下将bt_split_vertical_flag值设置为0(指示在水平方向上进行分割)。

在步骤s211中,熵解码器202确定bt_skip_flag是否被熵解码。在bt_skip_flag未被熵解码的情况下(在bt_skip_flag的熵解码控制被跳过的情况下),该过程前进到步骤s212。在bt_skip_flag被熵解码的情况下,该过程前进到步骤s213。

在步骤s212中,熵解码器202对skip_flag进行熵解码。该过程然后结束。

在步骤s213中,熵解码器202在不对skip_flag进行熵解码的情况下将skip_flag设置为熵解码后的bt_skip_flag值。该过程然后结束。

在步骤s214中,熵解码器202在不对bt_split_flag和skip_flag进行熵解码的情况下将bt_split_flag设置为0并且将skip_flag设置为熵解码后的bt_skip_flag值。该过程然后结束。

下面描述本示例性实施例的有益效果。利用使用了根据本示例性实施例的上面提到的熵解码控制器206和熵解码器202的视频解码设备,防止了二叉树分割标记和二叉树分割方向标记的冗余熵解码以降低处理复杂度。

在示例性实施例1和2中,针对skip_flag执行特别的熵编码控制和熵解码控制,以便消除bt_skip_flag与skip_flag之间的冗余。然而,在不要求冗余消除的情况下,不需要针对skip_flag执行特别的熵编码控制和熵解码控制。

消除冗余的优势如下。

可以减少视频编码和视频解码中对skip_flag的冗余熵编码过程和熵解码过程以及对bt_split_vertical_flag的冗余熵编码过程和熵解码过程。而且,通过防止在将参数值相结合时出现任何误差,可以改进视频编码与视频解码之间的互操作性。

出于简洁起见,示例性实施例1和2描述了bt_skip_flag和skip_flag的定义为“接替的编码数据不存在”的情况。然而,作为例外,用于合并预测等的运动向量信息的编码数据可以接替。

虽然示例性实施例1和2描述了minbtsize表示最小宽度和最小高度两者的情况,但可以分别设置最小宽度和最小高度。在这种情况下,在图2的步骤s104和图5的步骤s204中,将curpartw与最小宽度相比较并且将curparth与最小高度相比较。

各个前述示例性实施例均可以通过硬件或计算机程序来实现。

图6中描绘的信息处理系统包括处理器1001、程序存储器1002、用于存储视频数据的存储介质1003、以及用于存储比特流的存储介质1004。存储介质1003和存储介质1004可以是分开的存储介质、或者是被包括在相同存储介质中的存储区域。诸如硬盘的磁性存储介质可用作存储介质。

在图6中描绘的信息处理系统中,用于实现图1和图4中的每个图中描绘的块(除了缓冲块)的功能的程序被存储在程序存储器1002中。处理器1001通过根据程序存储器1002中存储的程序执行过程,来实现根据前述示例性实施例的视频编码设备和视频解码设备的功能。

图7是描绘了视频编码设备的主要部分的框图。如图7所示,视频编码设备10包括:熵编码单元11(通过示例性实施例中的熵编码器102来实现),用于至少熵编码四叉树分割标记(例如,cu_split_flag)、跳过标记(例如,bt_skip_flag)、二叉树分割标记(例如,bt_split_flag)和二叉树分割方向标记(例如,bt_split_vertical_flag);尺寸多路复用单元12(通过示例性实施例中的复用器106来实现),用于将指示基于二叉树结构的划分的最小尺寸的信息(例如,minbtsize)多路复用在比特流中;以及熵编码控制单元13(通过示例性实施例中的熵编码控制器107来实现),用于控制熵编码单元11,其中熵编码控制单元13在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记接替(例如,当bt_skip_flag=0)的情况下使熵编码单元11熵编码二叉树分割标记和二叉树分割方向标记、并且在四叉树结构的端节点的块的跳过标记指示二叉树分割标记未接替(例如,当bt_skip_flag=1)的情况下使熵编码单元11不熵编码二叉树分割标记和二叉树分割方向标记(例如,设置“编码off”),以及其中在尺寸等于最小尺寸的节点基于二叉树结构而被进一步划分的情况下,熵编码控制单元13使熵编码单元11不熵编码该节点处的二叉树分割方向标记(例如,设置“编码off”)。

图8是描绘了视频解码设备的主要部分的框图。如图8所示,视频解码设备20包括:熵解码单元21(通过示例性实施例中的熵解码器102来实现),用于至少熵解码四叉树分割标记(例如,cu_split_flag)、跳过标记(例如,bt_skip_flag)、二叉树分割标记(例如,bt_split_flag)和二叉树分割方向标记(例如,bt_split_vertical_flag);尺寸提取单元22,用于从比特流提取指示基于二叉树结构的划分的最小尺寸的信息(例如,minbtsize);以及熵解码控制单元23(通过示例性实施例中的熵解码控制器206来实现),用于控制熵解码单元21,其中熵解码控制单元23在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记接替(例如,当bt_skip_flag=0)的情况下使熵解码单元21熵解码二叉树分割标记和二叉树分割方向标记、并且在四叉树结构中的端节点的块的跳过标记指示二叉树分割标记未接替(例如,当bt_skip_flag=1)的情况下使熵解码单元21不熵解码二叉树分割标记和二叉树分割方向标记(例如,设置“解码off”),以及其中在尺寸等于最小尺寸的节点基于二叉树结构而被进一步划分的情况下,熵解码控制单元23使熵解码单元21不熵解码该节点处的二叉树分割方向标记。

在四叉树结构中的端节点的块的跳过标记为1的情况下,熵解码控制单元22可以将未被熵解码的二叉树分割标记解释为指示基于二叉树结构的划分不被执行(例如,当bt_skip_flag=1时,将bt_split_flag设置为0)。

视频解码设备20可以包括尺寸设置单元(通过本示例性实施例中的熵解码控制器206来实现),用于将满足最小尺寸的值设置为未被熵解码的二叉树分割方向标记的值。满足最小尺寸的值是用于指定不执行划分成小于最小尺寸(具体地,宽度和高度均不低于最小值)的子块的值。

虽然已经参照前述示例性实施例和示例对本发明进行了描述,但是本发明不局限于前述示例性实施例和示例。在本发明的范围内,可以对本发明的结构和细节进行本领域的技术人员可理解的各种改变。

本申请要求于2016年12月26日提交的日本专利申请第2016-251291号的优先权,该申请的全部公开内容并入本文。

附图标记列表

10视频编码设备

11熵编码单元

12尺寸多路复用单元

13熵编码控制单元

20视频解码设备

21熵解码单元

22尺寸提取单元

23熵解码控制单元

101变换器/量化器

102熵编码器

103逆量化器/逆变换器

104缓冲器

105预测器

106多路复用器

107熵编码控制器

201多路分用器

202熵解码器

203逆量化器/逆变换器

204预测器

205缓冲器

206熵解码控制器

1001处理器

1002程序存储器

1003存储介质

1004存储介质

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