无失真编码之算术编码的python实现——数字图像处理

原理

无失真编码中的算术编码是一种用于将输入数据进行高效压缩的方法,同时保留了原始数据的完整性。
算术编码的实现过程如下:

  1. 数据分段:首先,将要进行编码的数据划分为一个个符号或字符。每个符号可以是文本中的一个字母、一幅图像中的一个像素或其他数据单元,具体取决于应用场景。

  2. 计算符号概率:对于每个符号,需要计算其在数据中出现的概率。通常,这些概率是基于统计数据中每个符号的出现频率来估计的。

  3. 构建累积概率表:根据符号的概率,构建一个累积概率表。这个表将每个符号映射到一个累积概率区间,其长度与符号的概率相关。通常,累积概率表是一个包含0到1之间所有可能区间的表格。

  4. 编码过程:算术编码的编码过程从0到1的一个初始区间开始。然后,根据输入数据中的每个符号,不断地缩小当前区间,使其逐渐趋近于一个特定的数值。编码的方式是根据当前符号的累积概率区间来调整当前区间的大小。具体步骤如下:

  5. 对于每个输入符号,找到其在累积概率表中对应的区间。

  6. 将当前区间按照符号的概率进行分割,使得当前区间缩小到符号对应的区间范围内。

  7. 重复以上两步,直到处理完所有输入符号。

  8. 编码结果:最终,算术编码会产生一个介于0和1之间的小数,这个小数可以用二进制或其他形式的编码表示。通常,这个编码是一个无限小数,但实际上会截断为有限长度,以方便存储或传输。编码后的数据可以通过解码过程来还原成原始数据。

python实现下图结果

在这里插入图片描述

提示

所示结果图中有两部分内容,一是对消息序列中最后一个符号编码后得到的各符号子区间,二是对消息序列编码完成后得到的子区间的上下边界。信源符号及概率分布可由一个字典表示,待编码消息序列为”cadacdb”,如
在这里插入图片描述

python代码

import numpy as npprob_table = {'a': 0.1,'b': 0.4,'c': 0.2,'d': 0.3}
msg = 'cadacdb'def process_stage(low, high):stage_len = high - lowstage_prob = {}for key in prob_table:cum_prob = low + stage_len * prob_table[key]stage_prob[key] = [low, cum_prob]low = cum_probreturn stage_problow = 0.0
high = 1.0encoder = []for ch in msg:stage_prob = process_stage(low, high)low = stage_prob[ch][0]high = stage_prob[ch][1]encoder.append(stage_prob)for key, value in encoder[-1].items():print(key, ': ', value)
print(low, high)

结果展示

在这里插入图片描述

总结

算术编码的本质是为整个输入序列分配一个码字,而不是给每个字符分别指定码字,因此平均意义上可以为单个字符分配码长小于1的码字。
算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在L到H之间。编码过程中的间隔决定了符号压缩后的输出。
给定事件序列的算术编码步骤如下:
1.编码器在开始时将“当前间隔”设置为[ L, H);
2.对每一事件,编码器按步骤a)和b)进行处理:
a) 编码器将“当前间隔”分为子间隔,每一个事件一个;
b) 一个子间隔的大小与下一个将出现的事件的概率成比例,编码器选择子间隔对应于下一个确切发生的事件相对应,并使它成为新的“当前间隔”;
3.最后输出的“当前间隔”的下边界和上边界之间的一个合适的值就是该给定事件序列的算术编码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 20.04下 Tesla P100加速卡使用

1.系统环境:系统ubuntu 20.04, python 3.8 2.查看cuDNN/CUDA与tensorflow的版本关系如下: Build from source | TensorFlow 从上图可以看出,python3.8 对应的tensorflow/cuDNN/CUDA版本。 3.安装tensorflow #pip3 install tensorflow 新版…

hadoop自动获取时间

1、自动获取前15分钟 substr(from_unixtime(unix_timestamp(concat(substr(20240107100000,1,4),-,substr(20240107100000,5,2),-,substr(20240107100000,7,2), ,substr(20240107100000,9,2),:,substr(20240107100000,11,2),:,00))-15*60,yyyyMMddHHmmss),1) unix_timestam…

第一次面试总结 - 迈瑞医疗 - 软件测试

🧸欢迎来到dream_ready的博客,📜相信您对专栏 “本人真实面经” 很感兴趣o (ˉ▽ˉ;) 专栏 —— 本人真实面经,更多真实面试经验,中大厂面试总结等您挖掘 注:此次面经全靠小嘴八八,没…

腾讯云最新优惠活动入口整理汇总

随着云计算技术的快速发展,腾讯云作为国内领先的云服务提供商,一直致力于为用户提供高效、稳定、安全的云服务。为了回馈广大用户的支持,腾讯云经常推出各种优惠活动。本文将对腾讯云最新的优惠活动入口进行整理和汇总,帮助用户更…

【CV】计算两个向量的夹角,并使用 OpenCV 可视化弧线

背景 基于人体/动物,骨骼点数据,计算关节角度 1. 原理 计算两个向量的夹角,我们已三个点为例,BA 向量和BC向量,求 B 的角度。若为四个点,延长交叉即可。 2. 效果 效果图如下 3. 核心代码 def comput…

