1. 程式人生 > 實用技巧 >一種高效全零塊檢測方法

一種高效全零塊檢測方法

一種自適應低複雜度全零塊檢測演算法。主要是為了提高基於SATD閾值的自適應檢測方法的檢測精度,節省RDO檢測時間。在傳統的SATD檢測失敗後,提出了一種自適應搜尋時域低頻最大變換系數幅值的全零塊檢測方法。

文章目錄


引言

  在變換量化之前提早地檢測出全零塊無疑是非常有必要的。現有的全零塊檢測技術大多數是使用SAD或SATD來設計基於一些附加條件的閾值。

一種高效的AZB檢測演算法

  一般來說,真全零塊表示在均勻量化後,一個塊的係數全部被量化為0;偽全零塊表示一個塊被進一步經過RDOQ後,係數被量化為0;除此之外就是非全零塊。

1.真全零塊檢測

  首先,一個真全零塊的量化係數應當小於1。
  要提早檢測真全零塊,就需要在變換之前做文章。那麼就來對變換系數設定閾值,即:在這裡插入圖片描述
  因此,對於一個塊內所有變換系數,就有:在這裡插入圖片描述
  即:在這裡插入圖片描述
  這樣就有了第一個用於檢測真全零塊的閾值:在這裡插入圖片描述
  對於變換方式的選擇,較大的TU(16x16、32x32)使用4x4和8x8的哈達瑪變換來模擬DCT,8x8和4x4TU直接用DCT變換,這樣區分的目的還是減小由DCT帶來的計算複雜度。
  對於預測殘差來說,一般是服從高斯分佈或者拉普拉斯分佈,所以,就需要由此來推出殘差分佈與變換系數之間的對應關係。
在這裡插入圖片描述
  大致如上圖推導過程,可得一個閾值。最終檢測真全零塊的閾值就是:在這裡插入圖片描述

2.偽全零塊檢測

  如下圖所示,隨著TU尺寸的增大,G-AZB和P-AZB都會變少。尤其是對於32x32這樣的大尺寸TU,幾乎沒有G-AZB,這也就是說,沒有基於RDO的軟判決量化,32x32TU量化為全零塊的可能非常小。
在這裡插入圖片描述
  但是,基於RDO的AZB檢測非常耗時,因此提出了一種自適應檢測每個時間點最大變換系數的方法。
  具體來說,就是在RDOQ中,引入簡化的均勻量化,來提供出預選的量化level(UQ level),然後基於RDO從這些候選值中選擇最優的一個。然而,只有UQ level為1或者2的候選值最終才被確定為0。如下圖所示,所有非零UQlevel都低於2,並且只有所有UQlevel都小於2的TU才能被編碼為P-AZB。

在這裡插入圖片描述

  為減少係數搜尋負擔,把每個TU分成低頻區域和高頻區域。實際上,通過平衡搜尋成本和檢測精度,低頻區域和高頻區域的界限是基於QP來決定的。當QP比較低的時候,會有更多的非零UQ level,並且搜尋區域應當比低位元率時大。因此,為TU左上角低頻區域的塊寬或塊高設計了一個確定性方案:在這裡插入圖片描述
  考慮到只有UQlevel為1和2時,TU才有機會被RDOQ確定為0,並且較大系數出現在低頻區域也是常見的情況,因此,我們只關注低頻區域並且保證最大絕對UQlevel在2以內這一觀點是合理的。
  為節省UQ過程的計算,我們同樣基於變換系數而不是UQlevel來制定檢測閾值。因此就有:在這裡插入圖片描述

3.全零塊檢測程式設計總結

  對於當前TU的殘差資料,用flag來標誌當前TU是否是全零塊:
1.用下式作為變換核:在這裡插入圖片描述
2.儲存SATD的值和變換系數
3.如果SATD滿足:在這裡插入圖片描述
那麼把flag設為1,表示當前TU是全零塊(G-AZB);
否則,如果在這裡插入圖片描述
滿足在這裡插入圖片描述
那麼也把flag設為1,表示當前TU也是全零塊(P-AZB);
否則,如果以上兩種情況都不滿足,那麼設flag為0,表示當前TU是非全零塊。