H264所采用的指数格伦布熵编码算法原理及应用

1 指数格伦布熵编码算法原理

1.1 无符号整数k阶指数格伦布算法编码过程:

  1) 将数字以二进制形式写出,去掉最低的k个比特位,之后加1
  2) 计算留下的比特数,将此数减一,即是需要增加的前导零个数
  3) 将第一步中去掉的最低k个比特位补回比特串尾部

  例子(1阶指数格伦布算法编码整数9):

  第1步以符号a0表示整数9: a0 = 9;

  第2步将整数9转化为二进制格式表示并以符号a1表示:  a1 = 1001;

  第3步去掉最低1个比特位并保存到符号r0中,剩余部分记作a2:r0 = 1; a2 = 100

  第4步将a2加1并记录为a3:a3 = 101

  第5步a3有3个比特位,减1等于2,所以补2个前导0,以符号a4表示为:a4 = 00101

  第6步将r0中的比特位补到a4的比特位的后面,以符号a5表示: a5 = 001011

  这样无符号整数9最后被编码为001011

1.2 无符号整数k阶指数格伦布算法解码过程:

解析k阶指数哥伦布码时,首先从比特流的当前位置开始寻找第一个非零比特leadingZeroBits,然后根据公式计算出code_num的值:

  code_num = 2^(leadingZeroBits + k) - 2^k + values;

  其中,values为第一个非零比特其后的(leadingZeroBits + k)个比特的值。

例子(1阶指数格伦布算法解码001011):leadingZeroBits=2;values=011b=3;code_num=2^3-2^1+3=9

2 H264用到的4种指数哥伦布编码算法

ue(v):无符号指数哥伦布熵编码算法

se(v):有符号指数哥伦布熵编码算法

te(v):截断的指数哥伦布熵编码算法

me(v):映射的指数哥伦布熵编码算法

 注:H264只用了0阶指数哥伦布编码算法,由于其阶数为0所以其有更简化的算解码算法,(针对的是ue即无符号整数)简述如下:

  1)编码算法:将待编码的无符号整数加1,然后转化为二进制表示,计算其二进制位数,然后在前面补二进制位数减1个前缀0,举例:1编码为010,5编码为00110

  2)解码算法:code_num = 2^(leadingZeroBits) - 1 + values,举例:010解码为2^1-1+0=1,00110解码为2^2-1+2=5

  3) 0阶指数哥伦布编码算法即ue(v)编解码过程。

3 se(v)

  1) 编码时先将有符号待编码值转化为无符号待编码值,然后无符号待编码值按ue(v)编码规则编码,其中有符号待编码值转化为无符号待编码值规则为:如果有符号待编码值为正数则乘以2-1,否则直接乘以2以其决对值。举例:-3转化为6,4转化为7

  2)解码时,先用ue(v)解码规则解码,然后将ue(v)输出值记为k,测解码后的有附号解码值为:(–1)k+1 ceil( k÷2 )

4 te(v)

  1) te(v) 只适合非负整数编解码

  2) 编码时先判断待编码值的取值范围的上限,如果大于1,则用ue(v)规则直接编码,否则如果待编码值为1编码后的值为0,如果待编码的值为0则编码后的值为1

  3)解码时先判断待编码值的取值范围的上限,如果大于1,则用ue(v)规则直接解码,否则如果待解码值为1解码后的值为0,如果待解码的值为0则解码后的值为1

5  me(v)

  1) 在H264中用于编码语法元素coded_block_pattern

  2) 编解码时的映射规则参见H264标准9.1.2

总结:H264中采用0阶指数哥伦布编解码算法,其本身即ue(v),其它se(v),te(v),me(v),都是结合其身的规则处理后调用ue(v)完成最终的编解码任务。

时间: 2024-10-13 02:26:56

H264所采用的指数格伦布熵编码算法原理及应用的相关文章

【H.264/AVC视频编解码技术详解】十三、熵编码算法(3):CAVLC原理

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 上下文自适应的变长编码(Context-base

Java高级编程——MySQL采用的算法原理

文章主要内容分为两个部分. 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础. 第二部分结合MySQL数据库中MyISAM和InnoDB数据存储引擎中索引的架构实现讨论聚集索引.非聚集索引及覆盖索引等话题. Java高级编程--MySql采用的算法原理数据结构及算法基础索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的最主要功能之一.我们都希

【视频编解码&#183;学习笔记】8. 熵编码算法:基本算法列举 &amp; 指数哥伦布编码

一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H.264的标准协议中,不同的语法元素指定了不同的熵编码方法.在协议文档中共指定了10种语法元素的描述符,这些描述符表达了码流解析为语法元素值的方法,其中包含了H.264标准所支持的所有熵编码方法: 语法元素描述符 编码方法 b(8) 8位二进制比特位串,用于描述rbsp_byte() f(n) n位

【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据

<H.264/AVC视频编解码技术具体解释>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战project的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅.绝知此事要躬行".仅仅有自己依照标准文档以代码的形式操作一遍,才干对视频压缩编码标准的思想和方法有足够深刻的理解和体会. 链接地址:H.264/AVC视频编解码技术具体解释 GitHub代码地址:点击这里 1. H.264的CAVLC

【H.264/AVC视频编解码技术详解】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 1. H.264的CAVLC解析宏块残差数据的流

素数序列的生成及其应用(采用了自研的高效算法)

问题: 2000以内的素数有哪些? 她的手机号是素数吗? 思路: 问题归类: 怎样获取n以内的所有素数呢? 怎样高效地判定一个正整数是否为素数呢? 假设已知: 第一个素数是2,第二个素数是3: 断定某正整数n确实为素数的依据是:当且仅当 若不超过n的算数平方根的所有素数都不能整除n,那么就断定n为素数. 酝酿策略: 先解决"获取n以内的所有素数"的问题,然后应用其结果来解决"高效地判定一个正整数是否为素数"的问题. 从第三个待定素数开始,以后总是把下一个候选素数的初

LeetCode算法题解

1.给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?(181) 解法一:举例说明,为了减少复杂度,就使用八位二进制吧.设 A = 0010 1011, B = 0110 0101.1. C = A & B = 0010 0001:2. D = A | B = 0110 1111:3. E = C ^ D = 0100 1110:4. 结果E中有4个1,那么也就是说将A变成B,需要改变4位(bit).至于如何判断E的

simhash文章排重

原文链接:https://www.cnblogs.com/baochuan/p/9089244.html 背景 提升产品体验,节省用户感知度.--想想,如果看到一堆相似性很高的新闻,对于用户的留存会有很大的影响. 技术方案1.信息指纹算法 思路:为每个网页计算出一组信息指纹(Fingerprint).比较两个网页相同信息指纹数量,从而判断内容的重叠性. 步骤: 1)提取网页正文信息特征(通常是一组词),并进行向量化处理(权重算法:如nf/df). 2)取前N个信息特征,进行MD5哈希,得到信息指

h264 profile &amp; level

转自:http://blog.csdn.net/sphone89/article/details/17492433 H.264 Profiles H.264有四种profile,每个profile支持一组特定的编码功能,并支持一类特定的应用,分别是BP.EP.MP.HP: 1.BP-Baseline Profile: a.I/P slices b.Multiple reference frames (–refs <int>, >1 in the x264 CLI) c.In-loop d