1. 简单百科
  2. 编码单元

编码单元

编码单元(CTU)是指在高效率视频编码(HEVC)中的一种基本单位,它可以包含一个编码单元(coding Unit, CU),也可以被分割成多个更小的编码单元。

简介

高效率视频编码(HEVC)使用编码单元来指示该单元是使用画面内预测(Intra Prediction)还是画面间预测(Inter Prediction)。这些编码单元可以通过四分树(Quadtree)结构方便地表示,这是一种递归结构,四分树上的数字表示节点是否继续分割,如果节点将继续分割,则为1,如果不继续分割,则为0。当节点上的数字为0时,该节点成为编码单元。在编码树中,叶子节点(Leaf Node)就是编码单元。在编码单元上采用Z-scan方式进行处理,对于编码树而言,这是深度优先遍历。编码单元的大小支持2Nx2N,其中N=4、8、16或32,因此HEVC的四分树最高深度为4。

深度遍历选择和早期编码单元裁剪

为了降低新一代高效视频编码(High Efficiency Video Coding,HEVC)标准的编码复杂度,提出了一种基于四叉树结构类型分析和早期编码单元(Coding Unit,CU)裁剪的HEVC快速编码新算法。首先,通过分析已编码的最大编码单元(Largest CU,LCU)四叉树结构类型,确定其深度遍历区间(Depth Range,DR)类型。然后,利用相邻已编码的LCU以及前向参考帧和后向参考帧中坐标位置相同的LCU的DR类型来预测当前LCU的DR类型,并根据预测得到的DR类型对当前LCU设定CU深度遍历区间。最后,采用托马斯·贝叶斯决策原理获取阈值,并利用该阈值在CU分割过程进行早期CU裁剪。

编码复杂度分析

HEVC采用率失真优化方式决定LCU最终四叉树结构的分割形式,这样,可以在保证视频质量的前提下获得最小的码率。其率失真代价函数J(CU)为:

J(CU)=SSE+λ×B,

其中:d表示当前CU的深度值,B代表当前CU经过各种PU预测和模式选择后编码所需的比特数,λ为约瑟夫·拉格朗日算子,SSE(Sum of Square Error,SSE)表示原始图像块和重建图像块之间的误差平方和。

深度遍历选择和早期裁剪新算法

在充分考虑到HEVC的四叉树编码结构和视频的时空域相关性的基础上,首先通过对四叉树结构类型进行分析,确定其深度遍历区间(Depth Range,DR)类型,利用参考帧相同位置的LCU和相邻LCU的DR类型来预测当前LCU的CU深度遍历区间;然后,再根据预测的深度区间进行编码。同时,采用托马斯·贝叶斯决策训练原理获取阈值,并利用该阈值对CU分割进行早期CU裁剪。

1. DR类型的确定:

HEVC采用四叉树结构进行编码,一个LCU最终的分割类型是通过其CU深度值确定的,大小为64×64的LCU包括256个4×4块,每个4×4块都用一个深度值depth(depth∈[0,3])表示。不同四叉树结构的LCU,其CU深度值的分布情况也不同,LCU的四叉树结构类型可以分为8种(即A,B,C,D,E,F,G,H)。若能在LCU四叉树结构划分前对其类型进行预测,通过该类型设定CU深度遍历范围,就可以减少不必要的CU深度遍历,从而降低其编码复杂度。但过于精细的预测遍历区间会很容易造成误判。因此,将深度值分布相近的四叉树结构类型进行合并,并定义T、T、T和T四种DR类型。例如,T包括C和D两种四叉树结构类型,其中:C的深度值为1和2,D的深度值则全为2,故将这两种四叉树结构的DR类型定为T。算法根据DR类型进行CU深度遍历,相比原始0~3的全遍历,明显减少了编码复杂度。

2. 利用时空相关性的中值DR类型预测:

在视频序列中,当前编码LCU与相邻已编码的LCU以及前一帧和后一帧中与当前编码LCU位置相同的LCU(以下简称为对应LCU)之间有很大的相关性。LeftLCU、滔搏电子竞技俱乐部 LCU、Left-top LCU、Col1LCU和Col2LCU共5个参选预测LCU的DR类型来预测当前编码LCU的DR类型。

3. 基于托马斯·贝叶斯决策的早期CU裁剪预判:

在LCU的块划分过程中,若当前CU(depth∈[1,2])为其上一层CU的第4个分割CU,则在计算完其率失真代价J后,就有可能通过预判断提前进行早期CU裁剪过程。

