python 图像压缩_图像压缩——LZW压缩算法

本文详细介绍了LZW编码算法的工作原理,包括编码过程、解码过程,并提供了Python实现的示例代码。通过建立字符串与记号的动态映射,实现对图像数据的无误差压缩。
摘要由CSDN通过智能技术生成

1. LZW基础概念

之前提到的算术编码、霍夫曼编码等技术集中在消除编码的冗余上,而本文要讲的LZW编码是一种针对空间冗余的无误差压缩方法。

LZW算法o又叫“串表压缩算法”,就是通过建立一个将字符串和其对应的记号构成的表(把已经出现过的字符串映射到记号上),用较短的代码来表示较长的字符串来实现压缩。

需要注意的是,LZW算法中字符串和记号的对应关系是在压缩的过程中动态生成的,并且隐含在压缩数据中,解压的时候也是一步一步还原编码并动态生成字典的过程。

2. LZW算法详解

2.1 LZW编码算法

编码器从字符串中不断地读入新的字符,并且将字符或字符串映射到新的记号,以动态地构建编码字典。在编码过程中,我们维护两个变量,即previous_char(表示目前已有的,但未被编码的字符)和current_char(表示刚刚读入的字符)。编码算法流程如下

(1)初始状态,previous_char和current_char都是空的。

(2)读入新的字符current_char,并于previous合并成新的字符串p_and_c(previous_char+current_car)

(3)在编码字典里查找p_and_c,如果:

p_and_c在字典里,previous_char = p_and_c

p_and_c不在字典里,将previous_char的标记输出;在字典中建立p_and_c的映射;更新previous_char = current_char。

(4)返回步骤(2),重复直至读完字符串。

2.2 Example

ababcababac

初始状态字典里有三个默认的映射

String

Symbol

a

0

b

1

c

2

开始编码

previous_char

current_char

p_and_c

p_and_c in dict

Action

output

“”

a

a

Y

previous_char = a

-

a

b

ab

N

添加映射{‘ab’, 3} previous_char = b

0

b

a

ba

N

添加映射{‘ba’, 4}

1

a

b

ab

Y

previous_char = ab

-

ab

c

abc

N

添加映射{‘abc’, 5}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值