【原】CAVLC的个人理解
4x4数据块经过预测、变换、量化后,非零系数主要集中在低频部分,而高频部分大部分是零。数据经过zig-zag扫描后,从左->右(低频->高频),DC系数附近的系数非常大,而高频的非零系数大部分是+1,-1(why? 应该是通过数据统计得到的。理论上推导暂时不知。)
因此可以得出量化后4x4块的特性有几个:
1)、非零系数一般较少,大部分是零,非零集中在DC附近。
2)、高频非零大部分是+1/-1。
3)、相邻的4x4块是相关的。(意思就是说 上面两点特性有关联,比如左边上边4x4非零系数很多,那么当前块很大的概率也是非零系数很多,小概率出现非零系数少的情况。这就给变长编码提供了概率依据。)
CAVLC各个过程说明。
第一步 对非零系数的数目(TotalCoeffs)以及拖尾系数的书目(TrailingOnes)进行编码。
码表的确定是由NC决定的。(why?因为NC是基于同一个slice左边4x4,上边4x4已经编码过的非零系数求平均。根据特性3),选择不同码表也是符合信息论的编码原则)。
亮度码表总共有4个(见标准表9-5):
0≤NC<2 表倾向于小系数(TotalCoef 0,1)的情况,小系数分配更短的比特
2≤NC<4 表倾向于中等大小系数(TotalCoef 0,1,2,3,4)的情况,中小系数分配更短比特
4≤NC<8 表倾向于较大的系数(TotalCoef 0,1,2,3,4,5,6,7,8)的情况。
8≤NC表 定长表,说明每种出现的概率差不多,这样获得的熵最大(由最大熵定理得到)。
有人就有疑问,这些码表是怎么设计出来的?个人觉得应该是根据大量的视频数据统计,获得概率模型,然后设计码表。熵编码离不开概率分布。
第二步 对拖尾系数的符号进行编码
第三步 对除拖尾系数以外的非零系数的幅值(Levels)进行编码。
大部分码表设计只考虑 n≥0的情况,如果出现负数,那么我们先要做一个映射才能使用该编码系统。
if code_num ≥0
levelCode = code_num*2 - 2 把正数映射到大于等于零的偶数上
if code_num <0
levelCode = -code_num*2 -1 把负数映射到大于零的负数上
映射完后开始编码。
这部分原理跟哥伦布编码差不多,不懂的请看我前面写的一篇文章,里面资料讲的很清楚。
http://www.cnblogs.com/irish/p/3170500.html
第四步 对最后一个非零系数前零的数目(TotalZeros)进行编码
查表得到码字
第五步 对每个非零系数前零个数(RunBefore)进行编码
查表得到码字
参考资料:
[1] http://files.cnblogs.com/irish/The_H.264_advanced_video_compression_standard.pdf
[2] http://files.cnblogs.com/irish/CAVLC.pdf
【原】CAVLC的个人理解的更多相关文章
- [原]Jenkins(一)---我理解的jenkins是这样的
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5330 ...
- [原]Jenkins(一)---我理解的jenkins是这样的(附全套PDF下载)
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5330 ...
- 拖拽碰撞--原声js(自身理解上新的方法)
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Mybatis技术原理理——整体流程理解
前言:2018年,是最杂乱的一年!所以你看我的博客,是不是很空! 网上有很多关于Mybatis原理介绍的博文,这里介绍两篇我个人很推荐的博文 Mybatis3.4.x技术内幕和 MyBaits源码分析 ...
- 深入理解BERT Transformer ,不仅仅是注意力机制
来源商业新知网,原标题:深入理解BERT Transformer ,不仅仅是注意力机制 BERT是google最近提出的一个自然语言处理模型,它在许多任务 检测上表现非常好. 如:问答.自然语言推断和 ...
- [原]Jenkins(二)---jenkins之Git+maven+jdk+tomcat
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5331 ...
- [原]Jenkins(三)---Jenkins初始配置和插件配置
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5331 ...
- [原]Jenkins(四)---Jenkins添加密钥对
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5332 ...
- [原]jenkins(五)---jenkins添加项目
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. http://www.cnblogs.com/horizonli/p/5332258.html 版权声明:本博客欢迎转发,但请保 ...
随机推荐
- 算法之合并排序(mergeSort)
合并排序算法在结构上是递归的,采用分治策略:就是将原有的问题划分为 n 个规模较小但结构与原问题相似的子问题,递归地解决这些子问题,然后合并其结果,就得到原问题的解. 合并排序的模式一般如下: 1.分 ...
- 【原】Object 异常静态
//所有的类都继承Object类: Object a=; Object b="ddfasfda"; //正常情况下,都会省略掉:Object:但实际上是存在的: class tes ...
- MySQL之count(*)与count(id)效率比较(转)
优化总结: 1.任何情况下SELECT COUNT(*) FROM tablename是最优选择: 2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ’ ...
- Javascript代码摘录
判断浏览器窗口高度 if (document.documentElement.clientHeight <800) { var elm = document.getElementById('Di ...
- Android开发第1篇 - Android开发环境搭建
归结一下,需要进行Android开发所需要的工具或软件: Eclipse - Android是基于JAVA的开发,所以选用目前来说使用较高的Eclipse作为IDE. ADT (Android Dev ...
- Python设计模式——装饰模式(Decorator)
假如我们需要开发一个程序来展示一个人穿衣服的过程. #encoding=utf-8 __author__ = 'kevinlu1010@qq.com' class Person(): def __in ...
- Pjax介绍及在asp.net MVC3中使用pjax的简单示例
相信很多人对ajax并不陌生,对ajax的一些优点也了如指掌,如:局部刷新改善用户体验,减少开销,让服务器和浏览器之间的响应更快等. 但是它的缺点也是很显而易见的: AJAX大量的使用了javascr ...
- 2014年度辛星css教程夏季版第三节
第二节我们讲述的几乎全是CSS的选择器,那么下面这一节我们来讲一下CSS的颜色和文本的一些东西,虽然我对调色不大敏感,但是对于颜色还是比较感兴趣的. *********CSS中的颜色********* ...
- 转载:STM32之中断与事件---中断与事件的区别
这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套.图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚 ...
- jquery upgrade
http://www.ifanybug.com/article/00125 http://zhidao.baidu.com/question/69399476.html http://www.tmtp ...