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