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阶指数格伦布算法解码001):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)完成最终的编解码任务。
H264所采用的指数格伦布熵编码算法原理及应用的更多相关文章
- 格伦布编码——rice编码无非是golomb编码M为2^x的特例
格伦布编码 格伦布编码是一种无失真资料压缩方法,由数学家所罗门·格伦布在1960年代提出. Rice编码 Robert F. Rice提出Rice 编码,是以哥伦布编码为基础做改良而更简易的前置码.R ...
- 【视频编解码·学习笔记】7. 熵编码算法:基础知识 & 哈夫曼编码
一.熵编码概念: 熵越大越混乱 信息学中的熵: 用于度量消息的平均信息量,和信息的不确定性 越是随机的.前后不相关的信息,其熵越高 信源编码定理: 说明了香农熵越信源符号概率之间的关系 信息的熵为信源 ...
- 已知长度为n的线性表采用顺序结构,写一算法删除该线性表中所有值为item的元素
/** * @author:(LiberHome) * @date:Created in 2019/2/27 23:34 * @description: * @version:$ */ /*已知长度为 ...
- 【视频编解码·学习笔记】8. 熵编码算法:基本算法列举 & 指数哥伦布编码
一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H ...
- 【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据
<H.264/AVC视频编解码技术具体解释>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战project的形式对H.2 ...
- celery-分布式任务队列-原理
# 转自:https://www.cnblogs.com/forward-wang/p/5970806.html 在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式. 生产者消费者模 ...
- LeetCode算法题解
1.给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?(181) 解法一:举例说明,为了减少复杂度,就使用八位二进制吧. ...
- simhash文章排重
原文链接:https://www.cnblogs.com/baochuan/p/9089244.html 背景 提升产品体验,节省用户感知度.——想想,如果看到一堆相似性很高的新闻,对于用户 ...
- h264 profile & level
转自:http://blog.csdn.net/sphone89/article/details/17492433 H.264 Profiles H.264有四种profile,每个profile支持 ...
随机推荐
- hdu 2828 Buy Tickets(线段树)
一道不算复杂的线段树,就是数据处理需要好好想一下. 将输入的所有数据从后往前输入,对于最后一个值,如果它想插入第i个位置,那么他就必须在前面留下i-1个位置.对于倒数第二个人,如果他想插入j位置,那么 ...
- 《微信小程序七日谈》- 第五天:你可能要在登录功能上花费大力气
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩: 第五 ...
- apns关于APP数字角标的理解
前两天群里有兄弟在吐槽,做远程推送的时候:老板要求APP桌面图标的右上角显示红色未读数字(数字角标)要精准,有多少未读通知就显示数字几:但是后台的弟兄在发送推送通知的时候,每次的角标是1,然后要移动端 ...
- python 函数简介之三
1. 非固定个数的实参----参数组,* args ,其结果将以元组的形式呈现出来 def func(*args): print(args) func(1,2,3,4,5) #第一种调用方式, 多个实 ...
- springmvc+mybatis+spring 整合 SSM
A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单; 技 ...
- Android便携式热点的开启状态检测和SSID的获取
WIFI热点的开启状态和开启后的SSID如何获取呢? 打开WifiManager.java源码,可找到 getWifiApState() 方法,惊喜的发现直接调用这个方法就能获取到热点的状态,然而在调 ...
- PRD学习笔记:一些需要注意的说明
控件说明 1)输入框 若输入框有默认提示,点击输入框,弹出软键盘. 当输入框内不为空(空格除外)时,默认显示消失. 2)软键盘的弹出及退去机制 当输入框内必须输入的为数字时,弹出数字软键盘.其余时候, ...
- [HMLY]8.Cocoa
cocoa是苹果公司为mac os x所创建的原声面向对象API,是mac os x上五大API之一,其他四个是carbon,posiX,x11,java. 苹果的面向对象开发框架,用来生成 Mac ...
- CodeVS 3415-最小和
原题 题目描述 Description 小浣熊松松来到文具店,选择了K支自己喜欢的水彩笔,并抄下了它们的价格.可是到结算时,他发现自己抄价格时抄得太密集,以至于所有价格连成了一个数字串(你可 ...
- git 基本用法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Helvetica Neue"; color: #454545 } p. ...