一種自適應低複雜度全零塊檢測演算法。主要是為了提高基於satd閾值的自適應檢測方法的檢測精度,節省rdo檢測時間。在傳統的satd檢測失敗後,提出了一種自適應搜尋時域低頻最大變換係數幅值的全零塊檢測方法。
在變換量化之前提早地檢測出全零塊無疑是非常有必要的。現有的全零塊檢測技術大多數是使用sad或satd來設計基於一些附加條件的閾值。
一般來說,真全零塊表示在均勻量化後,乙個塊的係數全部被量化為0;偽全零塊表示乙個塊被進一步經過rdoq後,係數被量化為0;除此之外就是非全零塊。
首先,乙個真全零塊的量化係數應當小於1。
要提早檢測真全零塊,就需要在變換之前做文章。那麼就來對變換係數設定閾值,即:
因此,對於乙個塊內所有變換係數,就有:
即:
這樣就有了第乙個用於檢測真全零塊的閾值:
對於變換方式的選擇,較大的tu(16x16、32x32)使用4x4和8x8的哈達瑪變換來模擬dct,8x8和4x4tu直接用dct變換,這樣區分的目的還是減小由dct帶來的計算複雜度。
對於**殘差來說,一般是服從高斯分布或者拉普拉斯分布,所以,就需要由此來推出殘差分布與變換係數之間的對應關係。
大致如上圖推導過程,可得乙個閾值。最終檢測真全零塊的閾值就是:
如下圖所示,隨著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的殘差資料,用flag來標誌當前tu是否是全零塊:
1.用下式作為變換核:
2.儲存satd的值和變換係數
3.如果satd滿足:
那麼把flag設為1,表示當前tu是全零塊(g-azb);
否則,如果
滿足那麼也把flag設為1,表示當前tu也是全零塊(p-azb);
否則,如果以上兩種情況都不滿足,那麼設flag為0,表示當前tu是非全零塊。
Linux使用者程序記憶體洩露一種檢測方法
在 linux 中,使用者程序在 proc status 檔案中記錄了該程序的記憶體使用實時情況。vmsize 虛擬記憶體大小。整個程序使用虛擬記憶體大小,是 vmlib,vmexe,vmdata,和 vmstk 的總和。vmlck 虛擬記憶體鎖。程序當前使用的並且加鎖的虛擬記憶體總數 vmrss ...
棧使用量的一種檢測方法
我又有想法辣,今天的想法的目的是實現棧的使用量的檢測方法。1 利用 map檔案定位棧頂位址,並且得到棧的使用量大小 2 定義乙個全域性變數,用於儲存棧區記憶體上電時候的預設值,這個預設值我定義為棧頂記憶體值 3 在大迴圈裡面從棧頂位址開始,將棧記憶體裡面的值和第二步中的值進行比較,如果不相等,則認為...
VC 記憶體洩露與檢測的一種方法
本文介紹,當vc 或者mfc程式,出現記憶體洩露時,如何快速定位的方法,這種方法有一定的侷限性,在注意事項中會給出的。當mfc程式出現記憶體洩露時,退出程式時的vs除錯輸出視窗,一般會有如下顯示 上面顯示了在程式的哪個檔案的哪行語句,發生了記憶體洩露,其中 表示 記憶體分配編號 normal blo...