编码原理(附一)--算术编码

之前,记得在介绍CABAC的熵编码时候,有一个环节涉及到了算术编码,本篇就带大家看看算术编码是肿么一回事。

简介
算术编码是一种无损的数据压缩方法,也是熵编码的一种方法。与其他熵编码比较而言,其他熵编码通常是把输入的消息区分为符号,然后对每个符号进行编码,而算术编码是呢是根据输入消息中不同符号出现的概率,把整个输入的消息最终编码为1个数,一个介于0和1之间的小数。有没有想知道是肿么编码的呢。接下来已一个简单的栗子来说明喽。

准备工作

现在假设有字符序列 aabcda,且P(a) = 0.2,P(b) = 0.1, P(c) = 0.4,P(d) = 0.3,分别代表a,b,c,d在整个序列中出现的概率分别是20%,10%,%40,30%,四者加起来正好为1哦。且4个符号出现的概率将[0,1]区间分割为 [0,0.2),[0.2,0.3),[0.3,0.7),[0.7,1)。

编码过程
首先字符序列中出现了a,P(a) = 0.2,所以落在了区间[0,0.2);
接下来出现的还是a,P(a) = 0.2,但当前的区间已经变为【0,0.2】,(0.2 - 0) P(a) = 0.04,此时,区间边落在了【0,0.04】;
继续,序列中出现了b,P(b) = 0.1,当前区间为【0,0.04】,(0.04 - 0)
P(b) = 0.004,此时,区间落在了【0,0.004】;
序列中出现c,P(c) = 0.4,当前区间为【0,0.004】,(0.004 - 0) P(c) = 0.0016,新的区间落在【0,0.0016】;
序列中出现了d,P(d) = 0.3,当前区间为【0, 0.0016】,(0.0016 - 0)
P(d) = 0.00048,新的区间落在【0,0.00048】;
序列中出现了a,P(a) = 0.2,当前区间为【0,0.00048】,(0.00048 - 0) * P(a) = 0.000096,区间落在【0,0.000096】。

    好了,到此,整个序列中的符号经过算术编码得到一个相对较小的区间,二进制编码最终在最后得到的区间之内,选取任意一个数作为编码的结果。此处我们就选则0.000086作为最终的结果吧。这样,我们的算术编码是不是也清晰了呢,希望对大家有用哦!

原文地址:http://blog.51cto.com/7335580/2070048

时间: 2024-10-09 05:15:21

编码原理(附一)--算术编码的相关文章

算术编码的原理与分析

转自:http://kulasuki115.blogcn.com/diary,201492702.shtml 前言 人类已进入信息时代,信息时代的重要特征是信息的数字化,人们越来越依靠计算机获取和利用信息,这就需要对信息的表示.存储.传输和处理等关键技术进行研究.我们要把数值.文字.语言.声音.图像.图形.视频和动画等多种媒体转化成计算机所能处理的数字信息,但数字化后的视频和音频等媒体信息的数据量是非常大的.因此,数字化信息的数据量很大,这样大的数据量,无疑给存储器的存储容量.通信干线的信道传输

编码原理详解(六)--CABAC

本篇介绍一下熵编码的另外一种方式CABAC,基于上下文的自适应二进制编码,其同样是对经过ZigZag扫描后的数据从概率的角度进行再编码,但是由于CABAC编码过程中涉及到诸多的概率模型以及其他算法,由于篇幅原因,本篇只做提及,不详细展开,本篇希望从梗概的角度让大家明白CABAC是怎样的一个过程. 一.简介 CABAC编码的目的是从概率的角度再做一次压缩,编码的过程主要分为二值化,上下文建模,二进制算术编码. 二.二值化 在图像处理的世界中,所谓二值化就是将像素点的值根据一定的算法,将像素分别修改

Atitit.Base64编码原理与实现设计

