HEVC(H.265)视频压缩编码格式与其原理

引言

本人最近开始研究视频重编码的检测,因此做个笔记记录一下自己学习的视频编码相关知识。视频编码的目的是为了压缩原始视频,压缩的主要思路是从空间、时间、编码、视觉等几个主要角度去除冗余信息。而H.265(HEVC)则是目前常用的视频压缩编码格式,本文将主要介绍其编码单元的格式及其作用。

AVC编码存在的问题

在介绍HEVC编码之前,首先会有“为什么要引入新的编码标准?”这种问题,这是因为AVC编码仍存在一些问题,而HEVC面对这些问题都有优化,且压缩率优于AVC编码,于是我们先了解一下AVC编码存在的一些问题。

AVC宏块尺寸太小

在这里插入图片描述
在过去 ,16×16的宏块大小被认为是内存需求和编码效率之间的合理权衡。但最近研究发现使用更大的块大小可以显著提高高分辨率视频的编码效率,因为16×16的大小不足以捕获来自更高分辨率内容的增加的空间相关性,如上表所示,4K视频中16×16的宏块面积已经占比很小了,这也是HEVC的宏块(CTU)设计为64×64的原因。

AVC宏块深度有限

在这里插入图片描述图1显示了H.264/A VC中用于预测和变换的块划分结构。虽然有几个非方形分区,但H.264/A VC中的块划分架构可以大致等效一个4×4 到16×16节点的三级四叉树结构,该结构深度是有限的。
在H.264/A VC中,mb−type是一个集合语法元素,用于指定大小为16×16的宏块是否应拆分以及如何进行预测。此外,sub−mb−type指定大小为8×8的子宏块是否应拆分更多。然而,由于大量的组合,这种分割和预测组合在HEVC中效率很低,因此在所有大小中都采用统一一致的语法。

帧间和帧内预测方案之间的适应性差

在AVC中,可以指定每个宏块使用帧内或帧间预测方案,但是小于宏块大小(16×16)的分区预测方案则不可进行自适应。

预测与转换之间存在依赖关系

H.264/A VC支持两种大小的TB,4×4和8×8,如图1所示。可以为每个宏块自适应地使用两个变换大小,并附加语法元素transform−size−8x8−flag;然而,这在很大程度上取决于块的分割方式。
当使用帧间预测方案时,如果至少一个块小于8×8,则应该对宏块中的所有块使用4×4变换。即使在另一种情况下,一个宏块内的所有变换大小也应该相同。当使用帧内预测方案时,除了帧内−16×16模式外,变换的大小应等于块大小。而在帧内−16×16模式中,在对16×16区域应用16个4×4变换后,对DC值应用4×4大小的Hadamard变换。预测模式和变换大小之间的这种强依赖性以及对块大小的依赖性使得总体设计更加复杂,尤其是应用于允许更多块大小变化的HEVC编码。

HEVC编码格式

H.265又名为高效率视讯编码(High Efficiency Video Coding, HEVC)编码格式,是现行H.264标准于2003年实现标准化以来时隔10年推出的新标准,将成为支撑未来十年的影像服务和产品的视频压缩技术。其特点是,支持1080p以上的4K×2K和8K×4K分辨率,将视频压缩率提高至H.264的约2倍。也就是说,能以原来一半的编码速度发送相同画质的视频。例如,按照20Mbit/秒发送的H.264格式视频内容,在相同画质的条件下用HEVC格式只需10Mbit/秒的速度。

从编码顺序和结构上讲,H.265首先将一个视频划分成若干个序列(通常为YUV格式的视频序列),一个序列划分成若干个图像组(GOP),每一个GOP代表一组连续的视频帧。H.265 在对图像做预测编码和变换编码时,会先对图像进行划分,划分方式是四叉树。在划分四叉树时,会将整个视频帧划分成若干个正方形的编码树块(CTB),CTB 可以继续划分成编码块(CB),CB 还可以划分为预测块(PB)和变换块(TB),相应的亮度与色度块配合上对应的语法元素组成一个编码单元。

举个例子,一个CTU包括亮度CTB和色度CTB,作用是将图像分割成更小的块,以便进行更高效的编码和传输。对应的语法元素包括其位置和大小,以及与该CTU相关的运动估计和量化参数等信息。这些语法元素在编码和解码过程中都会被使用,以确保正确地对图像进行编码和解码。

H.265对视频的结构划分如下图所示:在这里插入图片描述相对于H.264/AVC的固定大小16×16 macroblock结构,上述的HEVC块分区结构被认为是相对于以前的视频编码标准来说最重要的变化之一。

