x264宏塊模式選擇

x264宏塊模式選擇

評價編碼效率有兩個指標:碼率和解碼圖像質量。最好結果是碼率小而質量高,但這基本上是不可能的,碼率和質量一般是反比的關係。因此編碼器編碼過程就是對這兩個因素的平衡過程。率失真優化RDO(Rate Distortion Optimization)就是在這種情況下提出來的編碼優化方案。

        J(mode) = SSD+λ*R(mode, ref, mvd, residual)

        SSD(Sum of Squared Difference)是指重建塊與源圖像的差值平方和,它表徵了編碼質量,SSD低就相當於編碼質量高;

        R(mode, ref, mvd, residual)是宏塊模式,參考幀ID,運動矢量差,以及殘差數據經熵編碼後的比特數,它表徵了碼流大小;

        λ是拉格朗日乘子,是SSD與碼流兩個不同量綱的物理數據平衡權值。

使得J(mode)取得最小值的{mode, ref, mvd}組合就是RDO的最優選擇結果。可以看出爲了得到這個最優結果,需要對各種宏塊模式和每一個參考幀、參考塊都編碼一遍(得到R(residual)),這將是極爲耗時的事情。JM編碼器就是用這種RDO,因此編碼速度非常的慢。同時由於殘差數據的編碼比特數和量化係數QP相關,因此R(mode,ref,mvd)也需要和QP相關,以平衡R(mode,ref,mvd)和R(residual)。


爲了減少RDO的計算量,在X264裏面使用了

        J(mode) = SATD+λ*R(mode, ref, mvd)

       其中省略了表徵殘差數據比特的R(residual),也就是不需要對每一個候選模式都編碼一遍,這樣大大的降低了計算量。同時爲了彌補省略R(residual)而對公式造成的不準,將SSD改爲SATD。
SATD(Sum of Absolute Transformed Difference)是Hadamard變換後的結果絕對值求和,Hadamard變換是一個非常簡單的時頻變換,其值與殘差編碼輸出比特數成正比,在一定程度上可以反映生成碼流的大小。



另外在運動估計的匹配準則,

Jmotion=SAD/SATD+λ*R(ref,mv)

在做運動估計時,一般而言,離最優匹配點越遠,表徵匹配誤差的絕對誤差和SAD(Sum of Absolute Difference)就越大,這就是有名的單一平面假設,現有的快速運動估計算法大都利用該特性。但是SATD值並不滿足該條件,如果在整象素運動估計中運用SATD搜索,容易陷入局部最優點。而在亞象素中,待搜索點不多,各點處的SAD差異相對不大,可以用SATD出選擇碼流較少的匹配位置。
因此在整數點運動估計的時候一般使用SAD;在分數點運動估計的時候使用SATD。


原文來源:
RDO,SAD,SATD,λ?
發佈了40 篇原創文章 · 獲贊 7 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章