SCC(四):Palette mode

SCC(四):Palette mode

調色板模式(palette mode)對於只含有少數幾種顏色的塊非常高效。相比於傳統的對塊進行預測變換處理,調色板模式只需要對每個像素傳輸其顏色索引。

調色板是一個包含CU中顏色值的表,對於CU中每個像素在碼流中傳輸其在表中的索引。解碼器使用這個索引和這個調色表來重建CU。

調色表中每個條目包含三個分量(RGB或YCbCr)。對於4:2:0或4:2:2顏色格式,如果當前位置像素沒有色度分量,就只使用第一個分量重建像素。在調色表中有一個特殊索引escape index用於那些在表中沒有對應值的像素。在這種情況下,碼流中除了要傳輸該像素的索引escape index,還要傳輸該像素的量化值。

下圖是一個palette size = 4的調色板示例:

 

調色板編碼

在編碼端需要生成調色板。使用調色板模式編碼時,其編碼分爲兩部分:調色表的編碼和CU中每個像素索引的編碼。

通常,相鄰的使用調色板模式的塊的調色表有很多相同項。爲了減少冗餘,當前待編碼調色表由之前已編碼調試表預測得到,而當前調色表新的項顯示傳輸。對於預測調色表每項都有一個標誌位表示該項是否在當前調色表中。這些標誌位使用行程編碼,行程使用零階指數哥倫布編碼。傳輸完預測表之後,再傳輸新添項的數量和對應的值。如下圖所示。

 

對於每個slice或tile或CTU行(當使用波前時)的第一個CTU,預測表使用PPS中傳輸的初始化項或0來初始化。當CU使用調色板模式編碼完後,預測調色板按下面步驟更新:首先,當前調色板的所有項都添加進預測表。然後,加入前面調色板中未在當前調色板中出現的項。這個過程持續到前面調色板中所有未使用項都加入了或者調色板達到最大尺寸。

對於索引的編碼,首先編碼標誌位palette_escape_cal_present_flag表示當前CU中是否存在escape index。編碼CU調色索引有兩種掃描順序:水平掃描和垂直掃描。

 

上圖是兩種掃描順序示意圖。下面以水平掃描爲例講解,如果是垂直掃描編碼前(或解碼後)CU索引要進行轉置操作。標誌位palette_transpose_flag表示掃描方向。

屏幕內容經常包含平坦區域,這些區域的像素值非常接近,像素的調色索引使用行程編碼效率非常高。此外,平坦區域連續行或連續列的索引可能都相同,爲了利用這個性質每個像素有兩種編碼模式COPY_INDEX_MODE和COPY_ABOVE_INDEX,在碼流中用palette_run_type_flag表示。

COPY_INDEX_MODE模式首先編碼一個索引(截斷二元碼),然後後面跟一個行程長度表示等於該索引的像素數量。

COPY_ABOVE_INDEX模式中從上一行復制索引,然後後面跟一個行程長度表示等於該索引的像素數量。該模式僅需要傳輸行程長度不需要傳輸索引值。

COPY_INDEX_MODE和COPY_ABOVE_INDEX的行程長度都可能跨過多行。

下圖是一個4x4塊編碼示例(4x4塊方便展示,實際運行使用調色板模式最小的塊爲8x8):

 

調色板生成

對每個CU使用改進的k-means clustering算法生成調色表(有損)。首先,調色表初始化爲空。然後,對CU中的每個像素計算離其最近的調色表項(用SAD度量)。如果SAD小於某個閾值則將該像素加到該表項對應的cluster,否則將該像素加入調色表作爲一個新項。當處理完CU中所有像素後,使用每個cluster的中心更新調色表項。由於調色板有尺寸限制(SPS中指定),如果調色表中項的數量超過最大限制,則去掉像素數量少的cluster對應的項,這些項對應像素的索引變爲escape index。

一旦調色板和CU中每個像素在調色板中的索引確定後,使用RDO技術確定palette_run_type_flag和行程值。

感興趣的請關注微信公衆號Video Coding

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章