前言
这篇博客开始就将介绍H.264视频编码中的,帧内编码,也就是I帧编码。章节展开将严格按照Matlab源码的逻辑进行书写。如果你手头有代码,建议配合代码一起食用。(开源代码overview部分有介绍)
另外注意:这里的子目录,代表进入了函数中。例如:3.main(),那么3.1就是main{ code }.
前文回顾:强烈建议回顾一下Overview部分。
H.264压缩技术之总览(Overview)——Matlab源码解析.
H.264压缩技术之视频基础(foundation of learning video)——Matlab源码解析.
帧内预测
1.设置参考帧+I帧编码
由于进行编码的帧格式为 IPPP格式,也就是说第一个帧是I帧,后续的都是P帧。
所以设置第一帧参考帧X为自身:
X(:,:,1)=Seq(:,:,1) %解释一下Seq为啥是3维数组,前两位代表每个帧的像素值,最后一位代表是第几帧
进行I帧编码
[Seq_r(:,:,1),bits] = encode_i_frame(Seq(:,:,1),QP); % Encoding
%encode_i_frame函数是编码I帧的函数,
%函数内主要操作为:熵编码,残差块,预测等
%QP为质量因子
%返回的结果Seq_r为重构帧,bits为进行编码后的比特流
2.Seq序列分块
这里的Seq可以理解为最左边的建筑工。现在将建筑工进行16-16分块。对每个16-16的大块,再进行4-4的小分块。这里用不同的颜色标记出不同的小分块。

3.开始对每块进行预测
这里的预测分为3种情况。分别是:
- 无需预测:针对左上角的块
- 仅仅需要水平或垂直预测
- 9个方向都得预测
如下图:右上角那一块蓝色块,就是属于不需要进行预测操作的块。对于右下角的橙色部分的块(4*4,不包含蓝色部分)仅仅需要进行水平预测。对于其他的普通情况,那么就需要进行9大方向的预测。
这里笔者仅仅介绍一种水平预测模式。其他的8种模式十分的类似,读者可以自行进行实验或查阅相关资料。

该博客详细介绍了H.264视频编码中的帧内编码过程,从I帧编码、序列分块到预测、块编码和比特流拼接。重点讲解了水平预测模式,探讨了预测模式的选择及其对压缩效率的影响。此外,还预告了后续将要介绍的帧间预测(P帧)。
最低0.47元/天 解锁文章
3365





