幀內編碼

<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），包含很接近水平和垂直的模式；此外，平滑濾波也使用在平面模式。根據選擇的區塊大小及預測方向採用參考樣本平滑濾波，可以減少編碼造成的邊緣輪廓。