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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

样点自适应补偿(SAO)技术

發(fā)布時(shí)間:2024/8/1 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 样点自适应补偿(SAO)技术 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SAO : Sample adaptive offset

這是目前H265中比較熱門的技術(shù),根據(jù)以前的測(cè)試,SAO性價(jià)比遠(yuǎn)遠(yuǎn)超過Deblock和ALF 。

1、 SAO的概念

在圖像中像素值劇烈變化的邊界區(qū),經(jīng)過編碼-解碼重建之后通常會(huì)出現(xiàn)波紋狀的失真現(xiàn)象,這種失真稱作振鈴效應(yīng)。振鈴效應(yīng)產(chǎn)生的根本原因在于邊界區(qū)高頻分量在編碼過程中丟失。為了減少高頻分量的損失,同時(shí)不降低編碼的效率,HEVC引入了SAO技術(shù),從像素域入手對(duì)振鈴區(qū)域進(jìn)行補(bǔ)償。

SAO在流程中的位置,encoder端:



decoder端:



2、基本原理

SAO對(duì)重建圖像在deblocking之后操作,操作對(duì)象為重建完成的一幀,以一個(gè)CTB為一個(gè)基本單位。SAO所采用的方式主要有三類:邊界補(bǔ)償(BO)、邊帶補(bǔ)償(EO)和參數(shù)融合(Merge)。

通過PSNR的計(jì)算公式可以看到,重構(gòu)數(shù)據(jù)和原始YUV之間的差的平方和是決定PSNR的因素。SAO通過分析deblocking后的數(shù)據(jù)和原始YUV之間的關(guān)系來對(duì)deblock后的數(shù)據(jù)進(jìn)行delta操作,使得盡量接近原始YUV,達(dá)到提高PSNR的目的。

一個(gè)最基本的想法就是把deblock的重構(gòu)數(shù)據(jù)和原始YUV中每一個(gè)相同位置的pixel做差值,把這個(gè)差值傳給decoder,這樣可以完全恢復(fù)原始 YUV.但是這實(shí)際上是不現(xiàn)實(shí)的,如果每一個(gè)pixel都傳輸一個(gè)offset,這會(huì)導(dǎo)致碼率會(huì)非常的高,達(dá)不到壓縮的效果。(如同DPCM)

H265在碼率和PSNR之間做了一個(gè)tradeoff,以較小的碼率增加來提高PSNR。

(1)邊界補(bǔ)償

邊界補(bǔ)償通過比較當(dāng)前像素和相鄰像素的大小對(duì)當(dāng)前像素分類。相鄰像素的位置分為四種模式:水平、垂直、左上、右上:



當(dāng)為某個(gè)CTB選擇使用了上面某種梯度模式后,開始計(jì)算該CTB中的當(dāng)前sample P和相鄰2個(gè)pixel之間的關(guān)系,用edgeIdx表示:



因?yàn)閑dgeIdx的計(jì)算是針對(duì)deblocking以后的重構(gòu)圖像進(jìn)行的,encoder和decoder使用相同的方法來計(jì)算,因此不需要傳輸這個(gè)信息給decoder,而是可以由decoder自己來計(jì)算,這樣雖然增加了計(jì)算量,但是可以降低碼率。

對(duì)于edgeIdx 為0的flat area,可以不需要做任何操作。對(duì)于1~4,SAO為每一個(gè)edgeIdx分配了一個(gè)offset,這個(gè)offset會(huì)add到重構(gòu)像素中。因?yàn)镾AO不是為每一個(gè)pixel分配一個(gè)offset,而是先把pixel進(jìn)行梯度的計(jì)算,并且做edgeIdx的分類,對(duì)每一個(gè)edgeIdx類分配一個(gè)offset(對(duì)每一個(gè)CTB有4個(gè)offset就足夠),這樣可以減少碼率的消耗。另外,為了進(jìn)一步降低碼率,H265 SAO規(guī)定對(duì)于edgeIdx=1,2這兩種情況下,offset值必須是正數(shù);對(duì)于edgeIdx=3,4時(shí),offset必須是負(fù)數(shù)。通過這種強(qiáng)行的要求,符號(hào)位可以不進(jìn)行編碼。

(2)邊帶補(bǔ)償

帶狀補(bǔ)償將像素值強(qiáng)度等級(jí)劃分為若干個(gè)條帶,每個(gè)條帶內(nèi)的像素?fù)碛邢嗤难a(bǔ)償值。進(jìn)行補(bǔ)償時(shí)根據(jù)重構(gòu)像素點(diǎn)所處的條帶,選擇相應(yīng)的帶狀補(bǔ)償值進(jìn)行補(bǔ)償。

SAOencoder把有效的YUV取值范圍(0-255 fullRange, 16-235 BT601/709) 平均分為32個(gè)band(如下圖,如果是0-255,就是每一個(gè)band的范圍是8,一共分成32個(gè)band),通過某些算法(可以通過RDO確定)來選擇其中連續(xù)的4個(gè)band進(jìn)行補(bǔ)償,當(dāng)CTB中的sample的Luma/Chroma處于這4個(gè)選定的band中時(shí),需要對(duì)這個(gè)sample進(jìn)行補(bǔ)償(把該band相關(guān)的offset值加到sample的值上)。


encoder端如何選擇4個(gè)band:

