專利名稱:基于運(yùn)動(dòng)估計(jì)的小波視頻編解碼方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種視頻圖像的編解碼方法,特別涉及一種基于運(yùn)動(dòng)估計(jì)的小波視頻編解碼方法。
H.263是國際電信協(xié)會(huì)-電信標(biāo)準(zhǔn)化部門ITU-T(The InternationalTelecommunications Union-Telecommunication Standardization Sector)于1995年通過的用于低比特率實(shí)時(shí)傳輸?shù)囊曨l編解碼標(biāo)準(zhǔn)。其設(shè)計(jì)初衷是滿足帶寬低于64kbps的低帶寬視頻應(yīng)用需求,如視頻會(huì)議、可視電話等。H.263的輸入視頻幀格式為QCIF(Quarter Common Intermediate Format,大小為176×144)、CIF(Common Intermediate Format,大小為352×288)等。將每個(gè)視頻幀分成許多宏塊(MB-Micro Block),每個(gè)宏塊由4個(gè)Y亮度塊、1個(gè)Cb色度塊和1個(gè)Cr色度塊組成。塊(Block)的大小為8×8。H.263以宏塊為單位進(jìn)行視頻幀的壓縮。
H.263使用離散余弦變換DCT(Discrete Cosine Transform)減小空間冗余,使用運(yùn)動(dòng)估計(jì)和運(yùn)動(dòng)補(bǔ)償(Motion Estimation and MotionCompensation)減小時(shí)間冗余。H.263有兩種編碼方式,一種是Intra方式,幀內(nèi)編碼,產(chǎn)生的幀作為關(guān)鍵幀—I幀;另一種是Inter方式,幀間編碼,產(chǎn)生的幀作為非關(guān)鍵幀—P幀;而B幀是使用與它在時(shí)間上最近鄰的前后兩個(gè)I幀或P幀來預(yù)測的,它自己并不作為任何其它幀的參考圖像。
運(yùn)動(dòng)估計(jì)是指在參考幀中搜索一個(gè)與當(dāng)前幀圖像塊最相似的圖像塊,即最佳匹配塊,搜索結(jié)果用運(yùn)動(dòng)向量來表示。有兩種方法進(jìn)行運(yùn)動(dòng)估值,一種是差的平方的和(SSD),另一種是差的絕對值的和(SAD),這兩種方法在特定的環(huán)境下都有自己的優(yōu)點(diǎn)和局限性,由于SAD實(shí)現(xiàn)起來比較快(沒有乘法運(yùn)算),MPEG中使用SAD方法進(jìn)行運(yùn)動(dòng)估值;運(yùn)動(dòng)補(bǔ)償是指利用參考幀和已求得的運(yùn)動(dòng)向量重構(gòu)當(dāng)前幀,把重構(gòu)幀和當(dāng)前幀的差值作為當(dāng)前幀的補(bǔ)償值進(jìn)行壓縮編碼。兩者互相配合,共同實(shí)現(xiàn)壓縮效果。
運(yùn)動(dòng)估計(jì)算法的研究從兩方面著手快速搜索算法和塊匹配準(zhǔn)則。最簡單的搜索算法是全搜索法(FS),這種算法精度高,但計(jì)算量過于龐大。為了加快運(yùn)算速度,保證精度,人們提出了很多快速搜索算法三步法(TSS)及基于三步法的改進(jìn)算法、二維對數(shù)法(LOGS)、交叉搜索法(CS)、四步法(4SS)、預(yù)測搜索法(PSA)、鉆石(菱形)搜索法(DS)等。鉆石搜索法是迄今為止綜合性能最優(yōu)的快速搜索算法之一。塊匹配準(zhǔn)則決定何時(shí)找到最佳匹配塊,從而終止搜索進(jìn)程。傳統(tǒng)的準(zhǔn)則有絕對平均誤差函數(shù)(MAE)、互相關(guān)函數(shù)(CCF)、均方誤差函數(shù)(MSE)、最大誤差最小函數(shù)(MME)等。由于傳統(tǒng)方法沒有考慮人眼的視覺特性,所以判斷結(jié)果和人眼的感知相差較大。實(shí)際H.263采用的塊匹配準(zhǔn)則為MSE的替代準(zhǔn)則SAD(絕對差和),SAD用絕對值運(yùn)算代替了MSE的乘方運(yùn)算,明顯降低了運(yùn)算量,從而可以加快計(jì)算速度。
目前基于運(yùn)動(dòng)估計(jì)的視頻編碼方案,通常是首先對每一幀圖像進(jìn)行格式轉(zhuǎn)換,轉(zhuǎn)換成Y,U,V三個(gè)分量,然后默認(rèn)第一幀圖像為I幀,對其進(jìn)行幀內(nèi)編碼;強(qiáng)制指定其后的序列中的圖像指定為I幀、P幀或B幀,分別對其進(jìn)行幀內(nèi)或幀間編碼,其中I幀和P幀都可以作為幀間編碼的參考幀;幀內(nèi)編碼采用分塊的DCT變換,然后使用量化、熵編碼,將編碼數(shù)據(jù)輸入碼流;幀間編碼分為運(yùn)動(dòng)估計(jì)、運(yùn)動(dòng)補(bǔ)償、運(yùn)動(dòng)矢量編碼和殘差圖像編碼幾個(gè)部分;幀間編碼的運(yùn)動(dòng)估計(jì)只對Y分量進(jìn)行,得到的運(yùn)動(dòng)矢量適用于UV分量;運(yùn)動(dòng)估計(jì)分為兩大類,其中P幀采用單向運(yùn)動(dòng)估計(jì),B幀采用雙向運(yùn)動(dòng)估計(jì),運(yùn)動(dòng)估計(jì)是將圖像劃分為若干個(gè)宏塊進(jìn)行的,包括整像素運(yùn)動(dòng)估計(jì)和半像素運(yùn)動(dòng)估計(jì),運(yùn)動(dòng)估計(jì)后的宏塊分為兩種inter塊和intra塊;對于inter塊,需要根據(jù)其參考幀和當(dāng)前幀,進(jìn)行運(yùn)動(dòng)補(bǔ)償,并對其殘差進(jìn)行DCT變換、量化和熵編碼;對于intra塊,則直接對其進(jìn)行幀內(nèi)編碼;運(yùn)動(dòng)矢量編碼采用差分的哈夫曼編碼。
在解碼端,首先默認(rèn)第一幀圖像為I幀,對其進(jìn)行幀內(nèi)解碼;對其后的序列中的圖像可以指定為I幀、P幀或B幀,分別對其進(jìn)行幀內(nèi)或幀間解碼,其中I幀和P幀的還原幀都可以作為幀間解碼的參考幀;幀內(nèi)解碼根據(jù)輸入碼流,對其進(jìn)行解碼,通過反量化和分塊的DCT反變換,得到還原幀數(shù)據(jù);幀間解碼分為運(yùn)動(dòng)矢量解碼、殘差圖像解碼和運(yùn)動(dòng)補(bǔ)償幾個(gè)部分,運(yùn)動(dòng)矢量解碼采用與編碼端一致的哈夫曼解碼;幀間解碼分宏塊進(jìn)行,宏塊種類分為inter塊和intra塊,對于inter塊,對其進(jìn)行反量化和分塊的DCT反變換,并根據(jù)其參考幀和解碼的運(yùn)動(dòng)矢量,進(jìn)行運(yùn)動(dòng)補(bǔ)償,對于intra塊,則直接對其進(jìn)行幀內(nèi)解碼,最后將還原圖像數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換,從YUV格式轉(zhuǎn)換為RGB格式。
然而,基于DCT分塊壓縮技術(shù)的壓縮效率很低,在保證恢復(fù)圖像質(zhì)量可以接受的條件下,壓縮比約為1∶20~40,但是在較大壓縮倍數(shù)下,塊效應(yīng)將使圖像質(zhì)量急劇惡化。H.261和H.263是依賴視頻序列在時(shí)域和空域的冗余來提高壓縮比,但在較低碼率條件下,視頻序列的幀率大大低于25~30幀/秒,因而視頻序列在時(shí)域的相關(guān)性減弱,導(dǎo)致H.261和H.263的編碼效率必然降低。再者,從H.263可視電話標(biāo)準(zhǔn)的應(yīng)用來看,DCT變換技術(shù)明顯不適合于低碼率圖像傳輸,由DCT變換和運(yùn)動(dòng)估計(jì)所帶來的塊效應(yīng)是影響圖像質(zhì)量的主要因素。DCT變換的分塊特性,使得I幀的還原圖像也存在馬賽克,降低了圖像的還原質(zhì)量,也影響了其作為參考幀的運(yùn)動(dòng)估計(jì)結(jié)果。
而且,現(xiàn)有方案也沒有充分考慮圖像序列運(yùn)動(dòng)的劇烈程度,強(qiáng)制指定圖像的編碼類型,編碼機(jī)制不靈活,會(huì)影響圖像序列的還原質(zhì)量;幀間編碼運(yùn)動(dòng)估計(jì)的代價(jià)函數(shù)過于單一,不能根據(jù)運(yùn)動(dòng)估計(jì)的情況自適應(yīng)的調(diào)整該幀圖像的編碼類型,同時(shí),運(yùn)動(dòng)矢量的哈夫曼編碼過于復(fù)雜,而碼字的長度也有冗余,編碼效率不高。
本發(fā)明提供一種基于運(yùn)動(dòng)估計(jì)的小波視頻編碼方法,首先確定圖像數(shù)據(jù)轉(zhuǎn)換為YUV格式;默認(rèn)第一幀圖像為I幀,對其后的視頻幀默認(rèn)為PB幀;對所述其后的視頻幀進(jìn)行運(yùn)動(dòng)估計(jì);根據(jù)運(yùn)動(dòng)估計(jì)的結(jié)果,自適應(yīng)的重新調(diào)整所述其后的視頻幀的類型;根據(jù)視頻幀類型,對I幀進(jìn)行幀內(nèi)編碼,對PB幀進(jìn)行幀間編碼。
相應(yīng)的,本發(fā)明還提供一種基于運(yùn)動(dòng)估計(jì)的小波視頻解碼方法,首先默認(rèn)第一幀圖像為I幀,并根據(jù)編碼碼流中的信息得到其后視頻幀的編碼類型,確定其為I幀或PB幀;然后對I幀進(jìn)行幀內(nèi)解碼,對PB幀進(jìn)行幀間解碼;最后將還原圖像數(shù)據(jù)轉(zhuǎn)換為要求的數(shù)據(jù)格式。
本發(fā)明用自適應(yīng)的判斷取代了傳統(tǒng)MPEG和H.263中只能每隔一個(gè)固定數(shù)目做一個(gè)I幀的機(jī)械做法,使編碼方法更加靈活,充分利用一幀圖像在時(shí)間上與前幾幀的相關(guān)性,提高了編碼效率,還可以結(jié)合小波變換的全局性特點(diǎn),對PB幀模式的運(yùn)動(dòng)估計(jì)進(jìn)行改進(jìn),取消幀內(nèi)塊概念,同時(shí)還可以對哈夫曼編碼表按照需要進(jìn)行改進(jìn),進(jìn)一步縮短了編碼長度,從而使本發(fā)明能在較低或甚低傳輸速率下,實(shí)現(xiàn)較高質(zhì)量的可靠的圖像壓縮。
為了進(jìn)一步提高還原圖像序列的質(zhì)量,對所述其后的視頻幀還可以指定每隔一定時(shí)間強(qiáng)迫一幀圖像為I幀,來進(jìn)行幀內(nèi)編碼。
對圖像數(shù)據(jù)進(jìn)行圖像數(shù)據(jù)格式轉(zhuǎn)換,RGB與YUV的相互轉(zhuǎn)換是浮點(diǎn)運(yùn)算,對整個(gè)圖像進(jìn)行浮點(diǎn)運(yùn)算相當(dāng)耗時(shí),在硬件實(shí)現(xiàn)時(shí)可以把浮點(diǎn)運(yùn)算改成整數(shù)運(yùn)算。
本發(fā)明中采用的RGB到Y(jié)UV整數(shù)轉(zhuǎn)換公式為Y=[(9798R+19235G+3736B)/215]
U=[(-4784R-9437G+14221B)/215]+128V=[(20218R-16941G-3277B)/215]+128YUV到RGB整數(shù)轉(zhuǎn)換公式U-=128V-=128R=[(32768Y+31326U+20348V)/215]G=[(32768Y-8912U-21200V)/215]B=[(32768Y-36244U-55804M)/215]如圖2所示,對視頻幀進(jìn)行運(yùn)動(dòng)估計(jì)時(shí),可以把當(dāng)前幀劃分成M×N大小的宏塊,并預(yù)設(shè)SAD閾值(步驟201);然后對每一宏塊在參考幀范圍內(nèi)進(jìn)行搜索,在參考幀和原始幀的SAD值大于SAD閾值時(shí),則視為該宏塊運(yùn)動(dòng)估計(jì)失敗(步驟202);同時(shí),累計(jì)所述當(dāng)前幀運(yùn)動(dòng)估計(jì)失敗的宏塊數(shù),并預(yù)設(shè)失敗數(shù)閾值(步驟203);比較所述當(dāng)前幀累計(jì)運(yùn)動(dòng)估計(jì)失敗的宏塊數(shù)與所述失敗數(shù)閾值(步驟204),如果所述當(dāng)前幀累計(jì)運(yùn)動(dòng)估計(jì)失敗的宏塊數(shù)大于所述失敗數(shù)閾值,則將所述當(dāng)前幀調(diào)整為I幀,否則則判斷該幀為P幀,并對其進(jìn)行幀間編碼。
例如,進(jìn)行運(yùn)動(dòng)估計(jì)時(shí),可以采用自適應(yīng)的16×16或8×8的搜索,設(shè)SAD閾值為SAD_threshold,失敗宏塊數(shù)閾值為distortion_num_threshold,當(dāng)前宏塊的SAD值為cur_SAD,當(dāng)前失敗的宏塊數(shù)為big_distortion_num,當(dāng)前幀的宏塊總數(shù)為block_num,則,第一個(gè)代價(jià)函數(shù)是判斷當(dāng)前宏塊是否運(yùn)動(dòng)估計(jì)失敗,判斷公式為cur_SAD>SAD_threshold,如果滿足代價(jià)函數(shù),則big_distortion_num加1;第二個(gè)代價(jià)函數(shù)是給定閾值distortion_num_threshold,判斷公式為distortion_num_threshold=block_num/K。其中K的范圍可以是8~16,第三個(gè)代價(jià)函數(shù)是判斷當(dāng)前幀是否運(yùn)動(dòng)估計(jì)失敗,判斷公式為big_distortion num>distortion num threshold。
以16×16宏塊為例,如果設(shè)置閾值SAD_threshold=2000~5000,判斷該16×16宏塊運(yùn)動(dòng)估計(jì)是否成功,當(dāng)該宏塊運(yùn)動(dòng)估計(jì)后,在參考幀和在原始幀的SAD值>SAD_threshold,就可認(rèn)為該宏塊運(yùn)動(dòng)估計(jì)失敗。同時(shí)累計(jì)運(yùn)動(dòng)估計(jì)失敗的宏塊數(shù),設(shè)置閾值distortion_num_threshold=圖像的16×16宏塊數(shù)目/8~16,如果一幀累計(jì)運(yùn)動(dòng)估計(jì)失敗的宏塊數(shù)目>distortion_num_threshold,則判斷本幀為I幀,并對其進(jìn)行幀內(nèi)編碼。否則,則判斷本幀為P幀,并對其進(jìn)行幀間編碼。
為了進(jìn)一步提高視頻幀編解碼的效率,幀內(nèi)編碼可以采用二維的離散小波(DWT)變換,然后使用量化、零樹編碼和算術(shù)編碼等,將編碼數(shù)據(jù)形成碼流;幀間編碼包括運(yùn)動(dòng)估計(jì)、運(yùn)動(dòng)補(bǔ)償、運(yùn)動(dòng)矢量編碼和殘差圖象編碼,其中,運(yùn)動(dòng)估計(jì)得到的預(yù)測幀,根據(jù)其參考幀和當(dāng)前幀,進(jìn)行運(yùn)動(dòng)補(bǔ)償,并對其殘差圖像進(jìn)行二維離散小波變換,然后使用量化、零樹編碼和算術(shù)編碼等,將編碼數(shù)據(jù)形成碼流。
具體的說,I幀幀內(nèi)編碼包括如下步驟(1)對變換格式后的原始圖像數(shù)據(jù)進(jìn)行小波變換;(2)對小波變換后產(chǎn)生的系數(shù)進(jìn)行零樹編碼和算術(shù)編碼;(3)在編碼后生成的數(shù)據(jù)碼流中插入控制信息,并按幀輸出到信道上傳輸。
P幀幀間編碼包括如下步驟(1)根據(jù)相應(yīng)的運(yùn)動(dòng)矢量,平移參考幀中的相應(yīng)宏塊,形成運(yùn)動(dòng)補(bǔ)償圖像,對運(yùn)動(dòng)矢量編碼并形成碼流;(2)將當(dāng)前幀圖像和運(yùn)動(dòng)補(bǔ)償圖像相減,得到余量誤差圖像;(3)對余量誤差圖像進(jìn)行幀內(nèi)編碼,B幀幀間編碼包括(1)根據(jù)其前后兩個(gè)P幀的運(yùn)動(dòng)矢量,采用相應(yīng)的運(yùn)動(dòng)補(bǔ)償方法,得到(-1,+1)范圍內(nèi)的運(yùn)動(dòng)矢量增量,對運(yùn)動(dòng)矢量增量編碼并形成碼流;(2)將當(dāng)前幀圖像和運(yùn)動(dòng)補(bǔ)償圖像相減,得到余量誤差圖像;(3)對余量誤差圖像的Y分量進(jìn)行幀內(nèi)編碼。
所述余量誤差圖像的幀內(nèi)編碼包括如下步驟(1)對余量誤差圖像數(shù)據(jù)進(jìn)行小波變換;(2)對小波變換后產(chǎn)生的系數(shù)進(jìn)行零樹編碼和算術(shù)編碼,并形成碼流;(3)在編碼后生成的數(shù)據(jù)碼流中插入控制信息,并按幀輸出到信道上傳輸。
以四層二維Daubechies(5,3)為例,小波變換被分割成多個(gè)一維整型小波行變換和一維整型小波列變換。一維整型小波行變換和一維整型小波列變換的算法如下sl(0)=x2l]]>dl(0)=x2l+1]]>dl(1)=dl(0)+α(sl(0)+sl+1(0))]]>sl(1)=sl(0)+β(dl(1)+dl-1(1))]]>sl=k·sl(1)]]>dl=dl(1)/k]]>其中,sl(0)為一維圖像信號(hào)x的偶數(shù)樣本,dl(o)為一維圖像信號(hào)x的奇數(shù)樣本,sl為變換后的偶數(shù)樣本,dl為變換后的奇數(shù)樣本;α、β為小波變換系數(shù),k為伸縮變換系數(shù)(α=-0.5,β=0.25,k=1.2~1.5)。
對于其中的零樹編碼,優(yōu)選的,可以使用SPIHT編碼,同時(shí),為了進(jìn)一步提高編解碼效率,可以對SPIHT編碼做進(jìn)一步的改進(jìn),例如,用二維數(shù)組取代SPIHT編碼中原來的鏈表結(jié)構(gòu),對該二維數(shù)組初始化時(shí)將小波系數(shù)的符號(hào)與絕對值分離,計(jì)算出小波系數(shù)的最大絕對值位平面;計(jì)算出所有有后代的系數(shù)的最大子孫值;初始化表示非重要象素LIP、重要象素LSP和非重要集合LIS三個(gè)狀態(tài)的數(shù)組,用一個(gè)統(tǒng)一的二維數(shù)組狀態(tài)表LIST代表。更優(yōu)選的,為了進(jìn)一步提高壓縮比,還可以將小波系數(shù)樹形結(jié)構(gòu)增加一層。
如圖3所示,LIST二維數(shù)組用一個(gè)字節(jié)代表原系數(shù)矩陣中相鄰兩個(gè)系數(shù)的狀態(tài),大小為原系數(shù)矩陣的1/2,LIS用兩個(gè)比特表示,LIP和LSP用兩個(gè)比特表示,而LSP在初始化時(shí)為空。其中A1A2B1B2表示第i個(gè)數(shù)據(jù)的狀態(tài),C1C2D1D2表示第i+1個(gè)數(shù)據(jù)的狀態(tài)A1A2表示LIS狀態(tài)B1B2表示LIP,LSP狀態(tài)01-----a類LIS 01----LIP10-----b類LIS 10----LSP00-----忽略00----忽略如圖4所示,SDL二維數(shù)組中一個(gè)字節(jié)代表原系數(shù)矩陣中有后代系數(shù)的狀態(tài),存儲(chǔ)SD和SL的最高位平面值,其中SD表示包括直接后代的所有后代,SL表示不包括直接后代的間接后代。1個(gè)字節(jié)可以表示一個(gè)LIS系數(shù)的SD和SL最高位平面值值,其中高四位表示SLmax位平面值,低四位表示SDmax位平面值。
在保存所有有后代的系數(shù)的最大子孫值的二維數(shù)組SDL中,一個(gè)字節(jié)可以表示兩個(gè)相鄰系數(shù)的最大子孫值,具體實(shí)現(xiàn)方法可以用二進(jìn)制的形式,使用四個(gè)比特將最大值的最高位平面代替數(shù)值本身。例如相鄰兩個(gè)系數(shù)的最大子孫值分別為max1=1000,max2=500,29<max1<210,28<max2<29,因此,max1的最大位平面=9(0x1001),max2的最大位平面=8(0x1000),在SDL中用0x10001001表示。從最高位平面開始編碼。
在初始化過程的優(yōu)選方案中,為了使初始化數(shù)組LIST的LIP、LIS狀態(tài)數(shù)據(jù)量減小,進(jìn)一步提高壓縮比,還可以將小波變換的最低頻系數(shù)繼續(xù)按空間劃分四個(gè)部分,作為LIP和LIS的初始化數(shù)據(jù),即將小波系數(shù)樹形結(jié)構(gòu)增加一層。SPIHT是一種基于零樹的小波系數(shù)編碼方法,而零樹編碼的特征是利用不同尺度之間圖像小波變換系數(shù)之間的自相似性,可以用零樹根很少的比特樹代表所有后代子孫的值。本發(fā)明的更優(yōu)選實(shí)施例將最低頻系數(shù)簡單的繼續(xù)劃分,可以使初始化的數(shù)據(jù)減小到原來的1/4,使零樹根的位置提高一層,一棵零樹所表示的系數(shù)更多,使算法的壓縮效率提高。而這種簡單的劃分,雖然沒有利用頻帶間的自相似性,但卻利用了最低頻系數(shù)數(shù)量級(jí)上的相似性,在不增加算法復(fù)雜度的情況下,增大了壓縮效率。舉例來說,如果對一幀圖像進(jìn)行4層小波變換,其具體初始化如圖5所示。
如果是利用本發(fā)明之實(shí)施例中所述的小波變換來進(jìn)行幀內(nèi)以及幀間的編解碼,則需要注意的是,在做運(yùn)動(dòng)預(yù)測時(shí),需要取消傳統(tǒng)運(yùn)動(dòng)估計(jì)中幀內(nèi)塊(intra-block)這一不符合小波特性的部分,將幀內(nèi)的概念擴(kuò)大到整幀的概念。這是因?yàn)樵趥鹘y(tǒng)方法中,在整像素的運(yùn)動(dòng)估計(jì)后,編碼器將決定采用INTER還是INTRA方式,利用公式MB_mean=(Σi=1,j=1Ncoriginal)/Nc]]>A=Σi=1,j=116,16|original-MB_mean|]]>如果A<(SADinter-2*NB),就采用INTRA方式編碼,不必繼續(xù)進(jìn)行運(yùn)動(dòng)搜索;否則采用INTER方式,然后繼續(xù)在V0附近進(jìn)行半像素的運(yùn)動(dòng)搜索。INTER方式即為當(dāng)前宏塊直接采用離散余弦變換(DCT)變換,可以看出,之所以劃分出INTRA宏塊,主要是因?yàn)檫\(yùn)動(dòng)估計(jì)過于劇烈,針對DCT變換的特點(diǎn),INTRA宏塊中,每個(gè)像素值與該宏塊的平均值之差的和很小,這就說明該宏塊的像素值很平均,很平滑,適合DCT變換。但對針對整幀圖像進(jìn)行處理的小波變換,無法對局部進(jìn)行單獨(dú)的變換。因此,INTRA宏塊的編碼不適合小波變換的特性。
在本發(fā)明的優(yōu)選實(shí)施例中,具體到幀內(nèi)編碼時(shí)則拋棄了宏塊的概念。也就是說,I幀的編碼和殘差圖像的編碼是拋棄宏塊的概念的,因?yàn)樾〔ㄗ儞Q是整幀概念的。但對運(yùn)動(dòng)圖像,仍然可以采用分塊的運(yùn)動(dòng)估計(jì),從而利用運(yùn)動(dòng)序列在時(shí)間上的相關(guān)性,去除冗余度。同時(shí),運(yùn)動(dòng)補(bǔ)償可以采取重疊塊運(yùn)動(dòng)補(bǔ)償法(Overlapped Block Motion Compensation)。
本發(fā)明借用了ITU-T H.263和MPEG-4中的運(yùn)動(dòng)估計(jì)和補(bǔ)償?shù)腜B幀模式,在優(yōu)選實(shí)施例中更進(jìn)一步結(jié)合了小波變換的全局性的特點(diǎn),改造ITU-TH.263和MPEG-4中的運(yùn)動(dòng)估計(jì)和運(yùn)動(dòng)補(bǔ)償算法,自適應(yīng)的將圖像分為三類I幀、P幀和B幀。其中I幀作為參考幀,作幀內(nèi)壓縮編碼。PB幀的具體做法是將二幀待編碼的圖像組成一個(gè)單元進(jìn)行聯(lián)合編碼,形式如IBBPBBPBBP……,對P幀圖像進(jìn)行運(yùn)動(dòng)估計(jì),根據(jù)運(yùn)動(dòng)估計(jì)的結(jié)果來判斷是用幀內(nèi)壓縮編碼還是幀間壓縮編碼,如果運(yùn)動(dòng)估計(jì)失敗,則將此幀圖像重新調(diào)整為I幀,進(jìn)行幀內(nèi)編解碼。對于B幀圖像,則只在現(xiàn)存的前后兩幀P幀的運(yùn)動(dòng)矢量的基礎(chǔ)上,在一個(gè)很小的范圍內(nèi)(一般是[-1,+1])進(jìn)行半象素運(yùn)動(dòng)估計(jì)。
對P幀圖像進(jìn)行運(yùn)動(dòng)估計(jì)的搜索窗可選用[-32,+32],而不是H.263中的[-48,+48],減少了搜索時(shí)間和運(yùn)動(dòng)矢量的范圍。對運(yùn)動(dòng)矢量的編碼參考了標(biāo)準(zhǔn)中的差分法,查表的哈夫曼編碼,但編碼所用的表格按照需要進(jìn)行了改動(dòng),使編碼長度相對標(biāo)準(zhǔn)縮短了很多。為了縮短編碼的碼字長度,采取了一系列措施1)將半像素的運(yùn)動(dòng)矢量統(tǒng)一寫成正數(shù)。例如整像素運(yùn)動(dòng)矢量為(5,6),半像素運(yùn)動(dòng)矢量為(-1,-1),則改寫整像素運(yùn)動(dòng)矢量為(4,5),半像素運(yùn)動(dòng)矢量為(+1,+1),這樣可將半像素運(yùn)動(dòng)矢量不放入哈夫曼表內(nèi),以一個(gè)比特單獨(dú)編碼。
2)由于搜索窗口范圍為[-32,+32],則運(yùn)動(dòng)矢量的范圍是[-8,+8],考慮到措施1)中的做法,運(yùn)動(dòng)矢量的范圍為[-9,+8],但我們對邊界采取四舍五入的方式,仍然約束為[-8,+8],這樣哈夫曼輸出碼表的范圍為[-16,+16]。
下表就是運(yùn)動(dòng)矢量預(yù)測后的哈夫曼輸出碼表,相對于H.263的碼表,由于它只包括了整像素的運(yùn)動(dòng)矢量,所以大大減少了編碼的碼字長度,而對還原圖像的質(zhì)量卻基本沒有影響。
運(yùn)動(dòng)矢量預(yù)測后的哈夫曼輸出碼表
在本發(fā)明的實(shí)施例中,對I幀的原始輸入圖像或是P幀的余量誤差圖像數(shù)據(jù)進(jìn)行小波變換和SPIHT編碼后的碼流,可以采用自適應(yīng)模式的二符號(hào)QM編碼器,進(jìn)行算術(shù)編碼。QM編碼器起源于IBM公司的Q編碼器,它是由Langon,Rissanen等人的早期工作發(fā)展而來的。和其它的算術(shù)編碼方法一樣,QM編碼器從原理上可清晰的分為二進(jìn)制編碼和統(tǒng)計(jì)模型兩個(gè)部分。QM編碼器是一種二進(jìn)制編碼方法,這意味著就單一上下文而言,它只能對0和1兩個(gè)符號(hào)進(jìn)行編碼。例如符號(hào)流100011111001011011010……………。
相應(yīng)的,本發(fā)明還提供一種基于運(yùn)動(dòng)估計(jì)的小波視頻解碼方法,其基本上相當(dāng)于編碼過程的逆過程。如圖6所示,首先默認(rèn)第一幀圖像為I幀,并根據(jù)編碼碼流中的信息得到其后視頻幀的編碼類型,確定其為I幀或PB幀(步驟601);然后對I幀進(jìn)行幀內(nèi)解碼,對PB幀進(jìn)行幀間解碼(步驟602);最后將還原圖像數(shù)據(jù)轉(zhuǎn)換為要求的格式(步驟603),一般來說,是從YUV格式轉(zhuǎn)換為RGB格式,但如果只需要YUV格式的數(shù)據(jù),則不需要就其進(jìn)行轉(zhuǎn)換了。
其中,對應(yīng)于本發(fā)明之編碼方的小波變換以及零樹編碼的實(shí)施例過程,解碼方的幀內(nèi)解碼可以根據(jù)輸入碼流,采用算術(shù)解碼、零樹解碼和反量化,然后使用二維的離散小波反變換,得到還原數(shù)據(jù);幀間解碼包括運(yùn)動(dòng)矢量解碼、殘差圖像解碼和運(yùn)動(dòng)補(bǔ)償,其中對幀間解碼的殘差圖像,采用算術(shù)解碼、零樹解碼和反量化,然后使用二維離散小波反變換,得到還原數(shù)據(jù),然后根據(jù)其參考幀進(jìn)行運(yùn)動(dòng)補(bǔ)償,得出還原幀。
具體的說,所述的I幀幀內(nèi)解碼包括如下步驟(1)從解碼碼流中分離出控制信息;(2)對碼流進(jìn)行算術(shù)解碼,再把碼流傳送給零樹解碼部分;(3)對接收后的碼流順序進(jìn)行零樹解碼;(4)對解碼后的數(shù)據(jù)進(jìn)行小波逆變換,得到還原的圖像數(shù)據(jù)進(jìn)行格式變換。
所述的P幀幀間解碼包括如下步驟(1)從解碼碼流中分離出控制信息,進(jìn)行運(yùn)動(dòng)矢量解碼,其次算術(shù)解碼零樹編碼的碼流;(2)根據(jù)運(yùn)動(dòng)矢量和上一幀解壓圖像,構(gòu)成當(dāng)前幀的預(yù)測圖像;(3)對所述碼流進(jìn)行零樹解碼,得到余量誤差圖像的小波變換系數(shù);(4)對解碼后的小波系數(shù)進(jìn)行小波逆變換,恢復(fù)出余量誤差圖像;(5)將預(yù)測圖像與余量誤差圖像相加,解碼出當(dāng)前幀圖像。
B幀幀間解碼包括如下步驟(1)從解碼碼流中分離出控制信息,解碼運(yùn)動(dòng)矢量增量,根據(jù)其前后兩個(gè)P幀的運(yùn)動(dòng)矢量和運(yùn)動(dòng)矢量增量,構(gòu)成當(dāng)前幀的預(yù)測圖像;(2)對碼流進(jìn)行算術(shù)解碼和零樹解碼,得到余量誤差圖像的小波變換系數(shù);(3)對解碼后的數(shù)據(jù)進(jìn)行小波逆變換,恢復(fù)出余量誤差圖像;(4)將預(yù)測圖像與余量誤差圖像相加,解碼出當(dāng)前幀圖像。
以四層二維Daubechies(5,3)小波逆變換為例,對解碼后的數(shù)據(jù)碼流進(jìn)行的四層二維小波逆變換被分割成多個(gè)一維整型小波行逆變換和一維整型小波列逆變換。被分割成的一維整型小波行逆變換和一維整型小波列逆變換的算法如下dl(1)=κ·dl]]>sl(1)=sl/κ]]>sl(0)=sl(0)-β(dl(1)+dl-1(1))]]>dl(0)=dl(1)-α(sl(0)+sl+1(0))]]>x2l+1=dl(0)]]>s2l=sl(0)]]>
式中dl為信號(hào)的高頻樣本,sl為信號(hào)的低頻樣本,dl(1)為經(jīng)伸縮變換后的高頻樣本,sl(1)為經(jīng)伸縮變換后的低頻樣本,α、β為小波變換系數(shù),sl(0)為變換后的高頻樣本,dl(0)為變換后的低頻樣本,(α=-0.5,β=0.25,k=1.2~1.5)。
相應(yīng)的,作為更優(yōu)選實(shí)施例,所述零樹解碼在初始化時(shí)也可以將小波系數(shù)樹形結(jié)構(gòu)增加一層。
權(quán)利要求
1.一種基于運(yùn)動(dòng)估計(jì)的小波視頻編碼方法,其特征在于包括(1)確定圖像數(shù)據(jù)格式為YUV格式;(2)默認(rèn)第一幀圖像為I幀,對其后的視頻幀默認(rèn)為PB幀;(3)對所述其后的視頻幀進(jìn)行運(yùn)動(dòng)估計(jì);(4)根據(jù)運(yùn)動(dòng)估計(jì)的結(jié)果,自適應(yīng)的重新調(diào)整所述其后的視頻幀的類型;(5)根據(jù)視頻幀類型,對I幀進(jìn)行幀內(nèi)編碼,對PB幀進(jìn)行幀間編碼。
2.如權(quán)利要求1所述的方法,其特征在于所述步驟(2)中,對其后的視頻幀還可以指定每隔一定時(shí)間強(qiáng)迫一幀圖像為I幀。
3.如權(quán)利要求1所述的方法,其特征在于所述步驟(3)包括(3-1)把當(dāng)前幀劃分成M×N大小的宏塊,并預(yù)設(shè)SAD閾值;(3-2)對每一宏塊在參考幀范圍內(nèi)進(jìn)行搜索,在參考幀和原始幀的SAD值大于SAD閾值時(shí),則視為該宏塊運(yùn)動(dòng)估計(jì)失??;(3-3)累計(jì)所述當(dāng)前幀運(yùn)動(dòng)估計(jì)失敗的宏塊數(shù),并預(yù)設(shè)失敗數(shù)閾值;(3-4)比較所述當(dāng)前幀累計(jì)運(yùn)動(dòng)估計(jì)失敗的宏塊數(shù)與所述失敗數(shù)閾值。
4.如權(quán)利要求1所述的方法,其特征在于所述步驟(4),如果所述當(dāng)前幀累計(jì)運(yùn)動(dòng)估計(jì)失敗的宏塊數(shù)大于所述失敗數(shù)閾值,則將所述當(dāng)前幀調(diào)整為I幀。
5.如權(quán)利要求1所述的方法,其特征在于步驟(5)所述的I幀幀內(nèi)編碼包括對變換格式后的原始圖像數(shù)據(jù)進(jìn)行小波變換;對小波變換后產(chǎn)生的系數(shù)進(jìn)行零樹編碼和算術(shù)編碼;在編碼后生成的數(shù)據(jù)碼流中插入控制信息,并按幀輸出到信道上傳輸。
6.如權(quán)利要求1所述的方法,其特征在于步驟(5)所述的P幀幀間編碼包括根據(jù)相應(yīng)的運(yùn)動(dòng)矢量,平移參考幀中的相應(yīng)宏塊,形成運(yùn)動(dòng)補(bǔ)償圖像;將當(dāng)前幀圖像和運(yùn)動(dòng)補(bǔ)償圖像相減,得到余量誤差圖像;對運(yùn)動(dòng)矢量進(jìn)行哈夫曼編碼,對余量誤差圖像進(jìn)行幀內(nèi)編碼,B幀幀間編碼包括根據(jù)其前后兩個(gè)P幀或IP幀的運(yùn)動(dòng)矢量,采用相應(yīng)的運(yùn)動(dòng)補(bǔ)償方法,得到(-1,+1)范圍內(nèi)的運(yùn)動(dòng)矢量增量,對運(yùn)動(dòng)矢量增量進(jìn)行哈夫曼編碼;將當(dāng)前幀圖像和運(yùn)動(dòng)補(bǔ)償圖像相減,得到余量誤差圖像;對余量誤差圖像的Y分量進(jìn)行幀內(nèi)編碼。
7.如權(quán)利要求6所述的方法,其特征在于所述余量誤差圖像的幀內(nèi)編碼包括對余量誤差圖像數(shù)據(jù)進(jìn)行小波變換;對小波變換后產(chǎn)生的系數(shù)進(jìn)行零樹編碼和算術(shù)編碼;在編碼后生成的數(shù)據(jù)碼流中插入控制信息,并按幀輸出到信道上傳輸。
8.如權(quán)利要求5或7所述的方法,其特征在于所述小波變換采用一個(gè)伸縮系數(shù)k進(jìn)行優(yōu)化,k=1.2~1.5。
9.如權(quán)利要求5或7所述的方法,其特征在于所述零樹編碼在初始化時(shí)將小波系數(shù)樹形結(jié)構(gòu)增加一層;計(jì)算出所有有后代的系數(shù)的最大子孫值,并將其保存于二維數(shù)組SDL中,用一個(gè)字節(jié)代表原系數(shù)矩陣中有后代系數(shù)的狀態(tài),用最大值的最高位平面代替數(shù)值本身。
10.如權(quán)利要求3所述的方法,其特征在于所述運(yùn)動(dòng)估計(jì)的搜索窗選用[-32,+32]。
11.如權(quán)利要求6所述的方法,其特征在于所述運(yùn)動(dòng)矢量編碼,將半像素的運(yùn)動(dòng)矢量統(tǒng)一寫成正數(shù)。
12.如權(quán)利要求6所述的方法,其特征在于所述運(yùn)動(dòng)矢量編碼,是對邊界采取四舍五入的方式進(jìn)行約束。
13.一種基于運(yùn)動(dòng)估計(jì)的小波視頻解碼方法,其特征在于包括(1)默認(rèn)第一幀圖像為I幀,并根據(jù)編碼碼流中的信息得到其后視頻幀的編碼類型,確定其為I幀或PB幀;(2)對I幀進(jìn)行幀內(nèi)解碼,對PB幀進(jìn)行幀間解碼;(3)將還原圖像數(shù)據(jù)轉(zhuǎn)換為要求的格式。
14.如權(quán)利要求13所述的方法,其特征在于步驟(2)所述的I幀幀內(nèi)解碼包括從解碼碼流中分離出控制信息,進(jìn)行運(yùn)動(dòng)矢量解碼;進(jìn)行算術(shù)解碼,再把解碼碼流傳送給零樹解碼部分;對接收后的碼流順序進(jìn)行零樹解碼;對解碼后的數(shù)據(jù)進(jìn)行小波逆變換,得到還原的圖像數(shù)據(jù)進(jìn)行格式變換。
15.如權(quán)利要求13所述的方法,其特征在于步驟(2)所述的P幀幀間解碼包括進(jìn)行解碼輸出的數(shù)據(jù)首先是運(yùn)動(dòng)矢量,其次算術(shù)解碼零樹編碼的碼流;根據(jù)運(yùn)動(dòng)矢量和上一幀解壓圖像,構(gòu)成當(dāng)前幀的預(yù)測圖像;對所述的碼流進(jìn)行零樹解碼形成余量誤差圖像的小波系數(shù);對解碼后的小波系數(shù)進(jìn)行小波逆變換,恢復(fù)出余量誤差圖像;將預(yù)測圖像與余量誤差圖像相加,解碼出當(dāng)前幀圖像。B幀幀間解碼包括從解碼碼流中分離出控制信息,解碼出運(yùn)動(dòng)矢量增量,并根據(jù)其前后兩個(gè)P幀的運(yùn)動(dòng)矢量和運(yùn)動(dòng)矢量增量,構(gòu)成當(dāng)前幀的預(yù)測圖像;對碼流進(jìn)行算術(shù)解碼和零樹解碼,得到余量誤差圖像的小波變換系數(shù);對解碼后的小波系數(shù)進(jìn)行小波逆變換,恢復(fù)出余量誤差圖像;將預(yù)測圖像與余量誤差圖像相加,解碼出當(dāng)前幀圖像。
16.如權(quán)利要求14或15所述的方法,其特征在于所述小波逆變換采用一個(gè)伸縮系數(shù)k進(jìn)行優(yōu)化,k=1.2~1.5。
17.如權(quán)利要求14或15所述的方法,其特征在于所述零樹解碼在初始化時(shí)將小波系數(shù)樹形結(jié)構(gòu)增加一層。
全文摘要
一種基于運(yùn)動(dòng)估計(jì)的小波視頻編解碼方法,在編碼端首先確定圖像數(shù)據(jù)轉(zhuǎn)換為YUV格式,默認(rèn)第一幀圖像為I幀,對其后的視頻幀默認(rèn)為PB幀,對所述其后的視頻幀進(jìn)行運(yùn)動(dòng)估計(jì),根據(jù)運(yùn)動(dòng)估計(jì)的結(jié)果,自適應(yīng)的重新調(diào)整所述其后的視頻幀的類型,根據(jù)視頻幀類型,對I幀進(jìn)行幀內(nèi)編碼,對PB幀進(jìn)行幀間編碼,相應(yīng)的,在解碼端首先默認(rèn)第一幀圖像為I幀,并根據(jù)編碼碼流中的信息得到其后視頻幀的編碼類型,確定其為I幀或PB幀,然后對I幀進(jìn)行幀內(nèi)解碼,對PB幀進(jìn)行幀間解碼,最后將還原圖像數(shù)據(jù)轉(zhuǎn)換為要求的格式,本發(fā)明自適應(yīng)的判斷編碼類型,使編碼方法更加靈活,提高了編碼效率,能在較低或甚低傳輸速率下實(shí)現(xiàn)較高質(zhì)量的可靠的圖像壓縮。
文檔編號(hào)H04N7/32GK1471321SQ0314950
公開日2004年1月28日 申請日期2003年7月14日 優(yōu)先權(quán)日2003年7月14日
發(fā)明者耿靜, 陳小敬, 龐潼川, 周閏, 靜 耿 申請人:大唐微電子技術(shù)有限公司