十六算术编码_1基本原理与实现
Posted 叮咚咕噜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十六算术编码_1基本原理与实现相关的知识,希望对你有一定的参考价值。
一、前言
在前面的学习中我们已经了解到熵编码是利用信息的统计冗余进行数据压缩的无损编码方法,并且已经讨论过了熵编码的基本原理、H.264中使用的语法元素解析算法“指数哥伦布编码”的算法与实践,讨论了在H.264中非常重要的一种熵编码方法,即上下文自适应的变长编码(CAVLC);
以上的内容在H.264的baseline profile中具有广泛应用。然而在实际应用场景中更为流行的通常是main profile(main profile区别于前面的baseline profile最主要是熵编码使用了算法编码CABAC),在main profile中为了进一步提升压缩比率,采用的熵编码方法不是CAVLC,而是压缩效率更高的CABAC
CABAC的全称为上下文自适应的二进制算术编码(Context-Adaptive Binary Arithmetic Coding, CABAC)
二、算术编码的基本概念
- 什么是算术编码
- 算术编码是一种极为常用的熵编码算法,常用于图像和视频等数据的无损压缩
- 算术编码的特点
- 相同点:高频元素分配短码,低频元素分配长码
- 差异点:VLC将每个元素分配一个码字,最终得到多个元素对应码字相接而成的码流,在一段码流中哪几个bit是属于哪几个元素的是区分的非常明显的;算术编码将整个输入的元素集合作为输入,通过区间运算的操作,得到一个可以表示输入数据的区间,输出的码流是对整个区间进行编码得到的码流,对于输出的码流没办法直接区分哪几个是对应哪几个元素的。
- 算术编码同变长编码的优劣势比较
- 变长编码
- 举例:哈夫曼编码、香浓-费诺编码等
- 优势:运算复杂度低,计算简单
- 劣势:极限压缩率较低(例如:1w个1,也需要将这个1最少使用1bit表示一遍)
- 算术编码
- 举例:CABAC(H.264优于之前的编码方式的主要原因,采用了CABLC)
- 优势:极限压缩率高
- 劣势:运算复杂耗时
- 变长编码
算术编码基本流程
1、概率区间与编码区间
-
区间表示:编码过程中由两个区间来表示
-
概率区间:按照信源概率递归划分的区间,表示整条信源概率在整体的比例
-
编码区间:整体区间通过递归二等分划分,用于将概率对应到输出编码
-
-
编码过程的本质:
- 一串信源按照各自概率依次对区间进行分割,并在编码区间中寻找可以完全包含最终概率区间的编码区间所表示的输出码流
2、编码过程
- 初始化一个完整的编码区间和概率模型
- 读入输入信息,递归分割概率区间
- 每次比较概率区间和编码区间,概率区间长度及是否处于某个半区之内
- 若概率区间处于某个半区之内,则输出相应码字;若概率区间长度大于半区长度,则退出该过程等待下一个;若概率区间小于半区长度但跨国编码区间中点,则记录一个待输出比特
算法编码的概括:
算法编码是对概率区间经过了多轮分割之后的区间运算的结果,最终我们输入了n个字符,进行了n次分割,最终会得到一个最终的区间,同时整个编码区间也会按照4等分,8等分等,总会有一个或者几个区间,完全的被前面分割的概率区间包含,那么这个概率区间所包含的最左边的完整区间就是算术编码要输出的内容。
以上是关于十六算术编码_1基本原理与实现的主要内容,如果未能解决你的问题,请参考以下文章
H.264/AVC视频编解码技术详解十八:算术编码的基本原理与实现