【服务器数据恢复】FreeNAS+ESXi数据恢复案例

服务器数据恢复环境: 一台服务器,虚拟化系统为esxi,上层使用iSCSI的方式实现FC SAN功能,iSCSI通过FreeNAS构建。 FreeNAS采用了UFS2文件系统,esxi虚拟化系统里有3台虚拟机:其中一台虚拟机安装FreeBSD系统&a…

redis的高可用(主从复制、哨兵、群集)

redis的高可用(主从复制、哨兵、群集) 主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷&…

【python】爬取豆瓣电影排行榜Top250存储到Excel文件中【附源码】

英杰社区https://bbs.csdn.net/topics/617804998 一、背景 近年来,Python在数据爬取和处理方面的应用越来越广泛。本文将介绍一个基于Python的爬虫程 序,用于抓取豆瓣电影Top250的相关信息,并将其保存为Excel文件。 程序包含以下几个部…

[游戏开发] 两向量夹角计算(0-360度)

上图是Unity左手坐标系,红轴是右,蓝轴是前,绿轴是上 测试目标是黑(3.54,0,4)、黄(-3.85,0,4.8)、灰(0.46,0,-2.6)三个向量,且三个向量都再XZ平面上,Y的值为0 以黑色为起始轴,和其他两周做角度计算 计算角…

微信小程序如何自定义导航栏,怎么确定导航栏及状态栏的高度?导航栏被刘海、信号图标给覆盖了怎么办?

声明:本文为了演示效果,颜色采用的比较显眼,可根据实际情况修改颜色 问题描述 当我们在JSON中将navigationStyle设置成custom后,当前页面的顶部导航栏就需要我们制作了,但出现了一下几个问题: 导航栏的高…

【Scala】——流程控制

1 if-else 分支控制 让程序有选择的的执行,分支控制有三种:单分支、双分支、多分支 1.1单分支 if (条件表达式) {执行代码块 }1.2 双分支 if (条件表达式) {执行代码块 1 } else {执行代码块 2 }1.3 多分支 if (条件表达式1) {执行代码块 1 } else …

初学者的基本 Python 面试问题和答案

文章目录 专栏导读1、什么是Python?列出 Python 在技术领域的一些流行应用。2、在目前场景下使用Python语言作为工具有什么好处?3、Python是编译型语言还是解释型语言?4、Python 中的“#”符号有什么作用?5、可变数据类型和不可变…

CMake入门教程【核心篇】设置和使用缓存变量

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 概述设置缓存变量使用缓存变量更改缓存变量完整代码示例实战使用技巧注意事项总结与分析

锂电池制造设备中分布式IO模块优势

在“碳达峰、碳中和”目标推动下,新能源汽车当下发展势头正盛,而纯电动车的核心部件则是:锂电池。动力型锂电池作为新能源汽车核心零部件,其发展与新能源汽车行业息息相关,迎来广阔的市场空间。 为何采用I/O模块&#…

Linux中快速搭建RocketMQ测试环境

必要的文件下载 为什么选择RocketMQ | RocketMQ x86_64位JDK下载0jdk/8u391-b13 rocketmq二进制包下载-rocketmq-all-5.1.4-bin-release.zip 编译好的直接可用的dashboard【rocketmq-dashboard-1.0.0.jar】请在文章顶部下载 dashboard配套的配置文件【application.propert…

ECMAScript6历史-前端开发+ECMAScript+基础语法+入门教程

ECMAScript6详解 ECMAScript 历史 我们首先来看 ECMA 是什么。ECMA,读音类似“埃科妈”,是欧洲计算机制造商协会(European Computer Manufacturers Association)的简称,是一家国际性会员制度的信息和电信标准组织。19…

AcWing 203. 同余方程(扩展欧几里得算法)

题目链接 203. 同余方程 - AcWing题库高质量的算法题库https://www.acwing.com/problem/content/205/ 来源 《算法竞赛进阶指南》, NOIP2012提高组 题解 本题中的同余方程可以转化为ax by 1的形式,利用扩展欧几里得算法可以求得特解为,则通解为。 代…

网站建设网络设计营销类网站模板

★安装环境要求★ 服务器:Linux / Apache / IIS PHP版本:5.4及5.4以上,完美支持php7.4 MYSQL版本:5.0以上 PS:php版本推荐5.6,mysql推荐使用5.7 ★模板安装步骤★ 1、请将源码包里面的所有文件和文件夹上…

【每日一题】删除子串后的字符串最小长度

文章目录 Tag题目来源解题思路方法一:栈 写在最后 Tag 【栈】【字符串】【2024-01-10】 题目来源 2696. 删除子串后的字符串最小长度 解题思路 方法一:栈 思路 按照题目要求需要移除字符串中的 “AB” 和 “CD” 子字符串,并且移除这两种…

Helix QAC 2023.4 新版支持C++20语言,带来更多性能提升!

Helix QAC 2023.4 新增功能 Helix QAC 2023.4全面支持MISRA C:2023规则,涵盖100%的指南。此版本还加强了对C20语言的支持,改进了数据流分析性能,并在整个产品中增加了多项用户体验改进。 增强的C20支持 此版本新增了对以下语言特性的支持&a…