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