帧内编码

<image>

高效率视讯编码（HEVC）中的帧内编码（Intra Coding，又称画面内编码）可以视为高阶视讯编码（Advanced Video Coding，H.264/AVC）的扩展，因为他们都是利用空间上的取样预测来编码，而高效率视讯编码的帧内编码包含以下基本元素：

- 基于四元树（Quadtree）编码结构
- 有33种预测方向的角度预测（Angular Prediction）
- 借由平面预测（Planar Prediction）产生平滑的取样面
- 参考取样自适应的平滑性
- 过滤预测区块边界的样本
- 依照预测模式的残量转换（Residual Transform）和系数扫描（Coefficient Scanning）
- 基于前后文资讯的帧内模式编码

此外，高效率视讯编码中的帧内编码过程与帧间编码共用部分的处理步骤，包含转换（Transformation）、量化（Quantization）、熵编码（Entropy Coding）、降低区块的效应、取样自适应偏移（Sample Adaptive Offset）。

## 架构

高阶视讯编码的帧内编码是借由前一个解码影像区块且基于空间上的样本来推断，而高效率视讯编码也沿用此准则，但是更进一步扩展至能够有效呈现更大范围的图像材质及结构的资讯。高效率视讯编码的帧内编码设计基于下列考量：

- 可支援的编码区块大小（Coding block sizes）范围：高阶视讯编码只支援到16×16像素，不够有效呈现高阶定义的图像。
- 方向性结构预测：高阶视讯编码支援8种方向的帧内预测模式，当使用更大的区块大小时，此数量不足以精确呈现影像和图像的内容。
- 同质区域（Homogeneous Regions）预测：高阶视讯编码的平面模式用来编码同质的影像区域，但是此种模式不保证区块边界的连续性，因此需要有一种模式可以保证在取样平面的预测为连续性。
- 跨区块大小的一致性：高阶视讯编码根据区块大小使用不同的方法来预测区块。在高效率视讯编码支援更大范围的区块大小情况下，需要一个更一致性的设计。
- 帧内编码的转换：对于每一区块大小，高阶视讯编码采用固定的离散余弦转换（Discrete Cosine Transform），这样的设计没有考虑到统计不同水平和垂直方向的预测错误。
- 帧内模式编码（Intra Mode Coding）：高效率视讯编码大幅增加编码模式，因此需要更有效率的编码技术。

帧内编码使用的编码结构遵循边高效率视讯编码的编解码器架构，图像会由编码树单元分割为数个（或不分割）编码单元、预测单元、转换单元，因为高效率视讯编码包含上列提及的数种改善帧内编码的方式，因此可逐渐改变取样值使得不同方向的结构和区域更精准，而且借由参考样本的自适应平滑性和使直流（DC）、垂直、水平模式产生的预测边界样本平滑，可避免分区块编码所造成的边缘效应。

所有预测模式皆使用相同集合的参考样本（Reference Samples），而这些参考样本位于影像区块的左侧及上侧，在此定义参考样本为Rx,y，预测样本（Predicted samples）为Px,y，如图一所示。

位于图片或片（Slice）的边界或是被限制的编码单元边界，附近的参考样本可能无法使用，此时左边界的遗漏参考样本会由最近下面的参考样本产生，若是下边没有参考样本则使用上边的参考样本；相同地，上边界的遗漏参考样本会由最近左边的参考样本产生；若是没有任何参考样本可以使用，则所有样本被指定为位元深度的平均值。高效率视讯编支援35种帧内预测模式，包含平面、直流、以及角度，帧内预测模式0为平面帧内预测，模式1为直流预测，模式2至34为角度预测模式，如图二所示。

<image>

## 角度帧内预测（Angular Intra Prediction）

高效率视讯编码的角度帧内预测被设计成可以有效支援多种不同的方向结构，特别是针对影像及图片内容，会选择特定的帧内预测模式数量以及角度是为了在编码复杂度和编码效率中取得平衡，因此样本的预测程序会被设计成符合低运算量以及维持跨区块大小间及预测方向的一致性，也就是说可以最小化硬件实现上的芯片面积或是软件实践上的代码数量，以及更容易在不同环境下优化成高效率及高处理能力（Throughput）。在高效率视讯编码中，共有4种有效的帧内预测区块大小－4×4至32×32，以及33种角度帧内预测模式，因此解码器必须支援132种区块大小和预测方向的组合。

### 角度定义（Angle Definitions）

对一般图片而言，垂直和水平的图形发生的频率会比其他方向的图形更高，这33种预测角度是根据观察而定义出最佳化精准度的集合，四分圆包含8个预测角度，如图二所示。对于垂直和水平的方向，有着小偏移参数可以提供垂直和水平图形更精确的预测，越靠近对角线，预测方向的偏移系数越大，对于使用频率较小的图形可以有效减少预测模式的密度。

### 参考像素处理（Reference Pixel Handling）

<image>

高效率视讯编码的帧内样本预测过程是由重建的参考样本以及固定方向推断，为了简化过程，根据选定的预测模式，在一个预测区块内的所有样本会被投影至单一的参考行或列，预测模式2至17会采用左边的参考行，预测模式18至34则会使用上方参考列。在一些情况下，被投影的像素位于负的座标轴上，此时参考的行或列会借由投影左边参考行至上方参考列或投影上方参考列至左边参考行来扩展，这样的方法只会造成压缩表现一点可被忽略的影响。图三描述扩展左边参考行至上方参考列。

### 任意数量方向的样本预测（Sample Prediction for Arbitrary Number of Directions）

假设每一预测样本Px,y由参考列投影而来，以及使用差值法得到1/32像素精准度，如下

Px,y = ((32 - Wy)．Ri,0 + Wy．Ri+1,0 + 16) >> 5 （1）

Wy为两参考样本Ri,0和Ri+1,0的权重，>>代表位元向右位移，参考样本索引i和Wy借由投影位移d、选择的预测方向计算，而投影位移d范围是-32至32，&代表对每位元作按位与（AND）计算。

Cy = (y.d) >> 5

Wy = (y.d) & 31

i = x + cy （2）

公式（1）和（2）定义在预测模式18至34如何获得预测样本值，而在预测模式2至17也是相同的推导方式，只要替换公式中的x和y。

## 平面预测（Planar Prediction）

当边缘出现时，虽然提供一有效的预测很重要，不是所有的图像内容会符合边缘模型（Edge Model），因此提供直流预测（DC Prediction）此一替换的模式，此模式致力于保持区块边界的连续性，其值为两线性预测的平均，如下：

PVx,y = (N - y). Rx,0 + y．R0,N+1

PHx,y = (N - x)．R0,y + x．RN+1,0

Px,y = (PVx,y + PHx,y) >> (log2(N) + 1)

## 参考样本平滑滤波（Reference Sample Smoothing）

高阶视讯编码对于8×8的预测亮度区块采用三阶平滑滤波器（Three-tap Smoothing Filter），而高效率视讯编码对于8×8及更大的预测亮度区块也采用相同的滤波器，第一个参考样本R0,2N和R2N,0不被过滤；对于32×32大小的区块，除了垂直和水平的所有角度模式皆使用一个过滤参考；在16×16大小的区块，这些不使用一个过滤参考的模式增加至4个模式（9、11、25、27），包含很接近水平和垂直的模式；此外，平滑滤波也使用在平面模式。根据选择的区块大小及预测方向采用参考样本平滑滤波，可以减少编码造成的边缘轮廓。