每帧图像被划分成固定尺寸的 CTU (Coding Tree Unit),每个 CTU 包含 1 个亮度 CTB (Coding Tree Block) 和 2 个色度 CTB。HEVC 支持的 CTU 尺寸为 2 N 2^N 2N, N N N 可以取 4 , 5 , 6 4,5,6 4,5,6,即 16 × 16 16\times16 16×16, 32 × 32 32\times32 32×32, 64 × 64 64\times64 64×64,并且 N N N 在码流中通过序列参数集 (Sequence Parameter Set, SPS) 传输。
CTU 可以进一步进行通过递归的四叉树划分成多个正方形的编码单元 CU(Coding Unit),其是 HEVC 最基础的编码单元。在码流中,使用 split_cu_flag 的标志位来表示当前 CU 是否要继续划分成子 CU。最小 CU 尺寸同样在 SPS 中定义,可以从 8 × 8 8\times8 8×8 到 CTU 的尺寸,并且输入视频的分辨率必须是最小 CU 尺寸的整数倍,但是其可以不是 CTU 尺寸的整数倍。
在 CTU 内部按照 Z 扫描的顺序进行 CU 的编码,这是为了保证除了位于 slice 左侧和上方的 CU 之外,其他所有的 CU 的左侧和上方的 CU 都已经编码完成,这样就可以利用已编码的 CU 的信息来进行帧内,帧间预测。
PU(Prediction Unit) 表示预测单元。一个 CU 可以继续划分成 PU 进行预测(帧内,帧间预测都是以 PU (而不是 CU)为单位进行)。每个 PU 都有独立的预测参数(包括帧内角度模式,帧间模式等),但是同一 PU 内的所有像素共享相同的预测参数。
帧内 PU 只有 2 种划分方式, 2 N × 2 N 2N\times 2N 2N×2N 和 N × N N\times N N×N,并且只有在最小的 CU 尺寸下才进行 N × N N\times N N×N 的 PU 模式的判断。这是由于:
1.将当前 CU 划分成 4 个子 CU ,传输他们的帧内预测模式。
2.按照 N × N N\times N N×N 模式编码当前 CU ,传输他们的帧内预测模式。
这 2 种情况下会造成语法上的冗余。
如上图所示,HEVC 支持 8 种帧间 PU 模式,其中 N × N N\times N N×N 仅在最小的 CU 尺寸,并且最小 CU 尺寸大于 8 × 8 8\times8 8×8 的情况下才支持(这意味着 HEVC 帧间 PU 没有 4 × 4 4\times4 4×4 ),理由和帧内一样。
上面 4 种称为对称划分模式, 下面 4 种则是非对称划分模式 (Asymmetric Partitioning, AMP)。并且,非对称划分模式仅支持 CU 尺寸大于 8 × 8 8\times8 8×8 的情况,这是为了最小化最差情况下的内存带宽。因此,HEVC 最小的帧间 PU 尺寸是 4 × 8 4\times8 4×8 和 8 × 4 8\times4 8×4。另外, 4 × 8 4\times8 4×8 和 8 × 4 8\times4 8×4 只能使用单向预测,而不能使用双向预测。AMP 可以在 SPS 中禁用。
HEVC 以及前几代标准支持的帧间 PU 尺寸如下图:
类似 CU 的四叉划分,经过预测(帧内或者帧间)之后每个 CU 的预测残差也可以进行递归划分成 TU(Transform Unit) ,这种结构称为残差四叉树 (Residual QuadTree, RQT)。每个 CU 则作为 RQT 的根节点。
通过允许不同的 TU 大小,残差四叉树使得变换基函数能够适应不同残差信号的空域和频域特性。更大的 TU 尺寸可以提供更好的频率解析度,而更小的 TU 尺寸提供更好的空域解析度。
HEVC 支持的 TU 尺寸可以从 4 × 4 4\times4 4×4 到 32 × 32 32\times32 32×32,其取决于 d m a x d_{max} dmax, n m i n n_{min} nmin 和 n m a x n_{max} nmax 。 d m a x d_{max} dmax 表示 RQT 的最大深度, n m i n n_{min} nmin 和 n m a x n_{max} nmax 分别表示 TU 最小和最大尺寸(取值从 2 到 5),这三个参数在 SPS 中传输。对于帧内 CU 来说,TU 大小不能超过 PU 的大小,这是由于每个 PU 重建时,必须参考左侧和上方已经完成重建的像素值(这是专门针对帧内 N × N N\times N N×N 模式的限制)。
如果在多个帧间 PU 块上进行去相关变换,则会增加高频变换系数的能量,降低压缩效率。这是由于不同 PU 块之间的残差分布不一致导致的。虽然这样做会导致一些 CU 的编码性能下降,但是,其他 CU 块会有所增益。因此,实验结果显示允许跨 PU 块的变换可以带来 0.4-0.7% 的 Bjøntegaard Delta bit rate (BD rate) 增益。
亮度和色度共享相同的 RQT 结构,因此,对于 YUV420 格式,亮度采用 32 × 32 32\times32 32×32 的 TU 尺寸,则色度采用 16 × 16 16\times16 16×16 的 TU 尺寸。但是,有个特殊情况除外,对于亮度 8 × 8 8\times8 8×8 的亮度 CU 划分成 4 个 4 × 4 4\times4 4×4 的 TU 时,色度不会分割成 2 × 2 2\times2 2×2 的 TU。
RQT 结构传输:
rqt_root_cbf 标志位,当其等于 0 时,表示当前 CU 的变换系数全为 0。
其等于 1 时,使用 split_transform_flag 来表示是否继续往下划分 TU。
另外,对于 skip 模式来说,cu_skip_flag 为 1,并且不需要传输 rqt_root_cbf 等任何标志位。
除了 rqt_root_cbf 之外,可以使用 cbf_luma,cbf_cb,cbf_cr 来单独表示亮度或者色度的变换系数全为 0。
提前终止算法:
当所有未量化的变换系数都低于适当的量化器步长相关阈值时,应该终止往下继续划分 TU。
客观质量评价一般采用峰值信噪比 PSNR(Peak Signal-to-Noise Ratio) 来衡量:
P S N R = 10 ∗ l o g 10 M A X 2 M S E PSNR = 10 * log_{10}^{\frac{MAX^2}{MSE}} PSNR=10∗log10MSEMAX2
其中, M A X = 1 < < b i t d e p t h − 1 MAX = 1 << bitdepth - 1 MAX=1<<bitdepth−1 表示最大误差, M S E = ∑ i = 0 W − 1 ∑ j = 0 H − 1 [ I ( i , j ) − I ^ ( i , j ) ] 2 MSE = \sum_{i=0}^{W-1}\sum_{j=0}^{H-1}[I(i,j) - \widehat{I}(i,j)]^2 MSE=∑i=0W−1∑j=0H−1[I(i,j)−I (i,j)]2 。对 YUV 三个分量的 PSNR 进行加权:
P S N R Y U V = ( 6 P S N R Y + P S N R U + P S N R V ) / 8 PSNR_{YUV} = (6PSNR_Y + PSNR_U + PSNR_V)/8 PSNRYUV=(6PSNRY+PSNRU+PSNRV)/8
所有序列采用 HM10.1 进行编码,并且分成 2 种场景测试:
1.分辨率为 1080P,高延迟的 Random Access 配置,娱乐场景。
2.分辨率为 720P,低延迟的 Low Delay 配置,会议场景。
基准为只使用 16 × 16 16\times16 16×16 的 PU 尺寸:
基准为只使用 4 × 4 4\times4 4×4 的 TU 尺寸:
基准为 RQT 的最大深度 d m a x = 0 d_{max}=0 dmax=0 :
基准为 CTU 尺寸为 16 × 16 16\times16 16×16,最小 CU 尺寸为 8 × 8 8\times8 8×8 :