基于Python的算术编码的设计与实现
基于Python的算数编码实验
一、实验目的
给出算术编码实现的详细原理。
编制编解码程序
设计并实现自适应算术编码(选做)
二、实验环境
硬件环境:windows 10; VScode
编程语言:python3.7
三、实验原理
算术编码是图像压缩的主要算法之一。 是一种无损数据压缩方法,也是一种熵编码的方法。和其它熵编码方法不同的地方在于,其他的熵编码方法通常是把输入的消息分割为符号,然后对每个符号进行编码,而算术编码是直接把整个输入的消息编码为一个数,一个满足(0.0 ≤ n < 1.0)的小数n。
算术编码的基本原理: 根据信源可能发现的不同符号序列的概率,把[0,1]区间划分为互不重叠的子区间,子区间的宽度恰好是各符号序列的概率。这样信源发出的不同符号序列将与各子区间一一对应,因此每个子区间内的任意一个实数都可以用来表示对应的符号序列,这个数就是该符号序列所对应的码字。显然,一串符号序列发生的概率越大,对应的子区间就越宽,要表达它所用的比特数就减少,因而相应的码字就越短。
在给定符号集和符号概率的情况下,算术编码可以给出接近最优的编码结果。使用算术编码的压缩算法通常先要对输入符号的概率进行估计,然后再编码。这个估计越准,编码结果就越接近最优的结果。
编码过程:
编码器在开始时将“当前间隔” [ L, H) 设置为[0,1)。
对每一事件,编码器按步骤(a)和(b)进行处理
编码器将“当前间隔”分为子间隔,每一个事件一个。
个子间隔的大小与下一个将出现的事件的概率成比例,编码器选择子间隔对应于下一个确切发生的事件相对应,并使它成为新的“当前间隔”。
最后输出的“当前间隔”的下边界就是该给定事件序列的算术编码。
解码过程:解码前首先需要对区间[0,1)按照初始时的符号频度进行分割。然后观察输入的小数位于那个子区间。输出对应的符号,选择对应的子区间,然后从选择的子区间中继续进行下一轮的分割。不断的进行这个过程,直到所有的符号都解码出来。
四、实验过程与结果
程序演示截图:
基于Python的算术编码的设计与实现相关推荐
- python版植物大战僵尸源码_基于python的植物大战僵尸游戏设计与实现.docx
湖南理工学院毕业设计(论文) PAGE PAGE 1 学 号 毕业设计(论文) 题目:基于python的植物大战僵尸游戏设计与实现 作 者 届 别 届 院 别 信息与通信工程学院 专 业 信息工程 指 ...
- 基于Python的图书推荐系统的设计与实现
基于Python的图书推荐系统的设计与实现 课题描述 在这个数据爆炸的年代,人们的需求逐渐增多,而所对应的资源更是海量. 一个人要从无数的选择中选中自己所感兴趣的无异于大海捞针. 本系统在实现个人信息 ...
- python网络爬虫的流程图_基于Python的网络爬虫的设计与实现
龙源期刊网 http://www.qikan.com.cn 基于 Python 的网络爬虫的设计与实现 作者:高祖彦 来源:<商情> 2020 年第 33 期 [摘要]一个爬虫从网上爬取数 ...
- 基于python可视化的网页搜索引擎设计#毕业设计
开发环境 项目编号:基于python可视化的网页搜索引擎设计#毕业设计 开发语言:Python python框架:django 软件版本:python3.7/python3.8 数据库:mysql 5 ...
- 基于Python的数据分析系统的设计和实现
<基于Python的数据分析系统的设计和实现>该项目采用技术Python的django框架.mysql数据库 ,项目含有源码.论文.PPT.配套开发软件.软件安装教程.项目发布教程.核心代 ...
- 可视化平台python_基于Python的可视化数据分析平台设计与实现
Computer Era No. 12 2017 0 引言 随着云计算.物联网.社交网络等的兴起和数据库技术的成熟,社会中的各类数据正在以前所未有的速度增长.传统的数据处理方式难以发掘出海量数据中所隐 ...
- 基于Python的数独游戏的设计与实现
源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 基于Python的数独游戏的设计与实现
- 基于python的飞机大战游戏设计与实现
基于python的飞机大战游戏设计与实现,采用MySQL+pygame+Tkinter实现飞机大战游戏,主要功能有注册+登录+游戏初始化(开始游戏+游戏操作说明+版权信息)+游戏主界面[设置敌机种类并 ...
- 基于Python的汽车销售系统的设计和实现
<基于Python的汽车销售系统的设计和实现>该项目采用技术Python的django框架.mysql数据库,项目含有源码.论文.PPT.配套开发软件.软件安装教程.项目发布教程.核心代码 ...
最新文章
- visio mysql使用教程_visio2007使用方法
- 遗传算法原理及其python实现
- 俄罗斯方块(C语言源代码)
- Nginx面试题及基础
- java 坦克大战设计论文,java坦克大战毕业设计论文
- ant组件中select默认选中某一项
- android课设会议室预约系统,教室及会议室预约系统(C#小程序,课堂作业)
- 「360企业安全云」上线,免费护航中小微企业数字化建设
- 什么是 Web 3.0?|互联网的下一波浪潮解释
- android 强制开启wifi,强制Android使用无网络的Wifi网络
- 卡饭PDF转换器之CAJ转换
- 前端开发常见的英语词汇
- 基于RK3568商显版开源鸿蒙板卡产品解决方案
- 学习可泛化的特定深度的结构表示CVPR2021
- 一个简单的三极管音频放大电路
- 随机发牌_Java项目实战:斗地主洗牌发牌小游戏
- 计算机抽象及相关技术
- 程序jar冲突或类冲突问题解决【IncompatibleClassChangeError: Implementing class】
- finally和return执行的先后顺序
- linux基础管道命令参数用法