廖 怡
(陜西省工業(yè)和信息化廳 信息中心,陜西 西安710006)
H.264[1-2]是由ITU和ISO聯(lián)合制訂的新一代視頻編碼標(biāo)準(zhǔn),H.264以其更高的壓縮效率以及圖像質(zhì)量,為視頻應(yīng)用領(lǐng)域提供了一個(gè)良好的視頻壓縮工具。目前H.264算法有兩種實(shí)現(xiàn)方案:一是使用編解碼ASIC芯片,其優(yōu)點(diǎn)是使用方便,但開(kāi)發(fā)周期較長(zhǎng),而且可擴(kuò)展性較差;二是使用數(shù)字信號(hào)處理器(Digital Signal Processing,DSP),各種高性能的DSP不僅能滿足運(yùn)算性能方面的要求,而且由于DSP的可編程性,使得能在硬件一級(jí)獲得系統(tǒng)設(shè)計(jì)的較大靈活性。H.264算法的高性能是以犧牲計(jì)算復(fù)雜度為代價(jià)的,這對(duì)H.264的應(yīng)用是一個(gè)瓶頸,如何在高速DSP平臺(tái)上對(duì)H.264算法進(jìn)行優(yōu)化,在保證壓縮效率及圖像質(zhì)量的前提下實(shí)時(shí)實(shí)現(xiàn)H.264編解碼是本文試圖解決的問(wèn)題。
設(shè)計(jì)的視頻壓縮系統(tǒng)核心為T(mén)I公司的TMS320DM648處理器,DM648是TI公司最新推出的一款針對(duì)多媒體處理領(lǐng)域和視頻安全與監(jiān)控領(lǐng)域的達(dá)芬奇技術(shù)DSP。它基于第三代高性能先進(jìn)的VebciTITM超長(zhǎng)指令字結(jié)構(gòu)(VLIW),在TMS320C64x+DSP核的基礎(chǔ)上,增加了多種外圍設(shè)備和功能接口。該DSP采用529管腳nF-BGA封裝,高度集成化。DM648工作頻率可達(dá)900 MHz,此外還有其他多種特性,主要包括:(1)10個(gè)8 bit視頻端口,也可配置為5個(gè)16 bit口,支持多種視頻標(biāo)準(zhǔn),可以和視頻輸入、輸出或傳輸流無(wú)縫連接。(2)1個(gè)DDR2-533存儲(chǔ)接口。(3)增強(qiáng)的DMA引擎,支持處理器管理各式各樣高帶寬存儲(chǔ)器和I/O口。(4)多通道音頻串行端口(McASP),10個(gè)串行口(Serializers)和SPDIF(DIT)模塊。(5)多通道帶緩存的串口(McBSPs)。(6)用戶(hù)可配置的16 bit或32 bit的主機(jī)端口(HPI16/HPI32)。(7)32 bit33/66 MHz,3.3 V的PCI,符合PCI 3.2規(guī)格。(8)1個(gè)四線串行接口(SPI),帶兩個(gè)片選端。(9)64 bit的外部存儲(chǔ)單元接口,支持和同步或異步存儲(chǔ)單元的連接。
H.264繼承了以往國(guó)際視頻壓縮標(biāo)準(zhǔn)關(guān)于運(yùn)動(dòng)預(yù)測(cè)技術(shù)的特點(diǎn),為進(jìn)一步提高運(yùn)動(dòng)矢量的精度、改善解碼圖像質(zhì)量、降低編碼效率,H.264在運(yùn)動(dòng)估計(jì)中增加了多參考幀、多模式選擇、去環(huán)路濾波等若干新的選項(xiàng),這些新選項(xiàng)的使用在有效提高編碼效率的同時(shí),使得運(yùn)動(dòng)估計(jì)模塊的計(jì)算復(fù)雜度成倍增加,大幅增加了H.264編碼器的計(jì)算量。
目前針對(duì)H.264壓縮編碼中運(yùn)動(dòng)估計(jì)新特點(diǎn)進(jìn)行優(yōu)化算法的研究受到了高度重視,提出了許多新的運(yùn)動(dòng)估計(jì)算法。由Z.Chen,P.Zhou和Y.He提出的UMHexagonS算法[3-4]是其中比較有代表性的一種算法,它已經(jīng)被H.264的參考軟件JM采納,能獲得與全搜索算法接近的PSNR值。
UMHexagonS算法運(yùn)用運(yùn)動(dòng)矢量的預(yù)測(cè)和非對(duì)稱(chēng)交叉搜索,結(jié)合多分辨率網(wǎng)格搜索的思想,可以得到較高的搜索精度。但UMHexagonS算法的復(fù)雜度仍然很高,搜索點(diǎn)數(shù)過(guò)多。特別是對(duì)于運(yùn)動(dòng)緩慢、紋理簡(jiǎn)單的圖像,由于它遵循中心偏置假設(shè),運(yùn)動(dòng)矢量只集中在預(yù)測(cè)起始點(diǎn)附近,此時(shí)若仍然采用非對(duì)稱(chēng)的十字形模板和多六邊形柵格模板進(jìn)行搜索,將造成較大的搜索冗余。針對(duì)UMHexagonS算法復(fù)雜度高的問(wèn)題,文中提出了一種基于運(yùn)動(dòng)特性的自適應(yīng)運(yùn)動(dòng)估計(jì)算法。
2.2.1 起始搜索點(diǎn)預(yù)測(cè)
為得到當(dāng)前塊的運(yùn)動(dòng)矢量預(yù)測(cè),必須考慮如何選擇用來(lái)計(jì)算預(yù)測(cè)運(yùn)動(dòng)矢量的參考?jí)K。H.264標(biāo)準(zhǔn)選擇當(dāng)前塊的左方塊、上方塊以及右上塊作為參考?jí)K得到預(yù)測(cè)運(yùn)動(dòng)矢量pred_mv。本文在考慮H.264新特點(diǎn)的基礎(chǔ)上,提出了一種新的起始搜索點(diǎn)的預(yù)測(cè)方法。
表1 不同塊類(lèi)型的參考?jí)K位置
在H.264中采用不同大小塊進(jìn)行運(yùn)動(dòng)矢量搜索:16×16宏塊可被劃分為16×8、8×16以及8×8這3種方式,其中8×8塊又可進(jìn)一步劃分為8×4、4×8和4×4這3種方式。這種樹(shù)狀結(jié)構(gòu)的運(yùn)動(dòng)估計(jì),運(yùn)動(dòng)矢量具有更強(qiáng)的相關(guān)性,稱(chēng)為重疊相關(guān)性。本文結(jié)合不同大小塊的重疊相關(guān)性以及空間相關(guān)性,為編碼塊選擇3個(gè)參考?jí)K,參考?jí)K的選擇如表1示。其中當(dāng)前待編碼塊為,為塊類(lèi)型。不同大小塊的搜索順序?yàn)?×8、8×4、4×8、4×4、8×16、16×8、16×16。選擇其中SAD值最小的參考?jí)K所對(duì)應(yīng)的運(yùn)動(dòng)矢量為預(yù)測(cè)運(yùn)動(dòng)矢量pred_mv。
2.2.2 運(yùn)動(dòng)類(lèi)型的判定
文獻(xiàn)[4]分析了運(yùn)動(dòng)矢量的分布特性,指出視頻序列的運(yùn)動(dòng)矢量具有中心偏置特性,即大部分塊是靜止或準(zhǔn)靜止的,如固定背景。因此,若能根據(jù)不同編碼塊的運(yùn)動(dòng)特征,采用不同的搜索策略,在保證精度的前提下可以實(shí)現(xiàn)減小計(jì)算量、提高搜索速度的目的。
在運(yùn)動(dòng)估計(jì)過(guò)程中,SAD一般可以有效地代表當(dāng)前編碼塊的運(yùn)動(dòng)特征:運(yùn)動(dòng)越劇烈,SAD值越大;而對(duì)于背景和低速運(yùn)動(dòng)的編碼塊,相應(yīng)的SAD值較小。但是單一的采用編碼塊的SAD值與閾值進(jìn)行比較來(lái)確定運(yùn)動(dòng)類(lèi)型的方法并不準(zhǔn)確。因?yàn)檫\(yùn)動(dòng)估計(jì)中得到的SAD與運(yùn)動(dòng)矢量之間沒(méi)有線性對(duì)應(yīng)關(guān)系。實(shí)際上SAD與編碼塊之間的關(guān)系是復(fù)雜的:如果編碼塊的SAD較小,則該塊的運(yùn)動(dòng)較少,紋理簡(jiǎn)單;如果編碼塊的SAD較大,則可能代表該塊運(yùn)動(dòng)劇烈,也可能是該編碼塊內(nèi)部有幾個(gè)不同物體,或是在參考幀中無(wú)法找到比較合適的匹配塊,各種復(fù)雜情況都可能導(dǎo)致SAD值偏大,因此直接采用SAD值進(jìn)行運(yùn)動(dòng)特征的判斷并不合理。本文引入新的與SAD有關(guān)的判別準(zhǔn)則,針對(duì)不同運(yùn)動(dòng)特征定義MSAD與OSAD之間的關(guān)系,提出了一種新的運(yùn)動(dòng)特征判斷方法。
在參考幀中進(jìn)行運(yùn)動(dòng)矢量的搜索過(guò)程中,一般采用SAD作為測(cè)量匹配塊之間的失真度準(zhǔn)則,這里我們定義搜索過(guò)程中最小的絕對(duì)值誤差和MSAD
在搜索過(guò)程中預(yù)測(cè)的起始搜索點(diǎn)的絕對(duì)值誤差和,記作OSAD,具體定義為
其中,B(i,j)和B'(i,j)為參考幀和當(dāng)前幀中同一位置的塊,此時(shí)運(yùn)動(dòng)矢量為零;B(i,j)為當(dāng)前幀(i,j)點(diǎn)處的像素值;B'(i+m,j+n)是參考幀(i,j)上的對(duì)應(yīng)像素值;(m,n)為運(yùn)動(dòng)矢量。
實(shí)驗(yàn)表明,對(duì)于不同運(yùn)動(dòng)特征的序列,其OSAD與MSAD之間相差值的大小關(guān)系與圖像本身的特征有直接的關(guān)系,如對(duì)于運(yùn)動(dòng)較簡(jiǎn)單的container序列,OSAD與MSAD的值大部分重合或者接近,而在運(yùn)動(dòng)相對(duì)復(fù)雜的mobile序列中部分編碼塊運(yùn)動(dòng)估計(jì)中得到的MSAD與OSAD差別較大。因此OSAD與MSAD之間的差值可以對(duì)當(dāng)前編碼塊特征進(jìn)行有效的描述,定義該值為DSAD,作為編碼塊特征的判別準(zhǔn)則
為確定編碼塊的運(yùn)動(dòng)特征,本文提出了兩個(gè)運(yùn)動(dòng)特征預(yù)測(cè)閾值thr_low和thr_high,從而將編碼塊分為平坦塊(DSAD<thr_low)、中間塊(thr_low<DSAD<thr_high)以及劇烈塊(DSAD>thr_high)。其中兩個(gè)閾值thr_low和thr_high的選取依下列步驟計(jì)算:
(1)記錄最近參考幀內(nèi)各個(gè)塊搜索過(guò)程中的DSAD,并將其按降序排列。
(2)找出位移>W(wǎng)/2的塊的數(shù)量N1和位移>W(wǎng)/4的塊的數(shù)量N2(W為搜索范圍)。
(3)令thr_high等于第N1個(gè)最大的DSAD值,thr_low等于第N2個(gè)最大的DSAD值。
2.2.3 動(dòng)態(tài)搜索策略
統(tǒng)計(jì)結(jié)果顯示,運(yùn)動(dòng)矢量主要分布在零矢量周?chē)?0,0)為圓心,±2像素范圍的區(qū)域內(nèi),有74.76%的運(yùn)動(dòng)矢量聚集在以零矢量為中心的一個(gè)十字形區(qū)域,呈現(xiàn)一種十字形分布。因此,若采用十字形模板進(jìn)行搜索可以得到較高的搜索效率。此外,文獻(xiàn)[4]指出,對(duì)于自然圖像序列,水平方向的運(yùn)動(dòng)比垂直方向的運(yùn)動(dòng)要?jiǎng)×业枚啵菍?duì)稱(chēng)的大十字形模板可以很好地利用這種特性。K.K.Ma和G.Qiu在文獻(xiàn)[5]中指出自適應(yīng)的十字形模板可以根據(jù)相鄰塊的運(yùn)動(dòng)矢量自動(dòng)調(diào)整搜索臂長(zhǎng),它對(duì)中小運(yùn)動(dòng)塊具有較高的編碼效率質(zhì)量。此外,六邊形模板在匹配窗中移動(dòng)時(shí)在各個(gè)方向上的移動(dòng)速度較接近,搜索速度也很快,是一種性能良好的搜索模板。但為了防止陷入局部最優(yōu),六邊形模板通常是和小十字形模板組合使用的。綜合上述考慮,本算法組合4種不同的模板進(jìn)行搜索,如圖1所示。
圖1 新算法的搜索模板
具體的搜索策略如下:
Step1首先按照上面提出的方法進(jìn)行起始搜索點(diǎn)的預(yù)測(cè);
Step2判斷當(dāng)前塊的塊尺寸模式。如果當(dāng)前塊的塊模式>6,直接采用Small-cross模板進(jìn)行搜索;如果當(dāng)前塊模式>4,組合Hexagon模板和Smallcross模板進(jìn)行搜索;否則進(jìn)入Step3;
Step3對(duì)塊尺寸模式<4的塊進(jìn)行運(yùn)動(dòng)類(lèi)型的判定:如果當(dāng)前塊為劇烈塊,采用Grand-cross模板進(jìn)行初定位,如果是中間塊則采用Adaptive-cross模板進(jìn)行初始定位,隨后進(jìn)入Step4;若當(dāng)前塊為平坦塊,只采用Small-cross模板進(jìn)行小范圍搜索得到最優(yōu)匹配點(diǎn);
Step4初始定位以后得到的最小誤差匹配函數(shù)與一個(gè)設(shè)定的閾值(設(shè)為T(mén)H)進(jìn)行比較:若<TH,則以具有最小誤差匹配函數(shù)的點(diǎn)為起始點(diǎn),采用Smallcross模板進(jìn)行搜索得到最優(yōu)匹配點(diǎn);若≤TH,同樣以具有最小匹配誤差函數(shù)的點(diǎn)為起始點(diǎn),組合Hexagon模板和Small-cross模板進(jìn)行搜索。
為實(shí)現(xiàn)比特率受限條件下的最優(yōu)運(yùn)動(dòng)估計(jì),本文使用率失真函數(shù)J(m,λmotion)作為誤差匹配函數(shù),J(m,λmotion)的定義如下
其中,m=(mx,my)T代表運(yùn)動(dòng)矢量;p=(px,py)T表示運(yùn)動(dòng)矢量的預(yù)測(cè)值;λmotion拉格朗日乘法器;R(m-p)代表用來(lái)對(duì)運(yùn)動(dòng)信息進(jìn)行編碼的比特率,在查找表中得到。SAD為絕對(duì)誤差和。
此外對(duì)閾值TH作如下設(shè)定
其中,J(A),J(B),J(C)分別為當(dāng)前塊的相鄰塊的誤差匹配函數(shù)值。
2.2.3 實(shí)驗(yàn)結(jié)果
新算法的驗(yàn)證實(shí)驗(yàn)采用了JVT的JM86作為實(shí)驗(yàn)平臺(tái),QP值分別選取20,24和28。為檢驗(yàn)新算法的性能,選取全搜索算法(Full)和UMHexagonS算法與新算法(New)進(jìn)行性能比對(duì)。實(shí)驗(yàn)選用3個(gè)QCIF圖像序列:carphone,slient,foreman和一個(gè)CIF圖像序列mobile,對(duì)4個(gè)圖像序列進(jìn)行300幀的測(cè)試。表2是不同的圖像序列采用不同算法的PSNR值、平均每幀的運(yùn)動(dòng)估計(jì)時(shí)間(Time)以及平均比特率(BitRate)的性能比對(duì)。
表2可以看出,新算法的PSNR值與全搜索法相比下降特別小(平均降低0.022),與UMHexagonS算法不相上下,這說(shuō)明重建圖像的質(zhì)量與原圖像非常接近;同時(shí)比特率增加也特別小;但從表中可以看出,用于運(yùn)動(dòng)估計(jì)的時(shí)間大幅減少了,比全搜索算法平均節(jié)省約90%的時(shí)間,平均搜索時(shí)間只占UMHexagonS算法的61%,速度有了顯著的提升。
分析上述數(shù)據(jù)可知,對(duì)于運(yùn)動(dòng)較小的低比特率圖像序列,如silent和carphone,速度提高的幅度較為明顯,這是因?yàn)榈退龠\(yùn)動(dòng)的圖像序列中包含較多的平坦塊,因此搜索過(guò)程中略過(guò)了復(fù)雜度較高的十字形模板搜索;而對(duì)于細(xì)節(jié)較豐富,運(yùn)動(dòng)較復(fù)雜的mobile序列,由于較多地采用了十字形模板進(jìn)行運(yùn)動(dòng)矢量搜索,因此運(yùn)動(dòng)估計(jì)的精度較高,得到的重建圖像的質(zhì)量也就較好,表現(xiàn)在表2中就是運(yùn)動(dòng)估計(jì)后的PSNR值幾乎與用全搜索法進(jìn)行搜索后的PSNR值相等。
表2 FS,UMHexagonS和新算法的性能比對(duì)
為提高編碼效率,H.264采用一系列先進(jìn)的編碼技術(shù),然而高編碼效率是以犧牲計(jì)算復(fù)雜度為代價(jià)的,代碼分析結(jié)果顯示,H.264算法的程序?qū)崿F(xiàn)是一個(gè)運(yùn)算量巨大的過(guò)程。因此,根據(jù)DM648的特點(diǎn),本文通過(guò)下述方法對(duì)H.264算法的C代碼進(jìn)行了優(yōu)化:
(1)C64x+編譯器提供了許多內(nèi)聯(lián)函數(shù),內(nèi)聯(lián)函數(shù)是直接與C64x+匯編指令映射的在線函數(shù),不易用C/C++語(yǔ)言實(shí)現(xiàn)的匯編指令都有對(duì)應(yīng)的內(nèi)聯(lián)函數(shù)。每個(gè)內(nèi)聯(lián)函數(shù)完成的功能與對(duì)應(yīng)的匯編指令相同。內(nèi)聯(lián)函數(shù)用前下劃線“_”特別表示,其使用方法與調(diào)用函數(shù)一樣。使用內(nèi)聯(lián)函數(shù)可以快速的對(duì)C代碼進(jìn)行優(yōu)化。
(2)為進(jìn)一步提高代碼性能,找出影響速度的關(guān)鍵C代碼段用線性匯編重新編寫(xiě)。線性匯編是C6000系列DSP所特有的類(lèi)匯編工具。只需要按照C代碼的自然順序,寫(xiě)出線性匯編語(yǔ)句,不必考慮功能單元的分配以及指令的并行性。因此,它比編寫(xiě)純匯編語(yǔ)句耗時(shí)少,又具有較高的執(zhí)行效率。如果編寫(xiě)線性匯編仍不能達(dá)到指標(biāo)要求的話,再運(yùn)用純匯編編寫(xiě)相關(guān)的代碼,充分利用C6000 DSP結(jié)構(gòu)以及指令集的特點(diǎn),盡可能并行其中的非相關(guān)語(yǔ)句,從而進(jìn)一步減少代碼的執(zhí)行時(shí)間和提高程序的性能。
(3)代碼中循環(huán)越多,執(zhí)行的效率越低。因此,考慮采用循環(huán)展開(kāi)的方法,將多循環(huán)變?yōu)樯傺h(huán),甚至是單循環(huán)。即運(yùn)用消除冗余循環(huán)的方法來(lái)提高指令并行執(zhí)行的程度,從而提高代碼的執(zhí)行效率。
(4)存儲(chǔ)器的優(yōu)化。與PC機(jī)相比,DSP的程序存儲(chǔ)空間有限。因此,對(duì)于視頻編解碼這種需要處理大量數(shù)據(jù)的程序而言,必須合理安排數(shù)據(jù)和程序的存儲(chǔ)方式,實(shí)現(xiàn)對(duì)存儲(chǔ)器的優(yōu)化。具體的優(yōu)化方法為:把反復(fù)調(diào)用的程序段(如DCT變換和DCT反變換)放在片內(nèi)程序存儲(chǔ)區(qū)中,把頻繁調(diào)用的數(shù)據(jù)段放在片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)中,把不常用的程序和數(shù)據(jù)段放在片外存儲(chǔ)區(qū)中,以避免對(duì)程序和數(shù)據(jù)進(jìn)行不必要的反復(fù)搬移。此外,由于一幀圖像的數(shù)據(jù)量較大,故將參考幀和當(dāng)前幀數(shù)據(jù)放到片外,需要用到當(dāng)前塊和參考幀數(shù)據(jù)時(shí),再將它們從片外搬運(yùn)到內(nèi)存中,以提高效率。
視頻系統(tǒng)的驗(yàn)證實(shí)驗(yàn)采用兩臺(tái)DM648數(shù)字視頻開(kāi)發(fā)板TMDXDVP648搭建測(cè)試平臺(tái),一塊開(kāi)發(fā)板進(jìn)行視頻編碼,另一塊進(jìn)行視頻解碼。主要參數(shù)設(shè)置如下:搜索范圍為16,采用CAVLC編碼,圖像序列以25幀/s的速度進(jìn)行編碼,采用1個(gè)參考幀,使用基于運(yùn)動(dòng)特性的自適應(yīng)運(yùn)動(dòng)估計(jì)算法。實(shí)驗(yàn)表明,本文設(shè)計(jì)的視頻壓縮系統(tǒng)可以實(shí)時(shí)的對(duì)352×288(CIF格式)和704×576(D1格式)的視頻進(jìn)行編解碼,主觀視頻圖像可達(dá)3級(jí)[6]以上。此外,此系統(tǒng)的低開(kāi)銷(xiāo)提供了系統(tǒng)集成其它音頻視頻編解碼算法的可能性,以便共同進(jìn)行復(fù)雜媒體的處理。
本文提出了一種基于運(yùn)動(dòng)特性的自適應(yīng)快速運(yùn)動(dòng)估計(jì)算法,新方法在保證圖像質(zhì)量的前提下,大幅降低了計(jì)算復(fù)雜度。此外,根據(jù)DM648的特點(diǎn),提出了基于代碼級(jí)的程序優(yōu)化策略。實(shí)驗(yàn)表明,本文設(shè)計(jì)實(shí)現(xiàn)的視頻壓縮系統(tǒng)可對(duì)D1格式的視頻圖像進(jìn)行實(shí)時(shí)編解碼,并且圖像質(zhì)量?jī)?yōu)良。
[1]ITU-T.Advanced video coding for generic audiovisual services[S].USA:Recommendation H.264,2003.
[2]THOMAS W,GARY J S,GISLE B,et al.Overview of the H.264 video coding standard[J].IEEE Transactions on Circuits and Systems for Video Technology,2003,13(7):1-19.
[3]CHEN Z B,ZHOU P,HE Y,et al.Fast integer pel and fractional pel motion estimation for JVT[C].Awaji,Island,Japan:Joint Video Team(JVT)of ISO/IEC MPEG&ITU-T VCEG,6thMeeting,2002.
[4]CHEN Z B,ZHOU P,HE Y.Fast motion estimation for JVT[C].Pattaya,Thailand:Joint Video Team(JVT)of ISO/IEC MPEG&ITU-T VCEG,7thMeeting,2003.
[5]KAIKUANG M A,QIU Gang.Unequal-arm adaptive rood pattern search for fast block-matching motion estimation in the JVT/H.26L[C].Proc.IEEE Int'l Conference on Image Processing,2003:901-904.
[6]TAN Y L.Principle of image information system[M].Beijing:Tsinghua University Press,2003.