畫面內預測

高效率視訊編碼（HEVC）中的**影格內編碼**（英語：**I**ntra **C**oding，又稱**畫面內編碼**）可以視為高階視訊編碼（Advanced Video Coding，H.264/AVC）的擴展，因為他們都是利用空間上的取樣預測來編碼，而高效率視訊編碼的影格內編碼包含以下基本元素：

1. 基於四元樹（Quadtree）編碼結構
2. 有 33 種預測方向的角度預測（Angular Prediction）
3. 藉由平面預測（Planar Prediction）產生平滑的取樣面
4. 參考取樣自適應的平滑性
5. 過濾預測區塊邊界的樣本
6. 依照預測模式的殘量轉換（Residual Transform）和係數掃描（Coefficient Scanning）
7. 基於前後文資訊的影格內模式編碼

此外，高效率視訊編碼中的影格內編碼過程與影格間編碼共享部分的處理步驟，包含轉換（Transformation）、量化（Quantization）、熵編碼（Entropy Coding）、降低區塊的效應、取樣自適應偏移（Sample Adaptive Offset）。

## 架構

高階視訊編碼的影格內編碼是藉由前一個解碼影像區塊且基於空間上的樣本來推斷，而高效率視訊編碼也沿用此準則，但是更進一步擴展至能夠有效呈現更大範圍的圖像材質及結構的資訊。高效率視訊編碼的影格內編碼設計基於下列考量：

1. 可支援的編碼區塊大小（Coding block sizes）範圍：高階視訊編碼只支援到 16×16 像素，不夠有效呈現高階定義的圖像。
2. 方向性結構預測：高階視訊編碼支援 8 種方向的影格內預測模式，當使用更大的區塊大小時，此數量不足以精確呈現影像和圖像的內容。
3. 同質區域（Homogeneous Regions）預測：高階視訊編碼的平面模式用來編碼同質的影像區域，但是此種模式不保證區塊邊界的連續性，因此需要有一種模式可以保證在取樣平面的預測為連續性。
4. 跨區塊大小的一致性：高階視訊編碼根據區塊大小使用不同的方法來預測區塊。在高效率視訊編碼支援更大範圍的區塊大小情況下，需要一個更一致性的設計。
5. 影格內編碼的轉換：對於每一區塊大小，高階視訊編碼採用固定的離散餘弦轉換（Discrete Cosine Transform），這樣的設計沒有考慮到統計不同水平和垂直方向的預測錯誤。
6. 影格內模式編碼（Intra Mode Coding）：高效率視訊編碼大幅增加編碼模式，因此需要更有效率的編碼技術。

影格內編碼使用的編碼結構遵循邊高效率視訊編碼的編解碼器架構，圖像會由編碼樹單元分割為數個（或不分割）編碼單元、預測單元、轉換單元，因為高效率視訊編碼包含上列提及的數種改善影格內編碼的方式，因此可逐漸改變取樣值使得不同方向的結構和區域更精準，而且藉由參考樣本的自適應平滑性和使直流（DC）、垂直、水平模式產生的預測邊界樣本平滑，可避免分割區塊編碼所造成的邊緣效應。

所有預測模式皆使用相同集合的參考樣本（Reference Samples），而這些參考樣本位於影像區塊的左側及上側，在此定義參考樣本為 Rx,y，預測樣本（Predicted samples）為 Px,y，如圖一所示。

位於圖片或片（Slice）的邊界或是被限制的編碼單元邊界，附近的參考樣本可能無法使用，此時左邊界的遺漏參考樣本會由最近下面的參考樣本產生，若是下邊沒有參考樣本則使用上邊的參考樣本；相同地，上邊界的遺漏參考樣本會由最近左邊的參考樣本產生；若是沒有任何參考樣本可以使用，則所有樣本被指定為位元深度的平均值。高效率視訊編支援 35 種影格內預測模式，包含平面、直流、以及角度，影格內預測模式 0 為平面影格內預測，模式 1 為直流預測，模式 2 至 34 為角度預測模式，如圖二所示。

## 角度影格內預測（Angular Intra Prediction）

高效率視訊編碼的角度影格內預測被設計成可以有效支援多種不同的方向結構，特別是針對影像及圖片內容，會選擇特定的影格內預測模式數量以及角度是為了在編碼複雜度和編碼效率中取得平衡，因此樣本的預測程式會被設計成符合低運算量以及維持跨區塊大小間及預測方向的一致性，也就是說可以最小化硬體實現上的晶片面積或是軟體實踐上的代碼數量，以及更容易在不同環境下優化成高效率及高處理能力（Throughput）。在高效率視訊編碼中，共有 4 種有效的影格內預測區塊大小－4×4 至 32×32，以及 33 種角度影格內預測模式，因此解碼器必須支援 132 種區塊大小和預測方向的組合。

### 角度定義（Angle Definitions）

對一般圖片而言，垂直和水平的圖形發生的頻率會比其他方向的圖形更高，這 33 種預測角度是根據觀察而定義出最佳化精準度的集合，四分圓包含 8 個預測角度，如圖二所示。對於垂直和水平的方向，有著小偏移參數可以提供垂直和水平圖形更精確的預測，越靠近對角線，預測方向的偏移係數越大，對於使用頻率較小的圖形可以有效減少預測模式的密度。

### 參考像素處理（Reference Pixel Handling）

高效率視訊編碼的影格內樣本預測過程是由重建的參考樣本以及固定方向推斷，為了簡化過程，根據選定的預測模式，在一個預測區塊內的所有樣本會被投影至單一的參考行或列，預測模式 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 - y)．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），包含很接近水平和垂直的模式；此外，平滑濾波也使用在平面模式。根據選擇的區塊大小及預測方向採用參考樣本平滑濾波，可以減少編碼造成的邊緣輪廓。

## 參考資料