统计编码
统计编码是根据消息出现概率的分布特性而进行的压缩编码
游程长度
原理
在一个逐行存储的图像中,具有相同灰度(颜色)值的一些象素组成的序列称为一个行程。将一行中颜色值相同的相邻像素用一个计数值和该颜色值来代替。
栗子
aaaa bbb cc d eeeee fffffff
a3b2c1d5e7f
致命弱点:如果图像中每两个相邻点的颜色都不同,用这种算法不但不能压缩,反而数据量增加一倍。
哈夫曼编码
原理
将在图像中出现频度大的像素值给一个比较短的编码,将出现频度小的像数值给一个比较长的编码,每个数据的代码各不相同
通过一个二叉树来编码,使常出现的字符用较短的码代表,不常出现的字符用较长的码代表。静态Huffman编码使用一棵依据字符出现的概率事先生成好的编码树进行编码。而动态Huffman编码需要在编码的过程中建立编码树。
步骤
概率排序
两两最小合并
标注编码
为什么编码不重复
因为二叉树互斥
为什么是概率大的编码位数小
因为最后面才合并 所以其编码位数最小
那是不是最小的编码位数为一位而且 最多为一个
如何解码呢
很简单
从头遍历到停止未知
因为其特殊性导致不会有前面几位重复
01 00 11
三位以上只能10开头
101
1001
1000
也就是所一旦上一层有人 (少一位),下一层一般至只能有两个人除非到达终点
缺点
Huffman编码需要多次排序,当Xi很多时十分不便。
Fano-Shannon编码
原理一样
步骤
(1)排序
(2)分组:分两组 01 ,
(3)赋值 小为0
(4)重复 2 , 3
当信源由两个符号组成x、y,概率分别为2/3和1/3。最优码长:
计算机中不可能出现0.585位,只能用1位。Huffman编码结果分别为0和1。对于概率较大的X不能用较短的编码来表示。这是实际编码效果达不到理论压缩比的原因