H264预测模式笔记

目录

亮度Luma预测模式

4x4亮度块预测

16x16亮度块预测

8x8的色度块预测

帧内预测模式的选择

4x4亮度块的预测模式编码

 


H.264标准中提出按块进行计算,一个宏块是16x16像素,然后它可以分成子块,最小是4x4的(这个大小是对于亮度编码而言,至于色度编码,4:2:0格式的色度宏块的长和宽都是亮度宏块的一半),这样也能大大提高计算速度。

亮度Luma预测模式

4x4亮度块预测

H264预测模式笔记_第1张图片

Intra(帧内预测)有两种,一种是4x4大小的亮度块,一种是16x16大小的亮度块。对于4x4大小的亮度块,我们有9种预测模式,如下图所示

模式0:垂直模式,条件:A~D可用。
模式1:水平模式,条件:I~L可用。
模式2:DC模式,条件:A~D或I~L可用。
模式3~8:方向模式,各个像素是由A到L像素通过权重不等的公式加权计算的。


 

我们注意到这里有9种模式,之后要进行编码的话,我们除了把残差编进去,总得知道我预测的时候用了哪种模式吧,9这个数就尴尬了,因为刚好三个比特可以表示8种,四个比特可以表示16种,所以3bit不够4bit又浪费了。怎么办呢?有个方法就比较巧妙,我有1bit用来表示我当前用的模式和前面的是不是一样的,因为经常有这样的情况,我前面块用的预测方向和现在这个块用的预测方向一样(比如物体边缘是一条直线,那么对应的那几个块用的预测方向很可能都是一样的),如果一样,我只用1bit就足够存储了,如果不一样,我再用用4个bit存储,也就达到了节约bit的目的。

16x16亮度块预测

16x16亮度块有四种模式,如下图

  参考像素为左边16个、上边16个和左上1个共33个像素,分别记为p(-1,y)、p(x,-1)、p(-1,-1)。参考像素在下面情况下不可用:
    》不位于当前图像或条带;位于帧间宏块,且constrained_intra_pred为1;
  预测模式有4种:
    》模式0:垂直预测,条件:p(x,-1)可用;
    》模式1:水平预测,条件:p(-1,y)可用;
    》模式2:DC预测,条件:p(x,-1)或p(-1,y)可用;
    》模式3:平面(plane)预测。

8x8的色度块预测

对于色度块是亮度块的四分之一,也就是8x8的,那就只有一种了,预测模式也跟亮度16x16块的类似,有四种,只不过具体的序号不一样而已。是0代表DC,1代表horizontal,2代表vertical,3代表plane。
plane的算法和上面16x16的类似,只不过系数变了,而且两个色度块用的方式一定都是一样的。

帧内预测模式的选择

  亮度和色度的帧内预测,都有多种预测策略,因此实际应用中要选择最优的帧内预测策略。
  对于色度块预测,只能采用8x8的分块大小,只需要比较4中模式的代价(用RDO模型),选择代价最小的模式即可。
  对于亮度块预测,可以采用16x16和4x4的块大小,所以需要先后计算出9中4x4预测模式的最小代价(RDO模型)和4中16x16预测模式的最小代价(SATD公式),然后从中选择较小的预测模式。

 

4x4亮度块的预测模式编码

  由于4x4块有9种预测模式,如果完全编码需要4bits,所以根据该块周围(上和左)边的4x4块的预测方式来推断当前块的预测模式。如果推断的预测模式一直,则只需要传输1bit(pred_intra4x4_pred_mode_flags=0),否则传输需要4(rem_intra4x4_pred_mode为4x4亮度块预测模式的编码值)+1(pred_intra4x4_pred_mode_flags=1)=5bits。

    使用无符号哥伦布编码直接将预测方式编号编入码流。 

H264预测模式笔记_第2张图片

 

H264预测模式笔记_第3张图片

 

 

 

 

 

参考:https://www.cnblogs.com/charybdis/p/6049108.html

你可能感兴趣的:(图像编解码)