原文:https://blog.csdn.net/SoaringLee_fighting/article/details/78303747

熵编码

数据压缩编码的概念:

编码是用一些简单的字符来表达一定的信息,例如,如果明天是晴天用1来表示,阴天就是0

压缩是消除数据间的相关性,一定的信息量尽量用较少的字符来表示

压缩编码的必要性

电子计算机的出现使信息话社会有了数字化的特点,电脑中的信息要以数字量表示出来,但我们可以简单的看一下数字话了的信息数量大小:

一片CD-ROM 650M

cif格式视频大小352*288 彩色,4:2:0格式存储的话

每帧大小352*288*1.5=228096B

播放速度30帧每秒228096*30=6842880B=6.526MB

650/6.526=99.6s

这个问题是多媒体技术发展中的一个非常棘手的瓶颈问题,单纯靠扩大存储器容量,增加通信干线的传输率的办法是不现实的

通过数据压缩手段把信息的数据量压下来,以压缩形式存储和传输,既紧缩节约了存储空间,又提高了通信干线的传输效率,同时也使计算机实时处理音频视频信息,保证播出高质量的视频,音频节目成为可能

可行性:

多媒体文本 声音 静态图像 视频图像等信源数据有极强的相关性,也就是说有大量的冗余信息,数据压缩的目的就是消除数据间的相关性,保留相互独立的信息分量

(以视频图像为例,空间相关性、时间相关性)

数据压缩编码的理论基础:

信息论,从信息论的角度来看,压缩就是去掉信息中的冗余,即保留不确定的东西,去掉确定的东西(即可以推知的东西),使用一种更接近信息本质的描述来代替原有的冗余的描述,这个本质的东西就是信息量(即不确定因素)

信息论中的信源编码理论解决的主要问题:

(1)数据压缩的理论极限

(2)数据压缩的基本途径。

根据信息论的原理,可以找到最佳数据压缩编码的方法,数据压缩的理论极限是信息熵。如果要求编码过程中不丢失信息量,即要求保存信息熵,这种信息保持编码叫熵编码,是根据消息出现概率的分布特性而进行的,属于统计编码中的一类,是无损数据压缩编码。

熵编码的基本原理;

熵编码立在随机过程的统计基础之上的是建

熵的概念:

在信息论中,有这样的信息量:

是信号 在X中出现的概率

信源X发出的信号 ,求n个随机时间的自信息统计平均(求数学期望),即

H(X)在信息论中称为信源X的熵,它的含义是信源X发出任意一个随机变量的平均信息量

数学上可以证明,等概率时间的熵最大

以n=8为例

熵的范围:

在编码中用熵值衡量是否为最佳编码

若以 表示编码器输出码字的平均码长,则

当 有冗余,不是最佳

当 不可能

当 最佳编码( 稍大于 )

熵值是平均码字 的下限

熵编码又叫熵保存编码 信息保持编码 无失真压缩编码,要求编码输出码字的平均码长,只能大于等于信源熵,若不满足这个条件,在信源编码的过程中就要丢失信息,所以信源熵是无失真信源编码,输出码字平均码长的下限

常见的熵编码方法:香农编码(shannon)、哈夫曼编码(huffman)、算术编码(arithmetic coding)、哥伦布编码(Golomb Codes)等。

2、可变长编码(Variable Length Coding,VLC)

可变长编码通过给出现概率大的符号赋予较短的码字,改变码字长度达到压缩信息冗余的目的,编码和解码过程完全可逆,又称为统计编码和无失真的压缩编码方法。最常用的可变长编码为Huffman、哥伦布编码、游程长度编码。

3、算术编码(Arithmetic coding)

算术编码的本质是对输入流分配一个码字,而不是为每个符号分配一个码字。算术编码对整条信息(无论多长),其输出仅仅是一个小数,而且是介于0和1之间(半开区间[0,1))的二进制小数。如果算术编码对某条信息的输出为1010001111,那么表示的是小数0.1010001111,换算成十进制即为0.64。

