SCC(三):HEVC IBC
HEVC-SCC基於HEVC version 1和HEVC-RExt開發而成,並且繼承了它們的編碼結構和編碼工具。
HEVC-SCC編碼器結構如下:
HEVC-SCC是基於HEVC框架,並添加了幾個新工具。新的編碼工具如下:
-
Intra block copy(IBC):當CU使用IBC模式時,該CU的PU會在當前圖像重建部分搜索最相似的塊。IBC可以看作是在當前圖像裏做“運動補償”。
-
Palette mode:對於屏幕內容,對於大部分塊,其顏色可能在很小的範圍內變動。因此plaette mode枚舉出這些顏色值,對於每個像素只需要傳輸一個索引值表示其顏色。
-
Adaptive colour transform(ACT):因爲大部分屏幕內容使用RGB顏色空間,所以去除不同顏色通道間的冗餘能極大提高編碼效率。在HEVC-SCC中,CU可以自適應轉換顏色空間。也就是說,一個RGB空間的塊可以直接編碼,也可以轉換爲YCoCg空間然後編碼。
-
Adaotive motion vector resolution:不同於相機拍攝的內容運動都是連續的,屏幕內容中運動經常是離散的是按像素運動的。所以對於大部分屏幕運動沒必要進行分像素運動補償。HEVC-SCC中可以在slice級控制運動向量是整像素還是分像素。
本文主要分析IBC編碼工具。
IBC(Intra block copy)
IBC類似於幀間預測,不同之處在於IBC的參考像素來自於同一幀的重建像素(環路濾波前)。在HEVC-SCC中,IBC作用於PU級。
由於IBC是在當前塊做預測,所以其有幾個限制:
-
預測塊必須來自當前幀重建部分。
-
預測塊和當前CU必須在同一個slice和同一個tile中。否則,會存在不同slice或tile的依賴關係,會影響slice和tile的並行處理能力。
-
預測塊需要限制在下圖中灰色區域內。這樣可以避免影響波前並行處理能力。
-
對於constrained-intra profiles,其預測塊的像素必須來自其他幀內塊或IBC塊。
-
塊向量(Block Vector,BV)是整像素精度。
Intra block vector search
爲了決定是否對當前CU使用IBC模式,需要對CU計算其率失真代價。在編碼端使用塊匹配(Block Matchong,BM)爲每個PU尋找最優BV。根據PU尺寸,有以下三類BV候選項。
對每個候選BV計算其率失真代價:
注意,在本階段只需要計算亮度分量的SAD。
選擇RD cost最小的4個BV,繼續按下面方式計算RD cost,選擇最優BV。
注意,本階段亮度和色度都進行SAD計算。
對於8x8 PU,可以在當前圖像中滿足上一節限制的區域裏使用基於哈希的搜索方法尋找最優BV。hash table內的每個節點表示一個BV候選項在當前圖像中的位置。只對和當前塊有相同hash entry的BV候選項進行檢查。hash entry長度爲16 bit。
對於16x16 PU,只進行一維搜索,即BV中有一個分量爲0,例如水平搜索或垂直搜索。
16-bit hash entry計算如下:
msb(X,n)表示X的最高n個有效位。dc0,dc1,dc2,dc3分別表示8x8塊的4個4x4子塊的DC值。grad_BLK表示8x8塊的梯度。
梯度計算如下:首先,對於塊內除了首行和首列所有像素計算gradX,gradX等於當前像素和左側像素差的絕對值。然後計算gradY,gradY等於當前像素和上方像素差的絕對值。第二,每個像素的梯度grad等於其對應的gradX和gradY的均值。最後,grad_BLK等於塊內所有像素grad的和。
感興趣的請關注微信公衆號Video Coding