【原】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 版权声明:本博客欢迎转发,但请保 ...
随机推荐
- 细说 ASP.NET Cache 及其高级用法
许多做过程序性能优化的人,或者关注过程程序性能的人,应该都使用过各类缓存技术. 而我今天所说的Cache是专指ASP.NET的Cache,我们可以使用HttpRuntime.Cache访问到的那个Ca ...
- 前端资源多个产品整站一键打包&包版本管理(一)
来新公司工作的第五个月.整站资源打包管理也提上了日程. 问题: 首先.什么是整站的打包管理呢? 我们公司的几个重要产品都在同一个webapp里面,但是,不同的开发部门独立开发不同的产品,长期以来,我们 ...
- Dede 列表页 缩略图 有显示无则不显示
[field:array runphp='yes']@me = (strpos(@me['litpic'],'defaultpic') ? "" : "<div c ...
- python使用psutil获取服务器信息
>>> import psutil 获取cpu信息>>> psutil.cpu_times()scputimes(user=128258.38, nice=12.2 ...
- 关于javac编译时出现“非法字符:\65279”的解决方法
一般用UE或记事本编辑过的UTF-8的文件头会加入BOM标识,该标识由3个char组成.在UTF-8的标准里该BOM标识是可有可无的,Sun 的javac 在编译带有BOM的UTF-8的格式的文件时会 ...
- CODEVS 3285 转圈游戏
[题目描述] n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……, ...
- Logback 将日志分级别打印
最近项目中用到了logback 记录日志, 关于为啥使用logback 请百度一下: logback与Log4J的区别 好了,废话不多说,直奔主题, 研究了好久,终于将日志按级别将日志分文件打印出 ...
- SGU481 Hero of Our Time
Description Saratov ACM ICPC teams have a tradition to come together on Halloween and recollect terr ...
- sjtu1285 时晴时雨
Description Taring 喜欢晴天,也喜欢雨天. Taring说:我想体验连续的\(K\)天的晴朗,去远足,去放歌:我还想再这\(K\)个晴天之后,再去体验连续的K天的云雨,去感受落雨时的 ...
- 关于PIL库的一些概念
关于PIL库的一些概念 pil能处理的图片类型pil可以处理光栅图片(像素数据组成的的块). 通道一个图片可以包含一到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进行叠加 模式 ...