環路濾波(五):SAO

樣點自適應補償(Sample Adaptive Offset,SAO)用於消除振鈴效應。振鈴效應是由於高頻交流係數的量化失真,解碼後會在邊緣周圍產生波紋的現象,變換塊尺寸越大振鈴效應越明顯。如下圖所示,虛線是原始像素值,實線是重構像素值。

 

造成振鈴效應的根本原因是高頻信息的丟失。SAO的基本原理就是對重構曲線中的波峯像素加上負值進行補償,波谷像素加上正值進行補充。

SAO以CTB爲基本單位,包括兩大類補償形式:邊界補償(Edge Offset,EO)和邊帶補償(Band Offset,BO),此外還引入了參數融合技術。

邊界補償

邊界補償技術是通過將當前像素和相鄰像素進行比較然後歸類,然後對同類像素補償相同數值。爲了均衡複雜度和編碼效率,EO採用1維3像素分類模式。

根據選取的像素位置差異,EO有4種模式:水平方向EO_0、垂直方向EO_1、135°方向EO_2、45°方向EO_3。如下圖所示,c是當前像素,ab是相鄰像素。

 

 

4類的形狀如下圖所示:

 

邊界補償技術首先根據上面的規則將CTB中所有像素分爲5類,然後對種類1、2、3、4的像素進行補償,即增減一定數值,對種類0的像素不進行補償。不同種類像素補償值可以不同,但同一類像素補償值必須相同。

實驗表明大部分補償值的符號與種類相匹配,所以可以根據種類對補償值進行限制:種類1、2補償值大於等於0,種類3、4補償值小於等於0。所以碼流中只需傳輸補償值的絕對值,解碼器可以根據像素所屬類別判斷符號。

邊帶補償

邊帶補償根據像素值大小進行分類,它將像素分爲32個等長的邊帶。例如8比特像素,像素值範圍0~255,則每個邊帶包含256/32=8個像素值,即像素值屬於[8k,8k+7]範圍屬於第k個邊帶,k=0...31。同一邊帶使用相同補償值。

一般情況下,在一定區域內像素值波動範圍很小,一個CTB中大多數像素屬於少數幾個邊帶。H.265/HEVC規定一個CTB只能選擇4條連續的邊帶,且只對屬於這4條邊帶的像素進行補償。可以通過率失真優化決定選擇哪4條邊帶,然後將最小邊帶號及4個補償值傳到解碼端。

 

參數融合

參數融合(Merge)是指對於一個CTB,其SAO參數可以直接使用相鄰塊的SAO參數,這時只需標識採用了哪個相鄰塊的SAO參數即可。

 

如上圖所示,當對C進行SAO參數決策時,A和B的SAO參數已經確定。此時C的SAO參數有以下3種選擇:

  1. 直接使用A塊的參數。

  2. 直接使用B塊的參數。

  3. 通過分析自身像素的特點,選擇不同於A和B的參數。

enum SAOModeMergeTypes
{
  SAO_MERGE_LEFT =0,
  SAO_MERGE_ABOVE,
  NUM_SAO_MERGE_TYPES
};

當一個CTU使用參數融合時,其亮度和色度分量必須同時使用同一個相鄰塊的對應參數。否則,採用非參數融合技術,亮度和色度可以獨立的根據自身像素特點選擇劃分模式和補償值,此時兩個色度分量共用相同劃分模式。

語法結構

H.265/HEVC中規定的SAO的語法結構如下圖所示:

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

 

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