采用贝叶斯决策原理在帧内模式选择过程中训练基于SATD(Hadamard transformed SAD)的率失真代价最佳阈值。

帧内预测编码单元划分快速算法

高效率视频编码(HEVC)采用基于编码单元(CU)的四叉树块分区结构,能灵活地适应各种图像的纹理特征,显著提高编码效率,但编码复杂度大大增加,提出一种缩小深度范围且提前终止CU划分的快速CU划分算法。基于Sobel边缘检测算子计算一帧中各深度边缘点阈值,缩小后面若干帧中CU遍历的深度范围;同时,统计该帧中各CU划分为各深度的率失真(RD)代价,计算各深度的RD代价阈值。然后,在后续视频帧中,利用RD代价阈值在缩小的深度范围内提前终止CU划分。为了符合视频内容的变化特性,统计参数是周期性更新的。经测试,在平均比特率增加仅1.2%时,算法时间平均减少约59%,有效提高了编码效率。

基于代价的划分提前终止

HM的CU划分过程,是在4个深度级范围内逐级比较RD代价,并选择RD代价最小的划分作为最佳划分。由LCU边缘点确定的2个或3个深度级范围内进行CU划分。为进一步加快CU划分速度,采用基于RD代价的CU划分提前终止策略。

一般情况下,若CU当前深度的RD代价越小,则说明当前划分方式的效果越好,该CU继续划分的可能性越小。也就是说,若CU当前深度RD代价小于某个阈值,就无需继续划分,这就是“CU划分提前终止策略”。

在学习帧中,除了得到边缘点数目与深度级范围的对应关系外,还利用HM得到各LCU的划分深度及对应的RD代价,并计算每个深度级所对应的RD代价的均值及标准差,再计算用于提前终止的RD代价阈值。在此后的应用帧中,从最小深度级开始计算当前深度级的RD代价,若当前深度级CU的RD代价小于对应深度级的RD代价阈值,则该CU不继续划分,提前终止,否则继续按深度增加逐级比较。这样,就大大减小了RD代价的计算量。

快速划分算法流程

对于整个算法流程,首先是学习帧基于梯度获得一帧图像中各深度的边缘点阈值,在统计边缘点的同时也统计一帧中各LCU最终划分时各子CU的RD代价,并对统计得到的各个深度级RD代价求均值和标准差,获得用于判断的RD代价阈值。然后在应用帧中,先依据边缘点阈值获得当前LCU需遍历的深度范围,再在该深度范围内,比较当前深度CU的RD代价和RD代价阈值的大小,若小于RD代价阈值则CU提前终止。具体步骤为:

(1)首先是学习帧,对每个LCU依据Sobel边缘检测算子计算各像素点的梯度值,获得梯度图后,将梯度图按LCU扫描顺序划分为4块;

(2)利用otsu算法计算每块的分割阈值Gfour,i=0,1,…,3(取计算得到值的0.75),并依据该阈值判断该块内各LCU的边缘点数;

(3)依据HM中该帧图像各LCU最终划分深度将LCU的边缘点数分组(深度0和1并为一组),分别计算各深度边缘点数的均值和标准差,剔除边缘点数目落在标准差之外的CU,重新计算,将再次计算的均值和标准差之和作为对应深度级的阈值Th_Edge,j=1,2;

(4)在统计各LCU梯度的同时,统计该帧中各CU最终划分时的RD代价,并计算各深度级的RD代价均值和标准差,获得RD代价阈值,阈值计算公式为式(4);

(5)学习帧结束后,进入应用帧,根据步骤(3)中得到的阈值判断当前LCU的边缘点数属于哪个划分深度,获得遍历的深度范围,然后将递归过程中当前深度CU的RD代价RD与对应深度的阈值Th_RD,k=0,1,…,3进行比较,若小于阈值,则终止当前CU划分,CU最终划分深度为k。否则,深度加1,继续比较下一深度的RD代价和相应阈值,直至最大深度。然后进入下一个LCU的比较,再次执行步骤(5)。若执行到学习帧,则返回到步骤(1)。

参考资料

H.265 Terms - CTU, CU, PU, TU.知乎专栏.2024-10-22

coding tree unit解析_编码树单元.CSDN博客.2024-10-22

视频名词浅析——HEVC(H.265)编码及视频标准制定者.知乎专栏.2024-10-22