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