H.266/VVC代碼學習46:自適應環路整形器(LMCS)

在VVC中,在環路濾波器之前,添加了一種稱爲色度縮放和亮度映射(LMCS:Luma mapping with chroma scaling)的編碼工具。
LMCS有兩個主要組成部分:
1)基於自適應分段線性模型的亮度分量的環路映射;
2)對於色度分量,應用依賴於亮度進行色度殘差縮放。

1 LMCS體系結構

下圖從解碼器的角度顯示了LMCS體系結構。
1、圖中的淺藍色方框表示在映射域中的處理位置:包括反量化,反變換,亮度幀內預測以及亮度預測與亮度殘差的加法運算。
2、圖中沒有陰影底紋表示在原始域(即不經過映射)中應用處理的位置:包括環路濾波器,運動補償預測,色度幀內預測,將色度預測與色度殘差相加,以及將解碼後的圖片存儲爲參考圖片。
3、圖中的淺黃色方框是新的LMCS功能塊,包括亮度信號的正向和反向映射以及與亮度有關的色度縮放過程。
與VVC中的大多數其他工具一樣,可以使用SPS標誌在序列級別啓用或禁用LMCS。
在這裏插入圖片描述

2 分段線性模型的亮度映射(LM:Luma mapping)

亮度分量的環路映射:通過在整個動態範圍內重新分配碼字來調整輸入信號的動態範圍,以提高壓縮效率。
亮度映射使用前向映射功能FwdMap和相應的逆向映射功能InvMapFwdMap函數使用具有16個相等片段的分段線性模型來表示。 InvMap函數是從FwdMap函數派生的,不需要發信號。

亮度映射模型在APS語法結構中用aps_params_type等於1時來發信號(LMCS_APS)。編碼的視頻序列中最多可以使用4個LMCS_APS,一幀只能使用1個LMCS_APS。
亮度映射模型使用分段線性模型發信號。分段線性模型將輸入信號的動態範圍劃分爲16個相等的片段,對於每個片段,其線性映射參數使用分配給該片段的像素值個數表示。(以10比特深度爲例。默認情況下,這16個片段中的每個片段都將分配有64個像素值。)

2.1 計算方式

用信號發送的像素值數量,可以用於計算比例因子並相應地調整該片段的映射函數。在slice級,用信號發送LMCS使能標誌,以指示是否將LMCS處理應用於當前Slice。如果爲當前Slice啓用了LMCS,則會在Slice標頭中發送aps索引信號,以標識承載亮度映射參數的APS。

FwdMap分段線性模型的第i個,(i = 0 … 15),由兩個輸入InputPivot[]和兩個輸出(映射)MappedPivot[]定義。假設10位視頻,SignalledCW [i]是第i個像素值的數量,則輸入InputPivot[]和輸出 MappedPivot[]如下計算:
在這裏插入圖片描述
1、對於幀間編碼塊,在映射域中執行運動補償預測。換句話說,在基於DPB中的參考信號計算了運動補償預測塊Y_pred之後,應用FwdMap函數將原始域中的亮度預測塊映射到映射域,Y’_pred = FwdMap(Y_pred)
2、對於幀內編碼塊,由於在映射域中執行幀內預測,​​因此不應用FwdMap函數,在計算了重建塊Y之後,應用InvMap函數將映射域中的重建亮度值轉換回在原始域中重建的亮度值(Y_i=InvMap(Y_r))。InvMap函數適用於幀內和幀間編碼的亮度塊。

2.2 構建LUT

可以使用查找表(LUT)或使用即時計算來實現亮度映射過程(正向和/或反向映射)
如果使用LUT,則可以預先計算並預先存儲FwdMapLUTInvMapLUT以在Tile級別使用,並且向前和反向映射可以簡單地應用查表操作,實現爲:
在這裏插入圖片描述
同樣可以使用即時計算作爲備選。以正向映射函數FwdMap爲例。爲了找出亮度樣本所屬的片段,樣本值右移了6位(相當於16個相等的片段)。然後,檢索該片段的線性模型參數並即時應用以計算映射的亮度值。
令i爲片段索引,a1,a2分別爲InputPivot[i]InputPivot[i+1],b1,b2分別爲MappedPivot[i]MappedPivot[i+1]FwdMap函數的計算如下:
在這裏插入圖片描述

InvMap函數可以以類似方式即時計算。通常,映射域中的片段大小不相等,因此,最直接的逆映射過程將需要進行比較,以便確定當前樣本值屬於哪個片段。這樣的比較增加了解碼器的複雜性。因此,VVC對輸出樞軸點MappedPivot[i]的值施加位流約束,如下所示:
假定映射域的範圍(對於10位視頻,此範圍爲[0,1023])分爲32個相等的片段。如果MappedPivot[i]不是32的倍數,則MappedPivot[i+1]MappedPivot[i]不能屬於32個相等大小的塊中的同一塊。例如:
MappedPivot[ i + 1 ] >> ( BitDepthY – 5)不應等於MappedPivot[ i ] >> ( BitDepthY – 5)
由於這種位流約束,InvMap函數也可以使用簡單的右移5位來執行。 (對應於32個相等大小的片段),以便找出樣本值所屬的片段。

3 與亮度相關的色度殘差縮放(CS:chroma scaling)

色度殘差縮放設計用於補償亮度信號及其相應色度信號之間的相互作用。
色度殘差縮放是否啓用也通過slice級別發出信號。如果啓用了亮度映射,則會發信號通知一個附加標誌,以指示是否啓用了亮度相關色度殘差縮放。不使用亮度映射時,將禁用與亮度有關的色度殘留縮放。此外,對於面積小於或等於4的色度塊,始終禁用與亮度相關的色度殘差縮放功能。

色度殘差縮放取決於當前VPDU頂部和/或左側重建的相鄰亮度的平均像素值。如果當前CU在幀間128x128,幀間128x64和幀間64x128之間,則針對與第一VPDU相關聯的CU導出的色度殘餘縮放比例因子用於該CU中的所有色度TU。將avgYr表示爲重建的相鄰亮度的平均像素值。 C_ScaleInv的值按以下步驟計算:
1)根據InvMap函數找到avgYr所屬的分段線性模型的索引 Y_Idx
2)C_ScaleInv = cScaleInv[Y_Idx],其中 C_ScaleInv[]是基於SignalledCW [i]的值和APS中彙總的偏移值(用於色度殘留縮放處理)預先計算的16個值的LUT。

與基於採樣執行的亮度映射不同,C_ScaleInv[]是整個色度塊的恆定值。使用C_ScaleInv[]時,色度殘差縮放按以下方式計算:
在這裏插入圖片描述

4 編碼器端LMCS參數估計

VTM編碼器中提供了一個非標準參考實現,以估算LMCS模型參數。由於VTM對SDR,HDR PQ和HDR HLG的處理方式不同,因此VTM7.0中的參考算法針對SDR,HDR PQ和HDR HLG序列的設計也有所不同。

1、對於SDR和HDR HLG序列,編碼器算法基於局部亮度方差,針對PSNR指標進行了優化。
2、對於HDR PQ序列,編碼器算法基於亮度值,針對wPSNR(加權PSNR)指標進行了優化。

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