视频压缩编码和解码

引言
    视频具有一系列的优点,如直观性、确切性、高效性、广泛性等等,但是信息量太大,要是视频得到有效的应用,必须首先解决视频压缩编码问题,其次解决压缩后视频质量的保证问题。这两者是相互矛盾的两个方面,如何既能达到较大的压缩比,又要保证一定的视频质量就是现在我们要解决的任务。
1. 视频压缩的目标:
  视频信号的传输由于信息量大,传输网络宽带要求高,如果直接对视频信号进行传输,以现在的网络宽带来看很难达到,所以就要求我们在视频信号传输前先进行压缩编码,即进行视频源压缩编码,然后再传送以节省带宽和存储空间。对于视频压缩有两个最基本的要求:
1.       必须压缩在一定的带宽内,即视频编码器应具有足够压缩比的功能。
2.       视频信号压缩之后,经恢复应保持一定的视频质量。视频质量有2个标准:一个为主观质量,有人的视觉上进行评定;一个为客观质量,用信噪比(S/N)表示。
信噪比(S/N)是指音箱回放的正常声音信号与无信号时噪声信号(功率)的比值。用dB表示。例如,某音箱的信噪比为80dB,即输出信号功率比噪音功率大80dB。信噪比数值越高,噪音越小。
2. 视频压缩的可能性:
视频图像数据有极强的相关性,也就是说有大量的冗余信息。其中冗余信息可分为空域冗余信息和时域冗余信息。压缩技术就是将数据中的冗余信息去掉(去除数据之间的相关性),压缩技术包含帧内图像数据压缩技术、帧间图像数据压缩技术和熵编码压缩技术
一幅图像是由很多的像素点组成的,如图(1),大量统计表明,同一幅图像中的像素之间有很强的相关性,两像素之间的距离越短,则其相关性越强,即其像素值越接近。两像素值发生突变的可能性就很小,相等相似或缓变得概率则极大。
                             
            图(1)像素间相关性解释                      图(2)帧间相关性解释