3.1 编码

算术编码不是单独对一个码字进行编码,而是对整条信息进行编码。

编码举例:

考虑某条信息中可能出现的字符仅有a,b,c三种,我们要编码的字符串为bccb。

(1) 假设三者出现概率一样,即p(a) = p(b) = p(c) = 1/3,将0~1区间按照概率的比例分配给三个字符a b c;

(2) 第一个b在(0.3333, 0.6667),此时三个字符的概率调整后为p(a) = 1/4,p(b) = 2/4,p(c) = 1/4,将(0.3333, 0.6667)区间分配给三个字符。

(3) 输入第二个字符c,c的区间为(0.5834,0.6667);

(4) 此时概率重新更新为p(a) = 1/5,p(b) = 2/5,p(c) = 2/5,用这个概率分布划分区间(0.5834,0.6667);

(5) 输入第三个字符c,c的区间为(0.6334,0.6667);

(6) 更新三个字符的概率分布为p(a) = 1/6,p(b)=2/6,p(c)=3/6,用这个概率分布划分区间(0.6334,0.6667);

(7) 最后一个字符b,得到b的区间为(0.6390,0.6501);因此只需要在这个区间中随便选择一个容易变成二进制的小数即可,比如0.64,将它变成二进制位0.1010001111,去掉没有太多意义的0和小数点,可以输出1010001111,编码结束。

3.2 解码

解码过程与编码大致相同,描述如下:

(1) 解码之前假定三个字符的概率相同,并得到上面的第一幅分布图。解码时获取的二进制流为1010001111,先变成小数即为0.64;

(2) 0.64落在字符b区间,立即输出字符b,并得到三个字符新的概率分布;

(3) 采用新的概率分布划分b的区间,在新的划分中0.64落在字符c的区间,输出字符c,得到三个字符新的概率分布;

(4) 采用新的概率分布划分c的区间,在新的划分中0.64落在字符c的区间,输出字符c,得到三个字符新的概率分布;

(5) 采用新的概率分布划分c的区间,在新的划分中0.64落在字符b的区间,输出字符b;

(6) 完成消息长度的解码,不再继续划分。

编码器和解码器都知道信息的长度,因此解码器的解码过程不会无限制的运行下去。实际上在解码器中需要添加一个专门的终止符,当解码器看到终止符时就停止解码。

3.3 多阶算术编码

   编码时考虑符号之间的相关性,把多个符号按照不同的上下文结构组合在一起,当作一个编码单元进行自适应算术编码,可以进一步提高编码效率。可以用“阶”表示上下文相关符号序列的长度,1阶上下文自适应统计的就是符号在某个特定的符号后面出现的概率,同样2阶、3阶上下文自适应统计的是符号在某两个、三个特定符号后出现的概率,使用多阶算术编码,使地同一符号可以在多个动态统计的上下文概率表中取得概率值较大的进行编码。

4、Huffman编码原理

参考:http://blog.csdn.net/abcjennifer/article/details/8020695

5、Shannon-Fano编码

     参考:http://blog.csdn.net/abcjennifer/article/details/8022445
             Wikipedia:https://en.wikipedia.org/wiki/Shannon%E2%80%93Fano_coding

6、指数哥伦布编码

参见我的blog: http://blog.csdn.net/soaringlee_fighting/article/details/78178405

7、CABAC编码

参见我的blog:http://blog.csdn.net/soaringlee_fighting/article/details/78217525

8、CAVLC编码

参见我的blog:http://blog.csdn.net/soaringlee_fighting/article/details/7824087
8