從上面這個(gè)圖中可以看到這個(gè)原理:在encoder端會(huì)統(tǒng)計(jì)當(dāng)前CTB中的sample的Luma/chroma值,做32band的直方圖統(tǒng)計(jì),每一個(gè)band中包含的該YUV中的sample求均值,下面舉個(gè)例子:

比如假設(shè)有一個(gè)band是31-38,假設(shè)該CTB中有3個(gè)pixel的值在這個(gè)band中,分別為:

32

34

36

這樣可以知道原始YUV該CTB中的sample出現(xiàn)在這個(gè)band中的均值為(32+34+36)/3= 34;

對(duì)deblock后的重構(gòu)圖像同樣做這樣的處理,也求出該band中的均值,假設(shè)為32.

那么可見,deblocking后的重構(gòu)YUV和原始YUV在該CTB上,并且該band上有均值上的差值為34-32=+2. SAO因此可以分配band offset=+2 到這個(gè)band上,在decoder端,為每一個(gè)處于該band上的deblocking后的sample值加上2,這樣可以保證在該band上出現(xiàn)的重構(gòu)pixel和原始YUV上的該CTB的該band上的均值是相等的。

?

對(duì)32個(gè)band都做這樣的處理,最后選擇連續(xù)4個(gè),offset值最大的band作為最終確定的需要補(bǔ)償?shù)腷and。并且起始band值和4個(gè)band offset值寫到碼流中傳輸給decoder。通過這種band offset的方式,可以把均值差別最大的4個(gè)band補(bǔ)償成均值相等,來拉近原始YUV和重構(gòu)圖像之間的差值。

?

一個(gè)問題:為什么band offset 模式中只是選擇4個(gè)連續(xù)的band?

標(biāo)準(zhǔn)給出的答案是:

1. 在flat area部分,大部分的pixel的取值應(yīng)該會(huì)集中在很少的幾個(gè)band中,因此使用連續(xù)的4個(gè)band能夠覆蓋大部分的pixel。(也就是說如果對(duì)flat area的某一個(gè)CTB做直方圖的話,這個(gè)pixel會(huì)很集中在很少的幾個(gè)取值點(diǎn),因此使用4個(gè)連續(xù)band可以很好的覆蓋.

2. 因?yàn)閑dge offset模式使用了4個(gè)offset值,為了不增加碼率,band offset也復(fù)用了這4個(gè)offset值的syntax,這樣不需要另外再增加syntax來專門表示band offset。


(3)參數(shù)融合

參數(shù)融合模式表示某一個(gè)CTB,其SAO的參數(shù)可以直接使用某個(gè)相鄰CTB的參數(shù),只需要指定(標(biāo)識(shí),只需要傳送融合標(biāo)志位即可)是哪個(gè)相鄰塊(左方還是上方)。這樣可以進(jìn)一步降低碼率。需要注意的是因?yàn)镠265引入了TILE/SLICE結(jié)構(gòu),而tile是并行處理的,另外也不能跨SLICE,因此當(dāng)前CTB只有和left/TOP CTB處于同一個(gè)tile/SLICE時(shí)才能共享SAO參數(shù)。

需注意,在參數(shù)融合模式下,一個(gè)CTB的亮度CTB和色度CTB必須都采用融合相鄰塊(左或上)的參數(shù)。否則如果亮度和色度沒同時(shí)采用某相鄰塊的參數(shù),則是非融合模式。采用非參數(shù)融合,即亮度和色度分量獨(dú)立根據(jù)自身像素值特點(diǎn)選擇劃分模式及補(bǔ)償值,在這種情況下兩個(gè)色度分量共用相同的劃分模式。


3、SAO的意義

SAO是一在deblocking后的一個(gè)后處理步驟,會(huì)影響到inter prediction的參考幀值。SAO是對(duì)重構(gòu)像素進(jìn)行了PSNR提升的一個(gè)重要步驟,直接對(duì)luma/chroma值進(jìn)行非線性操作。H265 SAO做的tradeoff就是首先對(duì)CTB中的pixel進(jìn)行分類,再對(duì)每一個(gè)類別分別進(jìn)行處理,這樣避免了對(duì)每一個(gè)pixel直接進(jìn)行處理帶來的高碼率的代價(jià),從而轉(zhuǎn)換成了對(duì)分類后的類進(jìn)行的處理,而分類的類別的數(shù)目是比較少的,對(duì)于band offset和edge offset都是4個(gè)類別。因此只是需要提供4個(gè)offset值就足夠。

大量模擬測(cè)試和資料顯示,SAO平均可以節(jié)約2%到6%的碼率,而編解碼的復(fù)雜度只增加2%左右!SAO主要目的和操作原理減少源圖像與重構(gòu)圖像之間的失真。如果只看這點(diǎn),實(shí)際上每幀編碼后的碼率反而會(huì)增加,因?yàn)槎嗔薙AO的相關(guān)語法和語義以及補(bǔ)償值的編碼!其實(shí)不然,雖然當(dāng)前幀的碼率增加了幾個(gè)字節(jié)或者幾個(gè)bit,但是這點(diǎn)增加碼字使得源圖像與重構(gòu)圖像的失真減少,使接下來的預(yù)測(cè)殘差更小了,從而大大的降低碼率了!

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。