Atitit.Base64编码原理与实现设计 1. Base64编码1 1.1. 为什么要用自己的base64编码方案1 2. Base64编码由来1 3. Base64编码原理1 3.1. 具体来说,转换方式可以分为四步:2 3.2. 注意2 3.3. Padding3 4. URL安全的Base64编码3 1. Base64编码 1.1. 为什么要用自己的base64编码方案 防止apache codec  jdk的jar冲突. 2. Base64编码由来 Base64最早是用来解决电子邮件

linux上用c实现算术编码(三)--算术编码理论讲解

一.算术编码定义 它是一种非分组编码算法.它是从全序列出发,采用递推形式的连续编码.它不是将单个的信源符号映射成一个码字,而是将整个输入序列的符号依据它们的概率映射为实数轴上区间[0 1)内的一个小区间,再在该小区间内选择一个代表性的二进制小数,作为实际的编码输出. 算术编码不同于霍夫曼码,它是非分组(非块)码.它从全序列出发,考虑符号之间的关系来进行编码. 算术编码利用了累积概率的概念. 算术码主要的编码方法是计算输入信源符号序列所对应的区间. 因为在编码过程中,每输入一个符号要进行乘法和加法

算术编码原理

http://blog.csdn.net/adam_tu/article/details/7696455 早在1948年,香农就提出将信源符号依其出现的概率降序排序,用符号序列累计概率的二进值作为对芯源的编码,并从理论上论证了它的优越性.1960年, Peter Elias发现无需排序,只要编.解码端使用相同的符号顺序即可,提出了算术编码的概念.Elias没有公布他的发现,因为他知道算术编码在数学上虽然成 立,但不可能在实际中实现.1976年,R. Pasco和J. Rissanen分别用定长的

编码原理(附二)----二值化

二值化,开门见山的讲,就是将非二进制的字符按照一定的规则编码为二进制串了,这样编码以后,出现的编码符号便只有0和1,从算术编码的角度来讲,可能出现的字符就只有"0"和"1",这样更有利于编码.常见的二值化编码算法有,一元码,截断一元码,K阶指数哥伦布编码,在此做简单介绍,希望能给大家一个直观的认识. 一元码 一元码的编码规则是,对于待编码的符号"x">=0,编码为x个"1"再加一个"0"编码组成.举个

4B/5B编码原理

4B/5B编码原理 什么是4B/5B编码? 4B/5B编码是百兆以太网(即快速以太网)中线路层编码类型之一,就是用5bit的二进制数来表示4bit二进制数,映射方式如下表所示: 为什么要进行4B/5B编码? 在通信网络中,接收端需要从接收数据中恢复时钟信息来保证同步,这就需要线路中所传输的二进制码流有足够多的跳变,即不能有过多连续的高电平或低电平,否则无法提取时钟信息. Manchester(曼切斯特)编码可以保证线路中码流有充分的跳变,因为它是用电平从“-1”到“+1”的跳变来表示“1”,用电

从原理上搞定编码-- Base64编码

开发者对 Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该.大概介绍一下Base64的相关内容,花几分钟时间就可以彻底理解它.文 章下边贴了一个Base64的编解码器,方便阅读文章的同时来实验. 一. Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送.这样用途就受到了很大的限制,比

从原理上搞定编码(二)-- Web编码

周末宅在家里睡完觉就吃饭,吃完饭接着睡觉,这日子过的实在是没劲啊.明明还有计划中的事情没有做, 为什么就是不想去做呢,这样的生活持续下去,必然会成为一个彻头彻尾的loser.上一篇写的 初识编码 ,这一篇把web编码写出来和菜鸟们分享一下.图片比较多,手机用户不要看,流量没了俺不负责. 一.html页面编码 当浏览器请求一个静态的html页面时,服务器会将html页面的字节流通过网络传输给浏览器.浏览器再将字节流解码成相应的html文本字符,然后将html元素渲染出来.在这个流程中浏览器有一个解