關(guān) 閉

新聞中心

EEPW首頁 > 安全與國防 > 設(shè)計應(yīng)用 > 一種新的H.264編碼幀間預(yù)測模式選擇算法

一種新的H.264編碼幀間預(yù)測模式選擇算法

作者: 時間:2016-12-23 來源:網(wǎng)絡(luò) 收藏

1 引言

在H.264視頻編碼中,對于幀間預(yù)測,一個16×16的宏塊(MB)可分成16×16,16×8,8×16,8×8進(jìn)行運動估計,其中8×8還可以進(jìn)一步分為8×4,4×8,4×4的子塊。這樣,每個細(xì)分的模塊都去尋找更精確的匹配塊,可以增加預(yù)測精度提高壓縮率。但是,由于每種分類都要進(jìn)行運動估計,這樣做直接的代價就是巨大的計算量。

針對多模式預(yù)測帶來的計算量增加的問題,近年出現(xiàn)的幀間模式選擇算法得到了深入的研究,其中利用閾值提前截止的模式選擇的思想得到非常廣泛的應(yīng)用,在只有較小性能損失的代價下,減小計算復(fù)雜度。如文獻(xiàn)[1]提出如果發(fā)現(xiàn)16×16模式已經(jīng)適用,就直接跳過對16×8和8×16的模式檢查,否則全搜索;文獻(xiàn)[2]提出利用多級閾值,且閾值依QP變化的方法等。本文的研究也基于通過閾值預(yù)判的方法進(jìn)行宏塊選擇。

2 幀間模式快速選擇算法

2.1 幀間模式選擇使用自適應(yīng)閾值的算法

利用閾值進(jìn)行預(yù)判確實可以在視頻質(zhì)量下降可忽略情況下使編碼復(fù)雜度盡量降低,然而以上方法有一定的局限性。文獻(xiàn)[1]中提出的算法只考慮了3種模式,在很多情況下仍然使用全搜索,文獻(xiàn)[2]雖然提出了可變的閾值,但是它的閾值只是隨著QP變化而變化的,并沒有考慮到不同視頻自身的特性。由于不同視頻序列特點不同,即使是同一個視頻序列內(nèi)部的不同幀也有著不同的特點,而影響閾值的因素又較多?;谝陨嫌^點,本文提出了一種利用統(tǒng)計分類的方法,通過對幀間預(yù)測模式進(jìn)行分類,并選取自適應(yīng)閾值對宏塊模式進(jìn)行選擇。

一般情況下16×16模式使用率最高并且其SAD(Sum of Absolute Difference)值一定會經(jīng)過計算,所以可建立16×16模式的SAD值(文中簡稱sad16)和最終選擇的模式之間的關(guān)系,這是一個標(biāo)準(zhǔn)的模式分類問題。筆者通過視頻中相鄰幀之間的時間相關(guān)性,通過前一幀的模式對應(yīng)的sad16分布情況,訓(xùn)練得到下一幀的閾值,從而對下一幀的宏塊模式進(jìn)行選擇。具體方法如下:

1) 分類

首先將H.264的多種幀問模式分為兩類:BSM(BigSize Mode),包括16×16,16×8,8×16模式,SSM(SmallSize Mode),包括8×8,8×4,4×8,4×4。經(jīng)過對一些CIF格式的測試視頻序列的統(tǒng)計可以發(fā)現(xiàn),一般情況下BSM的概率要大于SSM的概率(見表1),又由上文所述,SSM的計算量更大,所以可以在BSM和SSM之間設(shè)置一個閾值T,代表了對模式預(yù)測精度的可接受程度。如果小于閾值T則該宏塊只選擇BSM,如果大于閾值T則該宏塊對兩種模式都進(jìn)行計算。

2) 統(tǒng)計

分別計算兩種模式下的sad16,經(jīng)過測試發(fā)現(xiàn)sad16值普遍小于8 000,為了便于統(tǒng)計,將計算得到的sad16值左移7位即除以128,將sad16分布在64個取值區(qū)間內(nèi)。按照原始模式選擇算法對一幀中的每個宏塊進(jìn)行模式選擇,記錄其對應(yīng)的sad16值,從而統(tǒng)計該幀中每個模式對應(yīng)的不同sad16區(qū)間內(nèi)宏塊個數(shù)的分布。由于SSM的值比較小,為了便于觀察,將其統(tǒng)計結(jié)果乘以10。公式如下

