H.264学习笔记——相关概念

此处记录学习AVC过程中的一些基本概念,不定时更新。

frame:帧,相当于一幅图像,包含一个亮度矩阵和两个色度矩阵。

field:场,一帧图像,通过隔行扫描得到奇偶两场,分别称为顶场和底场或奇场和偶场。

macroblock/MB:宏块,H.264中处理(预测、变换、量化)的基本单元,大小16*16个像素。

slice group:条带组,每一帧/场图像中,按照光栅扫面的顺序,将MB/MB对分成多个条带(slice)。

I/P/B 宏块:I宏块只能利用所在slice中已编码的像素进行帧内预测。P宏块是利用已编码的图像的像素进行帧间预测,属于前向预测,即参考图像是播放顺序中该帧图像之前的图像。B宏块也是利用已编码的图像像素进行帧间预测,属于双向预测,即参考图像可以是播放顺序前后的图像。

I/P/B条带:仅包含I宏块的是I条带,同时包含I宏块和P宏块的是P条带,同时包含I条带和B宏块的是B条带。

I/P/B帧:I帧只包含I条带,P帧只包含P条带,B帧只包含B条带。

List0/List1:List0是前向参考帧列表,List1是后向参考帧列表。所以P帧预测只用到List0,B帧预测会用到List0和List1。

profile:档次,所谓档次就是H.264支持的一组工具集合和特定的应用领域。AVC里规定了几种不同的档次,主要有基本档次(Baseline profile)、主要档次(Main profile)和扩展档次(Extended profile)。

  三种档次共有工具:

    》支持I帧和P帧进行帧内和帧间编码

    》利用CAVLC(上下文自适应的可变长度编码)进行熵编码

    》使用去块效应滤波

    》zigzag扫描

    》1/4像素精度的运动估计

    》最小为4x4的三级运动估计分块

    》4:2:0的YUV抽样

  基本档次的特性:

  主要档次的特性:

    》支持B帧、加权的帧内预测、CABAC(上下文自适应的二进制算术编码)

  扩展档次的特性:

    》包括基本档次的所有特性和B帧、加权的帧内预测

    》支持SP/SI条带,用于流间切换、拼接和随机接入

参考:《深入理解视频编解码技术——基于H.264标准及参考模型》

时间: 2024-10-13 11:24:09

H.264学习笔记——相关概念的相关文章

H.264学习笔记5——熵编码之CAVLC

H.264中,4x4的像素块经过变换和量化之后,低频信号集中在左上角,大量高频信号集中在右下角.左边的低频信号相对数值较大,而右下角的大量高频信号都被量化成0.1和-1:变换量化后的残差信息有一定的统计特性和规律. CAVLC(Context-based Adaptive Variable-Length Code):基于上下文的可变长度编码,是H.264中进行4x4像素块进行熵编码的方法,基本(baseline)档次中只能使用CAVLC,只有主要档次和扩展档次才能使用CABAC(见笔记:熵编码之

H.264学习笔记3——帧间预测

帧间预测主要包括运动估计(运动搜索方法.运动估计准则.亚像素插值和运动矢量估计)和运动补偿. 对于H.264,是对16x16的亮度块和8x8的色度块进行帧间预测编码. A.树状结构分块 H.264的宏块,对于16x16的亮度宏块,可以分成16x16.16x8.8x16和8x8的子块进行帧间预测.对于8x8的块(亚宏块,亮度和色度),往下又可以分成8x8.8x4.4x8.4x4的子块.在运动估计中,每一种分割都需要尝试,并计算出运动搜索结果的代价,选择最小代价的分割方式进行预测编码. B.运动估计

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

H.264学习笔记

1.帧和场的概念 视频的一场或一帧可用来产生一个编码图像.通常,视频帧可以分成两种类型:连续或隔行视频帧.我们平常看的电视是每秒25帧,即每秒更换25个图像,由于视觉暂留效应,所以人眼不会感到闪烁.每帧图像又是分为两场来进行扫描的,这里的扫描是指电子束在显像管内沿水平方向一行一行地从上到下扫描,第一场先扫奇数行,第二场扫偶数行,即我们常说的隔行扫描,扫完两场即完成一帧图像.当场频为50Hz,帧频为25Hz时,奇数场和偶数场扫描的是同一帧图像,除非图像静止不动,否则相邻两帧图像不同.基数行和偶数行

H.264学习笔记4——变换量化

A.变换量化过程总体介绍 经过帧内(16x16和4x4亮度.8x8色度)和帧间(4x4~16x16亮度.4x4~8x8色度)像素块预测之后,得到预测块的残差,为了压缩残差信息的统计冗余,需要对残差数据进行变换和量化操作.变换和量化的总体操作过程如下图: 对于Intra_16x16的亮度块,通过16(4x4)个4x4的前向DCT变换,然后对得到的16个DC系数再进行4x4的Hadamard变换,然后对于16个DC系数和240个AC系数进行量化(DC和AC的量化公式略有不同,为了控制量化死区大小,详

H.264学习笔记2——帧内预测

帧内预测:根据经过反量化和反变换(没有进行去块效应)之后的同一条带内的块进行预测. A.4x4亮度块预测: 用到的像素和预测方向如图: a~f是4x4块中要预测的像素值,A~Q是临块中解码后的参考值.0~8是4x4的亮度块的9个预测方向(模式).当E~H不可得时,用D代替. A~Q在下面情况下不可用: >不在当前图像或条带:在该4x4块之前还没有被编码:位于帧间编码宏块,且constrained_intra_pred为1: 对于9个预测模式,简述如下: >模式0:垂直模式,条件:A~D可用.

016-kruskal算法-贪心-《算法设计技巧与分析》M.H.A学习笔记

最小生成树: 在一给定的连通无向图G = (V, E)中,(u, v) 代表连接顶点u与顶点v的边,而 w(u, v)代表此边的权重,若存在T为G的子集且为无循环图,使得w(T) 最小,则此T为G的最小生成树. 基本思路: kruskal算法总共选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中.注意到所选取的边若产生环路则不可能形成一棵生成树.kruskal算法分e 步,其中e 是网络中边的数目.按耗费递增的顺序来考虑这e 条边,每次

019-dfs.bfs-图的遍历-《算法设计技巧与分析》M.H.A学习笔记

深度优先搜索DFS 深搜框架: bool dfs(int loc) { 标记状态loc已访问; if (loc为目标状态) return true; for (每个可能的操作) { 对loc应用操作产生新状态nstat; if (nstat合法且未被访问) { if (dfs(nstat)) return true; } } 撤销loc已访问标记; // 这步要具体问题具体分析了 return false; } 广度优先搜索BFS 实现方法 1. 首先将根节点放入队列中. 2. 从队列中取出第一

017-Prim算法-贪心-《算法设计技巧与分析》M.H.A学习笔记

基本思路: 定义结点集合U, V (U表示已经选择加入MST的结点集合,V表示未选) 1. 任选一个结点加入U 2. 选择一条边权最小的边,他的两个结点分别属于U, V,并把属于V的那个结点加入U 3. 重复执行2直到V空 伪代码: C++代码: int g[mnx][mnx]; int n, m; int d[mnx]; // 朴素 prim, 复杂度O(|V|^2) |V|:点数, |E|:边数 int prim() { memset(d, 0x3f, sizeof d); //初始化 in