基本算术编码

1.基本思想
算术编码,就是用一个数编码一串字符串。它的思想是这样的:对一个需要编码的字符串,给出一个初始区间[0, 1),这个区间被分成n份,n是这串字符串中不同字符的个数,每一份占区间长度的比例与相应字符出现次数占整个字符串长度的比例一致,这样,任何一个字符就与区间中的一个子区间对应起来,通过字符串的第一个字符得到对应的区间,然后把得到的第一个区间分成n份,分的方式与分[0, 1)的方式相同,通过第二个字符得到第一个区间中的一个子区间,不断迭代下去,直到字符被用尽,用由最后一个字符得到的区间中的任何一个数字就能代表整个字符串。

2.示例
对字符串aba进行算术编码。因为其中,有两个不同字符,a有两个,b有一个,所以得到如下的初始区间划分:
这里写图片描述
其中,0.66是2/3的近似值,后面所有的2/3均用0.66代替。
通过第一个字符a得到下面的区间:
这里写图片描述
对得到的区间进行划分:
这里写图片描述
通过第二个字符b得到下面的区间:
这里写图片描述
对得到的区间进行划分:
这里写图片描述
通过最后一个字符a得到下面的区间:
这里写图片描述
从区间[0.4356, 0.583704)随便找一个数就能表示字符串aba,比如0.4357。
获得目标区间完整示意图如下:
这里写图片描述

3.伪代码
这里写图片描述

4.完整代码
本文描述的算术编码的java实现代码
放在https://github.com/l294265421/algorithm-general
的arithmeticcoding包下,除了实现了编码,还实现了找到目标区间中的最短二进制数和解码。

5.参考文献
《Fundamentals of Multimedia》Second Edition,Ze-Nian Li ,Mark S. Drew, Jiangchuan Liu.

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
图像算术编码是一种用来压缩图像数据的方法,它将图像中的像素值通过一系列的算术运算转换为一串二进制编码。Matlab是一种强大的数值计算和图像处理软件,它提供了丰富的函数和工具箱,用于实现图像算术编码。 在Matlab中,我们可以使用一些基本的函数来实现图像算术编码。首先,我们需要将图像转换为灰度图像,并将像素值归一化到0至1之间。然后,我们可以将图像像素值分为不同的区间,并为每个区间分配一个二进制编码。这个编码可以是固定长度的,也可以是可变长度的。 为了实现固定长度编码,我们可以使用bitget函数来获取像素值对应的二进制编码,然后将它们按照固定的位数组合起来。对于可变长度编码,我们可以使用霍夫曼编码来实现。Matlab提供了一个huffmandict函数来创建霍夫曼编码字典,然后我们可以使用huffmanenco函数将图像像素值转换为相应的可变长度二进制编码。 在实际应用中,我们还可以对图像进行预处理以提高压缩效率。例如,我们可以使用离散余弦变换(DCT)对图像进行变换,然后再进行算术编码。这样可以利用图像的频域特性来更好地压缩图像数据。 总而言之,Matlab提供了许多函数和工具,用于实现图像算术编码。通过使用这些函数和工具,我们可以对图像进行高效的压缩,以减小图像文件的大小,从而节省存储空间和提高传输效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值