统计编码值之哈夫曼,游程长度,算术编码,附算术编码源码

统计编码

统计编码是根据消息出现概率的分布特性而进行的压缩编码

游程长度

原理

在一个逐行存储的图像中,具有相同灰度(颜色)值的一些象素组成的序列称为一个行程。将一行中颜色值相同的相邻像素用一个计数值和该颜色值来代替。

栗子

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不能用较短的编码来表示。这是实际编码效果达不到理论压缩比的原因

算术编码




猜你喜欢

转载自blog.csdn.net/sibiantai555/article/details/79858326
今日推荐