日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

HEVC中的样点自适应补偿——Sample Adaptive Offset (SAO)

發布時間:2024/8/1 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HEVC中的样点自适应补偿——Sample Adaptive Offset (SAO) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么需要SAO

當變化塊尺寸較大時,容易出現振鈴效應,SAO就是用來削弱這種效應的。

SAO首先利用分類器將樣點分類,然后根據類別對樣點值加上一個偏移值。

樣點的類別下標以及偏移值會被編碼到碼流中。

HEVC中有兩種SAO type,edge offset(EO) 和 band offset(BO),其中EO是根據樣點值與周圍樣點值的關系來分類,而BO是根據樣點本身的值來分類。

HEVC中以CTU為單位進行SAO,不同的CTU可以使用相同的SAO參數(也就是region merging),一個CTU包含的色度CTB共享SAO type,但是可以有不同的偏移值。

Edge Offset(EO)


上圖表示的是編碼中的振鈴效應,橫軸表示像素坐標,縱軸表示像素值,虛線代表實際值,實線代表編碼后的結果??梢钥吹?#xff0c;原本應該是邊緣的地方現在卻出現了波動。

那么怎么去除這種效應呢,很直觀的想法就是對樣點加上一個偏移值,讓虛線靠近實線,如對波峰處的樣點加上負的偏移,對波谷處的樣點加上正的偏移值。

EO有四種分類器,如下圖:

其中c代表當前樣點,a和b是其相鄰樣點,如果一個CTB是EO類型,那么它會在這四種分類器中選擇一個(根據RDO),并將下標進行編碼。

當一個CTB在上面四種分類器選擇某種方向的分類器后,該CTB里的所有樣點會根據相鄰樣點的情況被分為5類,分類規則如下表:

其中1到4類是需要進行偏移補償的情況,如下圖所示:

可以看到類別1和2需要正偏移補償,3和4需要負的偏移補償,這樣才會使得圖像更平滑,消除振鈴。

上面四種情形分別對應一種特定的偏移量,在編碼時只需要對偏移量的絕對值進行編碼,而偏移的正負可以通過類別的序號隱式獲得。

總結一下EO時需要傳輸的語法元素:首先是CTB使用EO的標志(色度分量可以共享一個標志),然后對每個CTB而言,要傳方向分類器的下標,以及對應的四個類別的偏移絕對值。

Band Offset(BO)

BO的示意圖如下:

橫坐標是樣點的位置,縱軸是樣點值,虛線是真實像素值,實線是編碼出來的像素值??梢钥吹?#xff0c;編碼結果與真實值存在著一定的偏差,從圖中看,將實現往下移一段距離可以減小這種偏差。BO就是將樣點值分為不同的band,然后對不同的band偏移不同的值來削弱振鈴效應。

一個CTU如果SAO type是BO,那么首先樣點會根據樣點值被分為32個等間距的band,對于常見的8bit像素(0-255),每個band的寬度就是8。對于CTB里面的樣點,每個樣點都會屬于一個特定的區間。在HEVC里面,只會選取4個相鄰的band進行補償。因為一個CTB里面的樣點值的范圍一般都是比較小的。
如下圖所示:

4個相鄰的band是通過最小的band下標來表示的。如上圖,只需要編碼下標k,就可以知道是band k, k+1,k+2,k+3這范圍內的樣點值需要補償。

假如現在通過RDO選擇k為1,那么需要補償的范圍就是像素值為8到39的樣點。對于每個band,補償的偏移不同,可正可負,即最終還要傳輸四個band對應的偏移值。而對CTB中像素值處于某個band所表示范圍的樣點而言,都需要加上對應的偏移值作為SAO之后的值。

SAO merge

在低延時應用中,不同的CTU可以使用相同的SAO參數,這樣可以降低復雜度。一個CTU可以使用其上方或者左方相鄰的CTU的SAO參數。主要是通過sao_merge_left_flag和sao_merge_above_flag來表示的。

SAO相關的語法元素

SPS里會有sample_adaptive_offset_enabled_flag,來表示當前序列是否使用SAO

Slice Header里面會有slice_sao_luma_flag和slice_sao_chroma_flag,來表示當前Slice不同亮度和色度的SAO是否使用

CTU的開始會編碼sao_merge_left_flag和sao_merge_above_flag,如果使用merge,則三個分量都使用merge

如果CTU沒有SAO 參數 merge,那么就會編碼新的SAO參數,如下圖:

首先是亮度分量的SAO type,

  • 要么是EO,BO或者是不進行SAO,
  • EO則編碼offset絕對值和EO的類別(就是哪個方向的分類器),BO則編碼offset的值和band的起始位置

接下來就是亮度和色度,它們共享SAO type,如果是EO,還共享EO的類別,BO則不共享band的起始位置

總結

以上是生活随笔為你收集整理的HEVC中的样点自适应补偿——Sample Adaptive Offset (SAO)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。