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