视频编码中常用熵编码介绍相关推荐

  1. 【Codecs系列】视频编码中常用熵编码介绍

    Date: 2017/10/21 Content:视频编码中常用熵编码方法介绍 1.熵编码 编码过程中按照熵原理不丢失任何信息的编码,即编码过程中不丢失信息量,保存信息熵. 熵编码是无损压缩的编码方法 ...

  2. 【待更新】感知视频编码中的感知检测技术(显著性物体检测向)

    之前对ROI编码感兴趣,做了显著性检测方面的文献综述.截至到2019年1月13号有13400字. 现在搬上来,一来交流,二来重温 感知视频编码PVC HVS 针对HVS所构建的数学模型分类 基于HVS ...

  3. 字符编码的常用种类介绍

    字符编码的常用种类介绍 第一种:ASCII码 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一 ...

  4. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  5. 视频编码中CBR和VBR的区别

    在视频编码中,有一个模块是码率控制,即通过选择一系列编码参数,使得视频编码后的比特率满足所需要的速率限制,并且使编码失真竟可能小.该模块严格上不属于视频编码标准,属于率失真优化有两范畴.码率控制分为两 ...

  6. 视频编码中的一些缩写

    视频编码中一些缩写 HEVC/VVC 码率控制 AVS3 指令集相关 @***-保持更新-*** GOP(Group of Pictures)--图像组 CTU(Coding Tree Unit)-- ...

  7. 【安防百科】视频监控中常用的分辨率

    http://www.360doc.com/content/17/0317/10/33642774_637585058.shtml 在上一节跟大家谈了摄像机的线数,"线"是模拟时代 ...

  8. A Convolutional Neural Network Approach for Half-Pel Interpolation in Video Coding一视频编码中半像素插值的卷积神经网络

    摘要 - 运动补偿是视频编码中的基本技术,用于消除视频帧之间的时间冗余.为了进一步提高编码效率,已经使用了子像素运动补偿,其需要对分数样本进行插值.视频编码标准通常采用源自信号处理理论的固定插值滤波器 ...

  9. 5.2.2 视频编辑中常用的文件格式

    5.2.2 视频编辑中常用的文件格式 1.AVI文件 AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音 ...

最新文章

  1. VC6如何使用VS2005中的CImage类功能
  2. 从零开始学python人工智能课程_从零开始学人工智能(12)--Python · 决策树(零)· 简介...
  3. softsign与tanh的比较
  4. 容斥问卷调查反馈——Co-prime,Character Encoding,Tree and Constraints,「2017 山东一轮集训 Day7」逆序对
  5. go编译库给c语言函数返回值,go语言 函数return值的几种情况
  6. Ubunt 配置网络服务
  7. Oracle创建假脱机文件,oracle – 在sqlplus中假脱机csv文件时的标头格式
  8. vb杨辉三角代码编写_杨辉三角怎样用VB写杨辉三角的完整代码 – 手机爱问
  9. shell command cat/find/tr/mkdir
  10. matlab的控制系统仿真,MATLAB控制系统仿真教程
  11. POJO类与javaBean类的区别
  12. 全市场等权中位数_市场指数估值周报20200412
  13. 腾讯云--添加二级域名
  14. FFmpeg指令行打开usb摄像头(windows)
  15. hrbust 1699 矩阵游戏【枚举找规律】
  16. ctf:xls加密_加密:爱丽丝和鲍勃的故事
  17. 超详细!Chrome 浏览器、浏览器插件 下载和安装教程
  18. 如何实现微信和淘宝的扫码登录 ?
  19. JavaWeb实现打印
  20. WPF Button 设置圆角 CornerRadius属性的使用

热门文章

  1. mysql 织梦 索引_Mysql索引详解 建立索引的优势劣势以及索引规范
  2. 堆密度测定的意义_堆密度的测量
  3. leetcode刷题总结(持续更新)
  4. css hack *html,CSS Hack详解
  5. java实现用户界面的包_在Java中实现用户界面功能的包
  6. php 3d animation,css3D+动画的例子(附完整代码)
  7. 呼和浩特机器人光缆设备_工业机器人最坚固配件,虐它千万次,性能依旧
  8. mongodb安装_MongoDB事实:商品硬件上每秒插入80000次以上
  9. java实现将A表数据转移到B表_解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表(merge into)...
  10. 不会被计算机打败的棋类游戏,电脑首次打败人类围棋冠军意味着什么?