1、预测编码
压缩算法的本质就是去除信号间的冗余,什么是信号的冗余呢?信号之间的相关性就是冗余,人类听觉或视觉系统感觉不到的或者掩蔽的也可以当做冗余成分。今天谈谈预测编码的概念,这是一种非常直观和简单易行的方法。说它直观,以图像为例,前后两帧或者同一图像的相邻像素都存在着相似性、相关性,我们完全可以通过当前帧和一组预测系数,推测出下一帧图像,当然也可以从当前像素推测出周围像素的变化。通过实际值与预测值的差,去除了一部分冗余,使得信号的动态范围变小了,表示这些信号的比特数减少了,从而达到压缩的目的。
对于视频信号的预测编码分成两种,一个是帧间预测编码,一个是帧内预测编码。帧内预测是从空间上去除同一帧图像内宏块之间的冗余。H264中,有4x4亮度预测模式、16x16亮度预测模式、8x8色度块预测模式以及一种I_PCM编码模式,如何选择最优的编码模型是一个不太容易的问题。
帧间预测编码效率比帧内编码要高,它是从时间上去除图像帧与帧之间的冗余,分为单向预测、双向预测。一般双向预测会增加编码延时,所以在实时通信中用的不多。在帧间预测中,就不得不提运动估计这个概念,在活动图像邻近帧中的景物会发生空间上的位移,得到这个运动偏移的过程就是运动估计,涉及到各种搜索算法,同时这一部分的复杂度也是H264的重点。
2、变换编码
变换编码是指将空间域的图像变换到频域,这样会产生相关性很小的一些变换系数,并对其进行压缩编码。通常采用DCT变换,因为它的性能接近K-L变换,同时具有快速算法,非常适合图像变换编码。变换编码比预测编码要复杂,但是各种误差(量化、信道误差)不会向后面扩展,对视觉影响不大。
3、熵编码
利用信源的统计特性进行码率压缩的编码称为熵编码。特点是无损编码,但是压缩率比较低,一般用在变换编码后面作进一步压缩。常用的有变长编码(huffman编码)和算术编码。
1) 变长编码
对出现概率大的符号分配短字长的二进制码,对出现概率小的符号分配长字长的二进制码,得到符号平均码长最短的码。也称为最佳编码。
2) 算术编码
与huffman编码不同,不采用码字表示输入符号的方法,而是采用一个浮点数来代替一串输入符号,经算术编码后输出一个小于1,大于等于0的浮点数,在解码端在进行唯一的解码,恢复原符号序列。
这两种编码方法实际应用中都有受硬件精度的问题,即如何定点化表示小数的问题。
原文见:http://blog.csdn.net/wanggp_2007/article/details/4856442