从编码流程来说,H.265的编码框架如下图所示:在这里插入图片描述

之所以展示编码框架图是为了加深编码单元块分区的理解,因为编码过程中不同的步骤操作的对象不同,才会将一个视频序列逐步细分成不同的单元块。下面来详细介绍每类编码单元及其作用。

编码树单元(Coding Tree Unit, CTU)

CTU是HEVC的基本处理单元,其中的区块(CTB)是存储资料的地方,许多区块加上语法元素组成一个单元(CTU)。此处理单元类似H.264/高阶视讯编码(Advanced Video Coding, AVC)中的宏区块(Macroblock)。编码树单元的大小可以从16x16到64x64,使用比H.264更大的处理单元得到更好的压缩效果。
在这里插入图片描述

上图为CTU的一个典型划分和处理顺序的示例图。右图为CTU采用的四叉树结构,这样可以使CTU内部的块划分更加灵活。从图2中可以看出,CTU的大小为64 × 64,最小CU的大小为8 × 8。

编码单元(Coding Unit, CU)

编码单元CU是编码树的节内部节点,高效率视讯编码 (HEVC) 用编码单元 CU 指示这个单元是属于画面内预测(Intra Prediction)或是画面间预测(Inter Prediction)。 同一层次的CU必须是同一尺寸的4个方块,最多可有4层分解,即64×64(LCU),32×32,16×16和8×8(SCU)。如果不分解,则这个CTU仅包含一个 CU。每个CU包含一块亮度编码块(Coding Blocks, CB)、两个色度CB以及相应的语法元素。CU的大小和图像的特性是自适应的,在图像比较平缓区域,选择比较大的CU,而在图像边缘或纹理复杂的区域,选择比较小的CU,这样有利于提高编码效率:
在这里插入图片描述
CU可以分为两类:跳过型CU(Skipped CU)和普通CU:
跳过型CU只能采用帧间预测模式,而且产生的运动向量和图像的残差信息不需要传送给解码器;
普通CU则可以采用帧内预测和帧间预测两种方式进行预测,然后对残差数据以及附加的控制信息进行编码。
一个CTU进行编码时,是按照深度优先的顺序进行CU编码,类似于z-scan,因此之前CTU图中左半部分即CU的编码顺序。

HEVC支持任意大小的CTU,这使得编解码器能够快速优化不同的内容、应用和设备。相比使用固定大小的宏块(macroblock),支持各种大小的CTU是HEVC在编码效率和适应性方面的优势之一。特别是对于仍然广泛使用的低分辨率视频服务,这种能力尤其有用。通过选择适当的CTU大小和最大分层深度,可以将分层块分割结构优化为目标应用程序。
在这里插入图片描述
图4显示了适用于不同分辨率和内容类型的各种CTU大小和CU(Coding Unit,编码单元)大小的示例。例如,对于使用已知只包含简单全局运动活动的1080p内容的应用程序,CTU大小为64,深度为2可能是一个适当的选择。对于更一般的1080p内容,可能还包括小区域的复杂运动活动,CTU大小为64,最大深度为4将是更好的选择。

预测单元(Prediction Unit, PU)

CU确实决定了一个编码树的叶节点块的预测模式,但是这个预测信息并不是直接由CU传输给解码器的。一个编码单元(CU)可以根据预测模式的切割类型(Splitting Type)分割成一个、两个或是四个预测单元,也就是说PU只能是叶子节点。PU是进行共享预测信息的基本单元,CU到PU仅允许一层划分,最小的PU为4×4。划分可以是对称的,也可以是不对称的。一个2N×2N(N可以是4、8、16、32)的CU可划分为8种包含PU方式。PU可以是正方形的,也可以是长方形的,这是为了能够更好地区分背景与物体,例如下图:
在这里插入图片描述
换句话说,CU提供了预测模式的选项,而PU用于传输预测信息给编码器。CU和PU是一种包含关系,CU可以包含一个或多个PU。CU包含了PU的全部信息,包括运动信息、残差信息和预测模式信息等。

转换单元(Transform Unit, TU)

一旦编码预测做好了,我们就需要编码残差(也就是预测图像和实际图像的插值),用DCT类型的变换。再次,CU可能太大了,因为CU可能包含细节丰富的高频部分,也可能包含平坦的低频部分。因此,CU又可以被分为TU。所以TU是变换及量化的基本单元,是具有用于应用整数变换和量化的残差或变换系数的基本代表块。TU同样采用四叉树的分割结构,所支持的尺寸从4×4至32×32的大小。通过基于PU分割类型的预测过程获得残差块后,根据四叉树结构将其分割为多个TU。对于每个TU,应用整数变换。该树被称为变换树或残差四叉树(RQT),因为残差块由四叉树结构划分:
在这里插入图片描述
根据预测残差的局部变化特性,TU可以自适应地选择最优的模式。大块的TU模式能够将能量更好地集中,小块的TU模式能够保存更多的图像细节。这种灵活的分割结构,可以使变换后的残差能量得到充分压缩,以进一步提高编码增益。