式中:k為sad16的64個取值區(qū)間,取值為[0,63];sad16∈k代表sad16值在區(qū)間k內(nèi);若該宏塊被判斷為BSM模式則nBSM=1,nSSM=0;若該宏塊被判斷為SSM模式則nSSM=1,nBSM=0。圖1和圖2分別為兩種較具代表性的CIF序列foot-ball和foreman相鄰兩幀的統(tǒng)計分布圖。


由圖1,2的統(tǒng)計結(jié)果可以看出:取BSM模式的宏塊占大多數(shù),且對應(yīng)的sad16主要分布在較小值區(qū)域,在較大值區(qū)域也存在但較少;而取SSM模式的宏塊占少數(shù),且對應(yīng)的sad16主要分布在較大值區(qū)域,但是數(shù)量不多(圖1,2中SSM模式已乘10)。通過其他一些測試序列也可以得到相同結(jié)論。因此,可通過取一個閾值T,在只計算sad16的情況下,判斷該宏塊是否可直接決定為BSM模式。當(dāng)sad16T時,既計算BSM模式也計算SSM模式。由圖1,2中還可看出,不管是運動較劇烈的football序列還是運動較平緩的foreman序列,任取的相鄰兩幀的分布圖都非常相似,所以可以基于序列相鄰兩幀間的時間相關(guān)性,利用前一幀的分布來預(yù)測下一幀的閾值。

3) 誤判率

本算法對計算量的節(jié)省較多,而且視頻質(zhì)量幾乎沒有下降,其代價是一些SSM模式的宏塊被判斷為BSM,而損失了一些壓縮率。如圖3所示,閾值取T時,陰影部分所示本應(yīng)為SSM,但由于sad16在閾值T左面,而被判斷為BSM,雖然陰影部分屬于誤判部分,但是由于陰影部分在閾值左面,屬于sad16相對較小區(qū)域,所以最終的SAD變化較小,壓縮率損失不大。則選取閾值的標(biāo)準(zhǔn)就是:使BSM模式盡量多地在閾值T左面,以減少判決時間;使SSM模式盡量在閾值右面,以減少損失的壓縮率。

2.2 4種自適應(yīng)閾值選取方法

基于上文分析的選取閾值的標(biāo)準(zhǔn),如何根據(jù)前一幀的統(tǒng)計結(jié)果設(shè)置下一幀的閾值有很多種方法,本文初步提出了4種閾值計算的方法:

1) 最小值閥值法(minimum value thresh,MVT)

該方法取BSM曲線的最大sad16,取SSM曲線的最小sad16,然后取兩者之中較小的一個作為閾值,如圖4所示。

閾值計算公式為

MIN(sad16,SSM)一般是取SSM時sad16的最小值,而為了避免有些幀不存在SSM的情況,選取MAX(sad16,BSM)進(jìn)行比較,取二者最小值。由于MIN(sad16,SSM)一般是不斷變大的,而MAX(sad16,BSM)的值本身就很大,所以可以給它們乘以一個小于1的比例因子,以控制它的大小。則修正后的閾值計算公式為

式中:α1,α2∈(0,1)為修正系數(shù),可取α1=1/2,α2=3/4。

2) 面積百分比閾值法(area percent thresh,APT)

該方法計算BSM曲線的總面積,取該總面積的β%的面積所對應(yīng)的sad16作為閾值,如圖5所示。

閾值計算公式為

式中:β∈(0,100)為面積百分比因子,取β=75效果較好。

3) 最高點閾值法(highest point thresh,HPT)

該方法取BSM曲線中達(dá)到的最高點所對應(yīng)的sad16作為閾值,如圖6所示。

閾值計算公式為

4) 衰減因子閾值法(attenuation factor thresh,AFT)

該方法取BSM曲線中達(dá)到的最高點,越過最高點后,取該高度的(1-ω)高度所對應(yīng)的sad16作為閾值,如圖7所示。

閾值計算公式為

式中:ω∈(0,1)為衰減因子,取ω=0.75效果較好,可取TAFT>THPT的值。

本文只是實驗了4種計算閾值的方法,利用本文2.1得到的統(tǒng)計圖以及模式分類思想還可使用其他計算方法得到可用的閾值。

2.3 算法流程

由上一幀宏塊級別的步驟4記錄的每個宏塊的信息,按照本文所述幾種方法,計算本幀inter模式選擇需要的閾值T,并利用T對本幀中的每個宏塊進(jìn)行分類,具體步驟如下:

