本期主题:数据压缩基础
重点掌握:RLC行程编码,VLC可变长度编码,算术编码。
无损压缩,有损压缩,字面意思
压缩比 C_ratio = Bit_before/Bit_after
常见的熵编码有:香农(Shannon)编码、哈夫曼(Huffman)编码和算术编码(arithmetic coding)。RLC不算熵编码。
Information Theory信息论基础
Probability Distribution Function (PDF):概率分布函数,表示数据集中每个元素出现的概率。
信息论之父:香农
信息熵Entropy计算公式:
信息熵计算示范:
信息熵的意义:定义了每个字符占用bit数的下限,可以理解为任何编码存储得到的平均bit数,一定大于等于1.9bits。
对于一个256的灰度图片,如果他的每个像素值出现概率均等,那么可以计算它的熵为
所以对于此图片的元素平均占bit位最少为8.
Run_length Coding行程编码
用数字表示重复字符,重复字符多才有意义
二进制文件总是01,RLC可以有效压缩。
Variable_Length Coding可变长度编码
香隆算法:按照出现频率分割元素树。自上而下
霍夫曼算法:自下而上,合并成树。
霍夫曼code优点:最小冗余码,平均bit长度
可谓非常优秀了
霍夫曼编码Huffman Coding
一个文件中有不同的字母,正常都是占一个字节,但是可能也不需要8bits这么多字节,如果字符数量比较少的的话,而且每个字符出现的频率也是不一样的,那么很朴素的想到,就是使用较少的bit去记录频率比较高的字符,长bit去记录频率低的的字符,这样最后出来的bits用量就经可能少。
要进行huffman编码:
1要知道所以的字符,以及每个字符出现的频率.
2然后计算霍夫曼字典huffmandict
3有了字典就可以对字符串编码和解码
(考点,掌握手动计算Huffman字典的方法)
Arithmetic Coding算术编码
JPEG and JPEG2000使用了算数编码
非常接近bit下限,但是计算复杂。
算术编码结果是一个十进制小数,在一个左闭右开区间。
需要对结果进行十进制小数到二进制小数转换,找到一个属于区间的二进制小数。
二进制小数在线转换器