Matlab实现算术编码 灰度图像 静态模型

一、算术编码原理

这个资料有很多,可自行查阅其他博客或者书籍。
这篇博客写得很好,推荐一下。
https://blog.csdn.net/zzq060143/article/details/89307513

二、做灰度图像算术编码的一些关键问题

(1) 由于计算机精度有限,小数所能表达的精度是有限的,所以当编码到一定程度就会发生数据溢出。为了解决这个问题,每本篇博客采用的方法是:当数据溢出之前,将已经编码部分保存,然后重新从0~1的区间开始编码。会一定程度降低编码的性能,具体的自己去考虑考虑。
(2) 本节实现的是静态模型的算术编码,统计整幅图像灰度的频率,不随编码过程变化。传输时需要传输符号(灰度)表及其对应的频率、编码的码字及每个码字需要解码符号的数量,本实验将这些数据输出为一个2进制文件。
(3) 本实验为了在不同的计算机之间实现完整的图像通信过程,采用了Matlab的数据类型去输出成文件,这样的结果是数据信息会有很大的冗余,造成数据量偏大,所以计算压缩比的时候通过编码时编码成的二进制码字的比特数去计算,而不使用输出成的文件大小去计算,这也是我这个程序现在的问题,但是多思考一下应该可以解决,有兴趣的可以去试试。

三、代码及说明

  1. 本实验程序共5个.m文件
  2. BasicArithmeticCode.m、BasicArithmeticDecode.m分别是编码和解码算法。
  3. Encoder.m、Decoder.m分别是编码器和解码器,他们调用以上的两个算法。
  4. CaculateBits.m是用来计算压缩后总的比特数的文件,在BasicArithmeticCode.m中调用,但是由于时间代价高,默认注释掉,需要计算的时候再用。
  5. 整个操作流程:运行Encoder会读入Set12中的12张图片然后输出.dat数据文件,再运行Decoder就会读入数据文件,输出解码后的图像。
  6. 运行程序需要改动的地方:将Encoder中的图像读入路径改为你的路径;
    如改为:[‘D:\xxxxx\Set12’,num2str(i),’.png’] (只需修改xxxxx部分)

四、 下载地址

CSDN: https://download.csdn.net/download/qq_38843532/12478972
GITHUB:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值