董紅
摘要:針對(duì)IP網(wǎng)絡(luò)丟包條件下的H.264高清視頻實(shí)時(shí)解碼問題,本文通過對(duì)高清視頻碼流特征的分析,論述了一種實(shí)時(shí)錯(cuò)誤的掩蓋算法。此種方法的原理就是利用相應(yīng)的技術(shù)手段收集丟失片的宏塊數(shù)據(jù),在權(quán)值的的選擇時(shí)根據(jù)其垂直距離的平均值得到,然后進(jìn)行加權(quán)矢量計(jì)算,實(shí)現(xiàn)對(duì)錯(cuò)誤的覆蓋。并以數(shù)學(xué)的計(jì)算方式,詳細(xì)對(duì)算法的流程進(jìn)行了分析,得出此種分析技術(shù)和傳統(tǒng)的模型相比,不但節(jié)約了計(jì)算時(shí)間,而且得到的重構(gòu)圖像的質(zhì)量較高,誤差降低,適合在高清實(shí)時(shí)解碼中推廣。
關(guān)鍵字:IP網(wǎng)絡(luò)丟包;H.264高清視頻;實(shí)時(shí)解碼
引言
隨著視頻處理技術(shù)以及輸出水平的提高,在實(shí)時(shí)視頻高清輸出方面,對(duì)于720P以及超高清1080P的分辨率需求逐漸增多。想要實(shí)現(xiàn)此類高清視頻的實(shí)時(shí)傳輸,一般需要在IP網(wǎng)絡(luò)端提供8兆到10兆左右的高清H.264碼流,但是這種技術(shù)的實(shí)現(xiàn),通常會(huì)因?yàn)樾诺罁頂D或者電磁擾動(dòng)等引發(fā)IP視頻丟包或者誤碼問題,嚴(yán)重影響圖像解碼的最終顯示效果。如此以來,為了能夠得到較高質(zhì)量的輸出視頻就要在解碼端進(jìn)行掩蓋技術(shù)的調(diào)整或者重構(gòu),盡可能達(dá)到人們對(duì)視頻清晰度的要求。當(dāng)前比較常見的錯(cuò)誤掩蓋算法有空域錯(cuò)誤掩蓋與時(shí)域錯(cuò)誤掩蓋兩種。兩種錯(cuò)誤掩蓋算法的主要區(qū)別就是空域錯(cuò)誤掩蓋利用的數(shù)學(xué)算法主要是雙線性插值或者方向插值,時(shí)域錯(cuò)誤掩蓋則重視錯(cuò)誤宏塊的運(yùn)動(dòng)矢量的大小。比如,時(shí)域錯(cuò)誤掩蓋方式要求其運(yùn)動(dòng)矢量為零,但是其計(jì)算量相對(duì)較為有限,計(jì)算中也比較容易實(shí)現(xiàn),從恢復(fù)效果上看,如果算法的矢量運(yùn)動(dòng)波動(dòng)過大或者運(yùn)動(dòng)形式過于復(fù)雜,就很可能導(dǎo)致視頻測(cè)錯(cuò)位輸出,最終無法達(dá)到提高視頻質(zhì)量的目的。
1.解碼問題分析概述
在以上算法的基礎(chǔ)上,本文主要對(duì)高清視頻碼流的特征進(jìn)行解析,并設(shè)計(jì)出運(yùn)算量相對(duì)減少了的實(shí)時(shí)錯(cuò)誤掩碼算法。H.264高清視頻的碼流承載了高清視頻碼流之間分割的關(guān)鍵作用,進(jìn)而把其中的高清序列通過縮放轉(zhuǎn)化為較小的分辨率,這樣其對(duì)配置的要求就會(huì)降低,那么就可以采用與之相對(duì)應(yīng)的編碼加以處理,碼流中的宏塊擁有其獨(dú)立的運(yùn)動(dòng)分割特征,如圖1.1所示。
從上圖能夠得到,分分辨率越大,碼流中的16×16塊所占的份額也就越多,但是相對(duì)應(yīng)的8×8塊所占的份額會(huì)越少。而在高清視頻中,不但包含了運(yùn)動(dòng)形式比較復(fù)雜的宏塊,還有許多采用8×8塊或者相近的分割模塊,所以,在對(duì)視頻作錯(cuò)誤掩蓋的計(jì)算時(shí),為了將實(shí)施效率和質(zhì)量保持一致,需要把最小的錯(cuò)誤掩蓋單元設(shè)置為8×8塊。
除此之外,筆者還對(duì)P幀碼流進(jìn)行了宏塊間隔以及宏塊之間的矢量運(yùn)動(dòng)差異做了相應(yīng)分析,得到分析結(jié)果如圖1.2所示。
從圖1.2的分析結(jié)果能夠得出,隨著宏塊之間具體的減小,宏塊之間矢量運(yùn)動(dòng)的相關(guān)程度呈增加趨勢(shì)。可以說,解碼器能夠根據(jù)宏塊的間隔大小得出與之相關(guān)的宏塊間距以及進(jìn)行運(yùn)算的掩蓋錯(cuò)誤數(shù)據(jù)。若把丟失片之上的非錯(cuò)誤解碼作為宏塊的上邊緣,那么其下方正確的解碼就會(huì)變成對(duì)應(yīng)宏塊的下邊緣。因?yàn)槠湓诟咔逡曨l中主要表現(xiàn)為較長的帶狀,那么在其中丟失的IP片的上下邊緣就比較接近,那么左右兩邊基本上很難得到因?yàn)榫嚯x的差異而產(chǎn)生的矢量相關(guān)度?;谏鲜龇治?,筆者認(rèn)為可以直接把帶狀體的上、下邊緣的距離作為數(shù)據(jù)估算的錯(cuò)誤宏塊的矢量,并以此進(jìn)行錯(cuò)誤宏塊的重構(gòu)。
2.高清視頻實(shí)時(shí)解碼的掩蓋算法
2.1對(duì)矢量距離上的加權(quán)運(yùn)動(dòng)估計(jì)
如果出現(xiàn)丟失宏片的上、下兩邊同時(shí)出現(xiàn)的情況,那么根據(jù)上文筆者對(duì)宏塊間隔和宏塊矢量相關(guān)程度的分析,那么和錯(cuò)誤宏塊間隔距離較小的宏塊數(shù)據(jù)會(huì)對(duì)錯(cuò)誤掩蓋的計(jì)算產(chǎn)生較大的輔助作用。本文將充分利用這一點(diǎn),對(duì)矢量的垂直方向進(jìn)行加權(quán),其中權(quán)值通過矢量中數(shù)量平均值的方式進(jìn)行確定,然后根據(jù)宏塊中矢量的運(yùn)動(dòng)補(bǔ)償功能,用經(jīng)過計(jì)算之后的新宏塊取代已被確定的錯(cuò)誤宏塊,如此以來就實(shí)現(xiàn)了對(duì)錯(cuò)誤掩蓋的功能。
如圖2.1所示,設(shè)其中丟失宏片中正在被算法進(jìn)行取代計(jì)算的錯(cuò)誤宏塊為X,那么和其相對(duì)應(yīng)的正確解碼就是圖中的A(頂部宏塊)、B(底部宏塊)、C(頂部靠左宏塊)、D(頂部靠右宏塊)、E(底部靠左宏塊)、F(底部考右宏塊)。其中可以用8×8的子塊作為錯(cuò)誤掩蓋的最小單元,并在各個(gè)子塊中設(shè)置對(duì)應(yīng)的具有矢量運(yùn)動(dòng)特征的錯(cuò)誤掩蓋。
下面筆者將以的子塊為例,對(duì)各個(gè)子塊進(jìn)行矢量運(yùn)動(dòng)特征的分析,然后進(jìn)而得到等。
仍然根據(jù)圖2.1中的上邊緣中的A、C、D進(jìn)行子塊的上邊緣預(yù)測(cè)(為矢量)。設(shè),如果宏塊A存在垂直方向上的分割,那么;否則,。以上皆為矢量,然后對(duì)其進(jìn)行均值與方差的計(jì)算得到:
我們?cè)偻ㄟ^式(3)就能看出,由于方差的大小能夠影響甚至決定到矢量的預(yù)測(cè)結(jié)果。若目前這3個(gè)矢量的方差比較小,那么就可以直接根據(jù)宏塊A內(nèi)部的第二個(gè)運(yùn)動(dòng)矢量,不然就要根據(jù)的中值來進(jìn)行的預(yù)測(cè)。
同理,若使用圖2.1中的下邊緣B、E、F進(jìn)行下方預(yù)測(cè)(矢量),之后在根據(jù)錯(cuò)誤宏塊與頂部宏塊之間的間隔設(shè)為與底部宏塊的間隔設(shè)為的權(quán)值,加以平均值的權(quán)值來得到子塊的矢量,則為:
2.2 高清視頻實(shí)時(shí)錯(cuò)誤掩蓋算法流程
本文所提出的的高清視頻實(shí)時(shí)錯(cuò)誤掩蓋算法,在進(jìn)行整幀解碼計(jì)算停止后,將對(duì)其碼流丟失與解碼結(jié)果進(jìn)行檢測(cè),如果錯(cuò)誤錯(cuò)誤解碼,就要對(duì)相應(yīng)的錯(cuò)誤片段進(jìn)行錯(cuò)誤掩蓋,知道找回全部丟失片段結(jié)束。
在進(jìn)行P幀丟失的錯(cuò)誤掩蓋計(jì)算前,首先要按照丟失片的兩個(gè)邊緣Intra進(jìn)行現(xiàn)場的對(duì)比測(cè)試,具體過程如式(5):
如果檢驗(yàn)得到的P幀出現(xiàn)了場景變換,那么視頻的相鄰幀的時(shí)域相關(guān)程度就會(huì)降低,這時(shí)一般選擇空域掩蓋的方式進(jìn)行計(jì)算。在本文采用的空域掩蓋是建立在像素點(diǎn)之上,并根據(jù)上、下邊緣的區(qū)域作出線形插值。遇到I幀的片段丟失也采用相同的方式進(jìn)行解決。
如果檢驗(yàn)之后沒有得到P幀的場景轉(zhuǎn)換結(jié)果,那么就可以采用加權(quán)之后的時(shí)域掩蓋進(jìn)行計(jì)算,一般采用自左向右的順序進(jìn)行計(jì)算,并對(duì)宏塊進(jìn)行自上而下的順序進(jìn)行掩蓋。具體到單個(gè)宏塊的處理步驟如下:
(1)從上至下依次檢測(cè)幀中的有效宏塊,計(jì)算相應(yīng)的與。檢測(cè)上上部的A、C、D三個(gè)宏塊。如果上部的這三個(gè)宏塊皆不存在,那么將設(shè)置為不能用;相對(duì)應(yīng)的,三個(gè)宏塊中存在Intra,那么的計(jì)算就不存在相應(yīng)的宏塊。同理進(jìn)行底部宏塊B、E、F的計(jì)算,得到。
(2)對(duì)宏塊的子劃分。如果頂部的A宏塊或者是底部的B宏塊,兩者之一或者全部符合:擁有Inter快,在豎直方向上存在分割,那么就可以對(duì)此宏塊進(jìn)行子塊的劃分。如果與皆存在并具有相對(duì)較大的差異,那么就可以將宏塊做從上而下的子塊劃分。具體判別算法,如式(6):
式中N表示宏塊A與B之間相隔的宏塊總數(shù),表示閾值。這種處理方式會(huì)盡量減少場景轉(zhuǎn)換之下的子塊數(shù)量,使算法復(fù)雜度降低。
(3)子塊的矢量估計(jì)。如果與皆有效,那么利用式子(4)中加權(quán)平均值預(yù)測(cè)方式就可以直接進(jìn)行矢量估計(jì),如果與兩者之后只有一個(gè)有效,那么只能根據(jù)其中的信息預(yù)測(cè)進(jìn)行相鄰宏塊的矢量估計(jì)。與兩者皆無效,那么就要以其左右相鄰的矢量進(jìn)行最終的矢量估計(jì)。
(4)在完整矢量估計(jì)的結(jié)果之上加以運(yùn)動(dòng)補(bǔ)償計(jì)算,并掩蓋錯(cuò)誤宏塊。
3.總結(jié)
本文只是從理論的角度對(duì)IP網(wǎng)絡(luò)丟包條件下的H.264高清視頻實(shí)時(shí)解碼問題進(jìn)行了分析,為了對(duì)本文所分析的算法進(jìn)行優(yōu)化,采用相應(yīng)的案例分析方式,會(huì)得到更為合理的結(jié)果。
參考文獻(xiàn)
[1]張秀麗.基于RS的IP網(wǎng)絡(luò)視頻JSCC策略研究[J].電路與系統(tǒng)學(xué)報(bào),2011,(03)
[2]林鏡華,雷為民,白松等.支持IPTV高清碼流連續(xù)平滑播放的多級(jí)緩沖區(qū)設(shè)計(jì)與實(shí)現(xiàn)[J].小型微型計(jì)算機(jī)系統(tǒng),2010, (05)
[3]林李松,陳耀武.基于TMS320DM6467的H.264自適應(yīng)錯(cuò)誤掩蓋并行解碼算法[J].計(jì)算機(jī)工程與應(yīng)用,2012,(08)