视频编解码的科普知识

随着通信技术、移动终端以及各种显示技术的发展,视频广泛用于人类生活的各个方面,例如在线视频、视频会议,3D视频,视频监控,远程教学,远程医疗等,据统计,视频是目前互联网上数据量最大的媒体。由于视频的数据量巨大和网络带宽的限制,不经过压缩处理的视频无法传输,提供在线观看,即使离线存储也是不现实的。视频编码技术是视频存储和传输的前提,是数字电视、网络视频、视频通信等应用的关键技术。因此,研究和开发高效的视频编码技术,也是视频技术的发展趋势。由于视频内容具有很高冗余性,这给视频的压缩带来了可能,视频数据的冗余性体现在:(1)空域冗余(同一帧图片中空间相关性);(2)时域冗余(连续图像相邻帧间数据的高度相关性);(3)统计冗余(进行信息熵编码时,无法根据图像数据中某个像素点的信息熵大小为其分配相应的比特数来表示,而是采用相同的比特数来表示所导致的编码码字存在的冗余);(4)心理视觉冗余(人眼对彩色信息的分辨能力有限,对图像各种组成成分的敏感程度不同,特别是对高频和色度信息不敏感)。针对各方面的冗余信息的特点,有如下的解决方法,针对空域冗余:利用空间相关性减少像素之间冗余信息,并且正交变换能够将空域相关的数据转换成不相关的变换系数来表达,正交变换具有能量集中的作用,经过变换后的残差只能量更集中。对时域冗余:运用运动预测匹配技术来消除,基本思想是用时域相邻帧进行运动匹配,得到预测残差和运动矢量,减少编码比特数,减少冗余。对统计冗余:通过熵编码技术的研究,提高熵编码的效率来降低统计冗余。对于心理冗余:在视频采样时就进行了压缩,舍弃部分对人眼不敏感的信息。

视频压缩是一类特殊的数据压缩方法,数据是信息的载体,对于定量的信息,设法减少表达这些信息所用的数据量,数据压缩通常分为无损压缩和有损压缩。追求更高的压缩效率是视频编码领域永恒的主题。

视频编码技术的不仅在于提高编码效率,节省码流,而且兼顾编码技术易于并行化,高鲁棒性,与硬件兼容,易于硬件实现。在过去几十年里面,国际上已经成功制定了多个视频编码标准,包括用于CD-ROM的MPEG-1标准,用于数字视频光盘DVD盒数字电视广播DVB的MPEG-2标准,用于实时应用的视频会议H.261/H.263标准,以及允许对任意形状的对象进行编码的MPEG-4标准,还有H.264/AVC[4] (MPEG-4第十部分)、H.265/HEVC[2]。随着人们对高清、超高清、更丰富色彩的视频、立体视频的需求越来越明显,导致了视频数据量的暴增,现有的H.265/HEVC已不满足人们的需求,故在2015年ITU-T的VCEG和ISO/IEC的MOEG两大组织再次联合探索下一代视频编码标准(Joint Video Exploration Team,JVET),在现有的H.265/HEVC的基础上进一步探索下一代视频编码标准[17],在同等主观质量下进一步节省比特流。国内于2015年完成了第二代音视频编码标准[3]的(Audio Video coding Standard ,AVS2)制定。

  如今的编码器都是按照编码单元(块)进行逐次编码,所以灵活的块划分技术[5-6]在编码中扮演着重要的角色,但是灵活的划分技术给编码的复杂度带来了挑战,不管对于HEVC、H.266、AVS2,编码时都需要遍历所有的块划分方式,选择总代价最小的模式和划分尺寸,这显然给编码器带来了巨大的计算复杂度,不利于现实生活中的实时编码,故对块划分方式的优化计算,减少编码复杂度、编码时间并且保证 编码性能损失很小已成为研究热点。

预测技术是视频编码最重要的手段,预测准确度将直接影响编码效率和质量。H HEVC、H.266、AVS2中均沿用传统的混合编码框架,分为帧间预测和帧内预测,对应于减少视频的时域冗余和空域冗余,对提高编码性能至关重要。

帧内预测,就是利用一幅图像空域上相邻像素之间具有很强的相关性的特点,通过当前块周围已经重建的相邻像素对当前块进行预测,有效地去除空域的冗余。从目前的编码标准来看,帧内预测通常包括很多预测方式(HEVC有35种、H.266有67种、AVS2有33种),编码、时每个块遍历很多的预测模式,选择率失真代价最小的作为当前块的帧内预测模式,最大程度的去除空间冗余,同时也给编码带来了很高的计算复杂度,所以根据当前块的纹理特性或者当前块周围已编码块的最优模式来优化遍历次数,并且保证编码性能损失很小,是改善计算复杂度的有效方式。目前的帧内预测通常只取当前块的上一行左一列重建像素作为当前块的参考像素,这导致利用的空间上相关的像素太少,不利于最大程度的去除空间冗余,因此,获取更多的相关性很强的参考像素是进一步提高预测准确度的方式。

帧间预测,就是根据之前已经重建的图像对当前图像进行预测和编码,有效的去除时域上的冗余,根据预测方向可以分为向前预测和向后预测两种,I(Intra)帧只能使用当前图像的信息来进行编码,前向预测(P帧),利用之前已经重建的图像对当前图像进行编码,双向预测(B帧)不仅可以使用向前预测对当前图像进行预测编码,同时也可以使用后向预测对当前图像进行预测编码。从目前编码器来看,预测就是使用传统的运动搜索,用当前块在重建帧中寻找与最匹配的块(H.265、AVS2均使用此方式),这仅能解决发生平移的编码块匹配问题,而H.266引入了仿射运估计,可以解决发生旋转的编码块的匹配问题,但有些发生扭曲的块的匹配问题,还未能解决,因此,帧间预测的运动估计有待进一步改善。由于帧间预测的编码单元相互参考,当前编码单元的编码质量会影响后面参考此单元的编码单元的编码参数选择,所以存在率失真性能相互依赖的问题,但是目前的编码标准中,每个编码单元的率失真性能相互独立,因此,可以根据率失真性能相互依赖的问题,优化率失真计算。

变换,通过将空域相关的数据转换成不相关的变换系数来表达,变换后能量更加集中,再通过量化,去除一些不敏感的高频信号,减少需要传输的信息量,这一步去除空间信号的相关性。目前的编码器均采用DCT/DST联合变换,变换后能量很集中,只需编码相当少的变换系数,但是对于残差矩阵系数存在明显分界(残差系数波动很大)或者一些奇异点时,会导致变换后能量分散,出现很多高频系数,有损变换的效率,目前的编码器还没有解决方案,值得进一步探索改善。

量化,不做解释,大家应该都懂得,H.265到目前的H.266(探索阶段,不保证标准形成的还是不变哈)并没有任何的变化或者改进。

      熵编码,是去除符号冗余的重要要方法,HEVC采用两种熵编码的方法,一种是CAVLC,另一种是CABAC.熵编码的大部分理论是数学家建立的,视频领域只是把这些方法或者理论直接应用,这部分在视频标准中很难理解,本人很少看这部分代码,因此不说太多,言多必失。

      附一张H.265的编码框架图

    视频编解码的科普知识