RDO率失真優化

編碼器性能的高低可以從解碼後圖像的質量(失真度)和編碼後碼流的大小決定。

圖像失真度的評價指標有以下幾種:
平方誤差和SSD(sum of square difference):

SSD=x=0M1y=0N1|f(x,y)f(x,y)|2

絕對誤差和SAD(sum of absolute difference):
SAD=x=0M1y=0N1|f(x,y)f(x,y)|

其中f(x,y) 原圖像在像素點x,y處的值,f(x,y) 代表解碼後的圖像在x,y處的值。對比起來,SAD的運算少了很多乘法運算,相對來說運算沒那麼複雜。
均方誤差MSE(mean square error):
MSE=1MNx=0M1y=0N1|f(x,y)f(x,y)|2

在SSD的基礎上求了一個均值。
PSNR:
PSNR=10log10((2BitDepth1)2MSE)

由此可見PSNR是與MSE成反比的。BitDepth指像素的深度,一般是8bit或10bit。也可以發現,如果MSE無窮小,也就是說,基本上每個點在解碼後都和原圖像沒什麼誤差,PSNR就無窮大了,但這基本上是不可能的。因爲當PSNR等於99.99的時候,帶入上式(BitDepth取較大的10比特)可得MSE=25521010 ,爲了方便,我們就定義當MSE小於這個值的時候,PSNR強制取99.99,因爲MSE基本不可能取到那個值一下,因此不會影響計算。

PSNR往往和碼率BitRate一起來計算BD-Rate,用來衡量編碼器的性能。

圖像質量和碼流大小是不可兼得的,因此,我們需要做一個權衡。
公式

cost=ΔD+λR
其中ΔD=f(Mode)R=g(Mode) ,Mode是編碼器選擇的一些幀間幀內預測模式,R代表碼流的大小,也就是每秒編多少比特;ΔD 表示圖像失真,也就是編碼後圖像與編碼前圖像的偏差(可以參照之前的SAD等圖像失真度計算方法),對於硬件,更傾向於用SAD計算ΔDλ 是拉格朗日乘子,就是一個實係數而已。這個公式就是要求在R>R 的條件下,求最小的ΔD ,即求條件極值。其中的數學我們可以暫時忽略,總之,我們就是要計算不同模式下的cost的最小值,取之即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章