python实现信息论哈夫曼编码_对一幅BMP格式的灰度图像进行二元霍夫曼编码和译码...

本文介绍了使用Python实现对BMP格式灰度图像进行霍夫曼编码和解码的方法,包括图像像素统计、霍夫曼树构造、编码效率计算以及图像的重新构建。通过Pillow库处理图像,利用Counter统计像素频率,构建并遍历霍夫曼树,最终完成编码和解码过程。
摘要由CSDN通过智能技术生成

对一幅BMP格式的灰度图像进行二元霍夫曼编码和译码

信息论的实验终于结束了,才开始写python,写的比较乱,仅供参考

主要思想

霍夫曼编码关键在于树的构造,其构造要达到的目的为权重越大越靠近叶子结点,权重越小越靠近根,即使出现次数越多的值的码长越短。

构造时每次去权重最小的两个点合并为一个点n,这两个点为点n的左右子结点,这两个点的权重的和为结点n的权重,然后重复上述操作直至剩下一个点。如:

程序说明

1、还原程序直接将图像大小写死了为256* 256

2、程序中编码效率的计算为信源熵除以平均码长

3、了解了python中的pillow库

Image.open(图像)打开图像

getpixel((x,y))得到图像x,y处像素值

Image.fromarry(数组,astype('uint8')).convert('L')将一个数组还原为图像,其中L表示灰度图

show()展示图像

save()保存图像

4、统计一个列表中各数值的个数

#需要导入from collections import Counter

c = Counter()

for num in list:

c[num] = c[num] + 1

#list为一个列表,比如list=[11,11,22,22,22,33],则运行结果c={11:2,22:3,33:1}

5、np.arrry(矩阵)可以将矩阵变为数组

需要导入import numpy as np

程序还原时发现图像是镜像的,不知哪有问题,后来干脆把得到的二维数组转置一下,发现可以

转置有两种方法:

(1)T: 数组.T

(2)reshape:np.reshape(数组)

编码程序

import os

import math

from PIL import Image

from collections import Counter

#定义树的结构

class BinaryTree:

def __init__(self,weight,name=None):

self.name=name

self.weight = weight

self.leftChild = None

self.rightChild = None

#读取图像,将像素存入一个列表im_list

image_name

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值