關鍵詞: 編碼 , 幀間預測
1 引言
在H.264視頻編碼中,對于幀間預測,一個16×16的宏塊(MB)可分成16×16,16×8,8×16,8×8進行運動估計,其中8×8還可以進一步分為8×4,4×8,4×4的子塊。這樣,每個細分的模塊都去尋找更精確的匹配塊,可以增加預測精度提高壓縮率。但是,由于每種分類都要進行運動估計,這樣做直接的代價就是巨大的計算量。
針對多模式預測帶來的計算量增加的問題,近年出現的幀間模式選擇算法得到了深入的研究,其中利用閾值提前截止的模式選擇的思想得到非常廣泛的應用,在只有較小性能損失的代價下,減小計算復雜度。如文獻提出如果發現16×16模式已經適用,就直接跳過對16×8和8×16的模式檢查,否則全搜索;文獻提出利用多級閾值,且閾值依QP變化的方法等。本文的研究也基于通過閾值預判的方法進行宏塊選擇。
2 幀間模式快速選擇算法
2.1 幀間模式選擇使用自適應閾值的算法
利用閾值進行預判確實可以在視頻質量下降可忽略情況下使編碼復雜度盡量降低,然而以上方法有一定的局限性。文獻中提出的算法只考慮了3種模式,在很多情況下仍然使用全搜索,文獻雖然提出了可變的閾值,但是它的閾值只是隨著QP變化而變化的,并沒有考慮到不同視頻自身的特性。由于不同視頻序列特點不同,即使是同一個視頻序列內部的不同幀也有著不同的特點,而影響閾值的因素又較多。基于以上觀點,本文提出了一種利用統計分類的方法,通過對幀間預測模式進行分類,并選取自適應閾值對宏塊模式進行選擇。
一般情況下16×16模式使用率最高并且其SAD(Sum of Absolute Difference)值一定會經過計算,所以可建立16×16模式的SAD值(文中簡稱sad16)和最終選擇的模式之間的關系,這是一個標準的模式分類問題。筆者通過視頻中相鄰幀之間的時間相關性,通過前一幀的模式對應的sad16分布情況,訓練得到下一幀的閾值,從而對下一幀的宏塊模式進行選擇。具體方法如下:
1) 分類
首先將H.264的多種幀問模式分為兩類:BSM(BigSize Mode),包括16×16,16×8,8×16模式,SSM(SmallSize Mode),包括8×8,8×4,4×8,4×4。經過對一些CIF格式的測試視頻序列的統計可以發現,一般情況下BSM的概率要大于SSM的概率(見表1),又由上文所述,SSM的計算量更大,所以可以在BSM和SSM之間設置一個閾值T,代表了對模式預測精度的可接受程度。如果小于閾值T則該宏塊只選擇BSM,如果大于閾值T則該宏塊對兩種模式都進行計算。
2) 統計
分別計算兩種模式下的sad16,經過測試發現sad16值普遍小于8 000,為了便于統計,將計算得到的sad16值左移7位即除以128,將sad16分布在64個取值區間內。按照原始模式選擇算法對一幀中的每個宏塊進行模式選擇,記錄其對應的sad16值,從而統計該幀中每個模式對應的不同sad16區間內宏塊個數的分布。由于SSM的值比較小,為了便于觀察,將其統計結果乘以10。公式如下
式中:k為sad16的64個取值區間,取值為[0,63];sad16∈k代表sad16值在區間k內;若該宏塊被判斷為BSM模式則nBSM=1,nSSM=0;若該宏塊被判斷為SSM模式則nSSM=1,nBSM=0。圖1和圖2分別為兩種較具代表性的CIF序列foot-ball和foreman相鄰兩幀的統計分布圖。
由圖1,2的統計結果可以看出:取BSM模式的宏塊占大多數,且對應的sad16主要分布在較小值區域,在較大值區域也存在但較少;而取SSM模式的宏塊占少數,且對應的sad16主要分布在較大值區域,但是數量不多(圖1,2中SSM模式已乘10)。通過其他一些測試序列也可以得到相同結論。因此,可通過取一個閾值T,在只計算sad16的情況下,判斷該宏塊是否可直接決定為BSM模式。當sad16T時,既計算BSM模式也計算SSM模式。由圖1,2中還可看出,不管是運動較劇烈的football序列還是運動較平緩的foreman序列,任取的相鄰兩幀的分布圖都非常相似,所以可以基于序列相鄰兩幀間的時間相關性,利用前一幀的分布來預測下一幀的閾值。
3) 誤判率
本算法對計算量的節省較多,而且視頻質量幾乎沒有下降,其代價是一些SSM模式的宏塊被判斷為BSM,而損失了一些壓縮率。如圖3所示,閾值取T時,陰影部分所示本應為SSM,但由于sad16在閾值T左面,而被判斷為BSM,雖然陰影部分屬于誤判部分,但是由于陰影部分在閾值左面,屬于sad16相對較小區域,所以最終的SAD變化較小,壓縮率損失不大。則選取閾值的標準就是:使BSM模式盡量多地在閾值T左面,以減少判決時間;使SSM模式盡量在閾值右面,以減少損失的壓縮率。
2.2 4種自適應閾值選取方法
基于上文分析的選取閾值的標準,如何根據前一幀的統計結果設置下一幀的閾值有很多種方法,本文初步提出了4種閾值計算的方法:
1) 最小值閥值法(minimum value thresh,MVT)
該方法取BSM曲線的最大sad16,取SSM曲線的最小sad16,然后取兩者之中較小的一個作為閾值,如圖4所示。
閾值計算公式為
MIN(sad16,SSM)一般是取SSM時sad16的最小值,而為了避免有些幀不存在SSM的情況,選取MAX(sad16,BSM)進行比較,取二者最小值。由于MIN(sad16,SSM)一般是不斷變大的,而MAX(sad16,BSM)的值本身就很大,所以可以給它們乘以一個小于1的比例因子,以控制它的大小。則修正后的閾值計算公式為
式中:α1,α2∈(0,1)為修正系數,可取α1=1/2,α2=3/4。
2) 面積百分比閾值法(area percent thresh,APT)
該方法計算BSM曲線的總面積,取該總面積的β%的面積所對應的sad16作為閾值,如圖5所示。
閾值計算公式為
式中:β∈(0,100)為面積百分比因子,取β=75效果較好。
3) 最高點閾值法(highest point thresh,HPT)
該方法取BSM曲線中達到的最高點所對應的sad16作為閾值,如圖6所示。
閾值計算公式為
4) 衰減因子閾值法(attenuation factor thresh,AFT)
該方法取BSM曲線中達到的最高點,越過最高點后,取該高度的(1-ω)高度所對應的sad16作為閾值,如圖7所示。
閾值計算公式為
式中:ω∈(0,1)為衰減因子,取ω=0.75效果較好,可取TAFT>THPT的值。
本文只是實驗了4種計算閾值的方法,利用本文2.1得到的統計圖以及模式分類思想還可使用其他計算方法得到可用的閾值。
2.3 算法流程
由上一幀宏塊級別的步驟4記錄的每個宏塊的信息,按照本文所述幾種方法,計算本幀inter模式選擇需要的閾值T,并利用T對本幀中的每個宏塊進行分類,具體步驟如下:
1) 將16×16,16×8,8×16作為備選模式,計算sad(16×16),sad(16×8),sad(8×16),取最小值設為sadmin;
2) 若sadmin
3) 將16×16,16×8,8×16,8×8(其中8×8包括子塊subblock 8×4,4×8,4×4)作為備選模式,計算sad(8×8),與之前計算的sad(16×16),sad(16×8),sad(8×16)比較,求之中的最小值,選擇該模式,跳至步驟4;
4) 結束該宏塊模式選擇,記錄該宏塊相關信息以備計算下一幀閾值。
3 仿真結果
仿真條件:先用MPEG-2編碼器對6個CIF(352×288)序列mobile,football,bus,news,table,foreman的前100幀進行MPEG-2編碼,設定參數N=12,M=3,碼率6 Mbit/s得到源視頻。轉碼過程參考MPEG-2解碼器和T264編碼器實現。幀率為30 f/s,OP為30,GoP為200。實驗平臺為Intel P4 2.0 GHz,內存512 Mbyte,操作系統為Windows XP。使用自適應閾值算法且其中的閾值為最小值閾值方法,簡稱ATH_MVT,其他簡稱類似。經實驗得到最佳經驗因子:ATH_APT算法中取β=75,ATH_AFT算法中取ω=0.75。仿真結果見表2(給出3個典型序列:較多細節的mobile,運動較劇烈的football,較平穩的news的結果,其他序列結果略)。
由仿真結果可知:
ATH_MVT方法在搜索時間和編碼時間的減少上性能一般,除運動較劇烈的football序列外,其搜索時間減少大都在38%以上,其編碼時間減少大都在26%以上。該方法PSNR下降在0.01dB以內,碼率(bitrate)上升在0.39%以內,性能損失較小。
ATH_APT方法在搜索時間和編碼時間的減少上具有較好的性能,其搜索時間減少大都在45%以上,其編碼時間減少大都在30%以上,值得一提的是,對于運動相對較劇烈的football序列,它比其他方法更好的省時效果;該方法PSNR下降在0.01 dB以內,碼率上升在1.1%以內,性能損失稍大。
ATH_HPT方法在搜索時間和編碼時間的減少上對于所有序列都是最差的,其搜索時間減少最低為7%左右,其編碼時間減少最低為5%左右;該方法視頻質量最佳,PSNR值不低于原始算法,碼率上升在0.47%以內,性能損失較小。
ATH_AFT方法在搜索時間和編碼時間的減少上有最好的性能,除football序列外,其搜索時間減少大都在50%以上,其編碼時間減少大都在30%以上。該方法視頻質量較佳,PSNR值基本等于原始算法,碼率上升在0.15%以內,性能損失很小。
圖3中的陰影部分為SSM的誤判部分,利用公式
將使用了自適應閾值算法判定的SSM個數與原算法中判定的SSM的個數作比較得到的誤判率見表3(依然只列出3個典型序列)。其中TH_HPT(使用最高點閾值法的原算法)的誤判率相對較小,其他3種方法的誤判率相對稍大,但最大也不超過30%。
綜合考慮:TH_MVT各個方面性能表現比較平庸;TH_HPT雖然有更小的誤判率,但是其搜索時間和編碼時間的節約很小,并不實用;TH_APT更適合于視頻運動較劇烈且對性能損失要求不很嚴格的情況;TH_AFT方法取得的閾值在一般情況下具有最好的效果,它能使視頻編碼在保持良好性能的情況下更節省編碼時間,在4種方法中是針對一般序列的較好方法。
4 小結
基于相鄰幀之間的時間相關性并通過模式識別中分類統計的方法,本文提出了一種H.264編碼中幀間模式選擇的算法,并針對該算法給出了4種計算閾值的方法。經過多個測試序列的實驗證明:跟原始算法相比,本文提出的算法在性能下降可忽略情況下使編碼時間有顯著節省,其中TH_AFT的閾值選取方法針對一般序列得到的效果最佳。本文算法可進一步進行擴展,如增加多級閾值以及設計更好的閾值計算方法等。
評論
查看更多