1、视频压缩视频压缩又称视频编码,所谓视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。一般的通用数据压缩方案如以以下图:存储器或网络输出数据解码器解压缩编码器输入数据压缩就是一个传播的过程,所以在压缩与解压缩之间,没有信号的丧失那么称这种压缩就是无损的,相反的就是有损的,都有各自的算法,下面介绍。无损压缩算法一 游长编码Run-Length Coding, RLC产生年代:未知。主要人物:未知。根本思想:如果我们压缩的信息源中的符号具有这样的连续的性质,即同一个符号常常形成连续的片段出现,那么我们可以对这个符号片段长度进行这样的的编码。例子:输入:5555
2、557777733322221111111游长编码为:5,67,53,32,4l,7二 变长编码:1 香农-凡诺算法产生年代:未知主要人物:Shannon 和 Robert Fano根本思想:对于每个符号出现的频率对符号进行排序,递归的将这些符号分成两局部,每一局部有相近的频率,知道只有一个符号未止。说明:过程用一颗二叉树完成,它是一种自顶向下的过程,对于此输入5个字符那么自然的分成2,3左右两子树,接着就是递归的过程。因为分法不唯一,所以以下输出是一种情况。例子:输入:HELLO 输出:10 110 0 0 111左子树标02赫夫曼编码产生年代:1952年主演人物:David A.Huffm
3、an根本思想:与香农-凡诺算法的区别在于,赫夫曼编码采用的是一种自下而上的描述方式,先从符号的频率中选取最小的两个符号,合成一个新的结点,进行等效的代替,然后也是个递归过程。说明:赫夫曼编码具有唯一的前缀性质和最优性。1O:10011H:1E:1例子:对于输入:HELLO 建立的一刻赫夫曼树0L: 2扩展:扩展的赫夫曼编码,这是相对于数据中某个符号的概率较大接近1.0时,将几个符号组成组,然后为整个组赋予一个码字。自适应的赫夫曼编码,这是一个边接收边编码的过程,完全的体现了适应的过程,需要对二叉树进行改变,由接收到的数据去添加进二叉树中,自动生成新的“赫夫曼树。三 基于字典的编码Lempel-
4、Ziv-Welch, LZW产生年代:1977年 1978年改良一,1984年改良二主要人物:Jacob Ziv, Abraham Lempel, Terry Welch根本思想:该算法利用了一种自适应的基于字典的压缩技术,字典就是给给不同的符号组合进行编码,生成一个个“单词,自适应就是,单词是接收数据的时候,一个个生成的,字典会慢慢的边长。SCoutputcodestringA B 1 4 ABBA 2 5 BAA B AB B 4 6 ABB B ABA B 5 7 BABB C 2 8 BCC A 3 9 CA A BAB A 4 10 ABA A BAB B ABB A 6 11 AB
5、BAA EOF 1例子:先从一个简单的字典开始原字典单词 新生成的字典单词code string- 1 A 2 B 3 C我们输入: ABABBABCABABBA输出:1 2 4 5 2 3 4 6 1说明:只要待编码的符号序列是字符、字符串、字符、字符串、字符、等等,编码器就会产生一个新的编码来表示字符+字符串+字符,并且在解码器还没来得及产生这个编码的时候马上将其投入使用。四 算术编码产生年代:追溯到1948年 20世纪七八十年代开展成熟主要人物:Shannon Abramson Peter Elias根本思想:把整个消息看成一个单元。然后经过数字处理,计算出每个符号的频率范围,再由上限及
6、下限产生码字( 我没看懂)有损压缩算法一 变换编码 1 离散余弦变换DCTDCT 是一种广泛应用的变换编码方式,它能以数据无光的方式解除输入信号之间的相关性。例如对于JPEG和类似的图像压缩算法来说,压缩的第一步需要将图像分割为小块,同时将每个小块进行变换,使之由空域信号变换成为时域信号。这时候就会采用DCT,CT变换能够完整的保存所有8x8像素块的信息,因此反向离散余弦变换(IDCT)也就能够从8x8频域信号矩阵中完整的恢复原始8x8像素矩阵。扩展:2D DCT, 2D IDCT。2 Karhunen-Loeve 变换KLTKLT变换是一种可逆的线性变换,它应用了向量表述的统计学原理。KLT
7、变换主要的特征就是能够很好的解除输入的相关性。二 小波编码 这是一种信号的分解方法。它采用一组成为小波的基函数来表示信号,可以在时域和频域都得到很好的分辨率。小波变换有两种:连续小波变换CWT和离散小波变换DWT。扩展: 二维Haar变换三 小波包紧接上文,解决小波变换值进行编码,怎样形成流。将采取一种叫做嵌入零树的数据结构。嵌入式零树小波EWZ算法 层次树集合划分SPIHT算法 优化截断嵌入式编码EBCOT算法。具体内容复杂,在这里不做介绍了。JPEG图像下面介绍JPEG图像的简单步骤:1 把RGB转换为YIQ 或 YUV, 并且二次采样。2 对图像块进行DCT变换。块是图像压缩的一个单位,
8、能使DCT变换加快。3 进行量化。量化的目标是减少图像压缩所需要的位数。量化的过程就是将每个DCT系数向诺干预设值进行舍入得过程。这种对系数的编码方法可以通过两步来实现:首先通过量化过程舍去次要的视频信息,然后利用统计学的方法尽可能少的对剩余的重要信息进行比特编码。4进行Z编序和游长编码。在编码过程中,AC分量进行游长编码, DC分量采用DPCM差分脉冲编码调制。5进行熵编码。熵编码(entropy encoding)是一类利用数据的统计信息进行压缩的无语义数据流的无损编码。JPEG编码允许赫夫曼编码和算术编码。看到了根本的有损,无损算法在JPEG标准的应用。再起视频压缩视频是由一系列的时间上
9、有序的图像我们叫做帧所组成的。解决视频压缩的一个简单的方案就是基于前面的帧的帧预测编码。视频的压缩不是对图像本身进行相减,而是按照时间顺序进行相减,并将残差进行编码。就是所说的时间冗余,而相对的图像处理主要面对的是空间冗余。这里有两个很重要的压缩策略,形象的描述是:在足球比赛中,进行视频处理,在下一帧中寻找足球运发动的位置的策略叫做运动估计ME,来回移动帧的位置为了最大程度上将球员从图像中减去,叫做运动补偿MC。基于运动补偿的视频压缩前面说的视频中时间冗余比拟显著,可以利用这个特征,不必将每帧视频图像都作为一幅新的图像进行编码,而是用当前的帧和其他的帧的差值进行编码。一个简单的想法就是将一张图
10、像的按照像素点值减去另一张图像,但不能到达很好的压缩率。由于帧图像的主要差异是由摄像头或者物体运动造成的,所以可以用“补偿的概念来测量差值。这就是我们所说的视频压缩基于运动补偿的压缩算法。该算法可以分为三个步骤:1) 运动估计运动向量查找。2) 基于运动补偿的预测。3) 预测误差的生成差值。我们知道,为提高效率,就把每张图像分为一个个宏块,运动补偿就是在图像的宏块级别起作用。把当前帧称为目标帧,很容易就知道,我们是要在目标帧中的宏块和参考帧下面会说中的最相似的宏块间寻找匹配。这种情况下,目标宏块由参考宏块预测生成。参考宏块到目标宏块的位移称作运动向量MV,两个宏块之间的差值叫做预测误差。所以我
11、们只要对运动向量和差值宏块进行编码。搜索运动向量我们应该知道运动向量的搜索就是一个匹配的问题,也就是相关性的问题。方便的原因,我们规定原点,目标帧, 参考帧的像素,用平均绝对误差MAD来测量宏块的大小。搜索的目的是寻找一个向量使得MAD取得最小值。一 顺序搜索寻找运动向量的最简单的方法就是顺序搜索参考帧中整个大小的窗口也叫全搜索。然后将窗口的每一个宏块逐个像素和目标帧中的宏块进行比拟。特点:代价高,实现编码困难。二 2D对数搜索2D对数搜索的方法搜索运动向量的过程中需要进行屡次迭代,类似折半查找过程。特点:相对于顺序搜索的算法,明显得到改善。三 分层搜索运用该方法,初始的运动向量估计是从显著降
12、低分辨率后的图像中获得的。因为图像的分辨率太低,缺少图像的细节内容,所以初始的运动向量估计值是比拟粗糙的,要进行一层层的修正。特点:速度再一次得到优化。下面具体介绍视频压缩编码标准。H.261产生年代:1988年提出者:国际电报 咨询委员会CCITT应用于:早期的数字电视压缩支持的视频格式:QCIR, CIF。H.261帧序列:有两种的类型的图像帧, I帧, P帧。I帧: 被视为独立的图像,根本上每一个I帧内应用和JPEG相似的变换编码方式。P帧:不是对立的。它采用的是向前预测的编码方式,该方法中的当前的宏块目标帧,是通过先前的I帧或者前面P帧参考帧中的相似的宏块预测出来的,并对宏块间的差进行
13、编码。图像帧编码:I帧编码:采用4:2:0的色彩二次采样,对于8x8子块进行离散余弦变换,同JPEG算法,后对DCT系数进行量化,最后通过字扫描并进行熵编码。P帧预测编码:对目标帧的每一个宏块俩说,我们用前面所说的3种方法中的一种进行运动向量的分配,再用差值宏块测量预测误差,同样对于8x8的子块进行离散余弦变换、量化、Z字扫描和尚编码。H.261的量化标准中的量化,是对一个宏块中所有的DCT系数均采用一个常数,称为步长。H.261编码器和解码器在编码器中当前帧为I帧,观察点从I帧中接收宏块,每个I经过离散余弦变换、量化、熵编码,将结果放入输出缓冲区中,准备发送。同时I量化后的DCT系数被送到模块中进行量化逆变换和逆离散余弦变换,把这里得到的数据I1和从目标帧中输入的数据相加,另外在保存一份在帧内存中,用于下一帧P1的运动估计和基于运动补偿的预测。接下来当前帧P1到达观察点,立即调用运动估计过程,在帧I1中位P1中的每一个块寻找最匹配的宏块,求得运动向量。这个运动向量的估计值被同时送到运动补偿的预测器和可变长度编码器。基于运动补偿的预测器给出P1中最匹配的宏块用P2表示。然后得到预测误差其值为D=P1-P2,接着D1进行DCT,量化,熵编码将结果输入到缓冲区中和前面的I一样得到D1然后D又与P2相加得P21,并放在下一帧的运动估计和基于运动