设输入图像的灰度级{y1,y2,y3,y4,y5,y6,y7,y8}出现的概率分别为0.40,0.18,0.10,0.10,0.07,0.06,0.05,0.04。试进行哈夫曼编码,并计算编码效率、压缩比、冗余度。
时间: 2023-09-30 11:02:02 浏览: 76
首先,我们需要根据概率分布构建哈夫曼树。具体步骤如下:
1. 将概率从小到大排序,得到{y8,y7,y6,y5,y4,y3,y2,y1}。
2. 取出概率最小的两个节点y8和y7,构建一个新节点,权值为y8+y7=0.08。
3. 将新节点插入到原来的序列中,得到{y6,y5,y4,y3,y2,y1,0.08}。
4. 重复步骤2和步骤3,直到构建出一棵哈夫曼树。
构建出的哈夫曼树如下图所示:
```
1.00
/ \
/ \
/ \
0.60 0.40
/ \ / \
/ \ / \
0.30 0.30 0.18 y1
/ \ / \
/ \ y5 y4
y6 y3
|
y8
|
y7
```
接下来,我们可以根据哈夫曼编码的规则,从叶子节点开始往根节点回溯,记录下每一个节点的编码。具体步骤如下:
1. 对于每一个叶子节点,标记为0。
2. 从每一个叶子节点开始往上回溯,如果经过的边是从左子树到父节点,则标记为0;如果经过的边是从右子树到父节点,则标记为1。
3. 最终得到每一个叶子节点的编码,如下表所示:
| 灰度级 | 概率 | 编码 |
|-------|------|------|
| y1 | 0.04 | 111 |
| y2 | 0.18 | 10 |
| y3 | 0.10 | 110 |
| y4 | 0.10 | 101 |
| y5 | 0.07 | 1001 |
| y6 | 0.06 | 1000 |
| y7 | 0.05 | 0001 |
| y8 | 0.40 | 0000 |
根据上表所示的编码,我们可以将原始数据进行压缩。原始数据共需要8个灰度级,每个灰度级需要使用3个比特位来表示。压缩后的数据共需要:
0.04*3 + 0.18*2 + 0.10*3 + 0.10*3 + 0.07*4 + 0.06*4 + 0.05*4 + 0.40*4 = 2.53
个比特位。压缩比为8/2.53≈3.16。冗余度为1-1/3.16≈0.68。可以看出,使用哈夫曼编码可以有效地压缩数据,并减少冗余度。
相关推荐