于是可以用像素直接的相关性进行压缩编码。如图(1)中当前像素X(立即传送像素),可以用前一个像素a、b或c,或三者的线性加权来预测。a、b、c被称为参考像素。实际传送时候,把实际像素X(当前值)和参考像素(预测值)相减,例如只传送X-a,到了接收端再把(X-a)+a恢复为X,由于a是已经传送的(接收端被存储),于是得到当前的X。由于a和X相似,(X-a )非常小,视频信号被压缩。这种被称为帧内压缩。
此外还可以进行如图(2)的帧间的相关性进行压缩。由于临近帧之间的相关性比帧内像素间的像素相关性更强。可得到更大的压缩比。`利用像素之间(帧内)的相关性和帧间的相关性,找到相应的参考像素或者参考帧作为预测,即可实现压缩编码。
变换编码
视频信号中包含能量上占主要部分的直流和低频部分(图像的平坦部分),还有少量的高频部分,即图像的细节。因此可以将图像经过某种数学变换得到变换中的图像(如图3)其中U、V为空间频率坐标。“o”表示低频和直流成分占图像能量中的大部分,高频用“*”表示,需要用码送的,占少量,其余为零值,用“0”表示。
图3
于是可用较少的码表示直流低频以及高频,而“0”则不必用码传递,结果完成压缩编码。
视频编码系统的基本结构如图4
                       图4视频编码系统
视频编码的方法和采用的信息源有关,如果采用“一幅图像由许多像素构成”的信息源模型,这种信源模型的参数就是每个像素的亮度和色度的幅值。对这些的压缩称为基于波形的编码。如果采用一个分量有几个物体构成的信源模型,这种信源模型的参数是各种物体的形状、纹理、运动。对这些参数进行压缩的技术成为基于内容的编码。
由此可见,根据采用的信源模型,视频编码分为两大类:基于波形的编码和基于内容的编码。它们利用不同的压缩编码方法,得到相应的量化前的参数,再对这些参数进行量化,用二进制码表示其量化值;最后进行误伤编码进一步压缩码率。解码则为编码的逆过程。
基于波形的编码:利用像素的空间相关性和帧间的时间相关性,采用预编码和变换编码技术大大减少视频信号的相关性,从而显著减低视频序列的码率,实现编码的目标。
基于内容的编码:先把视频帧分成对应于不同物体的区域,然后分别对其进行编码,即对不同的物体的形状、运动和纹理进行编码。
视频信号的冗余信息可分为空域冗余信息和时域冗余信息
去时域冗余信息
  使用帧间编码技术可去除时域冗余信息,它包括以下三部分:
 1.运动补偿
运动补偿是通过先前的局部图像来预测、补偿当前的局部图像,它是减少帧序列冗余信息的有效方法。
运动补偿是当前视频图像压缩技术中使用最普遍的方法之一。包括:
运动补偿预测
  视频的相邻帧间的运动部分具有连续性,即当前画面上的图像可以看成是前画某时
刻画面上图像的位移,位移的幅度值和方向在画面各处可以不同。利用运动位移信息与
前面某时刻的图像对当前画面图像进行预测的方法,称为前向预测。反之,根据某时刻
的图与位移信息预测该时刻之前的图像,称为后向预测。
MPEG的运动补偿将画面分成若干16×16的子图像块(称为补偿单元或宏块),并根据一
定的条件分别进行帧内预测、前后预测、后向预测及平均预测。
运动补偿插值
    以插补方法补偿运动信息是提高视频压缩比的最有效措施之一。在时域中插补运动
补偿是一种多分辨率压缩技术。例如1/15秒或1/10秒时间隔选取参考子图,对时域较
较低辨率子图进行编码,通过低分辨子图反映运动趋势的附加校正信息(运动夭量)进行
插值,可得到满分辨率(帧率1/30秒)的视频信号。插值运动补偿也称为双向预测,因
为它既利用了前面帧的信息又利用了后面帧的信息。
2.运动表示
  不同区域的图像需要使用不同的运动矢量来描述运动信息。运动矢量通过熵编码进行压缩。
  3.运动估计
  运动估计是从视频序列中抽取运动信息的一整套技术运动向量的计算叫做运动估计。运动向量给出了当前帧和上一帧之间的运动位移关系,使当前帧的信息能够从上一帧推导得到。运动估计算法的结果准确性影响码流的大小,而其运算复杂性影响帧率的快慢,这两项指标都是实时视频编码效率的主要指标,都非常重要,因此运动估计的算法和实现成为MPEG4编码效率的关键。
注:通用的压缩标准都使用基于块的运动估计和运动补偿。
  去空域冗余信息
  主要使用帧间编码技术和熵编码技术:
  - 变换编码
  帧内图像和预测差分信号都有很高的空域冗余信息。变换编码将空域信号变换到另一正交矢量空间,使其相关性下降,数据冗余度减小。
  - 量化编码
  经过变换编码后,产生一批变换系数,对这些系数进行量化,使编码器的输出达到一定的位率。这一过程导致精度的降低。
  - 熵编码
熵编码是无损编码。它对变换、量化后得到的系数和运动信息,进行进一步的压缩。
 
几个重要的概念
:就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。 一帧就是一副静止的画面,连续的帧就形成动画
上图中的5张图片其实就构成了一个简单的茶壶旋转的动画,其中每一幅图就是一帧,5幅图片连起来以后就构成了5帧的动画。
关键帧:关键帧(Key Frame)是其他帧压缩时与之比较并产生差值的基准。
可以以Flash中的帧为例来理解,在Flash中,关键帧是区别于过渡帧而言的,假如说过渡帧是动画的话,那么关键帧就应该是原画。
图中帧标记为 1和2的是关键帧,而其他帧则是中间帧
视频编码压缩中,关键帧可以不压缩,而中间帧(也称作差值帧)是根据其与关键帧的差异来压缩的。采用关键帧压缩可以使压缩比更小而回放速率更快,但在一段视频文件中访问某一帧的时间将延长。该参数只有在使用帧间压缩编码如帧间差值编码时才起作用。如果不设置关键帧,则编码器默认每一帧都是关键帧。
关键帧设定的标准
运动压缩的关键是在于两帧之间的差别大小。如果图象只有微小的变化,那么经过作差后压缩效果就好;如果图像变化很大,那么经过作差后压缩效果就很差。为了充分利用运动压缩的特点,我们根据图像的性质来调节关键帧间的距离。在图像变化不大的情况下,非关键帧数据较少,此时拉长关键帧间的距离可以降低传输率;在图像变化较大的情况下,非关键帧数据较多,此时缩短关键帧间的距离增加运动补偿的效果。
但是在视频通信的情况下,即便只丢失了单个的包,也可能会引起严重的问题。因为要以每秒大约30帧来表现全动态的视频,需要大量的数据,实际上每段视频都会使用数据压缩来减少可管理的视频流量。通常的做法是使用一个“关键帧”,它包含后续的大量视频帧的完备视频信息,而后续的帧只须将自己帧上不同于其他帧的信息传送给关键帧即可,从而大大减少了数据传输密度。但如果丢失的正好是这个关键帧,那么一个小小的失误也会变成大失误。
三.两个重要的标准
(1 )MPEG-4 标准
以MPEG-4为例对视频编码进行深入的了解。
MPEG-4的编码理念是:MPEG-4标准同以前标准的最显著的差别在于它是采用基于对象的编码理念,即在编码时将一幅景物分成若干在时间和空间上相互联系的视频音频对象,分别编码后,再经过复用传输到接收端,然后再对不同的对象分别解码,从而组合成所需要的视频和音频。这样既方便我们对不同的对象采用不同的编码方法和表示方法,又有利于不同数据类型间的融合,并且这样也可以方便的实现对于各种对象的操作及编辑。
例如,我们可以将一个卡通人物放在真实的场景中,或者将真人置于一个虚拟的演播室里,还可以在互联网上方便的实现交互,根据自己的需要有选择的组合各种视频音频以及图形文本对象。
MPEG视频 压缩编码后包括三种元素:I帧(I-frames)、P帧(P-frames)和B帧(B-frames)。在MPEG编码的过程中,部分视频 帧序列压缩成为I帧;部分压缩成P帧;还有部分压缩成B帧。
I 帧法:
I帧图像采用帧内编码方式,即只利用了单帧图像内的空间相关性,而没有利用时间相关性。 I帧法是基于离散余弦变换DCT( Discrete Cosine Transform )的压缩技术,这种算法与JPEG压缩算法类似。采用I帧压缩可达到1/6的压缩比而无明显的压缩痕迹。I帧为关键帧,记录画面完整信息。
P 帧法/B 帧法
  P帧和B帧图像采用帧间编码方式,即同时利用了空间和时间上的相关性。P帧图像中可以包含帧内编码的部分,即P帧中的每一个宏块可以是前向预测,也可以是帧内编码。P帧法是一种前向预测算法,它考虑相邻帧之间的相同信息或数据,也即考虑运动的特性进行帧间压缩。P帧法是根据本帧与相邻的前一帧(I帧或P帧)的不同点来压缩本帧数据。B帧图像采用双向时间预测,可以大大提高压缩倍数。P,B帧都是delta帧,记录的是差分信息,不完整必须参考I帧才可以复原画面。所以切割的起始点一定要从关键帧开始。
(2 )H.264 标准
H.264标准的主要目标是:与其它现有的视频编码标准相比,在相同的带宽下提供更加优秀的图象质量。
H.264与以前的国际标准如H.263和MPEG-4相比,最大的优势体现在以下四个方面:
1.将每个视频帧分离成由像素组成的块,因此视频帧的编码处理的过程可以达到块的级别。
2.采用空间冗余的方法,对视频帧的一些原始块进行空间预测、转换、优化和熵编码(可变长编码)。
3.对连续帧的不同块采用临时存放的方法,这样,只需对连续帧中有改变的部分进行编码。该算法采用运动预测和运动补偿来完成。对某些特定的块,在一个或多个已经进行了编码的帧执行搜索来决定块的运动向量,并由此在后面的编码和解码中预测主块。
4.采用剩余空间冗余技术,对视频帧里的残留块进行编码。例如:对于源块和相应预测块的不同,再次采用转换、优化和熵编码。
H.264 的特点
H.264在编码框架上还是沿用以往的MC-DCT结构,即运动补偿加变换编码的混合(hybrid)结构,因此它保留了一些先前标准的特点,如不受限制的运动矢量(unrestricted motion vectors),对运动矢量的中值预测(median prediction)等。然而,以下介绍的技术使得H.264比之前的视频编码标准在性能上有了很大的提高。应当指出的是,这个提高不是单靠某一项技术实现的,而是由各种不同技术带来的小的性能改进而共同产生的。
1. 帧内预测
对I帧的编码是通过利用空间相关性而非时间相关性实现的。以前的标准只利用了一个宏块(macroblock)内部的相关性,而忽视了宏块之间的相关性,所以一般编码后的数据量较大。为了能进一步利用空间相关性,H.264引入了帧内预测以提高压缩效率。简单地说,帧内预测编码就是用周围邻近的像素值来预测当前的像素值,然后对预测误差进行编码。这种预测是基于块的,对于亮度分量(1uma),块的大小可以在16×16和4×4之间选择,16×16块有4种预测模式,4×4块有9种预测模式;对于色度分量(chroma),预测是对整个8×8块进行的,有4种预测模式。除了DC预测外,其他每种预测模式对应不同方向上的预测。
2. 帧间预测
与以往的标准一样,H.264使用运动估计和运动补偿来消除时间冗余,但是它具有以下五个不同的特点:
1)预测时所用块的大小可变
    由于基于块的运动模型假设块内的所有像素都做了相同的平移,在运动比较剧烈或者运动物体的边缘处这一假设会与实际出入较大,从而导致较大的预测误差,这时减小块的大小可以使假设在小的块中依然成立。另外小的块所造成的块效应相对也小,所以一般来说小的块可以提高预测的效果。 为此,H.264一共采用了7种方式对一个宏块进行分割,每种方式下块的大小和形状都不相同,这就使编码器可以根据图像的内容选择最好的预测模式。与仅使用16×16块进行预测相比,使用不同大小和形状的块可以使码率节省15%以上。
(2)更精细的预测精度
在H.264中,Luma分量的运动矢量(MV)使用1/4像素精度。Chroma分量的MV由luma MV导出,由于chroma分辨率是luma的一半(对4:2:0),所以其MV精度将为1/8,这也就是说1个单位的chroma MV所代表的位移仅为chroma分量取样点间距离的1/8。如此精细的预测精度较之整数精度可以使码率节省超过20%。
(3)多参考帧
H.264支持多参考帧预测(multiple reference frames),即可以有多于一个(最多5个)的在当前帧之前解码的帧可以作为参考帧产生对当前帧的预测(motion-compensated prediction)。这适用于视频序列中含有周期性运动的情况。采用这一技术,可以改善运动估计(ME)的性能,提高H.264解码器的错误恢复能力,但同时也增加了缓存的容量以及编解码器的复杂性。不过,H.264的提出是基于半导体技术的飞速发展,因此这两个负担在不久的将来会变得微不足道。较之只使用一个参考帧,使用5个参考帧可以节省码率5~10%。
(4)抗块效应滤波器
抗块效应滤波器(Deblocking Filter),它的作用是消除经反量化和反变换后重建图像中由于预测误差产生的块效应,即块边缘处的像素值跳变,从而一来改善图像的主观质量,二来减少预测误差。H.264中的Deblocking Filter还能够根据图像内容做出判断,只对由于块效应产生的像素值跳变进行平滑,而对图像中物体边缘处的像素值不连续给予保留,以免造成边缘模糊。与以往的Deblocking Filter不同的是,经过滤波后的图像将根据需要放在缓存中用于帧间预测,而不是仅仅在输出重建图像时用来改善主观质量,也就是说该滤波器位于解码环中而非解码环的输出外,因而它又称作Loop Filter。需要注意的是,对于帧内预测,使用的是未经过滤波的重建图像。
3.整数变换
H.264对帧内或帧间预测的残差(residual)进行DCT变换编码。为了克服浮点运算带来的硬件设计复杂,更重要的是舍入误差造成的编码器和解码器之间不匹配(mismatch)的问题,新标准对DCT的定义做了修改,使得变换仅用整数加减法和移位操作即可实现,这样在不考虑量化影响的情况下,解码端的输出可以准确地恢复编码端的输入。当然这样做的代价是压缩性能的略微下降。此外,该变换是针对4×4块进行的,这也有助于减少块效应。
为了进一步利用图像的空间相关性,在对chroma的预测残差和16×16帧内预测的预测残差进行上述整数DCT变换之后,标准还将每个4×4变换系数块中的DC系数组成2×2或4×4大小的块,进一步做哈达玛(Hadamard)变换。
4.熵编码
如果是Slice层预测残差,H.264有两种熵编码的方式:基于上下文的自适应变长码(Context-based Adaptive Variable Length Coding,CAVLC)和基于上下文的自适应二进制算术编码(Context-based Adaptive Binary Arithmetic Coding,CABAC);如果不是预测残差,H.264采用Exp-Golomb码或CABAC编码,视编码器的设置而定。

 

 

4. 视频解码
当视频经过压缩传输后我们需要经过视频的解码来释放压缩过的视频,重建图像。
这就需要视频解码器的出场了。
NAL解码器:
H.264包含视频编码层(VCL)和网络提取层(NAL)。VCL包括核心压缩引擎和块、红块及片的语法级别的定义,它涉及的目标是在尽可能的独立于网络的情况下进行高效的编解码。
 NAL解码器负责符合H.264码流规范的压缩视频流解码,并进行图像重建。基本的解
码流程图如图5,流程如下:
     解码器从NAL中接受压缩的比特流,经过对码流进行熵解码获得一系列量化系数X;这些系数经过反变换和反量化得到残差数据D;解码器使用从码流中解码得到的头信息进行创建一个预测块FRED,FRED与残差数据D求和得到图像块数据uF;最后每个uF通过去方块滤波得到重建图像的解码块F。
   以上是针对H.264 压缩编码的解码过程。
及主要算法 MPEG-4采用了基于对象的压缩编码技术。在编码前,首先要对视频序列进行分析,从原理图像中分割出各个视频对象,然后南分别对每个视频对象单独编码。每个对象都有自己的形状信息(shape)、运动信息(motion)、纹理信息(texture)。对视频对象的编码就是对这3种信息进行编码。MPEG-4通过运动预测和运行补偿来去除连续帧之间的时间冗余。运动预测与运动补偿的精度可以为整像素、半像素或1/4像素,另外还增了重叠运动补偿方式。与形状相关算法有:基于邻近信息的算术编码、水平和垂直填补、扩张填补等。
对于MPEG-4视频码流的解码有如下一个简图
JPEG解码算法原理
  JPEG压缩是一种有损压缩。它利用人的视角系统特性,使用量化和无损压缩编码相结合的方式去掉视角的冗余信息和数据本身的冗余信息来达到压缩的目的。JPEG算法可分为基本JPEG(Baseline system)和扩展JPEG(Extended system)。其中Baseline system应用尤其广泛。本文主要讨论Baseline system的解码。JPEG解码算法框图如图所示。
  (1)颜色空间变换
  JPEG算法本身与颜色空间无关,因此“RGB到YUV变换”和“YUV到RGB变换”不包含在JPEG算法中。但由于作为输出的位图数据一般要求RGB的表示,所以将颜色空间变换也表示在算法框图中。
  (2)JPEG的编解码单元
  在JPEG中,对于图像的编解码是分块进行的。整个图像被划分为若干个8×8的数据块,称为最小编码单元(MCU),每一个块对应于原图像的一个8×8的像素阵列; 各行的编解码顺序是从上到下,行内的编解码顺序是从左到右。
  值得注意的是,由于一幅图像的高和宽不一定是MCU尺寸的整数倍,因此需要对图像的最右边一列或其最下边一行进行填充,扩展其高或宽,使得可以将整个图像划分为整数个MCU;而在解码输出时,这些复制的行列是要被抛弃的。
  (3)熵解码器
  在JPEG的熵编码时,首先利用空间相关性对各块的直流值采用差分编码,即对相邻块之间的直流差值编码,以达到压缩码长的目的。然后对于交流部分以ZigZag方式扫描块中的元素,对块内元素采用先游程编码后哈夫曼编码的混合编码方式,得到一维二进制块码流。熵编码过程是由直流部分的差分编码和交流部分的ZigZag扫描、游程编码、哈夫曼编码组成。而相应的熵解码过程是编码的逆过程,在解码端接收到的是由变长码(VLC)和变长整数(VLI)组成的数据流。为了从此数据流中恢复编码前的DCT系数,必须根据哈夫曼编码的原理及其各级码表生成的细节,生成哈夫曼解码表,再根据解码算法来恢复DCT的直流和交流系数。
   (4)反量化
  在JPEG解码端要利用发送过来的量化表对量化值进行译码。JPEG文件里一般含有两个量化表:一个亮度分量的量化表,一个色度分量的量化表。反量化就是对熵解码出来的系数矩阵乘上相应的量化矩阵:
其中,C(u,v)代表熵解码输出,Q(u,v)代表相应的量化矩阵。
   (5)IDCT变换
  JPEG解码算法能否满足实时应用,关键在于8×8的二维IDCT的计算速度。在编码阶段,正向离散余弦变换(FDCT)把空间域表示的图变换成频率域表示的图;相应
地在解码阶段,逆向离散余弦变换(IDCT)将频率域表示的图变换为空间域表示的图。   在IDCT的实现上,目前有多种算法。传统的方法是行-列法,即先对每行(列)进行一维IDCT计算,再对每列(行)进行一维IDCT计算。还有多项式变换法和三角函数公式法,这两种方法的加法次数与行-列法相当,乘法次数仅为行-列法的一半。但这两种方法的问题在于实现方法复杂,对于目标平台(VLIW)来说,这样的结构难以提高指令的并行性,并且对于目标平台来说,乘法指令的执行时间与加法指令相当,因此减少了行-列法实现的代价。
 

 

总结
对于视频的压缩编码的整个发展过程经历很多的压缩编码标准,现在最先进的压缩编码标准 H264/AVC,H264集中了以往标准的优点,并吸收了以往标准制定中积累的经验, 采用简洁设计,使它比MPEG4更容易推广。
解码方面以H.264/AVC和MPEG4以及JPEG的解码原理实现为例,简单介绍一下视频解码的基本过程。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值