设一幅灰度级为8(分别用S0、S1、S2、S3、S4、S5、S6、S7表示)的图像中,各灰度所对应的概率以此为0.5、0. 15、0.1、0.08、0.06、0.05、0.04、0.02。现对其进行哈夫曼编码。
时间: 2023-10-04 20:07:55 浏览: 141
首先按照概率从大到小排序:
S0:0.5
S1:0.15
S2:0.1
S3:0.08
S4:0.06
S5:0.05
S6:0.04
S7:0.02
接着,构建哈夫曼树,将概率较小的节点作为叶子节点,概率较大的节点作为根节点,每次将两个概率最小的节点合并成一个节点,直到只剩下一个根节点为止。在合并节点的过程中,可以将概率小的节点放在左子树,概率大的节点放在右子树,这样得到的哈夫曼树就是最优的。
构建哈夫曼树的过程如下图所示:
![huffman_tree](https://cdn.luogu.com.cn/upload/image_hosting/gtv0fz1b.png)
接着,对每个叶子节点进行编码,规定向左走为0,向右走为1,叶子节点的编码就是从根节点到该节点的路径上的0和1的序列。得到的编码如下:
S0:0
S1:101
S2:100
S3:111
S4:1101
S5:11000
S6:11001
S7:110001
最后,将每个灰度值用其对应的编码替换,得到的哈夫曼编码如下:
S0:0
S1:101
S2:100
S3:111
S4:1101
S5:11000
S6:11001
S7:110001
经过哈夫曼编码,原来占用3个比特的灰度级可以被压缩到平均约为2.49个比特,可以达到较好的压缩效果。
相关问题
设一幅灰度级为8(分别用S0、S1、S2、S3、S4、S5、 S6、S7表示)的图像中,各灰度所对应的概率分别为0.40、0.18、0.10、0.10、0.07、0.06、0.05、0.04。请对其进行香农-费诺编码。
首先,我们需要按照概率从大到小对灰度级进行排序:
S0: 0.40
S1: 0.18
S2: 0.10
S3: 0.10
S4: 0.07
S5: 0.06
S6: 0.05
S7: 0.04
接着,我们可以构建一棵霍夫曼树,其中叶子节点为灰度级,权值为对应的概率。具体构建过程如下:
1. 将所有叶子节点按照概率从小到大排序。
2. 选取概率最小的两个节点作为左右子节点新建一个父节点,其权值为两个子节点的权值之和。
3. 将新的父节点加入到节点集合中,并从集合中删除两个子节点。
4. 重复2-3步骤,直到集合中只剩下一个节点,即根节点。
按照上述步骤,我们可以得到如下的霍夫曼树:
```
(1.00)
/ \
S7(0.04) S6(0.05)
/ / \
S5(0.06) S4(0.07) S2(0.10)
/ / / \
S1(0.18) S0(0.40) S3(0.10)
```
接下来,我们可以通过从根节点到每个叶子节点的路径来确定每个灰度级的编码。从根节点开始,如果向左走则标记为0,向右走则标记为1,直到到达叶子节点。
根据上述规则,我们可以得到每个灰度级的编码如下:
S0: 0
S1: 10
S2: 110
S3: 111
S4: 101
S5: 1000
S6: 1001
S7: 10000
因此,香农-费诺编码后的结果为:
S0: 0
S1: 10
S2: 110
S3: 111
S4: 101
S5: 1000
S6: 1001
S7: 10000
2、设一幅灰度级为8(分别用S0、S1、S2、S3、S4、S5、 S6、S7表示)的图像中,各灰度所对应的概率分别为0.40、0.18、 0.10、 0.10、 0.07、 0.06、 0.05、0.04。现对其进行哈夫曼编码,请写出编码过程和编码结果。
编码过程:
1. 将各灰度级按概率从大到小排序,得到如下表格:
| 灰度级 | 概率 |
|--------|------|
| S0 | 0.40 |
| S1 | 0.18 |
| S2 | 0.10 |
| S3 | 0.10 |
| S4 | 0.07 |
| S5 | 0.06 |
| S6 | 0.05 |
| S7 | 0.04 |
2. 将概率最小的两个灰度级进行合并,得到新的概率为0.05+0.04=0.09,合并后得到如下表格:
| 灰度级 | 概率 |
|--------|------|
| S0 | 0.40 |
| S1 | 0.18 |
| S2 | 0.10 |
| S3 | 0.10 |
| S4 | 0.07 |
| S5 | 0.06 |
| S6 | 0.09 |
| S7 | |
3. 重复步骤2,直到只剩下一个灰度级为止。得到如下哈夫曼树:
```
+----+
| |
+-----+ S0 |
| | |
| +----+
|
| +----+
| | |
+-----+ +----+
| | | |
| | | S1 |
| | | |
| | +----+
| |
| | +----+
| | | |
| +-----+ +----+
| | | | |
| | | | S2 |
| | | | |
| | | +----+
| | |
| | | +----+
| | | | |
| | +-----+ +----+
| | | | | |
| | | | | S3 |
| | | | | |
| | | | +----+
| | | |
| | | | +----+
| | | | | |
| | | +-----+ +----+
| | | | | | |
| | | | | | S4 |
| | | | | | |
| | | | | +----+
| | | | |
| | | | | +----+
| | | | | | |
| | | | +-----+ +----+
| | | | | | | |
| | | | | | | S5 |
| | | | | | | |
| | | | | | +----+
| | | | | |
| | | | | | +----+
| | | | | | | |
+-----+ | | | +-----+ S6 |
| | | | | |
+-----+ +-----+ +----+
| |
+-----+-----+
|
|
+----+
| |
| S7 |
| |
+----+
```
4. 对每个灰度级进行编码,从根节点出发,向左走为0,向右走为1,得到如下编码表:
| 灰度级 | 概率 | 编码 |
|--------|------|------|
| S0 | 0.40 | 0 |
| S1 | 0.18 | 10 |
| S2 | 0.10 | 110 |
| S3 | 0.10 | 111 |
| S4 | 0.07 | 1001 |
| S5 | 0.06 | 1000 |
| S6 | 0.09 | 101 |
| S7 | 0.04 | 10001|
编码结果:
将原图像中的每个像素值按照上表中的编码进行替换,得到编码后的图像。例如,原图像中的像素值为S0,则将其替换为编码为0的二进制数。
阅读全文