1.4 传统视频压缩技术理论和算法概述
前面介绍了一些基本理论和概念,本节介绍视频编解码的理论和主要技术。一般来说,这部分都会先介绍为什么要进行数据压缩,它的现实意义是什么,有什么样的理论基础,最后是具体实现。简单来说,视频数据量非常大,如果不进行压缩处理,很难进行实际应用,例如保存、传输等。尽管这是一个老生常谈的问题,但是为了完整地描述问题,我们还需要举一个简单的例子来介绍它,假设一个电影的时长是90分钟,分辨率为1080p(1920×1080),采样精度为8比特,采用了RGB色彩模型表示,那么一幅图像的大小就是1920×1080×3=6220800≈6075KB,相当于6MB,按照每秒24的帧率(现在很多电影都采用48帧了),一个标准的90分钟的电影大小是1920×1080×3×60×24×90≈750GB,也就是说一个未经过压缩的正常时长的电影需要大概750GB的存储空间,而且这里使用字节(Byte)作为单位,如果换成比特(bit),这个数值将会更大。而一个4K分辨率的电影需要大概4倍的存储空间,可想而知,没有经过压缩的视频文件是多么浪费空间。
尽管视频的数据量非常巨大,幸运的是,视频数据又具有非常大的冗余,例如空间冗余、时间冗余、统计冗余、编码冗余等,一些重复的信息在里面,这就给广大研究学者、工程师提供了进行压缩处理的可能,最后就是运用我们学过的数学、生物学、物理学、电学等学科中的知识对视频图像数据进行处理,例如,预测、变换、量化、熵编码和环路滤波等,并总结成一定的标准,例如MPEG系列、H.26x系列、VPx/AV1系列等,这些就是这部分要讲述的内容。
本节首先介绍数据处理的理论基础——信息论,包括信息熵的概念以及香农三大定理等;然后从时间、空间、人眼等多个维度介绍数据之间的冗余特性;最后介绍基于块的视频编码基本技术,以及视频图像质量的主观和客观评价方法等内容。
1.4.1 信息论概述
要处理视频数据,就需要了解其特性,找到其理论基础,作为一门科学,总要有其理论基础,其实视频数据压缩是数据压缩的一个分支科学,与许多科学有相同的理论基础——信息论,也就是运用概率论与数理统计的方法研究信息、信息熵、通信系统、数据传输、密码学、数据压缩等问题的应用数学学科。信息系统就是广义的通信系统,泛指某种信息从一处传送到另一处所需的全部设备构成的系统。
信息作为一个抽象的概念,不管是作为科学研究的对象,还是人类感性认知的对象,都需要一个量化的方法,这个方法就是信息熵(entropy)理论,是克劳德•香农博士在1948年分两期发表在《贝尔系统技术杂志》(Bell System Technology Journal)上的论文《通信的数学理论》(“A mathematical theory of communications”,1948)中引入的概念。在这篇文章中,香农博士采用了“信息熵”的概念,在数学上量化了通信过程中的“信息”,并阐述了统计本质,进而扩展到通常意义上的信息,成为信息论的奠基石。
信息量是用事件的不确定性程度,或理解为某一个事件发生的概率来定义的。信息可以被看作一个随机变量序列,这些变量可以用随机出现的符号来表示,输出这些符号的源称为“信源”。假设有N个事件,其中事件i发生的概率为pi,则事件i的信息量Ii定义为
上式的取值随对数的底α的取值不同而不同,相应地单位也不同。通常α取2,相应的信息量单位为“比特(bit)”;当α取e时,相应的信息量单位为“奈特(Nat)”;当α取10时,相应的信息量单位为“哈特(Hart)”。Ii又称自信息量,也是一个随机变量。
从公式还可以看出,第i个随机事件发生的概率pi越大,Ii的值越小,也就是这个事件发生的可能性越大,不确定性越小,事件发生后反映出来的信息量也就越少;反之,随机事件i发生的概率pi越小,Ii的值越大,包含的信息量也就越大。由此可见,随机事件的概率与事件发生后所产生的信息量有着密切的关系。如果一件事发生的概率pi等于1,那么Ii等于0,这就是我们常说的必然事件,此事件发生不产生任何信息量。
若一个信源由N个随机事件组成,N个随机事件的平均信息量定义为信息熵H,它的具体定义如下(其中pi是信源中第i个事件发生的概率)。
信源的信息熵H表示信源输出每个事件所包含的平均信息量,信息熵根据整个信源的统计特性计算得到。信息熵从平均意义上表征信源总体信息的测度,也就是表征信源的平均不确定程度。信源的信息熵由其所有事件的概率分布决定,不同的信源因统计特性的不同,其信息熵也不同。
接下来,我们从一维随机变量扩展到二维随机变量,假设有两个信源X和Y,X={x1,x2,…,xn},Y={y1,y2,…,ym},那么这一对信源的平均信息量就称作联合熵,其定义如下(其中p(xi, yi)表示(xi, yi)一起出现的概率):
H(X, Y)=-∑∑p(xi,yi)log2p(xi,yi)
同理,上面的两个信源可以看作是相互独立的,可以用联合熵来描述它们的平均信息量,如果它们直接相互作用,就需要使用条件熵来描述。还是假设X和Y代表两个不同的信源,在给定X值的前提下,随机变量Y的条件熵H(Y|Y)定义如下(p(yi, xi)表示条件概率,读作在xi的条件下yi的概率)。
补充一点,条件概率是指事件A在另一个事件B已经发生的条件下发生的概率。条件概率表示为p(A|B)。互信息(Mutual Information,MI)是信息论中另一个重要的概念,是变量间相互依赖性的量度。它反映了两个信源之间的相互性,最常用的单位是bit。其定义为I(X; Y)=H(X)-H(X|Y)。条件熵H(Y|X)表示在输出端接收到信源Y的所有信息后,信源X仍存在的不确定程度。互信息I(X; Y)表示收到信源Y的信息后,获得信源X的信息量的数学期望。在数据压缩中,获得了信源Y的信息,就可以知道信源X的部分信息,因此就不必再编码信源X的全部信息,这样就达到了去除冗余的目的。
在概率论和统计学中,数学期望(mean),或称均值,亦简称期望,是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征。它是简单算术平均的一种推广,类似于加权平均,反映随机变量平均取值的大小。
不要被这些数学符号、概念、公式吓到,其实信息熵理解起来非常容易,可以想象成对你来说一条信息所包含的信息量的大小,是跟你觉得它会发生的概率成反比的。举个例子:当你听到中国乒乓球队赢球的时候,你会觉得这条信息的信息量大吗?不会,因为中国乒乓球队赢球的概率很大,所以当你听到符合你预期的结果的时候,你并不会感到惊讶,这就表示这个信息对你来说信息量不大。但是如果中国的南方三四月份下雪了,你一定会关注一下,因为这件事发生的概率太小了,所以对你来说信息量就会很大。
理解完基本概念,我们再来看看香农三大定理。作为信息论的基础理论,香农三大定理是存在性定理,虽然并没有提供具体的编码实现方法,但为通信信息的研究指明了方向。香农第一定理是可变长无失真信源编码定理,香农第二定理是有噪信道编码定理,香农第三定理是保失真度准则下的有失真信源编码定理。
香农第一定理说明,通过对扩展信源进行可变长编码,可以使平均码长无限趋近于信息熵。香农第一定理是关于信源编码的存在性定理,另一个重要结论是,对给定的离散信源进行适当的变换,使变换后信源输出的符号序列尽可能服从等概率分布,从而使每个码符号平均所含有的信息量达到最大,进而可以用尽量少的符号码传输信源信息。香农第一定理解决的是通信中信源的编码压缩问题,也是后来图像和视频压缩的基本定理。
香农第二定理,又称为有噪声信号编码定理,指的是当信道的信息传输率不超过信道容量时,采用合适的信道编码方法可以实现比较高的传输可靠性,但若信息传输率超过了信道容量,就不可能实现可靠的传输。,S是平均信号功率,N是平均噪声功率,S/N即信噪比。在感性上我们可以这么理解,城市道路上行驶的汽车的车速和什么有关系呢?除了和自己车的动力有关之外,主要还受限于道路的宽度(带宽)和车辆多少、红绿灯疏密等其他干扰因素(信噪比)。
香农第三定理,又称为率失真定理。它解决了在允许一定失真的情况下的信源编码问题,图像压缩,甚至是音频压缩大多数都是有损压缩,在图像质量和压缩比的权衡之间,码率控制的很多算法都要依靠香农第三定理。当然,我们这里只是抛砖引玉,为大家简单介绍一些基本概念、定理,以及对这些基本概念和定理的理解,如果想要了解更加深入的知识,请自行参考信息论专业书籍,这里不详细讨论。
1.4.2 视频数据的冗余特性
本节我们从多个维度介绍视频数据的冗余特性,这些是我们能够运用技术手段进行视频处理的科学依据。首先我们知道,在由连续的模拟信号通过采样生成离散的数字信号的过程中,会产生大量的冗余,一般将这些输入冗余分成空间冗余、时间冗余和统计学冗余以及视觉冗余等。
空间冗余是静态图像存在的最主要的数据冗余,如果一幅图像中有较大的背景区域,在此区域中所有点的光强和色彩以及饱和度都是非常相近的,这种空间连贯性就称为空间相关或空间冗余。例如一张大海的图片、一张带有天空的图片,以及足球场、网球场等很多例子说明,一张图片的各个像素之间存在很大的相关性。
时间冗余是视频序列中经常包含的冗余,序列图像中的相邻帧往往包含相同的或类似的背景和运动物体,只不过运动物体所在的空间位置略有不同。这种相邻帧间数据的高度相关性就称为时间冗余。换句话说,视频数据从内容上看都表示连续的场景,通常来说,在内容上前后几帧数据都有非常强的相关性,很多场景都是在前一帧或前几帧图像的基础上发生位移、偏转、镜像等移动而产生的。还是举足球比赛的例子,一场足球比赛的主体场景就是足球场,还有教练席、观众席等,这样,记录一段足球比赛的视频中的大部分图像的背景就非常相似,只是人和球会产生移动,所以大部分帧之间的相似性比较高。
以上都是比较直观的冗余,还有一类冗余我们称之为统计学冗余。我们暂时抛开图片本身的内容不谈,一个像素的Y分量占8比特,一共有255个像素值,一幅1920×1080的图片有1920×1080=2073600个像素值,按照均值样本采样来算,8132个点有同一个值,即2073600÷255≈8132,按照正态分布,则有更多的像素取同一个值,这也是相关性的体现。统计学冗余可以引申为信息熵冗余,也称为编码冗余,由信息论可知,为表示图像数据的一个像素点,只要按照其信息熵的大小分配相对应的比特数即可。而对于实际图像数据的每个像素,在获取图像时很难得到它的信息熵,因此一般是对每个像素采用相同的比特数来表示。这样就必然存在冗余,这种冗余就称为信息熵冗余。
另外,我们从人眼的特性知道,人眼的视觉系统并不完美,对图像场的敏感度是非均匀和非线性的,例如对某些失真并不敏感,察觉不到图像的某些细微变化,这些细微变化信息即使丢失,人眼也感受不到,因此由量化误差引起的图像变化在一定范围内就不能为人眼所察觉。而在记录原始图像数据时,通常假设视觉系统是线性的和均匀的,对视觉敏感和不敏感的部分同等对待,这样就产生了比理想编码更多的数据,这就是视觉冗余。
简单总结一下就是:
时间冗余:视频相邻的两帧之间内容存在相似性。
空间冗余:视频中每幅图像的内部相邻像素之间存在相似性。
统计学冗余:视频中不同数据出现的概率不同。
视觉冗余:人眼的视觉系统对视频中不同的部分敏感度不同。
当然,从更高层次的人类认知层面归纳,还可以分为知识冗余和结构冗余等。图像中所包含的某些信息与人们的一些先验知识有关。例如,人脸的图像有固定的结构,五官间的相互位置信息就是一些常识。这类规律性的结构可由先验知识和背景知识得到,此类冗余称为知识冗余。根据已有的知识,可以构造某些图像中所包含的物体的基本模型,并创建对应各种特征的图像库,这样,图像的存储只需要保存一些特殊参数,这可以大大减少数据量。知识冗余是模型编码利用的主要特征。结构冗余指视频图像中存在很强的纹理结构或自相似性。有些图像的纹理区,其像素值之间存在着明显的分布模式,如方格状的地板图案等。如果已知某些像素分布模式,则可以通过某一特定过程生成图像。
对于空间冗余的消除,一般有两种有效的方法。第一种方法是基于预测的方法,即通过预测估计去除空间过采样带来的冗余。基于预测的方法使用周边的像素点来预测当前像素点的数值,通常基于自适应滤波器理论来进行方法设计。第二种方法是使用正交变换,即变换编码,将空间域图像信号的像素矩阵变换到频域上进行处理,根据不同频率信号对视觉质量的贡献大小进行数据表达和比特再分配,这样就可以纠正空间域上均匀采样的不合理表达。同时在比特再分配过程中综合考虑去除视觉冗余的需要,省略过分精细的高频分量表达,实现有效压缩。变换编码于20世纪60年代后期被引入视频编码领域,70年代的前五年,人们已经发现对于去除空间冗余,变换编码是性能最好的算法。当然,基于预测的方法和基于变换的方法也可以组合使用。
对于时间冗余的消除,一般使用基于预测的方法,也就是时域预测编码。主要原因是,视频信号在时间轴方向上的采样是离散的,因此在这个方向上实施变换操作缺乏依据。预测编码于1952年被提出,同年用于视频编码,被作为空间编码技术使用。1969年,运动补偿预测技术被提出,该项技术使得预测编码性能获得极大改进。70年代中期,预测编码开始与变换编码结合起来使用,直到80年代末期,双向预测技术被提出并应用至今。对于编码冗余的消除,熵编码于20世纪40年代后期被提出,60年代后期被开始用于视频编码领域,80年代中期的2D变长编码(2DVLC)以及更晚一些的算术编码是熵编码的典型形态。
当然,经过几十年的研究,人们已经知道了很多有效去除空间冗余、时间冗余、统计学冗余以及视觉冗余的方法,当然这还远未达到理想的程度。所以做视频编解码还是有很大的发展空间。下面分别介绍常用的编解码技术。
1.4.3 变换技术
作为信号处理的常用手段,在时域上看不出规律的情况下,我们把时域的信号变换到频域上,也许就能有一些特别的发现了。通常这种方法叫作变换,即把时域中的信号按照某种规则映射到某个频域系统上,这种规则就可以理解为某种变换。开始的时候,人们首先尝试使用了熟悉的快速傅里叶变换(FFT),但是因为图像数据是非负的,在傅里叶空间上只占据了第一象限,并且效率低下,图像数据更适合被看作一类二维数据,而并不像音频那样适合被看作一类一维数据,所以,傅里叶变换其实并不适合用于图像数据的转换。
后来人们开始转向研究二维数据的变换,在线性代数中,正交变换由于一些特性(各个基向量的内积为0),非常适合用来进行时域频域的转换,所以被广泛应用到图像数据的处理中。时域中的图像数据经过正交变换之后,原来分布在每个像素上的能量会被映射到几个频率带上,而通常来讲,大部分像素的频率带是类似的,所以它们的能量会被集中到低频部分,也就是变化不大的部分,这也好理解,因为大部分像素变化不剧烈,所以经过变化之后,会被集中到低频部分。举个例子来说,足球场的草坪、蔚蓝的天空、浩瀚的大海等,相邻像素之间的色彩差异很小,可以理解为一些低频的像素。即使大海上有一些船只,对于船只本身的像素来说也是一些低频的像素,只是船只和大海的边缘的像素因为颜色差别较大才是高频像素,所以只有较少数的像素会映射到高频的部分。图像数据经过正交变换之后,时域中像素之间的相关性被去除了,而图像数据的信息也更加紧凑,这样需要被编码的数据就会减少。
具体地讲,假设X=X(N,N)为图像中一个N×N的块,T为正交变换矩阵,如果有
显然可以有
因此,如果能够找到正交变换T,并且T-1不需要特别传输到解码端,则可以得到秩为N的矩阵,通过变换T,其最大可被压缩的上限为N:1。如果使用M×N的长方形矩阵,其中N>M,压缩上限仍然为N:1。我们称N为I帧图像编码压缩的上限。使用正交变换的原因是,正交变换的转置矩阵和逆矩阵是相等的,这在解码端做逆变换的时候,非常方便。
按照这个方向,霍特林(Hotelling)在1933年最先给出了Karhunen-Loeve(卡鲁宁·勒夫)变换,简称为K-L变换。它是目前公认的在理论上基于均方误差(Mean Square Error,MSE)计算方式的最优变换,后续要介绍的变换都只能无限接近它,不能超越它。K-L变换包含了余弦变换和正弦变换的部分,随后,人们使用了离散余弦变换(Discrete Cosine Transform,DCT)来代替K-L变换。DCT具有不依赖于输入信号的统计特性,而且在一些并行处理单元不够多的处理芯片上有快速实现算法,所以在实际的工程中取得了很好的效果,得到了广泛、迅速的使用。在实际使用中,考虑到实现的复杂性,不是对整幅图像进行离散余弦变换,而是把图像分成不重叠的固定大小的块,然后对每个图像块进行离散余弦变换。MPEG-2、H.263以及MPEG-4都采用8×8的DCT。但是DCT也有自身的缺陷,就是这些标准中的DCT技术采用了浮点数来实现,浮点计算会引入较高的运算量,同时如果对浮点精度不做一致的规定的话,解码器会出现“误差漂移”。Bjontegaard于1997年提出了用整数变换技术来解决这个问题,同时整数变换只需通过加法和位移操作即可实现,计算复杂度大大降低。最新的H.264/AVC采用了整数DCT技术。DCT技术的另一个重要进展是H.264/AVC标准中采用了自适应块大小变换(Adaptive Block-Size Transform,ABT)技术,而不再是针对固定大小的块进行运算,这部分改进主要是因为在最新的编码标准中块的大小非常灵活,根据图像的内容可以自适应,所以不同大小的块能够直接进行变换意义很大。ABT的主要思想是用与预测块相同尺寸的变换矩阵对预测残差去相关,这样不同块尺寸的预测残差系数的相关性都可以被充分利用。ABT技术可以带来1dB的编码效率的提高。
下面我们介绍在历史上占据重要地位的8×8的DCT的实现。通常我们用到的是8个像素点的DCT,这里直接给出8个像素点的DCT公式,F(μ)表示一维像素值,f(n)表示一维变换系数。
那么二维DCT的变换和反变换的公式如下,F(u,v)表示二维像素值,f(n,m)表示二维变换系数。
变换技术的另一个重要进展是离散小波变换(Discrete Wavelet Transform,DWT)技术,DWT具有多分辨率多频率时域分析的特性,信号经过DWT分解为不同频率的子带后更易于编码,并且采用适当的熵编码技术编码,码流自然地具有嵌入式特性。JPEG 2000图像编码标准建立在DWT技术之上,MPEG-4标准也采用了DWT技术对问题信息进行编码。此外,很多人也对采用DWT技术的视频编码方案进行了深入研究。除了DCT和DWT外,视频编码标准中还会用到哈达玛(Hadamard)变换,理论上,哈达玛变换比傅里叶变换更利于小块的能量聚集,但会产生更多的块效应。由于哈达玛变换的计算复杂度低,仅仅需要加减操作就可以实现,因此常在运动估计或模式决策中被用来替代DCT,得到和DCT相近的决策结果,再根据决策结果用DCT去编码。在最近的H.265/HEVC标准中,针对帧内预测残差系数的相关性分布,离散正弦变换(Discrete Sine Transform,DST)比DCT具有更好的去相关性。
1.4.4 量化技术
从理论上来说,量化会降低数据的精度,简单来说,就是把一定范围内的数据分成多个小的区域,然后一个区域用一个数值来表示,划分的区域数量一般称作量化步长,或者量化系数。举个例子来说,从0到255的正整数,我们想平均地分成8个区域,每个区域里面就会包含256÷8=32个数,然后在每个区域选择一个数作为代表,比如在[0,31]的区域选择16,在[32,63]的区域选择48,那么[0,255]的数据就会表示为[16,48,80,…,240],一共32个数。因为这32个数并不连续,不好处理,所以用[0,31]这32个连续的数来标识[16,48,80,…,240],整个过程可以看作量化和反量化的过程,如下所示:
显而易见,通过量化,数据的数据量降低了,原来使用8比特才能表示的数据,目前只需要4比特就能标识了,节省了存储空间,达到了压缩的目的。但是与此同时,数据的精度也下降了,如果考虑这是一个灰度图像的话,细节部分的数据量会降低很多,看起来整个图像就变得不连续了。
在音频上,我们经常会在时域上采用量化的方式进行数据的压缩,但是对于图像来说,这种失真度就非常大了,人眼是不可接受的,所以在图像上,我们一般是针对变换后的图像数据,也就是在频域上进行量化操作。从前面的叙述可知,一幅图像经过变换处理后,时域上的采样信号会变换到频域的能量信号,能量比较集中的部分的数值范围就会比较大,对这部分数据进行量化,再恢复到时域信号的时候,对时域信号的影响就会降低。虽然影响会降低,但是量化始终是一种有损压缩技术,量化后的视频图像不能进行无损恢复,因此导致了源图像与重构图像之间的差异,这种差异通常称为失真。编码图像的失真主要是由量化引起的,所以失真可以看作量化步长的函数。量化步长越大,量化后的非零系数越少,视频压缩率越高,但重构图像的失真也越明显。从这里可以看出,图像质量和压缩率是一对矛盾体。通过在量化阶段调整量化步长,可以控制视频编码码率和编码图像质量,根据不同的需求,在两者之间进行选择和平衡即可。
理论上,量化有两种具体的实现方式:向量量化和标量量化。向量量化是一组数据联合量化,每个数据的量化步长可以不同;标量量化是使用统一的量化步长做量化。当然,标量量化也可以看作一维的向量量化。根据香农率失真理论,对于无记忆信源,向量量化编码总是优于标量量化编码,但设计高效的向量编码码本是十分复杂的问题,因此当前的编码标准通常采用标量量化。
在实际使用中,量化总是紧跟着变换,量化过程实际上就是对DTC系数的一个裁剪的过程,由于DCT具有能量集中的特性,变换系数的大部分能量都集中在低频范围内,很少的能量落在高频范围内。利用人的视觉系统对高频信息不敏感的特点,可以通过量化减少高频的非零系数,提高压缩率。
我们来具体看一个实际中使用的例子,下面公式中左边的4×4矩阵是DCT之后的矩阵,从数据的大小上看得出来,左上角的数据最大,也就是通常所说的能量最集中的部分。为了表征这种关系,把左上角的数据定义为直流分量,也叫DC(Direct Current)系数,而把其他位置的数据定义为交流分量,也叫AC(Alternating Current)系数。然后我们假设量化系数为30,那么经过量化之后,除了左上角的DC系数比较大之外,其他系数都比较小,大部分都是1和0,这样,我们编码所需要的码字就比较少了。
在解码端会对这段数据进行反变换,也就是用上面的数据再乘以量化系数30,得到恢复后的数据,而原始数据与其经过量化和反量化之后的数据并不一致,也就是说压缩前的数据和压缩后的数据不一致,这就是所谓的有损压缩。在实际应用过程中,针对不同的分量以及DC和AC系数,有时会采用不同的量化系数,甚至是使用不同的量化矩阵来进行量化,只要编码器的量化系数和解码器的反量化系数保持一致即可。
比较一下量化前和反量化后的块的每个成员数据的值,就会发现误差,经过反变换后恢复到时域的差值就可以理解为失真。
1.4.5 预测技术
预测编码最早的系统模型是1952年贝尔实验室的Culter等实现的插值脉冲编码调制(DPCM)系统,其基本思想是不直接对信号进行编码,而是用前面的信号作为当前信号的参考,然后记录当前信号和参考信号的差异,再对差异值进行编码。同年,Oliver和Harrison将DPCM技术应用到视频编码中。DPCM技术在视频编码中的应用分为帧内预测技术及帧间预测技术,分别用于消除空间冗余和时间冗余。空间冗余也称为空域冗余,时间冗余也称为时域冗余。只使用帧内预测编码的图像称为独立编码帧(intra-coded),简称为I帧,使用帧间预测编码的帧称为非独立编码帧。按照参考帧的类型,如果只参考前向帧的使用帧间预测编码的帧称为前向预测帧,简称P帧;不仅使用前向参考帧,还使用后向参考帧的使用帧间预测编码的帧称为双向编码帧,简称B帧。
1.4.5.1 帧内预测
Harrison在1952年首先对帧内预测(intra prediction)技术进行了研究,其方法是用已编码像素的加权和作为当前像素的预测值,研究中比较了一维(同一行内像素)DPCM技术以及二维(多行内的相邻像素)DPCM技术的性能,这一基本思想在无损图像编码标准JPEG-LS中得到了应用(ISO-14495-1/ITU-T.87),其核心算法的名称为LOCO-I(Low Complexity Lossless Compression for Images)。在现代视频编码中,采用了基于块的帧内预测技术,例如,MPEG-4标准中的相邻块频域系数预测,以及H.264/AVC、H.265/HEVC的多方向空间预测技术等。
帧内预测利用图像在空间上相邻像素之间具有相关性的特点,由相邻像素预测当前块的像素值,可以有效地去除块之间的冗余,也就是空间上的冗余。具体来说,设x={x0,x1,x2,…,xn}为相邻像素点的集合,y为当前像素,且有y=f(x),特别地,当f(x)为一阶线性函数时,有如下公式:
其中αi称为预测权重系数,n称为预测阶数。一般有
很显然,根据香农第一定理,当预测阶数n为0时为无记忆信源,此时I帧编码压缩的理论上限为该图像所有像素的信息熵H(X),x∈X。
帧内预测包含多个方向,按照图像本身的特点选择一个最佳的预测方向,最大限度地去除空间冗余。多方向空间预测技术与DCT相结合,可以弥补DCT只能去除块内冗余的缺点,获得较高的编码性能,H.264/AVC的I帧编码采用了多个预测方向的帧内技术,大大提高了帧内预测的效率。当下的H.265/HEVC则通过增加更多的帧内预测方向进一步解释了I帧图像的编码效率,对于图像的应用有重要意义。
1.4.5.2 帧间预测
帧间预测(inter prediction)是消除运动图像时域冗余的技术,Seyler在1962年发表的关于帧间预测编码的研究论文奠定了现代帧间预测编码的基础。他提出视频序列相邻帧间存在着很强的相关性,因此对视频序列除了第一帧需要完整编码之外,其余帧就只需编码帧间的差异。通常来说相邻帧的差异较小,适合做差值编码,这里的相邻帧不一定是指按照播放顺序的相邻,也可以指在编码顺序上的相邻。他还提出相邻帧间的差异是由物体的移动、摄像机镜头的摇动以及场景切换等造成的。在此之后,帧间预测技术的发展经历了条件增补(conditional replenishment)、3D-DPCM、基于像素的运动补偿等几个阶段,最终从有效性和可实现性两方面综合考虑,确定了基于块的运动补偿方案。现代视频编码系统基本上都采用了基于块运动补偿的帧间预测技术,用于消除时域冗余。
通常来说,视频图像的相邻或相近图像中的场景存在着一定的相关性,因此可以在邻近参考帧中为当前块搜索最相似的预测块,并根据找到的预测块的位置计算出两者之间的空间位置的相对偏移量,即通常所说的运动向量。通过搜索找到运动向量的过程就称为运动估计,预测块和当前块的差异称为预测残差,根据运动向量从指定的参考帧中找到预测块的过程称为运动补偿。当然,由于视频场景中物体运动速度和视频采样间隔等的影响,当前块在参考帧上的运动位移很可能不在整像素的位置上。在这种情况下,整像素预测块的预测效果不好,而采用子像素插值的方法可以为当前块找到更好的子像素预测块,降低当前块的编码冗余。子像素插值的位置通常为等。
前面介绍了寻找差异的方法,那么对于差异是如何衡量的呢?在基于块的预测编码中,通常会用绝对值差和(Sum of Absolute Difference,SAD)或者平均绝对值差(Mean of Absolute Difference,MAD)来衡量预测值与实际值的差异程度。实际像素值与预测值的SAD或者MAD值越小,表示实际值与预测值之间越相似。预测编码技术就是采用SAD、MAD或者其他类似方法作为评估最佳预测块的方法。
SAD的定义如下:
MAD的定义如下:
通过预测,可以得到实际像素值与预测像素值的差值,称为预测残差。其中xi为实际像素值,是预测像素值。预测残差比实际值具有更好的统计特性。根据香农信息论可知,预测残差的编码需要的比特数更少。解码器通过采用与编码器相同的预测方法,得到完全相同的预测值,然后用解码出来的预测残差与预测值相加就可以得到类似原图像的图像,我们称为重构图像。
为了提高帧间预测的精度,基于块的运动补偿方案又从多个方面进行了完善。在MPEG-1标准制定过程中,发展出了双向预测技术,即当前帧的预测值可以同时从前向参考帧和后向参考帧获得。双向预测技术可以解决新出现区域的有效预测问题,并能够通过前后向预测的平均值来有效地去除帧间噪声。在H.264/AVC标准中,可支持的帧间预测结构更加灵活,如层次B帧(Hierarchical B)预测结构,在此结构下,可以根据参考帧的层级关系来进行更优的比特分配,从而提高整体编码效率。在预测精度上,从整像素预测到1/2像素预测以及1/4像素预测,编码效率分别提高了2dB以及1dB左右。在预测块尺寸以及预测模式上,16×16块的整体预测演进为H.264/AVC标准中出现的最小块为4×4的可变块大小预测技术,预测模式也更加多样,以处理不同的帧间运动情况,如跳过模式(skip mode)、直接模式(direct mode)和对称模式等。在多参考方面出现了重叠块运动补偿(Overlapped Block Motion Compensation,OBMC)技术、多参考帧预测技术以及更一般化的多假设预测技术,这些技术都进一步提高了预测效率。
1.4.6 Z字形扫描
变换量化系数在熵编码之前通常要进行Z(Zigzag)字扫描。通过Zigzag扫描可将二维变换量化系数重新组织为一维系数序列,经过重排序的一维系数再经过有效组织,能够被高效编码。1976年,Tescher在他的自适应变换编码方案中首次提出了DCT系数的高效组织方式,即Zigzag扫描。图1-3表示分别按照水平和垂直方向对于8×8变换量化系数块的Zigzag扫描的顺序。扫描的顺序一般根据待编码系数的非零系数分布,按照空间位置出现非零系数的概率从大到小排列。排序的结果是使非零系数尽可能出现在整个一维系数序列前面,而后面的系数尽可能为零或者接近于零,这样排序非常有利于提高系数的熵编码效率。基于这一原则,在最新的H.265/HEVC标准中,针对帧内预测块的系数分布特性专门设计了垂直、水平和对角等新的扫描方式。
图1-3 水平扫描、垂直扫描
1.4.7 熵编码
利用信源的信息熵进行码率压缩的编码方式称为熵编码,它能够去除经预测和变换后依然存在的统计冗余信息。视频编码常用的熵编码方法有两种:变长编码(Variable Length Coding,VLC)和算术编码(Arithmetic Coding,AC)。变长编码的基本思想是,为出现概率大的符号分配短码字,为出现概率小的符号分配长码字,从而达到总体平均码字最短。哈夫曼编码可以说是应用信息论进行可变长编码的最基本、最经典的编码技术,也是理解信息论最直观的编码技术,其应用范围非常广泛。哈夫曼的编码思想很简单,就是继承了信息论的思想,概率高的事件分配的码字比较少,概率低的事件分配的码字比较多,通过构建二叉树的方式来完成对整个信源的编码。对于给定的信源以及概率分布,哈夫曼编码是最佳编码方法。将哈夫曼编码用于视频编码有两个缺点:一是编码器建立哈夫曼树的计算开销巨大;二是编码器需要给解码器传送哈夫曼码字表,解码器才能正确解码,这会降低压缩效率。因此,在实际应用中,常使用有规则结构的指数哥伦布码(Exp-Golombus Code,EGC)代替哈夫曼编码。对于服从一般高斯分布的符号编码,指数哥伦布码在编码性能上不如哈夫曼编码,但因为指数哥伦布码的码字结构对称,解码复杂度较低,容易在编解码器中实现,所以被广泛采用。
算术编码是另一类重要的熵编码方法,在平均意义上可为单个符号分配码长小于1的码字,通常算术编码具有比可变长编码更高的编码效率。算术编码和可变长编码不同,不是采用一个码字代表一个输入信息符号的方法,而是采用一个浮点数来代替一串输入符号。算术编码计算输入符号序列的联合概率,将输入符号序列映射为实数轴上的一个小区间,区间的宽度等于该序列的概率值,之后在此区间内选择一个有效的二进制小数作为整个符号序列的编码码字。可以看到算术编码是对输入符号序列进行操作,而非单个符号,因此平均意义上可以为单个符号分配长度小于1的码字。算术编码的思想在香农信息论中就已提出,但直到1979年才由Rissanen和Langdon将算术编码系统化。由于算术编码技术对当前符号的编码需要依赖前一个编码符号的信息,因此很难并行实现,计算复杂度较高。
熵编码技术应用于视频编码的一次技术革新是在H.264/AVC标准的制定过程中引入了上下文自适应技术,从而解决了在编码过程中,熵编码器利用的全局统计概率分布与局部概率分布不一致所导致的问题,因此编码效率得到了进一步提高。
随着网络通信技术的迅猛发展及普及,基于网络的音视频应用得到了广泛使用,为应对网络带宽波动、网络异构和网络传输误码等问题,一些新的熵编码技术涌现了出来,例如,可分层熵编码和抗误码熵编码等。所以,技术永远是跟随着需求而发展的,这里就不赘述了,感兴趣的读者可以阅读相关文章。
1.4.8 可分层编码
可分层编码(SVC)在最近十年一直是研究热点。可分层编码方法将一个需要编码的图像/视频内容编码成类似嵌入式的码流,其中最小的可截取码流通常码率较低,用户接收到它以后可以独立解码。当用户接收到更多的码流时,这些码流与基本码流一起被解码,用户可以获得更好的解码图像质量。可分层编码产生的码流可以在视频编解码服务器的发送端和传输的过程中被截取,以适应网络环境的带宽变化。
许多视频编码标准中都包括了分层编码技术。基于H.264/AVC扩展的H.264 SVC可分层编码技术支持时间、空间和质量等多种可分层编码方式。对于时间可分层编码,通过层次预测结构达到多种帧率的码流传输。对于空间可分层编码,引入一种新的层间预测编码机制,提高了空间分层的编码效率,即通过层间纹理、运动信息和残差系数预测来有效地去除层间冗余,分别称为层间帧内预测、层间运动预测和层间残差预测。
主流的分层功能实现有:时域分层编码(temporal scalability coding)、空域分层编码(spatial scalabilitycoding)和图像质量分层编码(quality scalability coding)。不管是哪一类编码方式,其编码思想都是一致的,就是用前一层的解码重构图像来做预测,其预测误差将作为增强层编码对象。分层编码产生的码流可以以层为单位截断,也就是通常所说的分层发送,在网络带宽不够的情况下,可以单独发送基本层(Base Layer,BL)码流,也可以实现解码看到基本图像,如果网络条件变好,可以发送增强层(Enhance Layer,EL)的数据,以得到质量更好、更清晰的图像。分层编码具有一定的网络带宽自适应能力,当然增强层可以不唯一,可定义多个增强层来实现码率控制的灵活性。与此同时,由于分层编码也限制了一些编码的模式,压缩效率要比单层码流低10%左右,而且分层数越多,效率下降得越多;分层编码增加了解码复杂度,需要缓存的帧数也更多;虽然分层编码已经是正式的标准,但各个厂商之间的兼容性和互通性还远没有单层编码的好。所以一般在使用的时候,都不会把分层数量定义得过多,也就是说不能做到精细划分,在一定程度上缓解网络带宽的影响就足够了。
在三种分层的架构中,时域分层编码可以说是相对简单的一种了,从概念上也比较好理解,就是增强层的图像都参考基本层的图像,或者是前一个增强层的图像,这样就能保证更高的码率会获得更高的质量。而相对于时域分层编码,空域分层编码就复杂多了。相对于增强层,基本层图像的尺寸和分辨率都会出现不同程度的降低,但是同时还需要给增强层提供最大限度的编码信息作为参考,以提升编码效率和性能,所以就产生了一系列层间预测参考技术。
层间帧内预测(Inter-Layer Intra Prediction,ILIP)就充分考虑了增强层图像帧内预测和基本层图像帧内预测的相关性,具体思路为,首先考虑增强层图像宏块是否有对应的基本层图像宏块,并且此宏块是否使用帧内预测,如果是,则对相应的基本层图像宏块进行上采样插值,将生成的图像宏块作为增强层宏块的预测块,同位置的宏块帧内编码模式保持一致。在具体实现上,亮度的采样可以使用一维四抽头有线滤波器,色度的采样则使用双线性滤波器,最终增强层就只需要传递原始图像和层间帧内预测的残差即可。
层间运动预测(Inter-Layer Motion Prediction,ILMP)则从增强层图像宏块的帧间预测和基本层图像宏块的帧间预测的相关性入手,尝试基于基本层图像宏块的帧间预测信息来生成参考图像宏块,以对增强层图像宏块进行帧间预测。增强层图像宏块的运动向量、宏块划分等规则可以根据基本层图像宏块的运动向量、宏块划分等信息经过适量缩放获得,此外,还可以对运动向量进行精细调整,以期获得更准确的预测,同位置的宏块帧间编码模式保持一致,参考的运动向量要做适当缩放来适应增强层图像和基本层图像的比例。这样,增强层图像也只需要传输残差信号,无须传输帧间预测模式、运动参数。
层间残差预测(Inter-Layer Residual Prediction,ILRP)则又进了一步,考虑到增强层图像宏块残差和基本层图像宏块残差的相关性,可以直接使用基本层图像宏块生成参考图像宏块来预测增强层图像宏块的残差,使用滤波来避免块效应,同时还可以提升图像的质量。
质量可分层编码模式可看作空间可分层编码模式的一类子集,基本层图像和增强层图像具有相同的尺寸与分辨率,但又具有不同的画面质量。在具体实现时可分为三种模式:粗粒度质量可分层(Coarse-Grain Quality Scalable,CGS)编码的实现方式是基本层图像的DCT变换系数使用较粗糙的量化器,增强层使用较精细的量化器;细粒度质量可分层(Fine-Grain Quality Scalable,FGS)编码的实现方式是基本层图像采用传统非可分层编码,增强层图像使用了位平面编码技术,由于计算复杂,后未纳入标准。中等粒度质量可分层(Medium-Grain Quality Scalable,MGS)编码则是上面两种粒度的折中。面对质量可分层编码中的运动补偿预测在编码端和解码端不同步的漂移效应(drift effect),中等粒度质量可分层编码引入了关键帧作为重同步点,并且增强层图像的关键帧必须由基本层图像重构实现,这样就将漂移控制在一个图像组中。
1.4.9 多视点视频编码
近年来,尽管传统媒体技术的发展极大地丰富了人们的生活,但随着视频服务的不断升级,人们已经不满足于传统视频所提供的简单视频信息。面对周围多元化的世界,人们需要从更加全面、更加立体的角度进行观察和分析。于是,三维视频技术应运而生。相对于传统的二维视频来说,三维视频可以提供某一事物或场景的不同角度、不同层面的信息,并且可以把这些信息进行合成,生成多角度、多视点视频以及全景视频。
多视点视频(multi-view)一般由多个摄像机组成的集合形成,然后由处理单元集中进行数据的处理和发送。根据摄像机的排列方式不同,多视点视频数据也可以分为不同的类型。由于组成集合的摄像机大都距离固定,拍摄的场景也大致相同,因此多视点视频数据往往表达了同一场景或物体的不同角度的视觉信息。这些视觉信息既有角度之间的相关性,又各自独立存在;既可以单独展现场景的某一方面的信息,也可以综合表达全部场景。因此,相对于传统的单点视频来说,多视点视频不仅可以带给人们视觉感官上的巨大冲击,也可以让人们更加方便地了解和透视身边的客观世界。基于多视点视频的这些特性,多视点视频广泛应用于三维立体电视系统、自由视点电视系统,以及视频网络监测、远程教育等方面。
立体视频编码是多视点视频的一个特例,或者说是双视点视频编码,它只包含两路视频信号,分别模拟人类的双眼特性,因此能够提供三维立体感觉。与单通道视频相比,立体视频一般有两个视频通道,数据量要远远大于单通道视频,所以对于立体视频的高效压缩尤为重要。传统的双视点视频编码采集的是同一时刻不同视点的图像,这两幅图像非常相似,当单独编码立体视频的两路视频时,通常采用的是基于时域运动补偿的方法。通过块运动估计找出运动向量,然后进行预测编码来压缩时域的统计信息冗余。由于立体视频的左右视频非常相似,因此可以采用一路视频图像预测另一路视频图像的方法来压缩左右视频之间的统计信息冗余。左右视频图像的相关性由左右视频图像之间的视差来描述。视差补偿类似于运动补偿,单视差向量的统计特性不同于运动向量的统计特性。视差向量是由于场景对象深度不同、在左右视频图像位置不同引起的,视差与场景对象的深度是反比关系。也就是说,离得越近的物体引起的立体视差越大,离得越远的物体引起的视差越小。对于平行的立体摄像机排列,视差通常要大于运动向量。
考虑到立体视频的时域相关性与左右视频图像之间的空间信息冗余特性,基于运动预测和视差预测的混合编码方式是压缩立体视频的一种最好的选择。传统的基于块结构的混合编码框架可以支持这种编码方法,MPEG-2标准的多视点编码工具集就定义了这种编码技术。MPEG-2的多视点编码工具集主要利用时间可分层模式实现立体视频的编码。两路视频中的一路被编码成为基本层,另一路被编码成为增强层。可以把编码成基本层的视频流定义为左视图,另一路视频流定义为右视图。对于左视图,图像用I、P、B预测模式编码,对于B帧和P帧,它们的参考帧仅仅来自左视图。对于右视图,图像采用P和B预测编码进行编码。在P帧的预测模式中,图像用左视图对应的帧作为参考帧进行预测编码。在B帧的预测模式中,一个参考帧来自右视图中前面的一帧,而另一参考帧来自左视图中对应的帧。这种编码方式实际上是把视差向量当成运动向量来处理,也就是说,利用原有的运动补偿框架来处理视差补偿。MPEG-2的这种混合编码方式兼容了二维视频的显示应用,在解码时,完全可以单独解码左视图来后向支持二维显示。对于基于块的混合立体视频编码技术,编码效率通常取决于右视图中B帧的视差预测、运动预测和效率。一般情况下,视差预测的精度低于运动补偿预测,因此立体视频编码的总体性能不比单独编码每个视图的方法提高很多。尽管MPEG-2的多视点编码工具集可以支持立体视频编码,但由于立体视频中的遮挡等,其视间的预测效果并不能令人满意。
MPEG-4的多重辅助组件(Multiview Auxiliary Component,MAC)和前面介绍的MPEG-2多视点编码工具集是实现多视点编码的框架,既保证了时域方向的压缩效率,又利用视间的视差补偿技术提高了压缩效率。到了H.264/AVC标准,又进一步提高了压缩效率。研究人员先后提出了一些适用于H.264/AVC的编码方案。这些技术基于运动补偿的思想,充分利用了H.264/AVC多参考帧预测结构的特点,结合率失真优化技术,获得了较高的压缩效率。这些方案结合了H.264/AVC标准的语法和句法,对预测结构针对不同的摄像机阵列进行调整,以达到最优的压缩效率。