1) 將16×16,16×8,8×16作為備選模式,計算sad(16×16),sad(16×8),sad(8×16),取最小值設(shè)為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) 結(jié)束該宏塊模式選擇,記錄該宏塊相關(guān)信息以備計算下一幀閾值。

3 仿真結(jié)果

仿真條件:先用MPEG-2編碼器對6個CIF(352×288)序列mobile,football,bus,news,table,foreman的前100幀進(jìn)行MPEG-2編碼,設(shè)定參數(shù)N=12,M=3,碼率6 Mbit/s得到源視頻。轉(zhuǎn)碼過程參考MPEG-2解碼器和T264編碼器實現(xiàn)。幀率為30 f/s,OP為30,GoP為200。實驗平臺為Intel P4 2.0 GHz,內(nèi)存512 Mbyte,操作系統(tǒng)為Windows XP。使用自適應(yīng)閾值算法且其中的閾值為最小值閾值方法,簡稱ATH_MVT,其他簡稱類似。經(jīng)實驗得到最佳經(jīng)驗因子:ATH_APT算法中取β=75,ATH_AFT算法中取ω=0.75。仿真結(jié)果見表2(給出3個典型序列:較多細(xì)節(jié)的mobile,運動較劇烈的football,較平穩(wěn)的news的結(jié)果,其他序列結(jié)果略)。

由仿真結(jié)果可知:

ATH_MVT方法在搜索時間和編碼時間的減少上性能一般,除運動較劇烈的football序列外,其搜索時間減少大都在38%以上,其編碼時間減少大都在26%以上。該方法PSNR下降在0.01dB以內(nèi),碼率(bitrate)上升在0.39%以內(nèi),性能損失較小。

ATH_APT方法在搜索時間和編碼時間的減少上具有較好的性能,其搜索時間減少大都在45%以上,其編碼時間減少大都在30%以上,值得一提的是,對于運動相對較劇烈的football序列,它比其他方法更好的省時效果;該方法PSNR下降在0.01 dB以內(nèi),碼率上升在1.1%以內(nèi),性能損失稍大。

ATH_HPT方法在搜索時間和編碼時間的減少上對于所有序列都是最差的,其搜索時間減少最低為7%左右,其編碼時間減少最低為5%左右;該方法視頻質(zhì)量最佳,PSNR值不低于原始算法,碼率上升在0.47%以內(nèi),性能損失較小。

ATH_AFT方法在搜索時間和編碼時間的減少上有最好的性能,除football序列外,其搜索時間減少大都在50%以上,其編碼時間減少大都在30%以上。該方法視頻質(zhì)量較佳,PSNR值基本等于原始算法,碼率上升在0.15%以內(nèi),性能損失很小。

圖3中的陰影部分為SSM的誤判部分,利用公式

將使用了自適應(yīng)閾值算法判定的SSM個數(shù)與原算法中判定的SSM的個數(shù)作比較得到的誤判率見表3(依然只列出3個典型序列)。其中TH_HPT(使用最高點閾值法的原算法)的誤判率相對較小,其他3種方法的誤判率相對稍大,但最大也不超過30%。

綜合考慮:TH_MVT各個方面性能表現(xiàn)比較平庸;TH_HPT雖然有更小的誤判率,但是其搜索時間和編碼時間的節(jié)約很小,并不實用;TH_APT更適合于視頻運動較劇烈且對性能損失要求不很嚴(yán)格的情況;TH_AFT方法取得的閾值在一般情況下具有最好的效果,它能使視頻編碼在保持良好性能的情況下更節(jié)省編碼時間,在4種方法中是針對一般序列的較好方法。

4 小結(jié)

基于相鄰幀之間的時間相關(guān)性并通過模式識別中分類統(tǒng)計的方法,本文提出了一種H.264編碼中幀間模式選擇的算法,并針對該算法給出了4種計算閾值的方法。經(jīng)過多個測試序列的實驗證明:跟原始算法相比,本文提出的算法在性能下降可忽略情況下使編碼時間有顯著節(jié)省,其中TH_AFT的閾值選取方法針對一般序列得到的效果最佳。本文算法可進(jìn)一步進(jìn)行擴(kuò)展,如增加多級閾值以及設(shè)計更好的閾值計算方法等。



評論


技術(shù)專區(qū)

關(guān)閉