灰度图像压缩编码之Huffman编码和Shannon-Fano编码

一、Shannon-Fano编码

香农编码

是采用信源符号的累计概率分布函数来分配字码的。香农编码是根据香农第一定理直接得出的,指出了平均码长与信息之间的关系,同时也指出了可以通过编码使平均码长达到极限值。香农第一定理是将原始信源符号转化为新的码符号,使码符号尽量服从等概率分布,从而每个码字符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。

香农费诺编码的具体方法:

(1)、将信源符号按照其概率大小,从大到小排列
(2)、将这一组信源符号分成概率之和尽可能接近或者相等的一组(即两组分别的概率和之间的差尽可能小)
(3)、将上面一组的编号成0,下面一组的编码成1
(4)、然后继续将分组重复2,3步骤,直到不能再进行分组为止
(5)、然后从左到右读出编码。

二、哈夫曼编码

哈夫曼编码

又称霍夫曼编码,是可变字长编码的一种,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,又是称之为最佳编码。

哈夫曼编码的具体方法:

(1)、把信源信号按其出现的概率的大小顺序排列起来
(2)、把最末端两个具有最小概率的元素的概率加起来
(3)、再把概率值和同其余概率由大到小排队,然后再把两个最小概率加起来,再重新进行排序
(4)、重复步骤(2)直到最后只剩下两个概率为止。到这里差不多就构造出了哈夫曼树
(5)、然后再根据哈夫曼树的结构,输出不同概率对应的不同编码。

编码实现思路

对图像灰度值进行的哈夫曼编码和香农费诺编码的主要思路是一致的,先获取每一个灰度值对应的概率,然后在去掉中间为零的值,再对去零后的概率进行哈夫曼编码和香农费诺编码。在将整个过程中获取的每个字符的概率,编码以及码长,用来求取平均码长,编码信息熵,以及编码效率。

1、各个灰度值的统计以及概率的求取

各个灰度通过imhist()来获取图像的灰度直方图,同时该函数返回的值包括了每一个灰度值的数量,将其返回的值保存到一个矩阵中,然后用sum()求取该矩阵所有值的和,再用这个矩阵的每一个数除以求取的和,就获取到了每一个灰度值的概率,就可以对这些值进行哈夫曼编码。

2、去零

为了减少编码的存储,将获取概率为零的数值去除。主要是通过find(),查找存储概率的不为零的值概率值。

3、计算平均码长、编码信息熵、编码效率
平均码长:每个编码的字长乘以其对应的概率再进行求和。

灰度图像压缩编码之Huffman编码和Shannon-Fano编码_第1张图片

编码信息熵:每个字符的概率乘以概率的对数再进行求和取相反数。

灰度图像压缩编码之Huffman编码和Shannon-Fano编码_第2张图片

编码效率:用求得的平均码长和编码信息熵根据下面的公式求取。

灰度图像压缩编码之Huffman编码和Shannon-Fano编码_第3张图片

具体的编码方法后面再写
灰度图像压缩编码之Huffman编码和Shannon-Fano编码_第4张图片

你可能感兴趣的:(MATLAB)