SAD和SATD的區別與幾個名詞解釋

 

SAD和SATD的區別與幾個名詞解釋

Q:如果不用率失真最優化,爲什麼選擇SATD+delta×r(mv,mode)作爲模式選擇的依據?爲什麼運動估計中,整象素搜索用SAD,而亞象素用SATD?爲什麼幀內模式選擇要用SATD?
A:
   SAD即絕對誤差和,僅反映殘差時域差異,影響PSNR值,不能有效反映碼流的大小。SATD即將殘差經哈德曼變換的4×4塊的預測殘差絕對值總和,可以將其看作簡單的時頻變換,其值在一定程度上可以反映生成碼流的大小。因此,不用率失真最優化時,可將其作爲模式選擇的依據。
   一般幀內要對所有的模式進行檢測,幀內預測選用SATD的原因同上。
   在做運動估計時,一般而言,離最優匹配點越遠,匹配誤差值SAD越大,這就是有名的單一平面假設,現有的運動估計快速算法大都利用該特性。但是,轉換後SATD值並不滿足該條件,如果在整象素中運用SATD搜索,容易陷入局部最優點。而在亞象素中,待搜索點不多,各點處的SAD差異相對不大,可以用SATD選擇碼流較少的匹配位置。
    ·幾種常見的算術名詞縮寫。
SAD(Sum of Absolute Difference)=SAE(Sum of Absolute Error)即絕對誤差和
SATD(Sum of Absolute Transformed Difference)即hadamard變換後再絕對值求和
SSD(Sum of Squared Difference)=SSE(Sum of Squared Error)即差值的平方和
MAD(Mean Absolute Difference)=MAE(Mean Absolute Error)即平均絕對差值
MSD(Mean Squared Difference)=MSE(Mean Squared Error)即平均平方誤差

衆所周知,評價編碼效率的有兩大指標:碼率和PSNR。碼流越小,則壓縮率越大;PSNR越大,重建圖像越好。在模式選擇的時候,判別公式實質上也就是對二者的綜合評價。

首先以RDO爲例,模式對應的代價:J(mode)=SSD+λ*R(ref,mode,mv,residual)

這裏,SSD是指重建塊與源圖像的差值均方和;λ是拉格朗日乘子,就當是權值吧^_^;R就是該模式下宏塊編碼的實際碼流,包括對參考幀、模式、運動矢量、殘差等的比特總和。當然如果是幀內模式,就只有R(mode,residual)。

很多人迷惑的是,改宏塊還沒編碼啊,怎麼知道它的碼流和重建圖像?實際上,RDO就是對每個模式都實際編碼一次,得到J(mode),然後選擇J(mode)最小的模式爲實際編碼模式。就像編碼器引入了一個大反饋,這也正是JM選用RDO編碼起來龜速的原因,當然,編碼效率最佳。

後來,“隨意”注意到,不論熵編碼選用cavlc還是cabac,各個模式下的residual編碼都使用cavlc,這就是說選用cabac,模式選擇時得到的R不是實際的R,爲什麼此時不用cabac呢?難道cabac複雜麼?我的看法是因爲cabac會對模型表更新數據。解碼端是沒有模式選擇模塊的,如果編碼端此時使用cabac,會造成編解碼端模型表不匹配,不能正常解碼。

λ的取值是根據實驗得到的。使用B幀與使用B幀的λ值是不一樣的。具體值忘了,^_^,看相關文章。

前已所述,RDO包含各模式的實際編碼過程,也就是變換量化、熵編碼、反變換反量化、重建等,計算量是相當大的,實時編碼領域不可能直接使用。因此,就有了下面的替代公式:

J(mode)=SAD+λ*R(ref,mode,mv)

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

這裏SAD就是該模式下預測塊與源圖像的絕對誤差和。比特R中少了對residual的編碼,也就是運動估計後就可以直接得到該模式的J(mode)值,極大的減少了運算複雜度。SATD就是對殘差進行哈德曼變換後的係數絕對和,在大多數情形下,SATD比SAD評價效果更好些,我對foreman CIF圖像的測試,psnr增加了約0.2db,碼流差不多。當然,SATD比SAD多了個變換,計算量大些。

注意,此時的λ與RDO的λ取值是不一樣的。

容易困惑的還有,運動估計的匹配準則,很多運動估計的論文中都直接是SAD或SSE。編碼器中對殘差、MV、ref都要編碼,所以匹配準則也就是SAD和碼流R的綜合評價!!!在同一個模式下,參考塊與編碼塊的不同信息有ref、MV,故匹配準則爲:

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

 

最後,附上我以前在羣“H264樂園”中的帖子,

Q:如果不用率失真最優化,爲什麼選擇SATD+delta×r(mode,ref,mv)作爲模式選擇的依據?爲什麼運動估計中,整象素搜索用SAD,而亞象素用SATD?爲什麼幀內模式選擇要用SATD?

A:
   SAD即絕對誤差和,僅反映殘差時域差異,影響PSNR值,不能有效反映碼流的大小。SATD即將殘差經哈德曼變換的4×4塊的預測殘差絕對值總和,可以將其看作簡單的時頻變換,其值在一定程度上可以反映生成碼流的大小。因此,不用率失真最優化時,可將其作爲模式選擇的依據。
   一般幀內要對所有的模式進行檢測,幀內預測選用SATD的原因同上。
   在做運動估計時,一般而言,離最優匹配點越遠,匹配誤差值SAD越大,這就是有名的單一平面假設,現有的運動估計快速算法大都利用該特性。但是,轉換後SATD值並不滿足該條件,如果在整象素中運用SATD搜索,容易陷入局部最優點。而在亞象素中,待搜索點不多,各點處的SAD差異相對不大,可以用SATD選擇碼流較少的匹配位置。

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