(转)指数哥伦布编码

  在H.264中,使用CABAC需要进行二值化处理,而指数哥伦布编码就是CABAC的一种二值化处理的方法。k阶指数哥伦布编解码具体过程如下:

A、编码过程:假设待编码数字为CodeNum(必须非负整数)

  指数哥伦布编码后的形式为[MZeors][1][Info],MZero表示M个0。

    1、将CodeNum以二进制形式表示(若不足k位,前面补0),去掉后面k位(若刚好是k位,去掉k位后得0),将结果(数值)加1,得到二进制数T1;

    2、M为二进制数T1的二进制位数减一;

    3、然后将第一步中舍去的k位接到T1结尾,就得到[1][Info]。

  设[Info]的二进制位数为I,编码过程也可以如下描述:

    [1 Info] 是CodeNum+2^k的二进制表示,MZeros中0的个数M = I -k。

    于是就有总的编码长度CodeLen = M + 1 + I =2M+k+1。

B、解码过程:

  1、读入连续0,连续0的个数就是M;

  2、计算CodeLen = 2M+k+1,得到[1 Info]的位数是 I=CodeLen - M =M+K+1;

  3、读入I位二进制码字,转换成10进制,假设为W。由W = CodeNum + 2^k,得CodeNum = W-2^K。

C、示例:

  对于 k =0时:CodeNum=3。编码如下:

    二进制表示为11,去掉k=0位后加1得100;

    所以M=2;

    所以编码后结果为[MZeros][1][Info] = [MZeros][1 Info] = 00100

  解码如下:

    读入连续2个0,所以M=2;CodeLen=2M+1+k=5;所以需要再读入3个码流100,[1 Info]就是100,转成十进制结果W为4,所以CodeNum = W-2^K=4-1=3;

  同样对于k=0,CodeNum=6时,编码为:00111;

  同样对于k=3,CodeNum=3时,编码为:1011;

  同样对于k=3,CodeNum=6时,编码为:1110;

  同样对于k=3,CodeNum=10时,编码为:010010;

参考:

1,H.264学习笔记6——指数哥伦布编码

http://www.w2bc.com/Article/8749

时间: 2024-10-11 13:40:47

(转)指数哥伦布编码的相关文章

Golomb及指数哥伦布编码原理介绍及实现

本文主要有以下三部分内容: 介绍了Golomb编码,及其两个变种:Golomb-Rice和Exp-Golomb的基本原理 C++实现了一个简单的BitStream库,能够方便在bit流和byte数字之间进行转换 C++实现了Golomb-Rice和Exp-Golomb的编码,并进行了测试. 在文章的最后提供了本文中的源代码下载. Golomb编码的基本原理 Golomb编码是一种无损的数据压缩方法,由数学家Solomon W.Golomb在1960年代发明.Golomb编码只能对非负整数进行编码

H.264学习笔记6——指数哥伦布编码

在H.264中,使用CABAC需要进行二值化处理,而指数哥伦布编码就是CABAC的一种二值化处理的方法.k阶指数哥伦布编解码具体过程如下: A.编码过程:假设待编码数字为CodeNum(必须非负整数) 指数哥伦布编码后的形式为[MZeors][1][Info],MZero表示M个0. 1.将CodeNum以二进制形式表示(若不足k位,前面补0),去掉后面k位(若刚好是k位,去掉k位后得0),将结果(数值)加1,得到二进制数T1: 2.M为二进制数T1的二进制位数减一: 3.然后将第一步中舍去的k

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

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

0阶 无符号指数哥伦布编码

指数哥伦布编码与哈夫曼编码一样都属于变长编码 但二者也有显著的区别: 1>信源相关性: 哈夫曼编码依赖于信源的概率分布,而指数哥伦布编码与信源无关 2>额外信息: 哈夫曼编码必须携带与该信源匹配的码表,指数哥伦布编码无需携带额外信息 h264官方协议文档中定义了4类指数哥伦布编码分为: ue(v)无符号指数哥伦布编码 .se(v)有符号指数哥伦布编码. te(v)截断指数哥伦布编码 和 me(v)映射指数哥伦布编码 下面我们截取了协议文档中 ue(v)无符号指数哥伦布编码的部分作为例子来分析,

H.264---指数哥伦布编码

转自:http://www.cnblogs.com/DwyaneTalk/p/4035206.html   一.哥伦布码 哥伦布码就是将编码对象分能成等间隔的若干区间(Group),每个Group有一个索引值:Group Id. >对于Group Id采用二元码编码: >对于Group内的编码对象采用定长码. 如下图: 对于编码对象n: n = q * m + r = low(n/m) * m + r.其中q = low(n/m),表示取下整,对应是Group Id; 余数r对应是Group内

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

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

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

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

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

多媒体开发之h264中的sps---sps信息提取之分辨率宽高提取2

-------------------author:pkf -----------------------------time:2015-8-20 ---------------------------------------------qq:1327706646 (1) sps 数据结构 (2) 指数哥伦布码(Exponential-Golomb code, 即Exp-Golomb code) (3) 宽高计算 (4) 代码实现 --------------------------------