视频压缩
1. 视频信息的特点
视频信息的特点
1)直观性:和语音信号比,直观,具体,百闻不如一见。
2)高带宽性:信息量大,一路高清视频不压缩要超过1Gbit/s。70%左右的信息量来自视频。
3)复杂性:一维,多维。
2. 视频压缩
图像数据压缩技术的研究已有几十年的历史,从基本原理来看,压缩技术可以分为两大类。称之为第一代图像压缩方法和第二代图像压缩方法。基于波形的编码,基于内容的编码。
一类方法是基于香农理论。在这种方法中,视频图像序列利用空间上和时间上采样的得到一组像素值(声音类似),而压缩方法是采用一般信号分析的方法来消除数据中的冗余。这些方法,重要的是了解信源的统计特性,而不关心图像的具体内容,也不考虑或较少考虑人的视觉特性。因此这类方法称为基于像素(或波形)的压缩方法,称之为第一代图像压缩编码方法。第一代图像压缩编码方法目前已趋于成熟,许多优秀成果已被收入近年来制定的相关图像和视频数据压缩的国际标准,如JPEG,MPEG和H.26X,VPX等。各种国际压缩标准都综合利用了多种压缩方法来达到高压缩比。
第二代数据压缩方法在很大程度上依赖于人类视觉特性的研究,其核心思想是力图发现人眼是根据哪些关键特征来识别图像序列的,然后根据这些特征来构造图像模型。例如可以利用物体(而不是像素)的集合来表示图像。所谓“物体”是按边缘信息将某特定图像分割成的若干区域,每个区域内部具有相同的特性(如同一灰度、纹理或运动速度等)。目前第二代技术尚未达到成熟,所以相关应用不多。
香农三大定理是信息论的基础理论也是视频压缩的基础。香农三大定理是存在性定理,虽然并没有提供具体的编码实现方法,但为通信信息的研究指明了方向。
香农第一定理是可变长无失真信源编码定理。
香农第二定理是有噪信道编码定理。
香农第三定理是保失真度准则下的有失真信源编码定理。
3. 数据压缩
常用数据压缩可以分三类。
1)统计编码
2)预测编码
3)变换编码
4.1 统计编码
统计编码也称信息熵编码,是根据信源所含有的平均信息量(熵)即无失真编码的极限的无失真编码定理进行编码。统计编码常用的是。
1)Huffman编码(利用信源概率分布)
2)游程编码(利用相关性)
3)算术编码(利用信源概率分布)等。
熵编码是基于信号统计特性的编码技术,是一种无损压缩编码,解码后能无失真地恢复原图像。
日常当我们收到邮件、短信看到图像时,说我们得到了信息。信息则由一个有序的符号(如状态、字母、数字、电平等)序列构成。
例如一封英文邮件是由26个字母加标点符号所构成的序列来传递消息的。一个符号所携带的信息量可以由它出现的概率表示。如果符号出现的概率为1,这说明递给我们的是一条几乎肯定要发生的事件消息,对我们来说是“不出所料”,没有什么信息量。反之,如果概率较小的符号(事件),出现的不确定性大,那么收到的这个事件发生的消息时,带给我们较大的信息量。这就是网上段子手常说的这个信息量很大。
哈夫曼编码(Huffman Coding),是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码。 它的基本原理是对出现概率大的信息符号编短码字,对出现概率小的符号用长码字。从前面介绍可知,哈夫曼编码必须知道信源的概率分布,这在实际系统中实现起来比较难,因此在实用系统中,通常采用对大量数据进行统计后得到的近似分布来代替。编码过程就简化成一个查表过程。
游程编码(RLC, Run Length Coding)又称“运行长度编码”或“行程编码”,是一种统计编码,该编码属于无损压缩编码。游程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号(连续符号构成了一段连续的“行程”。行程编码因此而得名),使符号长度少于原始数据的长度。只在各行或者各列数据的代码发生变化时,一次记录该代码及相同代码重复的个数,从而实现数据的压缩。
例如:5555557777733322221111111
行程编码为:(5,6)(7,5)(3,3)(2,4)(1,7)。可见,行程编码的位数远远少于原始字符串的位数。
算术编码是一种无损数据压缩方法,是直接把整个输入的消息编码为一个数,一个满足(0.0 ≤ n < 1.0)的小数n。算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。
例如对有10个符号的信息源发出的字符串“state tree”进行编码,符号串有如下的概率分布。
在算术编码中需要注意几个问题:
(1)由于实际计算机的精度不可能无限长,运算中出现溢出是一个明显的问题,但多数及其都有16位,32位或者64位的精度,因此这个问题可以使用比例缩放方法解决。
(2)算术编码器对整个消息只产生一个码字,这个码字是在间隔[0,1)中的一个实数,因此译码器在接受到表示这个实数的所有位之前不能进行译码。
(3)算术编码是一种对错误很敏感的编码方法,如果有一位发生错误就会导致整个消息译错。
4.2 预测编码
预测编码( Predictive Coding )是统计冗余数据压缩理论的重要分支之一,它的理论基础是现代统计学和控制论。预测编码主要是减少了数据在时间和空间上的相关性,因而对于时间序列数据有着广泛的应用价值。
预测编著码的基本思想是:建立一个模型,这个模型利用以往的样本数据,对下一个新的样本值进行预测,将预测所得的值与实际值相减得到一个差值,再对该差值进行编码。由于差值很小,可以减少编码的码位,实现压缩。
对于图像预测法大致可分为帧内预测和帧间预测。
帧内预测是根据一个像素点周围的像素值,来预测当前像素值。具体方法有一维预测,只利用同行相邻像素点的相关性进行预测,将前一个点的像素值作为当前点的预测值,大多数情况下一个像素点的像素值总与它前一个像素点相同或相近和二维预测,除利用本行相邻像素外还利用了前一行的相邻像素来预测,预测时一般为周围不同位置的点分配一个权重,然后依据权重求平均作为当前点的像素预测值。
上图中Z为延时单元,a为加权系数,预测器根据前几个邻近样本推算出当前的估计值。N为预测器阶数,估计值为前样值的线性叠加,称为线性预测器。
如果做用预测的样值与被预测的样值在同一行内,称之为一维预测,当位于相邻的不同行上则称二维预测。一维预测利用水平方向的相关性,如果水平方向上亮度有突变会给出不合适的预测数值,这时用二维预测的效果就更好。
H264帧4X4内预测9种,16X16是4种预测模式。
H264帧内预测根据宏块左边和上边的边界像素值推算宏块内部的像素值,帧内预测的效果如下图所示。其中左边的图为图像原始画面,右边的图为经过帧内预测后没有叠加残差的画面。
相对于H.264/MPEG-4 AVC中的9个帧内预测方向,HEVC/H.265支持33个预测方向。
帧间预测就是利用相邻帧之间像素点的相关性来进行预测。前后帧之间,相同位置处的像素点有很强的相关性或相似性,因为图像一般很少会剧烈变化。宏块在帧间的相对偏移量就是运动矢量, 得到运动矢量的过程称为运动估计。
H264帧间预测7种块划分模式。
每个分割或子宏块都有一个独立的运动矢量。对于大的分割尺寸,在多细节区域中的能量会高。小尺寸分割的运动补偿残差能量小,但分割选择多,MV多。因为邻近分割有较强的相关性,运动向量也是可以预测的,MV可由邻近已编码分割的MV预测。
H264以宏块为基本的编解码单位。对宏块进行编码时需要在这些模式中作出选择,选出宏块编码的最佳(分割)方式。此外还要选择合适的运动矢量和参考帧。选择的方法就是代价函数。
1)模式代价
2)运动矢量代价
3)参考帧代价
为了使预测更加准确,在使用帧间预测时,一般都会先进行运动估计。运动估计是指在视频图像中,物体运动大多是平移运动,因此,如果能判断出当前帧的某个物体,图像上的一个区域,是由上一帧中的某个物体运动而来,那么我们就可以讲上一帧中该物体附近区域(通常是以16x16的方块划分区域,称为一个宏块)的像素点直接“复制”到当前帧中对应的位置,作为该宏块的预测值。
计算出来的矢量,(i,j),称为这个宏块在两帧之间的运动矢量。得到预测值后,再与实际采样值比较,得出差值并编码。与帧内预测不同的是,除了记录差分值外,帧间预测还要记录每个宏块的运动矢量,就是说,还要对运动矢量进行编码。
变换编码,绝大多数图像都有一个共同的特征:平坦区域和内容缓慢变化区域占一幅图像的大部分,而细节区域和内容突变区域则占小部分。也可以说,图像中直流和低频区占大部分,高频区占小部分。空间域的图像变到频域或称变换域。
通过变换,图像的大部分能量只集中到少数几个变换系数上,系数的空间分布和频率特性有可能与人眼的视觉特性匹配。
变换方法有很多,最常用的是正交变换法。正交变换后都有二个特点。
1)所有的系数相互独立。
2)能量集中于少数几个系数上。
变换编码通常和预测编码结合使用,对差值做正交变换。
正交变换的几何意义:正交变换是保持图形形状和大小不变的几何变换,包含旋转,轴对称及上述变换的复合。
代数定义:欧几里得空间V的线性变换σ称为正交变换,如果它保持向量内积不变,即对任意的α,β∈V,都有(σ(α),σ(β))=(α,β)
正交变换编著码始于1968年,Andrews等人首先提出对图像数据进行二维离散傅里叶(DFT)变换,然后对系数进行编码和传输。但DFT存在复数运算和运算量大的问题。先后出现了哈尔变换、K-L变换、离散余弦变换DCT,小波变换DWT。
傅立叶分析以法国数学家和物理学家Jean Baptiste Joseph Fourier命名,是一种将信号分解为谐波的方法。一个包含16个点的离散信号可以用9个余弦和9个正弦波来表示。在表达任意一个离散信号时,这些三角波的周期是一定的,不同的只是振幅(amplitude)。
信号可以是连续的或离散的,同时也可以是周期性的或非周期性的,根据信号的这两个特点,傅立叶变换可以分为四种类型:
1)傅立叶变换(Fourier Transform),处理非周期性的连续信号。
2)傅立叶序列(Fourier Series),处理周期性的连续信号。
3)离散时间域傅立叶变换(Discrete Time Fourier Transform),处理非周期性的离散信号。
4)离散傅立叶变换(Discrete Fourier Transform),处理周期性的离散信号(Periodic-Discrete)。
计算机只能处理离散的和有限长度的信号,因此只有离散傅立叶变换(DFT)能在计算机中以算法实现。DCT变换利用傅立叶变换的性质,采用图像边界褶翻将图像变换为偶函数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。
二维离散余弦变换DCT(Discrete Cosine Transform)的定义为,假设矩阵A的大小为M×N。B称之为矩阵A的DCT系数。
DCT是一种可逆变换,离散反余弦变换定义如下。
上图的含义是任何M×N的矩阵A都可以表示为一系列具有下面形式的函数的和。这些函数称为DCT变换的基函数。这样Bqp就可以看成是应用于每个基函数的加权。
下面以lenna图像为例,利用DCT变换函数得到的DCT系数的性质。我们只取DCT系数矩阵进行分析。下图显示了变化的结果,其中DCT系数用光谱的形式给出,直观的表明了低频和高频系数的分布规律。
lenna在图像压缩算法是最广泛应用的标准测试图——她的脸部与裸露的肩部已经变成了事实上的工业标准。
余弦函数的频率也不断增大,得到的系数可认为就是原始图像信号在频率不断增大的余弦函数上的投影,所以也被称为低频系数、中频系数和高频系数。依上图可以明显的发现如下规律:大体上,沿左上到右下的方向DCT系数(绝对值)是依次递减的。所以,也就是说一个图像的DCT低频系数分布在DCT系数矩阵的左上角,高频系数分布在右下角,低频系数的绝对值大与高频系数的绝对值。下页图也说明了这一点。
DC系数,当坐标U=V=0时的取值。它是整块能量的主要部分,它有两个特点1)值比较大。2)相邻的两个图像块之间的DC值变化不大。
小波变换:不同于传统的DCT变换,小波变换具有对信号进行多分辨率分析和反映信号局部特征的特点。通过对图像片进行离散小波变换,得到小波系数图像,而分解的级数视具体情况而定。小波系数图像由几种子带系数图像组成。这些子带系数图像描述的是图像片水平和垂直方向的空间频率特性。不同子带的小波系数反映图像片不同空间分辨率的特性。通过多级小波分解,小波系数既能表示图像片中局部区域的高频信息(如图像边缘),也能表示图像片中的低频信息(如图像背景)。这样,即使在低比特率的情况下,我们也能保持较多的图像细节(如边缘)。另外,下一级分解得到的系数所表示图像在水平和垂直方向的分辨率只有上一级小波系数所表示的图像的一半。所以,通过对系数图像的不同级数进行解码,就可以得到具有不同空间分辨率(或清晰,或模糊)的图像。 例如,[x0,x1,x2,x3]=[90,70,100,70] 为达到压缩我们可取(x0+x1)/2 (x0-x1)/2 来代表 x0,x1这样 [90,70] 可表示为 [80,10] 80即平均数 10是小范围波动数(可想象出一种波的形状) [90,70] --〉[80,10] , [100,70] --〉 [85,15] 可以想象80 和85 都是局部的平均值 反映大的总体的状态,是变化相对缓慢的值,可以认为他们是低频部分的值; 而10、15是小范围波动的值 局部变换较快 可以认为他们是高频部分的值
1. 把[90,70,100,70] 写成 [80,85,10,15] 即把低频部分写在一起(记频率L) 高频部分写在一起(H) 2. 而[80,85] 又可经同样的变换--> [82.5, -2.5] 这样 82.5表示更低频的信息(记频率LL) -1.5则表示了频率L上的波动 3. 最后90,70,100,70] --〉[82.5, -2.5, 10, 15] 这样信息就可被压缩了(数字范围小了)这就是二级变换 同样的你可以进行更高级的变换。
通小波克服了Fourier分析的不足而提出的时频分析方法,它采用可变的时频窗口对信号进行局部分析。在小波变换中,人们以不同的尺度来观察信号,可以看到不同尺度下的各种细节,因些小波被称为“数学显微镜”。小波理论非常深奥和复杂。 小波变换因其具有的这种优点被JPEG2000标准所采用。在编码系统中,对每个图像片进行Mallat塔式小波分解。经过大量的测试,JPEG2000选用两种小波滤波器:LeGall 5/3滤波器和Daubechies9/7滤波器。前者可用于有损或无损图像压缩,后者只能用于有损压缩。