先来看几个概念:
哈夫曼编码,即熵编码法。根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)[1]。用于数据的无损耗压缩。
DC编码。DC是采用差值脉冲编码调制的差值编码法,也就是在同一个图像分量中取得每个DC值与前一个DC值的差值来编码[2]。
JPEG压缩分四个步骤实现[2]:
1.颜色模式转换及采样;
2.DCT变换;
3.量化;
4.编码
其中第1步就是将RGB颜色模式变成YCbCr颜色模式,具体转换公式参加文献[1]。
第2步DCT变换就是转化到频域
第3步量化,将每个8*8矩阵和量化矩阵相除,与卷积非常类似。我理解这步的实质就是滤波,去除了高频信号。
为什么做卷积就是滤波。因为离散型的卷积就是用相邻的值来形成新值,从而改变了相邻值之间的差异。也就是改变了频率。例如那个著名的3*3中值滤波,用相邻值的均值来形成新值。这样就缩小了相邻值之间的差距,也就是滤掉了高频数据。即去除了图像中变化剧烈的部分。
第4步编码,之所以采用zigzag形式,系数大多数集中在左上角,即低频分量区,因此“之”字型读出实际上是按二维频率的高低顺序读出系数的。这样就便于采用游程长度编码(Run Length Encoding),所谓游程长度编码是指一个码可以同时表示码的值和前面有几个零。这样就发挥了“之”字型读出的优点,因为“之”字型读出,出现连零的机会比较多,特别到最后,如果都是零,在读到最后一个数后,只要给出“块结束”(EOB)码,就可以结束输出,因此节省了很多码率[3]。
参考文献:
【1】wiki百科,huffman coding
