特别地,在HEVC中,PU大小和TU大小都可以达到相应CU的相同大小。这导致TU的大小可能大于同一CU中PU的大小,即同一CU内不同PU的残差可以一起变换。
例如,当TU大小等于CU大小时,无论PU分割类型如何,都将变换应用于覆盖整个CU的残差块。注意,这种情况仅存在于帧间编码CU,因为预测总是与帧内编码CU的TU分割相耦合。

在帧间预测中,编码器可以使用多种预测模式来预测当前块的像素值,例如来自参考帧的运动矢量预测(motion vector prediction,简称MVP)或者来自其他块的邻域块预测(intra prediction)。这些预测模式的选择不受当前块内部结构的限制,因此,CU、PU和TU可以独立地被设定为相同的大小,所以可能出现上述情况。

而在帧内预测中,由于要对当前块内部的像素值进行预测,因此需要对当前块进行划分,以便更好地进行预测。具体而言,当前块需要划分为一个或多个PU,每个PU再被划分为一个或多个TU。这种划分方式对于不同的块大小、像素内容和纹理复杂度有不同的适用情况,因此不能随意设置大小。因此,在帧内预测中,CU、PU和TU的大小通常是不同的,且CU>=PU>=TU。

这张两张图可以比较好的理解上述的PU与TU结构:
在这里插入图片描述在这里插入图片描述

HEVC嵌套四叉树结构的优势

尽管在视频压缩中使用四叉树结构并不是一个新概念,但HEVC中的编码树方法通过将PU和TU四叉树概念用于视频压缩,可以带来额外的编码效率优势。

四叉树结构中,树的叶节点可以合并或组合,这样可以通过合并和组合节点实现L形或矩形形状的运动分割。然而,在HEVC块划分结构中,为了实现这样的形状,应该在进一步划分之后使用较小的块进行合并过程。PU在HEVC中解决了这些情况,而不是为了合并和组合再拆分一层。在HEVC中,PU采用预定义的分割模式(PART-2N×2N,PART-2N×N和PART-N×2N),在树的叶节点上测试最佳分割模式。PUs仍然可以通过合并模式共享运动信息。虽然通过去除对称矩形分割模式(PART-2N×N和PART-N×2N)并替换相应的合并标志,可以将一般的四叉树结构应用于HEVC,但经过证明,其编码效率和复杂性均不如现有的设计。

另一个优势是将四叉树运用到TU中。传统的视频编码标准中变换块的大小和运动补偿块的大小是固定的,而HEVC中变换块和运动补偿块使用的是更为灵活的四叉树结构,两者是可以同步变化的。但是,变换块的大小和运动补偿块的大小仍然是相关联的,因为它们必须保持一致,以确保编码的正确性和一致性。
这种嵌套四叉树结构的变换树是从编码树的叶节点开始建立的,因此在使用HEVC进行编码时,这种嵌套四叉树结构可以充分利用深度信息进行熵编码,从而提高编码效率。

最后一个优势是利用深度信息进行熵编码。其中,深度信息指的是四叉树的深度,这个深度信息可以用于更加精细的熵编码。例如,对于HEVC标准中的一些语法元素,如inter−pred−idc、split−transform−flag、cbf−luma、cbf−cb和cbf−cr,都可以利用深度信息进行熵编码。这种依赖深度信息的上下文推导技术可以提高编码效率,并且可以减少硬件实现中所需的行缓冲器,因为上方CTU的信息不需要被存储。因此,HEVC标准充分利用了深度信息进行熵编码,从而提高了编码效率。

具体来说,利用深度信息进行熵编码指的是,根据节点深度计算出符号的概率分布,并根据概率为每个符号分配一个合适的编码,以便可以用更少的比特数表示。通过利用深度信息进行熵编码,HEVC可以在尽可能少的比特数下有效地表示视频数据,从而提高了编码效率。此外,这种方式可以减少硬件实现中所需的行缓冲器数量,因为不需要存储上面CTU的信息,这样就可以降低编码器的硬件成本。

猜你喜欢

转载自blog.csdn.net/qq_39969848/article/details/129003896