CCLM,即交叉分量线性模型(CCLM)预测模式,该技术的核心思想是为了减少交叉分量冗余,进行跨分量预测,主要是利用同一编码块的重建亮度像素构造色度像素的预测值。
其中表示当前CU的色度预测像素,表示当前CU的下采样重建亮度像素,和称为线性模型参数,由相邻的4个色度像素和对应的下采样的亮度像素生成导出。
核心:建立Y分量与UV分量的线性模型,通过线性模型使用亮度像素预测色度像素值。这里的线性模型的参数α和β可以在编解码端通过计算得出,因此不需要将其写入码流中。而对于YUV4:2:2和YUV4:2:0的视频,为了将亮度和色度像素一一对应,则需要对亮度块进行下采样,使其大小与色度块大小一致。
假设当前色度块尺寸为W×H,则W’和H’设为
上方相邻像素的位置表示为S[0,−1]…S[W'−1,−1],左侧相邻像素的位置表示为S[−1,0]…S[−1,H'−1]。则需要的四个像素的选取方式如下:
对所选位置的四个相邻的下采样亮度像素,并经过四次比较找出两个较小的值:和,以及两个较大的值和。它们对应的色度采样值表示为、、和,然后由下式可以计算相关参数:
下图展示了所需左侧相邻像素和上方相邻像素的位置示例,以及CCLM模式中涉及的当前块的示例。
从上面公式可以看出α计算过程中出现了除法,为了避免除法运算采用查表法计算α。同时为了减少存储表的空间,将diff值(最大值和最小值的差值)和α使用指数形式表示。例如,diff用4位有效部分和指数近似表示。因此,对于16个有效位值,1/diff表被缩减为16个元素,如下所示:
DivTable [ ] = { 0, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 0 }
这样做的好处是既降低了计算的复杂性,又减少了存储所需表所需的内存大小。
除了亮度所有的上方参考像素和左侧参考像素联合计算线性模型的参数外,模型参数还有另外两种计算方式,即CCLM还有两位两种模式,称之为LM-A和LM-L模式。
对于非正方形块,上方的参考像素扩展为(W+W),左方的参考像素扩展为(H+H)。
为了匹配4:2:0视频序列的色度采样位置,提供了2种下采样滤波器使亮度分量在水平和垂直方向进行2:1的下采样。下采样滤波器的选择由SPS标志指定。两个下采样过滤器如下,分别对应于“type-0”和“type-2”:
注意,当上方的参考像素位于CTU边界时,只使用一行亮度像素进行下采样。
此参数计算作为解码过程的一部分执行,而不仅仅是作为编码器搜索操作。因此,不使用语法将α和β值传送到解码器。
对于色度帧内模式编码,共允许8种帧内模式用于色度帧内模式编码。这些模式包括五种传统的帧内模式和三种跨分量线性模型模式(CCLM、LM_A和LM_L)。由于在I Slice中为亮度和色度分量启用了单独的块划分结构,因此一个色度块可以对应于多个亮度块。因此,对于色度DM模式,直接使用当前色度块中心像素对应的亮度块的帧内预测模式。
注意:DM模式在使用过程中需要进行处理的有两种特殊情况:第一,为了避免率失真优化过程中的冗余操作,如果当前编码块遍历到的色度模式和对应亮度块中心位置的角度模式相同时,此时会与DM模式的情况冗余,则将色度模式转为角度模式66;另外,当色度模式为DM模式,且对应的亮度中心块的预测模式为MIP模式时,将色度模式映射为Planar模式。
色度模式编码直接依赖于相应亮度块的帧内预测模式,色度模式信号编码和推导过程如下表所示(启用CCLM模式时,即sps_cclm_enabled_flag为1)。例如,当前色度最优模式为垂直模式(50)时,而对应亮度分量为DC(0)模式时,当前色度模式编码号为1;当前色度最优模式为81时(LM模式),而对应亮度分量为角度模式X(0<=X<=66)时,对应色度模式编码号为5.对色度模式编码时仅对色度模式编码号编码即可。
色度预测模式编码号 |
相应的亮度块预测模式 |
||||
0 |
50 |
18 |
1 |
X ( 0 <= X <= 66 ) |
|
0 |
66 |
0 |
0 |
0 |
0 |
1 |
50 |
66 |
50 |
50 |
50 |
2 |
18 |
18 |
66 |
18 |
18 |
3 |
1 |
1 |
1 |
66 |
1 |
4 |
0 |
50 |
18 |
1 |
X |
5 |
81 |
81 |
81 |
81 |
81 |
6 |
82 |
82 |
82 |
82 |
82 |
7 |
83 |
83 |
83 |
83 |
83 |
无论sps_cclm_enabled_flag的值如何,都使用一个二进制化表,如下表所示。
Value of intra_chroma_pred_mode |
Bin string |
4(DM模式) |
00 |
0(Planar模式) |
0100 |
1(垂直模式) |
0101 |
2(水平模式) |
0110 |
3(DC模式) |
0111 |
5(LM模式) |
10 |
6(LM_L模式) |
110 |
7(LM_T模式) |
111 |
不同色度模式的编码过程如下所示:
① 对第一位码字采取上下文编码,表示是否是3种CCLM模式之一,若是,比特位为1;否则,比特位为0
② 若第一个比特位为1,第二位码字采取上下文编码,表示是否是CCLM模式中的LM模式,若是LM模式,比特位为0;若不是LM模式,比特位为1,剩下的比特位使用旁路编码,对LM_L和LM_T模式进行编码
③ 若第一位比特位为0,第二位码字采取上下文编码,表示是否是DM模式,若是DM模式,比特为0;若不是DM模式,比特位为1,剩下的比特位使用旁路编码,对Planar模式、垂直、水平、DC模式进行编码
另外,为了减少双树中的luma-chroma延迟,当64x64亮度编码树节点不使用Not Split(并且64x64 CU不使用ISP)或QT进行分区时,允许32x32/32x16色度编码树节点中的色度CUs按以下方式使用CCLM:
–如果32x32 chroma节点没有分割或分区QT分割,那么32x32节点中的所有chroma CUs都可以使用CCLM
–如果32x32 chroma节点使用水平BT分区,并且32x16子节点不拆分或使用垂直BT拆分,则32x16 chroma节点中的所有chroma CUs都可以使用CCLM。
在所有其他luma和chroma编码树分割条件下,对于chroma-CU,不允许使用CCLM。