專利名稱:混合視頻壓縮方法
技術領域:
本發(fā)明涉及視頻壓縮,特別涉及一種用于壓縮視頻幀序列的方法和裝置。
多媒體在日常生活中扮演著一個日益重要的角色。幾乎在任何地方都可以發(fā)現(xiàn)數(shù)字視頻圖像(運動圖像)。
數(shù)字視頻中包含的信息量要求改進數(shù)字視頻系統(tǒng)的傳輸帶寬以及要求更高容量的存儲設備。在后一個領域中的一個發(fā)展證據是近年來閃存半導體存儲器模塊容量的飛速增長。不幸的是,數(shù)字視頻的信息內容非常多,這使得使用半導體存儲器來存儲視頻數(shù)字數(shù)據是不可能的或至少是十分昂貴的。
例如,在無壓縮的情況下,一分鐘的全解析度(D1)數(shù)字視頻需要1,866G字節(jié)存儲容量。帶寬可能達到248000kbit/s。
在20世紀九十年代早期,出現(xiàn)了名為MPEG1的視頻編碼系統(tǒng),該系統(tǒng)能夠將數(shù)字視頻數(shù)據量減少到大概原始的1/30。由于質量問題,對這個系統(tǒng)進行了改進,并且名為MPEG2的視頻編碼器誕生了。這主要用于DVD和DVB系統(tǒng)。作為該系統(tǒng)的一個改進版本,MPEG4被設計用于面向互聯(lián)網的、所謂的流媒體。
本發(fā)明的目標是一個高效的視頻數(shù)據壓縮系統(tǒng)。所提出的系統(tǒng)使得在半導體存儲器模塊中存儲視頻數(shù)據成為可能,允許利用低成本的RAM存儲器模塊來存儲視頻數(shù)據,這種RAM模塊在計算機市場上很普遍。這樣一種非機械的存儲系統(tǒng)(即不包含運動部件的存儲系統(tǒng))可被有利地用在電視機和用于衛(wèi)星和有線電視應用的所謂的機頂盒中,用于廣播節(jié)目的中間存儲,同時還作為常規(guī)磁帶錄像機的一種替代品。
應用本發(fā)明壓縮方法的編碼系統(tǒng)還可被有利地用于代替常規(guī)攝像機的機械磁帶記錄系統(tǒng),例如在閃存中存儲數(shù)字視頻數(shù)據。
所提出的混合視頻壓縮編碼系統(tǒng)使得數(shù)字數(shù)據流的帶寬可被減少到300-600kbit/s,同時保留好的視頻質量,這意味著對于兩小時的視頻僅僅需要4-500M字節(jié)的存儲空間。
I.
背景技術:
已經有多種不同的方法被設計用于壓縮視頻幀序列。
在視頻幀的編碼過程中,為了維持期望的質量和期望的總體數(shù)據長度,編碼數(shù)據量總是在最小和最大極限之間動態(tài)地變化。
通常,已知的軟件程序根據對一個由x個幀構成的序列計算出的平均編碼幀長度來執(zhí)行壓縮控制。如果平均長度超過了上一個平均長度值,壓縮將會更強(壓縮比增加)。如果平均長度小于上一個值,壓縮比就會在指定的最小和最大極限值之間減小。
通常通過選擇“更強的”量化來增加壓縮比(在變換期間執(zhí)行了一個“舍入”操作,見下文)。那會引起更高的錯誤率和噪聲。錯誤通常在視覺上明顯且干擾的,特別是在1Mbit/s的情況下。由于可壓縮性因幀而異,在恒定期望質量的情況下,通常很難維持所期望的平均幀長度。
通常最小和最大長度值不能被設置過高,因為那樣將會使得控制范圍變得太寬,并且編碼長度在過大的尺度上變化。通常的情況是,指定的最小值不能提供所期望的質量,因而有必要進一步提高壓縮比。
I.1.MPEG方法MPEG是用于壓縮視頻數(shù)據的最普遍、最已知的方法之一??梢哉J為它是一種混合編碼方法,因為它結合了基于空間冗余的壓縮和基于時間冗余的壓縮。
基于空間冗余的方法要么通過減少細節(jié)來減少幀的信息內容,要么通過識別并且利用幀中的重現(xiàn)特征。在另一方面,基于時間冗余的壓縮方法利用先前和后續(xù)幀,并且僅僅對這些變化進行編碼。
JPEG是用于靜態(tài)圖像壓縮的已知方法之一。該方法也是基于利用空間冗余。將要被壓縮的圖像劃分成塊,并且使用離散余弦變換來減少這些塊的信息內容。
為了更加容易理解本發(fā)明的創(chuàng)新特征,讓我們簡要地回顧已知的MPEG系統(tǒng)的操作。該系統(tǒng)的操作如
圖1所示,圖1顯示了其功能單元。接收到的要被壓縮的塊通過輸入線1被傳遞給選擇器2。選擇器2決定給定塊是否是一個內部塊、幀間塊或預測塊,并對其作相應處理。已經通過DCT(離散余弦變換)模塊3和量化模塊4的塊,在熵編碼模塊13中被編碼并且通過視頻多路復用器14寫出到輸出15,進入即將被傳輸或存儲的壓縮輸出數(shù)據流。內部/幀間塊的變換數(shù)據(見下面的解釋)是由反量化模塊5,IDCT(反余弦變化)模塊6和選擇器7被重建的,并且這些數(shù)據最后被寫入參考幀存儲器8。如下面所詳細解釋的那樣,量化模塊4在本質上用量化因子來除DCT變換塊的元素(DCT系數(shù))。這些系數(shù)是由反量化模塊5進行重建的,實際上是通過將它們與量化因子相乘。換句話說,反量化模塊試圖將DCT系數(shù)的原始值至少恢復到整除引起的錯誤所允許的可能的程度。這樣做的目的是對每一幀或一幀內的每一塊立即進行解碼。由于該方法使用已解碼的幀作為對下一幀進行編碼的參考,有必要進行立即解碼。這個過程不包括熵編碼(解碼),因為考慮到熵編碼不會引起在已解碼的參考幀中應當加以考慮的信息丟失,它將是多余的。
第一個幀沒有參考,這意味著它總是所謂的內部幀(I幀)。因此,對于第一個幀,重復上面的過程直道整個I-型幀被處理。使用前導或后繼幀作為參考幀的幀或塊被分別稱為P-型和B-型幀/塊。
下一個接收到的幀的塊被提供給運動估計模塊10,該單元試圖從存儲在參考幀存儲器8中的參考幀中為要被編碼的塊尋找一個參考塊。
運動估計模塊10使用找到的參考塊執(zhí)行運動補償,接著由預測模塊9從參考塊中減去了要被編碼的(原始)塊,差被傳遞給執(zhí)行上述變換的模塊到選擇器2,DCT變換模塊3和量化模塊4,接著到熵編碼模塊13,以及最后到多路復用器14。作為運動補償?shù)慕Y果而產生的運動向量(MV)由熵編碼模塊12進行編碼并且被傳遞給多路復用器14,該多路復用器將運動向量插入到輸出數(shù)據流15。
模塊7是一個選擇器/和數(shù)模塊,該模塊對I-型塊不做變動,而在P-型和B-型塊的情況下,將找到的參考塊與反變換的差數(shù)相加。這樣重建得到的塊最后被寫入參考幀存儲器。
在搜索中發(fā)現(xiàn)的位置被熵編碼模塊12轉換成向量并且編碼。
下面將更加詳細的描述這些操作。
I.2.1.
依賴時間冗余的壓縮系統(tǒng)僅僅對連續(xù)幀的變化部分進行編碼。實際上,這是通過將幀劃分成塊并且將各個塊與先前或后續(xù)幀的一個搜索范圍內的像素逐個像素地進行比較而實現(xiàn)的。這個過程如圖2所示,圖2顯示了正在位于先前幀16的搜索范圍21或后續(xù)幀18的搜索范圍19中搜索一個與幀17的給定塊20最佳匹配的參考塊。該參考塊可以位于任何地方,并不需要與參考幀16或18中指定的搜索范圍(灰色顯示)相一致。當然在這種情況下,會出現(xiàn)在給定參考幀中參考搜索不成功的現(xiàn)象。顯然,并未因參考搜索而將參考幀17,18劃分成塊,圖2顯示的塊僅僅是為了更好的概述。
使用下面的表達式來進行比較MSE(k,l;u,v)=1MNΣi=0M-1Σj=0N-1(In(k+i,l+j)-In-1(k+i+u,l+j+v))2]]>其中MSE是所謂的均方誤差,在本質上對待編碼塊與找到的參考塊的各個像素的比較值進行了量化,所述的比較是逐個像素進行的,下標k,l是確定待編碼塊的位置下標,下標u,v是指向位于參考幀中的搜索范圍的下標,以及M,N是該塊的水平和垂直尺寸。
位于包含有待編碼塊的幀緊前面或緊后面的幀被統(tǒng)一稱為參考幀。
在搜索過程當中,在參考幀中建立了一個典型尺寸為-32/32像素的搜索范圍。當前待編碼塊的位置將被指定為搜索范圍的中心。就是說,如果編碼過程當前是在位置10,10,那么這個位置將會是參考幀中搜索范圍的中心。用當前塊逐步地掃描該范圍并且在每一步計算出誤差(上面指定的MSE值)。最佳參考候選將會是在該處的搜索給出最小誤差的位置,就是說,與當前待編碼塊最佳匹配的塊?;谠撜`差值,可以確定該搜索是否可以被認為是成功的。在成功搜索的情況下,查找到的參考塊位置是在全解析度模式中獲得的。然而,在大多數(shù)情況下,搜索結果是不滿意的。
如果我們更加詳細地檢查該問題,很快就會發(fā)現(xiàn)導致過量錯誤(因而不成功的搜索)的原因在于錯誤估計方法。例如,在噪聲幀的情況下,即使在最佳位置兩個塊都不可能是相同的,所述塊的信息內容僅僅因為噪聲而不同。當塊的位移不是嚴格的像素尺寸的倍數(shù)時,位移在兩個整數(shù)像素之間結束,即實際位移僅可以被嚴格地表示為像素尺寸的分數(shù),這種情況也會出現(xiàn)。
因此,為了在當前塊及其參考之間提供一個適當?shù)钠ヅ?,應當過濾掉噪聲以及其它干擾因素。通常低通濾波器被用于此目的。所述的濾波器根據預先確定的采樣頻率執(zhí)行高頻部分的衰減,并且因而能夠在某種程度上抑制圖片噪聲。濾波器通常通過將每個像素與其旁邊和/或上面的像素或兩者進行平均來對誤差進行補償。例如,所謂的1/2像素解析度參考幀是通過在原始幀的每兩個相鄰像素之間插入一個像素來產生的,插入像素的值為兩個相鄰像素的平均值。如果從每兩個相鄰像素的平均值創(chuàng)建新像素,使用該新像素來創(chuàng)建一個與原始幀解析度相同的新幀,則結果基本上相同。實際上,在水平插值的情況下,這個幀相對原始幀被向左移了1/2像素,并且在垂直插值的情況下向上移了1/2像素。
I.2.2.
對于誤差補償,通常建議雙線性濾波器。雙線性濾波器包括創(chuàng)建三個插值(過濾)參考幀,即一個垂直插值,一個水平插值,以及一個既垂直又水平插值。應當記住一個參考幀被解碼(重建)為一個編碼的內部(或幀間)幀的變種。這么做是為了防止基于給定參考幀的更多幀被已解碼的參考幀中存在的量化誤差進一步惡化。
在下一個階段中,搜索是以1/2像素解析度執(zhí)行的(就是說,它是在經過濾波的參考幀中繼續(xù)的)。根據匹配的x,y位置的位元,利用表達式S=(y&1)*2+x&1(這里&代表一個邏輯AND操作)生成了一個選擇器S。
接著,建立了一個范圍為-1/+1,-1/+1,即在點(x+(-1/+1)),y+(-1/+1))的新的搜索范圍,用在第一搜索階段(在未濾波參考搜索)中發(fā)現(xiàn)的最佳塊的位置作為該范圍的中心。
下面使用新的范圍重復搜索。選擇器根據位置來挑選所需的插值參考幀并且在幀中挑選由所述位置確定的特定塊,并且計算相對于當前塊的平方誤差。在搜索的末尾,保留了誤差值最小的位置。如此,從選擇器所指的誤差最小的塊的像素中減去當前塊的像素。這點被顯示在圖3中。在參考幀23中找到了一個與待編碼幀22的塊24相似或相同的塊。當發(fā)現(xiàn)最佳匹配塊25時,將其內容通過數(shù)據線28提供給Sad/Sub(比較)模塊29,根據選擇器在位置值的基礎上利用表達式S=(y&1)*2+x&1所做的選擇,所述的比較是使用下述一種參考幀執(zhí)行的未濾波的參考幀,水平插值(濾波)參考幀,垂直插值(濾波)參考幀或雙向插值(濾波)參考幀。這個過程僅僅涉及一個未濾波參考幀,該參考幀在本地被濾波(插值)。在前面濾波的三個參考幀(水平,垂直,以及雙向插值)可用的情況下,該過程是相同的。在那種情況下,選擇器從上述備選(未濾波幀以及三個不同的濾波幀)中選擇一個適當?shù)膮⒖紟?,并且提供處于位置x,y的塊,用于進一步的比較和處理。
最后,或者是平方誤差或者,在最小誤差塊的情況下,參考塊25和待編碼塊24之間的差異被傳遞給輸出30。
I.2.3.
接著,得到的差異(如果搜索成功)或者當前塊本身(如果搜索不成功)被利用DCT變換從空間表示轉換到頻率表示。這樣通過所謂的量化操作減少了不必要的數(shù)據精度。這在本質上涉及丟棄由DCT產生的高階系數(shù),因為這些系數(shù)通常很小。剩下的DCT系數(shù)也要么很小要么是零值,這些值以及上面建立的位置值可以用熵編碼有效地編碼。這個過程顯示在圖4-5中。
圖4顯示了對于一個內部幀的編碼過程的示意性框圖。輸入幀31具有Y,UV格式,其中Y包含亮度信息并且UV包含顏色差異(色度)信息。幀31包括例如8×8像素大小的塊。因而,各個塊是8×8的矩陣,具有與給定的幀相關聯(lián)的單獨的Y和UV塊。在下面,如果沒有特別指出,Y和UV塊同樣地被編碼,因此在圖4中它們一般地用矩陣f(i,j)表示。在步驟31中在給定塊上執(zhí)行DCT變換的結果是由F(u,v)表示的矩陣,該矩陣也包括8×8的元素。在步驟33中修改矩陣F(u,v)單獨的元素,我們獲得了量化后的矩陣Fq(u,v),在圖4中用參考數(shù)字37指代。正如在前面已經指出的那樣,量化在本質上涉及減少不必要的數(shù)據精度,實際上是通過丟棄矩陣F(u,v)的某些元素實現(xiàn)的。從而,從此以后,原始塊中包含的信息被包含在量化矩陣37中。在步驟34中使用差分脈沖編碼調制(DPCM)減少了量化矩陣37的第一個元素,即所謂的DC系數(shù)。這在本質上意味具有相同數(shù)量級的后續(xù)塊的DC系數(shù)被彼此相減,并且以這種方式獲得了小振幅的DC系數(shù),這些DC系數(shù)可以由步驟36中執(zhí)行的靜態(tài)霍夫曼熵編碼更加有效地編碼。所述矩陣的其它元素,即所謂的AC系數(shù),使用所謂的游程編碼進行編碼,對于重復出現(xiàn)的系數(shù)游程編碼僅僅記錄出現(xiàn)次數(shù)和系數(shù)值(下面詳細描述了該過程)。DC和AC系數(shù)是從8×8量化矩陣中遵循所謂的Z字形(Zig-Zag)掃描順序提取的,如在矩陣37中所示的那樣。因此這些系數(shù)是以頻率增加的順序被提供給熵編碼器的,從低頻系數(shù)開始,一直到高頻系數(shù)。
I.2.4.
在不是內部塊而是幀間編碼塊的情況下,圖5顯示了一個匹配和補償?shù)腜-型塊的編碼。通過搜索來為待編碼塊42找到一個參考塊43。塊42位于其原始位置40,在當前待編碼幀的塊38之間。參考塊43可以位于參考數(shù)字41所指示的位置。搜索是通過把待編碼塊42步進穿過參考幀的搜索范圍39來執(zhí)行的。如果找到最佳匹配,就從參考塊43中減去待編碼塊42(或相反)來生成待編碼塊42和匹配的參考塊43之間的誤差。以這種方式,獲得了誤差的亮度44和色度45分量。在步驟46中,這些分量要經歷DCT變換,量化,以及游程編碼,并且最后在步驟47中,游程編碼數(shù)據要經歷進一步的熵編碼。
由于原始幀在解碼過程中不能作為參考,只有已解碼的幀能被用作參考。這就是為什么有必要在編碼過程中從已經編碼的數(shù)據中重建參考幀。這么做最簡單的方式是在量化之后立即執(zhí)行反量化和反DCT變換。
在參考搜索成功的情況下,匹配的參考塊被添加到反變換塊,并且反變換塊被寫入當前幀的當前位置。因為這個步驟中獲得的幀將用作下一個幀的參考,當前幀的所有塊都需要被更新。
如果參考搜索成功,該塊被劃分為幀間塊,而在搜索不成功時該塊被劃分為內部塊。塊分類數(shù)據對于解碼器是必要的,因為它們指出該塊在編碼過程中是如何生成的。幀是按照相同的原則被分類的。
如果沒有找到一個幀的參考(或者如果該幀相對參考幀發(fā)生的變化大到這樣一種程度差分編碼將需要與原始幀編碼幾乎相同的數(shù)據量),使用DCT對整個幀進行轉換并且該幀被劃分為I-幀。如果一個幀僅僅使用前導幀作為參考,它被劃分為P-幀,而在該幀使用前后幀作為參考的情況下,它被劃分為B-幀。
圖6示例了對于B-幀,編碼系統(tǒng)既在前導幀48又在后續(xù)幀50中來搜索待編碼塊C的一個參考49,最后要么讓產生最小誤差的幀作為參考,要么讓兩幀的線性插值平均值作為參考。
首先計算出匹配塊P和C的MSE值,接著計算塊F和C的MSE。接下來,該系統(tǒng)計算表達式0.5*(P+F)產生的塊和塊C的MSE,并且最終對產生最小MSE的備選塊進行編碼。就是說,在塊C的MSE與前導幀48最相關時,所述幀48的塊P變成了塊C的參考塊。在最佳結果是由緊隨幀49的幀50產生的情況下,那么幀50的塊F就變成了C的參考,以及如果最佳結果是利用F和P的平均獲得時,那么這兩塊都被用作C的參考。如果沒有足夠好的結果,那么該塊被編碼成一個內部塊。塊描述符結構必須總是顯示出參考的源,就是說,塊C是如何編碼的。
I.2.5.
在參考搜索成功的情況下,所建立的參考位置被轉換成了向量并且這些向量被編碼。這些向量指定了待編碼塊相對于參考的位移幅度和方向。
可以由以下事實說明使用DCT的合理性在部分系數(shù)被刪除(被清零)的情況下,反DCT變換能夠以很好的近似重建原始數(shù)據塊。
可能會出現(xiàn)這個問題既然DCT僅僅是FFT的一個變種,為什么使用DCT?答案在于經驗證明對于視頻編碼DCT給出了比FFT更好的功能近似。在圖7中用一些具體值作為例子說明了這一點。FFT系數(shù)52和DCT系數(shù)53是通過在輸入數(shù)據51上分別執(zhí)行FFT和DCT變換產生的。量化之后(就是說,丟棄或刪簡系數(shù)之后),獲得了刪簡的FFT系數(shù)54和刪簡的DCT系數(shù)55。反變換后,獲得了IFFT重建數(shù)據56和I DCT重建數(shù)據57。用曲線58和59描繪重建數(shù)據,可以看出FFT對于系數(shù)刪簡更加敏感。
I.2.6.
量化的目的是減少幀數(shù)據的精度(詳細程度),丟棄不必要的細節(jié)。
如果對一個給定塊進行仔細檢查,就可以注意到該塊包含許多視覺察覺不到的細節(jié)。原因在于人眼的敏感度朝著較低的空間頻率分量增加。因而,如果該幀的高頻分量比低頻分量衰減得更厲害,直到某個極限,雖然數(shù)據的壓縮率增加了但在解碼幀中視覺上察覺不到變化。MPEG1-2標準使用了這種量化。根據另一種已知的方法,忽略了系數(shù)的頻率分布,因此每個系數(shù)將除以相同的常數(shù)(H26x-MPEG4)。量化最重要的功能是減少描述DCT系數(shù)的比特數(shù)。換句話說,希望用盡可能少的比特來描述DCT變換系數(shù)。描述一個系數(shù)的比特數(shù)越少,壓縮率就更好。然而,當除數(shù)的值增加時,整除引起的錯誤也會增加。
還存在其它用于減少表示DCT系數(shù)的比特數(shù)的已知方法。例如,所謂的DC(增量碼)預測是基于認識到位于連續(xù)DCT塊第0個位置的值彼此之間僅有輕微差異。因此,如果從前一個DC值中減去當前的DC值,有可能減小DC分量的值以及表示這些值的比特數(shù)。(位于一個塊第0個位置的系數(shù)被稱為DC,而其它的被稱為AC。)AC預測的過程與DC預測相似,差異在于以不同的方向來掃描系數(shù),并且使用不同的方法來平均系數(shù)。對于AC/DC預測有許多已知的解決方案,因此不需要在這里詳細的對它們進行描述。
II.
本發(fā)明的總目的是改進上面提到的已知方法的壓縮效率,或更確切地,是以相對低的計算負載提供有效的壓縮。利用附屬于本說明書后面的獨立權利要求中描述的發(fā)明方法已實現(xiàn)了該目的。
雖然上述方法可被有效地單獨使用,但同時使用它們可以導致特別重要的改進,這一方面由于各個方法的效果被疊加了,另一方面由于各個方法關注壓縮過程的不同階段。
執(zhí)行本發(fā)明方法的步驟的其它裝置和軟件(計算機程序產品),以及其它主要是對編碼數(shù)據執(zhí)行解壓縮的逆方法,也是本發(fā)明的目的。
結合附圖詳細解釋了本發(fā)明,其中圖1顯示了現(xiàn)有MPEG編碼技術的示意性的框圖,圖2示出了發(fā)現(xiàn)幀間幀的方法,圖3示出了用于比較參考塊和待編碼塊的方法,圖4顯示了DCT變換、量化以及后面的熵編碼的步驟,圖5示出了從參考塊中減去待編碼塊的方法,圖6示出了在前導或后繼幀中搜索參考幀的過程,圖7顯示了DCT和FFT方法之間的差異,圖8是本發(fā)明的混合視頻編碼器的示意性功能圖,
圖9示出了內部塊的預測模式,圖10示出了如何從可能的預測模式中選擇預測模式,圖11顯示了塊分割編碼的一個實施例,圖12顯示了使用不同尺寸子塊的可能的塊分割,圖13示出了包括三個不同塊尺寸的分割,圖14示出了包括兩個不同塊尺寸的分割,圖15a-c顯示了可用于P和B幀的搜索模式,圖16示出了使用減少的樣本的參考搜索方法,顯示了搜索過程中使用的塊尺寸和塊模式,圖17顯示了在根據本發(fā)明的方法中使用的插值參考幀是如何生成的,圖18a示出了根據本發(fā)明在神經算術編碼單元中選擇(尋址)神經元,還顯示了神經元組合在地址范圍中的布局,圖18b顯示了用于根據本發(fā)明的神經帶寬控制系統(tǒng)的一個實施例的神經網絡示意圖,圖18c顯示了用于根據本發(fā)明的神經帶寬控制系統(tǒng)的另一個實施例的神經網絡示意圖,圖19顯示了在高度動態(tài)范圍神經帶寬控制系統(tǒng)中輸入數(shù)據的數(shù)據路徑的修改,圖20示出了根據本發(fā)明的動態(tài)縮放方法,圖21顯示了在本發(fā)明的動態(tài)縮放方法中實現(xiàn)的傳輸信噪特征,與無動態(tài)縮放的特征進行了比較,圖22是對利用根據本發(fā)明的方法編碼的視頻數(shù)據進行解碼的過程的流程23是應用了根據本發(fā)明的方法的音頻視頻數(shù)據編碼系統(tǒng)的示意框圖,圖24是一個系統(tǒng)的示意框圖,該系統(tǒng)用于對依照本發(fā)明編碼的音頻和視頻數(shù)據進行解碼。
III.
圖8示出了根據本發(fā)明的混合編碼系統(tǒng)的邏輯結構(示意功能圖)。該系統(tǒng)的主要功能單元在許多方面與圖1所示的已知MPEG編碼系統(tǒng)相似。輸入視頻數(shù)據60,換句話說,待編碼幀被提供給幀縮放單元61,該單元根據許多不同標準(下面詳細討論),要么減少輸入幀的尺寸要么對其不做改變。整個系統(tǒng)由編碼控制單元62控制,在本說明書中稍后將對其確切功能加以闡明。依據內部/幀間開關63,根據內部或幀間編碼編碼這些幀或塊。經過DCT變換模塊64,量化模塊65以及熵編碼模塊72之后,處于已變換、已量化并且已編碼的狀態(tài)的塊被引導到輸出73。由反量化模塊66和反DCT模塊67生成編碼幀間幀所需的參考幀,重建的參考幀從這些模塊通過一個解塊(de-block)濾波器69被提供給幀存儲器70。運動補償,即產生濾波的參考幀以及補償?shù)倪\動信息74(運動向量及被減塊)是由參考數(shù)字68指代的一個模塊執(zhí)行的(其解析度可以在1/2,1/4以及1/8像素之間調整)。幀存儲器70存儲當前參考幀,其中的塊被自動地刷新(實現(xiàn))。模塊71執(zhí)行對變化的識別,并且發(fā)現(xiàn)最適合用于跟蹤幀中變化的塊分割,并且模塊71使用四杈樹結構(后文詳述)描述最佳塊分割。熵編碼模塊72是一個所謂的神經算術壓縮器(見下)。
下面我們將更加詳細地解釋根據本發(fā)明的編碼(壓縮)過程的某些特征。
本說明書中使用的術語“預測”,在某種意義上涵蓋了可逆轉的數(shù)學表達式,這些數(shù)學表達式利用實際的或潛在的可預期的相似性,基于一種實質上平均特征的操作,并且返回具有良好近似性的原始值。這意味著數(shù)據重建只能產生原始數(shù)據的近似值,換句話說,期望值是“預測的”。出于實踐目的,使用一個特定函數(shù)來執(zhí)行這些計算(通常涉及取平均操作)。
本發(fā)明的壓縮方法本質上具有一種混合特性,因為它同時利用了時間和空間冗余。基于分層的塊結構實現(xiàn)了壓縮,該結構包含了尺寸動態(tài)變化的塊。參考搜索不僅使用緊鄰當前幀的前導或后繼幀,還使用更多的前導或后繼幀,最大深度為+1和-3個幀(就是說,允許在1個后繼幀和3個前導幀中進行參考搜索)。由該方法實現(xiàn)了高級別的運動補償,解析度范圍從1/2到1/8像素變化。熵壓縮器基于多級預測執(zhí)行最優(yōu)化的算術編碼。
在下面,術語“內部預測”意味著一種可逆轉的算術表達式,它基于一個或多個參考塊中的值,減少或清除當前待編碼塊的像素值。
為了清楚起見,不得不指出在本說明書中參考了兩種本質上不同的預測原則1.所謂的“內部預測”,用于對內部幀編碼,以及2.用于神經熵編碼的預測。
在適當?shù)牡胤街赋隽诉@些預測原則。
IV.對待編碼塊的快速內部預測IV.1.
內部預測是基于觀察到一個給定幀中相鄰塊通常具有相似的屬性,因此這些相鄰塊之間的空間相關性可被用于減少信息。因而,使用上述的內部預測過程,可以根據與所選塊相鄰的一塊或多塊中預定像素的信息內容,來修改所選塊(待編碼塊)的信息內容。在一個可能的方面,可以使用位于待編碼塊前面的塊的垂直線76或位于待編碼塊上面的塊的水平線77(就是說,其中的像素值)或二者來實現(xiàn)內部預測,如圖9中所示意。另垂直線76被稱為B,水平線77稱為A。
讓我們考慮一個具體的例子令221,224,230,232是位于待編碼塊上面的塊的最后一條水平線77的元素。
令待編碼塊如下-------------------------------219,223,226,232219,224,224,231217,220,221,229214,220,221,228現(xiàn)在從待編碼塊的每條水平線中減去水平線77。我們獲得如下預測塊2,1,4,02,0,6,14,4,9,37,4,9,4這個例子使用水平預測。該預測的優(yōu)點在于減少像素的比特,以及,由于可以觀察到在水平線77中值從左向右增加的趨勢,證明與待編碼塊中的情況相同,待編碼數(shù)據的熵也提高了。得到的值的分布為2ד2”,2ד1”,2ד0”,4ד4”,2ד9”,1ד7”,這顯示了比原始塊更高的符號出現(xiàn)率。
定義了更多的變換/預測類型,通過應用其中之一,可以獲得更好的熵。因而,在所提解決方案的一個實際的實施例中,對修改的(預測的)塊進行了編碼,而沒有對原始的待編碼塊75進行編碼。預測塊這樣計算的通過逐線地從待編碼塊75的水平或垂直線中減去鄰接水平線77A或垂直線76B,或者從原始像素值中減去A和B的平均值,典型地利用公式(像素-(A+B)/2)完成該計算,并且從而獲得所謂的預測塊。本質上這是一個已知的解決方案,但是我們認識到,如果我們允許使用不同尺寸的塊,甚至同時混合它們(通過這種方式我們通常獲得了可被更好地壓縮的塊),則內部編碼的效率可被顯著地提高。然而,必須執(zhí)行的大量計算使得這種解決方案本身不可行。在已知的方法中,是通過在預測塊上有效執(zhí)行DCT變換和熵編碼而發(fā)現(xiàn)最終、最佳的壓縮預測塊的。只有在此之后,才能確定給定的預測塊可被壓縮的程度。然而,在以上步驟中發(fā)現(xiàn)的最佳壓縮預測塊只有在重建塊(與原始塊相比)的誤差不太高時才可被使用。因此,為了測量誤差還必須執(zhí)行反變換。總而言之,需要極高的計算能力。
因而,根據本發(fā)明,在執(zhí)行DCT變換之前,在待編碼塊上執(zhí)行了一個可壓縮性分析?;谏鲜隹蓧嚎s性分析,使用DCT和熵編碼對該塊進行編碼。然而,在大多數(shù)情況下,可壓縮性分析顯示值得通過將待編碼塊劃分成進一步的子塊來檢查該塊的可壓縮性。在這種情況下,分析了與不同塊分割變量相關的塊的可壓縮性,并且選擇了能夠實現(xiàn)最佳潛在結果的分割。最后,經過塊分割以及緊隨其后的內部預測之后,在所選擇的、潛在最有利的塊分割的基礎上,執(zhí)行了DCT變換。
IV.2.
下面將更加詳細地描述這個過程。
正在圖12中可以看到的那樣,在所示的本發(fā)明的實施例中,可能的塊尺寸為16×16,8×8,以及4×4像素??梢砸远喾N方法來執(zhí)行不同尺寸塊的(內部)預測。這些被列舉在后面的頁中。
IV.2.1. 4×4塊的預測定義了六種類型的預測。
1.DC預測令S0是預測向量如果存在A和B,那么S0=∑(Aj+Bj+4)/8否則,如果只存在AS0=∑(Aj+2)/4否則,如果只存在BS0=∑(Bj+2)/4否則S0=128因而根據下面的公式計算出了預測塊DCP(j,i)=IB(j,i)-S0,其中j=0..3,i=0..3其中IB是待編碼塊,以及DCP是預測塊。
2.水平預測DCP(j,i)=IB(j,i)-A(i),其中j=0..3,i=0..33.垂直預測DCP(j,i)=IB(j,i)-B(i),其中j=0..3,i=0..34.組合了水平和垂直預測的對角線預測T(0,0)=(B(3)+2*B(2)+B(1)+2)/4T(1,0)=(B(2)+2*B(1)+B(0)+2)/4T(2,0)=(B(1)+2*B(0)+A(-1)+2)/4T(3,0)=(B(0)+2*A(-1)+A(0)+2)/4T(4,0)=(A(-1)+2*A(0)+A(1)+2)/4T(5,0)=(A(0)+2*A(1)+A(2)+2)/4T(6,0)=(A(1)+2*A(2)+A(3)+2)/4DCP(j,i)=IB(j,i)-T(j-i+3)其中j=0..3,i=0..3
5.垂直對角線預測T(j,i)=A(3)其中j=0..3,i=0..3T(0,0)=(A(0)+A(1))/2T(1,0)=A(1)T(0,1)=T(2,0)=(A(1)+A(2))/2T(1,1)=T(3,0)=A(2)T(0,2)=T(2,1)=(A(2)+A(3))/2DCP(j,i)=IB(j,i)-T(j,i)其中j=0..3,i=0..36.水平對角線預測T(j,i)=B(3)其中j=0..3,i=0..3T(0,0)=(B(0)+B(1))/2T(0,1)=B(1)T(1,0)=T(0,2)=(B(1)+B(2))/2T(1,1)=T(0,3)=B(2)T(2,0)=T(1,2)=(B(2)+B(3))/2DCP(j,i)=IB(j,i)-T(j,i)其中j=0..3,i=0..3IV.2.2.根據類似的原則,可以實現(xiàn)尺寸為8×8像素的塊的預測。
在這種情況下,定義了四種可能的預測類型1.DC預測如果存在A和B,那么S0=∑(Aj+Bj+8)/16否則,如果只存在AS0=∑(Aj+4)/8否則,如果只存在BS0=∑(Bj+4)/8否則S0=1282.水平預測
DCP(j,i)=IB(j,i)-A(i),其中j=0..8,i=0..83.垂直預測DCP(j,i)=IB(j,i)-B(i),其中j=0..8,i=0..84.對角預測DCP(j,i)=IB(j,i)-(A(i)+B(i))/2,其中j=0..8,i=0..8IV.2.3.最后,16×16像素塊的預測也是類似的。
在這種情況下,定義了四種預測類型1.DC預測如果存在A和B,那么S0=∑(Aj+Bj+16)/32否則,如果只存在AS0=∑(Aj+8)/16否則,如果只存在BS0=∑(Bj+8)/16否則S0=128DCP(j,i)=IB(j,i)-S0,其中j=0..15,i=0..15(IB是當前塊,DCP是預測塊)2.水平預測DCP(j,i)=IB(j,i)-A(i),其中j=0..15,i=0..153.垂直預測DCP(j,i)=IB(j,i)-B(i),其中j=0..15,i=0..154.所謂的平面預測v=5*((∑(A(j+7)-A(j-7))*j))/4)/4h=5*((∑(B(j+7)-B(j-7))*j))/4)/4k=A(15)+B(15)T(j,i)=(k+(i-7)*h+(j-7)*v+16)/32DCP(j,i)=IB(j,i)-T(i),其中j=0..15,i=0..15IV.2.4.因此,在這個情況下,所提的方法使用了三種不同的塊尺寸以及多達14種預測類型。很容易發(fā)現(xiàn),如果應用了已知的方法,就會需要很高的計算機能力,因為所有預測和后續(xù)計算應該在16×16模式(就是說,在允許塊尺寸為16×16的情況下)中被執(zhí)行4次,在8×8模式中也是4次,以及在4×4模式中16次。
實際上,這意味著如果16×16尺寸的塊沒有被劃分成子塊,P→DCT→Q→IQ→IDCT→IP變換序列,以及后續(xù)的對系數(shù)的熵編碼,以及確定原始和反變換塊的MSE值,都需要被執(zhí)行4次。如果允許將塊劃分成子塊,根據上面描述的方法,總共的變換次數(shù)增加到16(4*4)或甚至96(6*16)次之多(雖然塊尺寸較小)。
因此,對最佳預測塊的選擇是根據圖10所示的流程圖執(zhí)行的。塊數(shù)據79通過多路復用器/選擇器80根據塊尺寸,從上面列舉的模式中選擇當前的預測模式81。選擇器82b可由用戶設置為將預測塊的塊數(shù)據79直接地或通過一個哈達馬(Hadamard)變換模塊82a引導到處理單元82c。處理單元82c產生該塊的絕對平方和,并用比較器83評估產生的和。在該值小于參考閾值的情況下,用該瞬時和覆蓋所述的參考閾值,并由處理單元84將當前預測模式和預測塊一起存儲。接下來,多路復用器/選擇器80為下一次預測選擇模式,并且重復整個過程直到所有可用的模式——換句話說,與該塊不同的潛在分割有關的所有預測模式——進行過測試。最后,確定最佳預測塊以及產生該最佳預測塊的預測模式。
處理單元82c使用下面的公式來對預測塊進行疊加sum(i)=Σi=0Mabs(pixel(i))2]]>(方程I)其中M是塊長度。
在某些情況下,可以證明上面的方法沒有考慮空間頻率是不利的。這就是包括Hadamard變換模塊82a的原因。在計算平方和之前執(zhí)行該變換,并且用戶可以決定是否應用該變換。Hadamard變換的定義在下面給出。在產生了變換塊的頻率分量/系數(shù)的意義上,該變換與DCT相似。在大多數(shù)情況下,將會產生更加有效的預測,其中變換塊包含更少的頻率分量/系數(shù)。
在如上所述確定了最佳塊分割和相應的預測模式之后,執(zhí)行剩下的變換(DCT...)并且用熵編碼模塊對該塊進行編碼。
通過將本發(fā)明方法與已知的解決方案進行對比,可以看出我們的方法的質量/壓縮比要好cca.1dB。雖然已知的方法可以實現(xiàn)更好的壓縮,但它總是以質量為代價。然而,本發(fā)明方法提供了更好的圖像質量以及實際上相同的壓縮率。
本發(fā)明方法的另一個重要特征是如果執(zhí)行了哈達馬變換其計算負載大概是已知方法的1/10,以及如果不應用哈達馬變換其計算負載大概是已知方法所需的計算負載的1/16。
由于為了成功解碼必須以某種方法記錄塊的分割,因此根據所謂的四杈樹結構對塊進行分割。每個16×16像素的塊可被想象成有四個子孫葉子的根,這些葉子依次可被進一步分解成四個其它的子孫,塊尺寸減少到4×4。在圖11中示出了這一點,其中在給定塊的4×4像素的子塊之一(03)中,顯示了進一步的2×2像素子塊,并且在其中一個2×2像素的塊中,顯示了各個像素。在該塊的圖像旁邊的圖示出了各個子塊,或者甚至該塊的各個像素在需要的情況下是如何被標識的??梢郧宄乜吹剑S著解析度的增加,描述給定分割所需的數(shù)據量也增加。
這種分割方法(允許三種不同的塊尺寸)被提出作為本發(fā)明方法的默認方法。然而,在另外一種實現(xiàn)中,可以由用戶或系統(tǒng)本身將其改寫,并且可以設置一種僅僅使用兩種不同塊尺寸的模式。這種模式將方便地屬于整個幀,并且不會與三個塊尺寸模式混淆,避免給定幀中的一個塊是以兩種塊模式編碼的,而另一個是以三種塊模式編碼的。
在本發(fā)明所提出的一個方面中的內部預測編碼通過使用動態(tài)變化的塊尺寸允許4種可能的模式(I-型)。因而,在整個I-幀編碼期間,允許應用不同尺寸的塊(下面列舉了可用的塊尺寸)。應當再次注意到,必須在該幀的頭部結構中指出所選擇的模式。在這個例子中,4種可能的模式如下●使用三種不同的、動態(tài)變化的塊尺寸的編碼(16×16,8×8,4×4)。
●使用兩種動態(tài)變化的塊尺寸的編碼(16×16和8×8)。
●使用兩種動態(tài)變化的塊尺寸的編碼(16×16和4×4)。
●使用兩種動態(tài)變化的塊尺寸的編碼(8×8和4×4)。
在該方法的一個實現(xiàn)中,用戶只可以在兩種塊和三種塊模式之間選擇,或者可選地,系統(tǒng)能夠自動地選擇最優(yōu)的模式。因而,用戶可以從下面的選項中選擇1.使用三種不同的、動態(tài)變化的塊尺寸的編碼。
2.使用兩種動態(tài)變化的塊尺寸的編碼。
3.自動選擇上述選項的其中之一。
選擇通常是由可用的計算能力所決定的,或者可選地,是基于對待編碼幀的某些特征所作的估計。
圖12示出了用在上述例子中的塊尺寸。
下面讓我們更加詳細地討論使用動態(tài)變化的塊尺寸的內部預測編碼的過程。
IV.3.使用三種不同的、動態(tài)變化的塊尺寸的內部預測編碼(I-型)Y塊的大小為16×16,或換言之,使用了四個8×8像素的子塊或十六個4×4像素的子塊。
UV的大小是8×8,或者與Y塊的分割相對應,使用了四個4×4像素的子塊或16個2×2像素的子塊(見圖13)。必須注意到,只有在“幀間”模式中才允許UV色面上的2×2像素的塊尺寸。
因為應用了三種不同的塊尺寸,需要一種選擇最優(yōu)尺寸的方法。
如果我們打算根據已知的方法去做,我們不得不使用最大塊尺寸來執(zhí)行所有必須的變換,并且測量原始和重建塊之間的誤差。然后,在誤差超過一個極限的情況下,該塊將被劃分成四部分,并且對每個子塊重復變換和誤差比較。那些誤差大于一個給定閾值的子塊將再次被劃分成4個子塊并且再次重復變換。
雖然這種方法很理想,但它涉及大量的、對于產生最終結果不需要的變換。
在一個塊必須被劃分成三個8×8和四個4×4像素的子塊的情況下,需要在16×16塊的兩個方向上執(zhí)行一組變換,也需要在兩個方向上執(zhí)行四組8×8的變換,還需要執(zhí)行四組4×4的變換。其中,在16×16塊上執(zhí)行的一組變換以及在其中一個8×8塊上執(zhí)行的一組變換(DCT和熵編碼解碼)是多余的。因而,不得不執(zhí)行這些不必要的恰恰具有最高計算負載的變換組。
因此,根據本發(fā)明,首先在塊上執(zhí)行了可壓縮性分析。在本發(fā)明的一個方面,這是通過將該塊劃分成四個子塊并且使用下面的公式計算出該塊所謂的方差而實現(xiàn)的variance=Σj=0Mpixelj2-(Σj=0Mpixelj)2M]]>(方程II)其中M是子塊的長度,并且通過檢驗是否滿足條件方差≤TH8或方差≤TH16,這里TH8=對于8×8的塊所允許的方差閾值,TH16=對于16×16的塊所允許的方差閾值。
TH8和TH16是經驗常數(shù)。如該公式所示,“方差”值對該塊中可視細節(jié)的數(shù)量作了量化。
根據用戶的選擇,可以在計算前激活哈達馬變換,但是TH常數(shù)將與無哈達馬變換時計算中所用的常數(shù)不同。
如果所有子塊的方差值都保持在+/-N%的范圍內,并且所述方差值的和不超過預置閾值TH16,那么就可以使用最大塊尺寸對該塊進行編碼。
如果上面的條件不滿足,但是子塊的方差小于TH8,給定的子塊可以8×8的尺寸被編碼。否則,8×8像素的子塊還應當被進一步劃分成4×4像素的子塊。
當確定TH8/16的值時,應當考慮量化引起的誤差,因為如果量化誤差相對低,可以使用較大的塊尺寸且得到滿意的結果,對塊再次劃分就變得不需要了。
例如,TH值可以使用下面的表達式來確定TH(i)=TH基礎值(i)*誤差因子(qp),其中i=0..1且qp=1..MAXQP誤差因子(qp)的值是從一張由qp索引的表中取得的,該值是基于量化因子QP而確定的。在這個案例中,由本發(fā)明的神經控制系統(tǒng)提供了所述的量化因子QP,將在合適的地方描述該神經控制系統(tǒng),但是備選地,QP也可以是常數(shù)或利用另外一種已知的方法確定的。
誤差因子表包含了從組合量化誤差值生成的值,且誤差因子值隨索引值的增大而減小。
換句話說,更高的量化意味著TH更小的變化以及更嚴格的條件,或者再換句話說,一個塊中可視細節(jié)的數(shù)量更多,并且更高的量化引起塊尺寸收斂到較小的塊尺寸值。
因為,如下面所解釋的一樣,塊分割本身的編碼需要相對高的數(shù)據量,檢查是否值得允許使用三種不同的塊尺寸是有利的。在僅允許兩種不同塊尺寸的情況下,為了記錄塊分割數(shù)據,只需對更少的額外信息進行編碼。
因此,在本發(fā)明的一個方面,對整個幀進行了塊分割分析,對每個塊尺寸賦予一個統(tǒng)計量(就是說,確定了具有每個允許的塊尺寸的塊的個數(shù))。如果對于所有塊尺寸,每個尺寸的發(fā)生率都大致相同,并且我們使用三種塊或自動選擇模式,則繼續(xù)該過程。否則,如果大多數(shù)塊是兩種主要塊尺寸其中之一,那么就確定這些主要塊尺寸,并且使用標題為“使用兩種動態(tài)變換的塊尺寸的內部預測編碼”章節(jié)中描述的步驟執(zhí)行該方法(下面的IV.4.章)。
該方法分兩部分工作。
首先,在方差計算的基礎上,對整個幀執(zhí)行可壓縮性分析,作為結果確定了最優(yōu)塊分割。在第二部分,利用那些為正在執(zhí)行的最優(yōu)分割而發(fā)現(xiàn)的預測來執(zhí)行塊分割,并且最后,利用那些被證明是最佳的預測,在屬于所選擇的塊分割的每個塊上執(zhí)行編碼和反變換。
雖然方差分析確切地指定了應該怎樣分割一個給定塊的各子塊,但是必須以某種方式記錄該分割。最明顯的解決方案使用所謂的四杈樹結構(在圖11中示出)。
為了描述整個塊,需要兩個變量級。第一級的變量被稱為L,而第二級變量用字母ABCD指代。在給定塊未被分割的情況下,L被置為0(如果塊尺寸為16×16那么L=0)。如果該塊被分割,L被置為1。在這種情況下,需要另外四個比特來描述子塊。
如果一個子塊未被進一步分割(具有8×8像素的尺寸),相關比特的值為0。在該子塊被進一步分割的情況下(分割成4×4像素子塊),相關比特的值為1。例如L ABCD0 -------- 該塊未被分割1 0000 該塊被劃分成4個8×8的子塊
10001該塊的前四分之一被劃分成4×4像素的子塊,其它塊的尺寸為8×810010該塊的第二個四分之一被劃分成4×4像素的子塊,而其它的尺寸為8×8如果該塊被分割(L=1),有16種可能的組合,因此在這種情況下,對塊的分割進行編碼的數(shù)據(包括L)是5比特長,而如果該塊未被分割,分割數(shù)據僅為1比特長(只有L)。
在完成塊分割之后,執(zhí)行與每個塊相關的變換并且在熵編碼模塊中對已變換的塊進行編碼。
IV.4.使用兩種動態(tài)變化塊尺寸的內部預測編碼如果分析決定使用兩種塊尺寸更有利,那么就使用已經確定的兩種主要塊尺寸。(圖14顯示了可能的子塊配置。)使用兩種塊尺寸的編碼以與我們上面描述的在本質上相同的方式執(zhí)行,只有幾個微小的調整。
在其中一個主要尺寸是16×16的情況下(其它尺寸為8×8或4×4),假如方差不超過極限TH16(就是說,該塊滿足16×16尺寸下的條件),將使用16×16的尺寸對該塊進行編碼,否則,在編碼前將把它劃分成8×8或4×4像素的子塊。然而,如果兩個主要塊尺寸為8×8和4×4,那么在至少三個子塊的方差值小于TH8的情況下(也就是說,該塊滿足所述條件),將使用8×8的尺寸對該塊進行編碼,否則就用4×4的尺寸。
其中只允許兩種塊尺寸的塊分割的優(yōu)點在于5比特的QT碼(分割描述符)可由代表所選分割的單個比特代碼代替(例如,對于一個16×16的基本塊尺寸,0可以代表一個16×16的塊,1可以代表4個8×8的子塊)。
所有后續(xù)變換都與已經描述的相同。概括起來通過分析為該幀選擇了兩種塊尺寸,并且使用它們編碼整個幀。
圖14的1,2,3部分示出了可能的子塊組合。
因而,塊編碼過程如下進行1.根據可壓縮性分析認為最佳的塊分割將塊劃分成子塊,2.為每個子塊確定最佳預測子塊,并且對預測塊進行編碼。
IV.5.從空間表示到頻率表示的變換
IV.5.1.離散余弦變換(DCT)本身不是新的。對于所有塊尺寸基本原理都相同。
離散余弦變換y(k)=c(k)Σn=0N-1cos2πk(2n+1)4Nx(n)]]>其中N是給定塊中的元素個數(shù),c(0)=1/√N,c(k)=√(2/N),1≤k≤N-1,×(n)是待編碼塊的第n個元素。
反DCT變換x(n)=Σk=0N-1cos2πk(2n+1)4Nc(k)y(k)]]>這些變換可以作為分解的矩陣-向量乘積實現(xiàn),這極大地減少了計算量。
當前實現(xiàn)的方法是使用基于整數(shù)的2D變換實現(xiàn)的。由于存在幾種有詳細文檔的在計算機上執(zhí)行DCT變換的方法,沒必要在此對其論述。
IV.5.2.哈達馬變換X(b)=(12)n/2*Σa=0N-1X(a)(-1)Σk=0n-1a(k)b(k)]]>其中aa(n-1)...a(1)a(0)bb(n-1)...b(1)b(0)a(k),b(k)=0,1與離散余弦變換相似,哈達馬變換是FFT的一個變種,其優(yōu)點在于它僅僅包括矩陣形式的加法和減法。因此,它在計算機上可能執(zhí)行的比DCT或FFT快的多。它也有一個重要的缺陷,即該函數(shù)是不連續(xù)的。這就是對于更高細節(jié)的塊,為什么哈達馬變換比DCT變換引起視覺上更加顯著的誤差的原因。這使得它適合于直接被應用到“扁平”(低細節(jié))的16×16的塊。由于16×16像素的塊需要極高的計算量,無論何時只要16×16的塊需要被變換,優(yōu)選使用哈達馬變換。應當在這兒注意到,在一個特定的實施例中,如果給定塊有足夠低的細節(jié)水平,根據本發(fā)明執(zhí)行的方差分析僅僅允許使用16×16尺寸的塊。
IV.6.在塊或子塊的DCT變換和熵編碼之間執(zhí)行的步驟就是所謂的量化,在量化過程中,為了能夠利用熵編碼模塊進行更加容易的編碼,根據特定的規(guī)則對DCT變換塊的矩陣元素作了修改。
根據本發(fā)明使用的方法與標準的MPEG量化相似,并且使用下面的公式實現(xiàn)qcoeff(j)=((data(j)*16)+(matrix(j)*0.5)matrix(j)*(217QP*2+1))/217]]>其中,qcoeff(j)是與量化之后的DCT變換塊對應的矩陣的第j個元素,data(j)是與量化之前的DCT變換塊對應的矩陣的第j個元素,matrix(j)是量化矩陣的第j個元素,以及QP是量化因子(一個標量值)。
反量化data(j)=(qcoeff(j)*2+1)*matrix(j)*QP16]]>量化矩陣matrix(j)與DCT變換塊或原始塊本身具有相同的尺寸(例如16×16,8×8等)。
由本發(fā)明方法提供的解決方案與已知的MPEG量化方法的不同在于它根據量化因子來選擇量化矩陣matrix(j)。已知的MPEG量化使用單個matrix(j)量化矩陣。
量化矩陣和QP量化因子之間的對應關系是通過將整個量化域劃分成N個子域而實現(xiàn)的,每個子域都被賦予一個先前指定的帶寬范圍。在本發(fā)明的一個實施例中,QP在1和36之間,該區(qū)間被劃分成如下的多個(在一方面,為四個)子域(1-4),(4-8),(8-20),(20-36)。
賦予這些子域的帶寬范圍是(6000-1000k比特/s,800-1000k比特/s,400-800k比特/s,100-400k比特/s)。
這意味著向劃分的QP域分配了一個優(yōu)化的4×3矩陣表(對應于三種不同的塊尺寸),該表的每個元素是整個量化矩陣matrix(j)。
由于matrix(j)的尺寸與塊尺寸相同(4×4,8×8,16×16),向這些塊尺寸中的每一個分配了單獨的矩陣,并且這樣,該表的每一行包括三個單元(換句話說,向每個子域賦予了三個矩陣)。
因而,在該方法修改QP的情況下,向新的量化因子賦予了與給定帶寬相對應的最優(yōu)表行(最優(yōu)矩陣)。
IV.6.對量化的系數(shù)進行編碼在本發(fā)明的壓縮系統(tǒng)的一個具體實現(xiàn)中,實現(xiàn)了三種不同的用于對系數(shù)進行編碼的方法。雖然這些方法的基本原理眾所周知,為了清楚起見,下面將對它們作簡要解釋。
IV.6.1.基于離散余弦變換的DC值之差分的編碼方法正如其名字所顯示的,這種方法包括對連續(xù)塊的DC值彼此相減的步驟以及使用一種算術編碼方法(算術編碼的原理眾所周知并在本文后面詳細說明)對得到的差分進行編碼的步驟。
Xdpcm=X(i)-X(i-1)該方法也被稱為差分脈沖編碼調制(DPCM),并且基于觀察到連續(xù)DC值之間的差分通常很小,因此可以用比這些值本身更少的比特對差分進行編碼。因為本發(fā)明方法使用多種塊尺寸,注意到只有相同尺寸塊的DC值可被有利地彼此相減很重要,因為塊尺寸確定了DC系數(shù)的大小。
該算術編碼方法對每種塊尺寸使用專門的參數(shù)進行編碼(對編碼區(qū)間的細分,編碼區(qū)間的上限/下限,等)。
IV.6.2. AC值的游程編碼以及對得到的壓縮值的算術編碼AC系數(shù)是通過所謂的Z字表(Zig-Zag表)的方法(見圖4,37)獲得的并且用已知的游程方法壓縮。
游程編碼方法生成有序對(系數(shù)出現(xiàn)次數(shù)),其中后面的值表示給定系數(shù)在數(shù)據序列中出現(xiàn)的次數(shù)。由于一個給定塊中有序對的總數(shù)無法預計,要么說明有序對的數(shù)量,要么在最后一個有序對之后插入塊結束碼。
如果最后有序對的系數(shù)值為零,不需要對所述的最后一個有序對進行編碼——將塊結束碼寫入序列就足夠了。系數(shù)-出現(xiàn)次數(shù)對以相反的順序(出現(xiàn)次數(shù)系數(shù))被寫入待編碼的數(shù)據序列。原因在于以這種方式,零值的出現(xiàn)次數(shù)參數(shù)可被用作塊結束碼(當然沒有對應的系數(shù)),因為如果所有有序對都是有效的,就不會發(fā)生出現(xiàn)次數(shù)為零的組合,因此該該碼可以被安全地用作塊結束碼。
如果該塊在編碼前僅包含零值,那么只有塊結束碼被編碼。在這種情況下,在塊重建過程中,在解碼前將給定塊清零(用零填充)。由游程方法產生的對最后也用算術編碼進行編碼。
IV.6.3.使用常規(guī)參數(shù)和由神經網絡方法預測的參數(shù)的AC值算術編碼在這種方法中,直接使用算術方法對AC系數(shù)進行編碼,而不用中間的游程編碼。在根據本發(fā)明在編碼器中實現(xiàn)的方法之一中,執(zhí)行算術編碼,以便通過一個模函數(shù)由先前編碼的系數(shù)的值確定當前系數(shù)被編碼時所處的級別(在許多方面,這與無神經網絡的常規(guī)算術編碼很相似)。該模函數(shù)通常僅僅確保在多于一個的相同的AC系數(shù)彼此相鄰時,這些系數(shù)在同一級別被編碼。神經算術編碼模塊的工作原理將在本文的后面詳細解釋。在這里提到下面一點就足夠了在本發(fā)明的神經算術編碼器中,沒有依賴于AC值的參數(shù)(區(qū)間范圍,區(qū)間細分)。沒有使用塊結束碼,相反,通過輸出實際的位置加一,記錄了被變換且被量化的塊中最后一個非零AC系數(shù)的位置。這是必要的,因為如果在一個塊中所有的AC系數(shù)為零,有可能通過輸出一個零來指出在輸出的數(shù)據流中沒有更多的與給定塊相關的數(shù)據被編碼(換句話說,該塊僅包含零)。
例如位置0 1 2 3 4 5 6 7系數(shù)63 11 21 32 0 0 0 0輸出3 63 11 21 32其中3指出了最后的有效(非零)位置。然而,這種安排不能夠指出所有數(shù)據為零的情況,因為如果在位置0發(fā)現(xiàn)1,我們應該仍然為最后一個有效(非零)位置編碼一個0。因此,除了所有的數(shù)據都為零的時候,位置值增加1。
因此輸出數(shù)據序列如下4 63 11 21 32,或者如果全部為零,輸出僅為0。
作為上述方法的一個備選,可以設想對每個處于預定水平的系數(shù)都編碼一個0,并且如果達到最后一個非零值,則編碼一個1。
例如水平00 0 0 1其中“1”指示了最后一個非零數(shù)據水平163 11 21 32在根據本發(fā)明實現(xiàn)的編碼模塊中,上面描述的兩種方法之一被用于為熵編碼準備AC數(shù)據。然而,也可以利用其它變換而不背離本發(fā)明的范圍。
IV.6.4.在熵編碼過程中,在測試模式中執(zhí)行了方法2(見IV.6.2章)以及方法3(見IV.6.3章),并且最后應用產生較短數(shù)據序列的方法。當然,必須在編碼的數(shù)據流中以某種方式標識出所選擇的方法。
依照本發(fā)明,總是執(zhí)行(編碼DC系數(shù)的)方法1,并將已編碼數(shù)據寫入輸出數(shù)據流,隨后利用神經熵編碼模塊對其進行編碼。當然,也可以利用其它已知的熵編碼方法。
為了清楚起見,讓我們考慮使用方法2和3時(分別在IV.6.2和IV.6.3章)單個子塊的輸出數(shù)據流的格式(在它進入算術編碼器之前)。
2.|0|PRED|DPCM|AC|EOB或當全部為零時為|0|PRED|DPCM|EOB3.|1|PRED|DPCM|POS|AC或當全部為零時為|1|PRED|DPCM|EOB其中起始比特標識了編碼模式PRED預測類型DPCM由差分編碼所編碼的DC系數(shù)AC 一個或多個AC系數(shù)POS AC系數(shù)的位置EOB 塊結束字符。
對整個16×16塊編碼的格式
|QT=0000|
,
,
,
其中QT(四杈樹)是在塊被劃分成四個子塊并且每個子塊應用類型-2編碼的情況下描述塊分割的數(shù)據。
或者|QT=0001|
,|
(2×4×4)
,|
(2×4×4)
,(1×8×8)
,
(2×8×8)意味著16×16的塊包含三個未被再劃分的8×8子塊,以及第四個(事實上首先到來)被再劃分成四個4×4子塊的8×8塊。
IV.7.UV色面的內部預測編碼在已知的MPEG編碼方法中,給定幀的像素數(shù)據從RGB被轉換到所謂的YUV2格式。這里Y代表亮度信號,而UV是色差(色度)信號。
UV表面的物理尺寸被縮小到相對于Y的一半(雖然這引起了數(shù)據丟失,但已經證明這種丟失是可以接受的,并且不會導致質量上的嚴重下降)。
因而,對每個16×16的Y塊,都賦予一個8×8的U塊和一個8×8的V塊(如圖12中所示)。
這樣,當將U和V塊分割成子塊時,只有8×8和4×4尺寸的塊是適合使用的(因為2×2像素的子塊不會比4×4或8×8的塊壓縮地更好,它們不值得使用)。實際上,以與已經描述的相同的方式進行對塊分割的分析,最重要的區(qū)別在于,這里僅僅使用了TH8方差閾值進行比較。必須記住,與方差比較的TH8是一個經驗值,而方差是以類似于方程II的方式計算出來的。如果被測試塊的方差滿足條件TH8≥方差,那么使用8×8尺寸對該塊進行編碼,否則使用4×4像素的尺寸。
對于U塊和V塊的預測,僅僅利用了DC預測(經驗顯示使用其它預測模式的增益是微小的)。
其它變換與上面描述的相同。唯一的區(qū)別在于量化步長(量化階)。
數(shù)據塊的輸出格式(在算術編碼之前)如下|0|M|DPCM|AC|EOB或當全部為零時為|0|M|DPCM|EOB|1|M|DPCM|POS|AC或當全部為零時為|1|M|DPCM|EOB其中M是表示塊分割的比特。例如,如果該塊未被分割則M=0,如果它被分割則M=1。
現(xiàn)在讓我們回到所謂的“幀間”塊的編碼,其中在另外一個幀中為該待編碼塊搜索參考塊。
V.使用動態(tài)變化的塊尺寸的幀間預測編碼V.1正如已經指出的那樣,幀間編碼是基于時間冗余的。這意味著將當前幀與前導幀或后續(xù)幀作了比較,并且只對兩個幀之間的差異進行了編碼。該方法的參考搜索模式如圖15所示。下面的備選搜索是可行的僅在三個前導P-型幀中搜索(圖15a);僅在兩個前導B-型幀中搜索(圖15b);在前導和后續(xù)運動補償參考中搜索(圖15c,在這種情況下,B-型幀通常不能用作參考)。
該方法的基本原理與已知方法相同在參考幀中指定的搜索范圍內為待編碼幀執(zhí)行搜索,接著將冗余信息(差分塊)與參考塊的位置(或更確切地,運動向量)一起編碼,并且這里差分塊是通過從位于所述搜索確定的位置上的塊的各個像素中減去待編碼塊的對應像素而計算得到的。
在可能的搜索方法中,最佳結果將由所謂的“完全搜索”產生。然而,這種搜索將帶來巨大的計算負載,因為當在搜索范圍中所有可能的位置搜索一個匹配塊時,它涉及將16×16的塊與位于從該搜索范圍的每個像素開始的搜索范圍中的數(shù)據進行比較。實際上,對于一個32×32像素的搜索范圍,這將意味著1024*256=262144次加法和減法以及用于確定差分絕對值的操作,而僅僅為了找到一個匹配的16×16的參考塊。由于一個720×576像素的幀包含1620個塊(大小為16×16像素),全部計算術量將超過424百萬。這就是為什么出于實際目的,通常應用所謂的“快速搜索”而不是完全搜索?!翱焖偎阉鳌狈椒☉幂^少的測試點(典型地小于64),并且有這樣的缺點只有在位移較小時(典型地小于1-4像素),就是說,視頻連續(xù)鏡頭(footage)中的運動較慢時,該方法才是成功的。
在位移較大的情況下,成功搜索的概率迅速下降。快速搜索方法的另一個缺點在于,即使搜索看起來成功,不能確定所發(fā)現(xiàn)的位置是搜索范圍內的最小點(最佳參考塊的位置)。
實際上,本發(fā)明中實現(xiàn)的搜索方法可被認為是一種“完全搜索”,在慢速運動的情況下,該方法僅比真正的完全搜索方法高少許的計算負載。即使在較快運動(更大位移)的情況下,本發(fā)明方法的計算負載僅僅是標準“完全搜索”方法所需的負載的一部分。
V.2根據本發(fā)明實現(xiàn)的搜索方法是基于所謂的“螺旋搜索”,該方法實際上執(zhí)行如下。
V.2.1在參考幀中指定了一個搜索范圍。搜索范圍中心的坐標與搜索樣本(待編碼塊)中心的坐標相同。
在下一步驟中,搜索樣本,就是說,待編碼塊88被劃分成較小的子塊(見圖16)。在本發(fā)明的一個實施例中,使用4×2的子塊產生了良好的結果?,F(xiàn)在,使用一種與方程II相類似的表達式,為每個子塊計算方差值。如果至少有兩個子塊的方差值大于所有其它子塊的方差值,它們的方差和大于預定義的經驗常數(shù)THV22,并且兩個子塊沒有鄰接(例如子塊88b和88c),那么在搜索過程中僅僅測試16×16的塊88的這些子塊。
在條件THV22≤方差1+方差2不滿足的情況下(這里方差1和方差2是兩個方差最大的非鄰接子塊的方差值),那么用四個方差最大的非鄰接子塊重復上面的操作,將這些子塊的組合方差與另一個常數(shù)THV24進行比較(這由塊89的子塊89a,89b,89c,89d示出)。
如果對于四個子塊的方差,該條件仍然不為真,則將所有子塊合并成4×4的子塊,并且利用常數(shù)THV42和兩個子塊重復上述操作,并且如果需要,利用常數(shù)THV44和四個子塊重復上述操作(見塊90的子塊90a,90b),在后面的情況中試圖發(fā)現(xiàn)四個方差最大的非鄰接子塊。
如果在上面任何一種情況中各個條件都不滿足,則使用位于該16×16塊的四個角和中心的五個4×4子塊執(zhí)行參考搜索(圖16)。
常數(shù)THV指定了上面每種情況中子塊的組合方差應當?shù)扔诨虺^的最小方差。
上面詳述的過程可被直觀地概括為試圖在16×16的塊中發(fā)現(xiàn)最詳細的子塊,假定它們在搜索范圍中有匹配的參考,其它細節(jié)較少的子塊也有合適的參考。
在參考幀中符合搜索樣本的位置處指定了螺旋的中心,并且接著在加寬的周期中用減少的搜索樣本測試指定點周圍的塊,如上所述。樣本模式子塊的相對位置保持不變,對該搜索范圍進行掃描。
V.2.2根據下面的公式執(zhí)行測試MSE=Σj=0Mabs(A(j)-B(j))2]]>其中M是塊長度。
MSE是所謂的均方誤差。每次發(fā)現(xiàn)MSE值小于當前計算出的最小MSE時,將新的MSE值與當前位置一起寫入臨時緩沖區(qū),例如一個64元素的循環(huán)緩沖區(qū)。如果該緩沖區(qū)是滿的,從第一個元素開始重寫數(shù)據。
優(yōu)選地,通過也從其它方面分析所獲得的MSE值,可以對該搜索方法進行微調。例如,如果搜索發(fā)現(xiàn)多個滿足匹配條件(例如MSE小于最大允許誤差)的位置,且這些位置從起點看來位于相同方向(在同側),并且當搜索離開這些位置的區(qū)域時誤差隨之增加,那么可以中止該搜索,因為很有可能該搜索離開了最優(yōu)點。
在搜索的結尾處,在已經測試了每個點或中止了搜索之后,循環(huán)緩沖區(qū)包含了可能是最佳參考位置候選的那些位置。(在1024個可能的位置中,僅保存了少量位置,例如按照上面的例子,64個位置。)接著再次測試了這些存儲的位置,但這次用整個16×16的塊,并且確定了產生最小誤差的位置。
V.2.3.現(xiàn)在,將從待編碼塊以及新建立的參考塊計算出的SAD16值(絕對差分和,下標指示塊尺寸)與一個經驗常數(shù)MAXSAD16進行比較。使用下面的公式來計算SADSAD=Σj=0Mabs(A(j)-B(j))]]>其中M是塊長度,A和B代表參考塊和待編碼塊的元素。
常數(shù)MAXSAD16指定了與一個16×16塊相匹配的參考塊的最大可接受誤差。如果由上述搜索找到的塊的誤差不可接受,在當前幀的前導或后繼幀中(依賴于幀類型)重復參考搜索。如果沒有能夠給出可接受結果的參考幀,就選擇產生最小誤差的那個。接著該塊被分割成四個4×4的子塊并且為每個子塊計算出了SAD8的值并將其與(經驗)常數(shù)MAXSAD8進行比較。
此后,測試包含在與參考幀相關的緩沖區(qū)中的位置,并且選擇其中能夠產生可接受結果的8×8子塊最多(滿足條件SAD8≤MAXSAD8)的參考幀和位置。
對于有過多誤差的每個子塊,使用8×8的塊尺寸在一個減小的搜索范圍內從給定子塊的位置開始重復該搜索。如果誤差仍然超過極限,將由8×8搜索發(fā)現(xiàn)的最佳子塊再次細分為4×4的子塊,并且在滿足條件SAD4>MAXSAD4的子塊上重復該搜索。
如果一個特定塊的所有子塊都必須被細分為4×4子塊,那么對于這個特定塊,在當前參考幀中搜索不成功的情況下,可以在所有參考幀中重復參考搜索。
如果搜索結束后發(fā)現(xiàn)各個子塊的誤差仍然過多,就對搜索不成功的塊進行標記。在本方法的后續(xù)步驟中,這些塊將作為內部塊編碼。
在所有參考幀中搜索意味著,如果例如在第二個幀中得到滿意的結果而搜索結束,那么就不會在第三個幀中繼續(xù)搜索。
V.3.處理16×16分割的塊如果在16×16塊的情況下,在當前幀中參考搜索不成功(沒有發(fā)現(xiàn)參考塊),并且當前幀是P-型,就在前導P-型參考幀中重復搜索,最大深度為3幀。如果搜索成功,就會紀錄參考幀的編碼,并且結束搜索。否則,該方法選擇誤差最小的幀,將該塊劃分成四個8×8子塊,并且在這些誤差超過極限的子塊中繼續(xù)搜索。如果當前幀是B-型,首先在后繼P幀中執(zhí)行搜索,接著在三個前導P幀中執(zhí)行搜索。如果在B-型幀情況下,在所有參考幀中搜索都不成功,就會根據后繼幀和其中一個前導幀產生一個平均參考塊,這是通過使用MPEG方法中應用的簡單表達式,對后繼幀和其中一個前導幀中發(fā)現(xiàn)的最佳候選參考塊的位置進行插值而實現(xiàn)的。如果產生的插值塊和原始塊之間的平方誤差仍然太大,就選擇誤差最小的參考幀,并且將該塊劃分成四個8×8的子塊。
V.4.處理8×8分割的塊
8×8塊的處理幾乎與16×16塊的處理相同,區(qū)別在于如果在處理結束時搜索仍然不成功,將塊再次細分成4×4像素的子塊。
V.5.處理4×4分割的塊4×4塊的處理幾乎與8×8塊的處理相同,唯一的區(qū)別在于,在搜索仍然不成功的情況下,該誤差塊被標記為內部塊。
V.6.以1/2,1/4和1/8像素解析度擴展搜索當以全像素解析度對塊的處理結束之后,以1/2,1/4和1/8像素解析度執(zhí)行搜索(在濾波/插值的參考中搜索)。唯一的例外是B-型幀的插值模式,在插值前必須執(zhí)行1/2,1/4和1/8像素解析度的搜索。因為1/2,1/4和1/8像素解析度的搜索在本質上與本文中前面描述的已知方法相同,這里就不再解釋該過程。
在實現(xiàn)的方法中,向每個幀最多賦予三個參考幀。它們的區(qū)別在于其尺寸以及產生它們的濾波方法不同(見圖17)。
每個搜索過程使用一個相關的參考幀。1/2和1/4像素解析度的搜索使用1∶4比例插值的參考幀,而1/8像素解析度的搜索使用1∶8比例插值的參考幀。全像素搜索使用1∶1比例插值的參考幀。由于實際上插值的參考幀和濾波器的使用是眾所周知的,這里不需要對其進行詳述。
與前面的情況類似,應用了一種螺旋搜索,但這里由于極大地減小了搜索范圍,測試點的數(shù)量小于20。通常,只有在SAD=0時才中止搜索(當前塊和參考塊完全匹配)??梢杂妹總€塊尺寸執(zhí)行搜索,但不進行塊簡化(就是說,只有整個塊而不是子塊被比較),這意味著對一個16×16的塊進行測試涉及到256個減法操作。
當從匹配的參考塊減去待編碼塊之后,將得到的簡化塊從空間表示變換到頻率表示。
V.7.
在為16×16的塊查找參考塊以及分割參考塊的過程成功完成之后,待編碼塊也被劃分成相同尺寸的子塊,并且從參考塊的子塊中減去這些待編碼塊的子塊。接著,這些差分要經歷離散余弦變換和量化,并且對得到的塊中包含的系數(shù)應用了AC/DC預測。與內部塊的預測過程類似,該預測方法生成了變換塊的DC值之間的差分,并且在AC系數(shù)的第一水平/垂直線上應用了水平/垂直預測。該方法和前面方法的區(qū)別在于上面描述的內部預測從待編碼塊的像素值中減去了鄰接像素的實際像素值,而在這里從DCT變換塊的元素中減去了鄰接DCT變換塊的元素。該方法進一步提高了熵編碼過程中變換塊的編碼效率。
關于應當應用哪種預測模式(水平或垂直)的決策是根據變換塊周圍塊的DC系數(shù)之間的差分作出的,其中塊的相對位置可能如下CBAX其中X代表正被處理的變換塊,而A,B,C是周圍塊。
預測模式(pred)是通過下面的條件表達式選擇的pred=abs(A-C)<abs(C-B)其中,A,B和C是正被處理塊的周圍塊的DC系數(shù)。
如果條件為真,應用垂直預測,否則選擇水平模式。由于確定預測模式的相互關系在執(zhí)行塊重建時可用,不需要在輸出中紀錄所選擇的模式。
V.8.
本節(jié)給出了用于描述塊分割的數(shù)據的一種可行的數(shù)據格式和編碼方法。
對待編碼塊的塊分割的描述與論述內部幀的小節(jié)中給出的相似。
L是一個最大2比特長的值,它描述了16×16塊的分割。如果該塊沒有被劃分則比特1為0,如果它被劃分則為1。如果該塊被標記為內部塊則比特2為1。當每個8×8子塊被再次劃分成4×4子塊并且超過50%的這些子塊被標記為內部塊時,會發(fā)生后一種情況。在那種情況下,系統(tǒng)將根據對內部塊編碼的過程對給定塊進行編碼。
熵編碼之前的數(shù)據如下RFIDX是所應用的參考幀的幀號MV是運動向量DC是離散余弦變換的第一個系數(shù)以及
AC代表其他的DCT系數(shù)IP指示了B幀的插值模式I代表內部模式P是內部模式預測的編號用于P幀的模式如下模式0|L|RFIDX|MV|DC|AC模式1..15|L|QT|RFIDX|I|MV|DC|AC...I|MV|DC|AC用于B幀的模式如下模式0|L|RFIDX|IP|MV|DC|AC模式1..15|L|QT|RFIDX|I|IP|MV|DC|AC...I|IP|MV|DC|AC如果I=1,對給定塊的描述變?yōu)閨I|P|DC|AC。
讓我們看兩個P-型幀的具體例子1|0001|2| 1|0001|0|0 MV4 DC4 AC4 1 P DC4 AC40 MV4 DC4 AC4 0 MV4 DC4 AC40 MV4 DC4 AC4 0 MV4 DC4 AC40 MV4 DC4 AC4 0 MV4 DC4 AC40 MV8 DC8 AC8 0 MV8 DC8 AC80 MV8 DC8 AC8 0 MV8 DC8 AC80 MV8 DC8 AC8 0 MV8 DC8 AC8四個4×4塊和四個4×4塊,其中第一個是內部塊三個8×8塊 三個8×8塊(在這個例子中,變量“AC”通常代表多個數(shù)據元素。)已經對16×16塊的Y色面進行編碼,下一步是對UV色面進行編碼。該塊的尺寸與Y塊以及其中子塊的尺寸是成比例的。
在Y塊的尺寸為16×16像素的情況下,UV塊的尺寸為8×8像素,如果Y塊的尺寸為8×8,那么UV塊的尺寸為4×4,并且最后,對于一個4×4的Y塊,對應的UV塊尺寸為2×2。
另外,U和V塊的分割與Y塊的分割相同。執(zhí)行UV塊的分割的方法與Y塊的相同。因而在編碼過程中,只有DC和AC值在熵編碼之前必須被順序地寫出,因為所有其它數(shù)據(塊分割描述符,塊標識符,等)已經在Y塊中進行了描述。
V.9.宏塊(運動向量和幀間塊)的預測為了對運動向量(就是說,指示相對于參考塊的運動的向量)進行最優(yōu)編碼,優(yōu)選地,運動向量以盡可能短的格式表示。這點可以通過從當前運動向量中減去屬于位于當前塊旁邊、上面或斜上方的塊的運動向量而實現(xiàn)。在這三種可能的鄰接運動向量中,選擇了與平均值最接近的一個,或換言之,選擇了比最小值大但比最大值小的那個。
V.10.最后,使用熵編碼模塊對數(shù)據進行編碼。下面我們將注意力轉到對本發(fā)明的二進制多級算術編碼模塊的描述。
VI.神經算術編碼模塊根據本發(fā)明的熵編碼模塊使用了二進制自適應技術。這意味著在關于已經接收的比特模式和出現(xiàn)頻率的函數(shù)中,逐比特地對輸入數(shù)據進行處理。
VI.1.該方法的首要設計目標是以相對簡單的計算獲得最大可能的壓縮。本發(fā)明方法可以不用除法實現(xiàn),僅僅執(zhí)行兩次乘法和幾次加法以及邏輯操作。所有其它操作都是基于整數(shù)的。
本發(fā)明方法是所謂的算術編碼方法。算術編碼本質上是一種已知的方法。算術編碼的基本原理涉及根據接收到的待編碼數(shù)據序列的數(shù)據修改一個區(qū)間(范圍)的上限和下限。只有即將到來的數(shù)據的分布在某種程度上已知時,換言之,如果對于下一個輸入數(shù)據元素的值的概率估計在某種程度上已知時,算術編碼器才真正有效。
下面的短小算法在二進制數(shù)據流(僅包含0和1符號)上執(zhí)行了算術編碼。當前待編碼的數(shù)據(數(shù)據流的下一個比特)被存儲在“bit”變量中。編碼區(qū)間的上限和下限是變量“area
”和“area[1]”。
area[inverz(bit)]=area
+(area[1]-area
)*prob216+bit]]>if((area[1]-area
)<256){outdata=area[1]224]]>area
=area
*28area[1]=area[1]*28}prob=calc_next_probe(bir)提高編碼效率的關鍵因素是如何確定“prob(概率的)”變量(下文中probe(探查)值或probe)的值。在上面的例子中,probe值由“calc_next_probe(bit)”函數(shù)返回。
數(shù)列“array
”包含兩個32位值,即“area
”和“area[1]”變量,它們存儲了編碼區(qū)間的上限和下限。從算術編碼理論可以得知,利用probe值縮放區(qū)間(area
,area[1])。在已知的方法中,prob值通常是作為先前到達的比特的出現(xiàn)頻率的函數(shù)而確定的。根據新接收到的比特的值,用所述比例值修改編碼區(qū)間的下限或上限。可以修改該區(qū)間(可編碼新比特)直到上限和下限的差變得小于256。原則上,還可以使用其它值,但為了對付溢出,256似乎是最實用的值。因而,當上限和下限的差變得小于256時,將8個最高有效位寫入輸出數(shù)據序列,并且表示下限和上限的變量被向左移動8個位置。
這可以用算術形式寫為area[1]=area[1]*256area
=area
*256VI.2.對probe值的確定如下我們引入頻率表的概念,并且定義兩個用于描述到達數(shù)據序列中0和1的出現(xiàn)頻率的函數(shù),f(0)和f(1)。接收到的比特被提供給一個長度為m比特的緩沖區(qū),其中2m=N,因此N的以2位底的對數(shù)提供了窗口寬度。
順序到達緩沖區(qū)的比特構成了“窗口”變量(根據需要向左移動緩沖區(qū)內容)。將“窗口”變量刪減為長度為m比特,以形成指向頻率表中一行的索引(存儲在“index”變量中)。在這里給出的例子中,頻率表有512行。頻率表的元素由變量FreqTbl[index]f0和FreqTbl[index]f1指定。這些變量顯示了當比特組合與當前存儲在緩沖區(qū)中的比特組合相同時(換言之,當前比特組合被認為是指向表中給定行的索引)接收到的比特為0和1的次數(shù)。
count=count+1if(count>=log2(N+1)){count=0window=0}window=window*2+bitFreqTbl[index].f0=FreqTbl[index].f0+(2*bit)FreqTbl[index].f1=FreqTbl[index].f1+(2-(2*bit))index=window mod Nsum=FreqTbl[index.f0+FreqTbl[index].f1prob=FreqTbl[index].f0*FracTbl[sum]210]]>if(sum>256){FreqTbl[index].f0=FreqTbl[index].f02]]>FreqTbl[index].f1=FreqTbl[index].f12+1]]>}在開始壓縮時,所有變量(除了N,其以2為底的對數(shù)給出了窗口長度)被零填充。到達比特重寫緩沖區(qū)(窗口)的最低有效位,并且根據新到達的比特更新了由先前緩沖區(qū)的值所尋址的頻率表的元素。很快就會變得很明顯,要求的重點在于應該將先前的緩沖區(qū)值與晚一步到達的比特相關聯(lián),就是說,當前正被處理的比特。正是這個特征使得在系統(tǒng)工作期間可能預測即將到達的比特的值。先前的緩沖值被存儲在變量“index”中,N是該變量的上限。
在該方法的下一步中,為下一個比特計算了prob值(“prob”變量的值)。該計算的確切公式為prob=FreqTbl[index].f0sum]]>但是這個表達式沒有被直接使用,因為結果是個分數(shù)。該計算(除法)將需要實數(shù)運算,實數(shù)運算對我們的目的而言太慢了。
相反,使用了一個512個元素的分數(shù)表(由變量“FracTbl[sum]”表示),由頻率表對應行中的比特頻率和為該表選擇了適當?shù)脑?參看上面算法中的“sum”變量)。為了確定probe值,頻率表適當行中的f0值被乘以從上面分數(shù)表中獲得的值,并且接著乘積被乘以一個常數(shù),例如該乘積向右移10比特。這樣,獲得了prob值,該值將落在區(qū)間0..65535中,它反過來與區(qū)間0..1相類似。因為分數(shù)表包含512個元素(實際上是對1/sum適當放大后的值,其中“sum”變量同時被用作指向表的一個索引),應當確?!皊um”變量不超過這個值。
通過測試“sum”的值,并且如果“sum”大于256則通過重新縮放f0和f1,實現(xiàn)這一點(因為“prob”值實際上是由f0和f1的比例而不是它們的絕對值確定的,所以可以重新縮放它們)。
正如該算法所顯示的,該方法相當簡單。因為除數(shù)是2的冪,可以由右移操作來代替除法。MOD操作也可以由邏輯AND代替。
VI.3.正如已經提到的,該方法在不同級別上執(zhí)行編碼。實際上,這僅僅影響prob變量。換言之,相同的編碼模塊可被用于所有的數(shù)據類型,只需要調整參數(shù)(N,窗口尺寸,編碼區(qū)間的范圍)。向每種數(shù)據類型賦予不同的級別,根據給定數(shù)據類型的需求,每個級別被劃分成多個子級別。例如,為了對4×4離散余弦變換操作的結果進行編碼,定義了一種特定的級別,其具有賦予AC和DC系數(shù)的編碼的不同子級別。
常數(shù)N確定了窗口尺寸,換言之,與當前正接收的比特一起測試的先前已接收的比特數(shù)目。這個因子強烈影響編碼效率,但也增加了所需的內存,因為如果增大N就需要更多的內存。
上面給出的方法是已知方法的一個快速整數(shù)運算變種。通過適當?shù)卣{節(jié)參數(shù),壓縮效率要比MPEG系統(tǒng)中使用的VLC方法提高10%。到目前為止,只有使用特別復雜的probe算法的方法才比該方法有更好的表現(xiàn)。為了提高效率,也應該顯著地擴大頻率表。所選擇的probe算法以及頻率表尺寸一起影響該方法的執(zhí)行時間。
為本發(fā)明中使用的數(shù)據結構確定probe值的最已知的方法是所謂的動態(tài)馬爾可夫模型。然而,該方法需要使用一個至少64Kb的頻率表才能有效工作。如果所有用于編碼的子級別被設置為該尺寸(就是說,如果與不同塊尺寸相對應的所有變量以及變量類型都以這種方式被編碼),僅為頻率表就需要分配超過16Mb的內存。
這些問題使得設計一種新的、更加有效的probe算法十分必要。
VI.4.使用神經probe的算術編碼器VI.4.1.算術編碼一個很重要的缺陷在于為了最優(yōu)效率編碼,應當知道待編碼數(shù)據中出現(xiàn)的各個符號的出現(xiàn)概率。原則上,有可能考慮已經出現(xiàn)的多個符號。不僅觀察單獨的符號,而且觀察不同符號組的出現(xiàn)頻率將更加有效。然而,這需要存儲大量的頻率值。通過僅僅存儲實際上已經出現(xiàn)的符號組合,而不是已經出現(xiàn)的所有可能的符號組合(上下文),在一定程度上可以緩解這種情況。
這意味著應當引入一個額外符號(轉義符號)來指示出現(xiàn)了一個新的符號組合。
已知的編碼方法,主要是PPM(部分匹配預測)方法,檢查變長的符號組合。當編碼一個接收到的符號時,首先測試允許的最長組合。新到達的符號被添加到存儲的符號組,并且用當前的符號組長度執(zhí)行一個搜索來確定當前的符號組是否已經出現(xiàn)。例如,如果組長度為4,那么新到達的符號與三個最近的符號一起被測試。如果該符號組合已經出現(xiàn),使用賦予該給定符號組合的瞬時或恒定概率對其進行編碼。在另一方面,如果該組合沒有出現(xiàn),編碼一個轉義符號來(對解碼器)指示該組合是新的,并且使用較短的組合長度執(zhí)行搜索。
如果接收到的符號沒有被編碼到任何先前的組合中,使用賦予各個符號的出現(xiàn)概率的平均值對其進行編碼。在編碼完成之后,如果需要的話使用添加的新組合來更新對符號組合出現(xiàn)次數(shù)進行測量的計數(shù)器(就是說,量化符號組合的出現(xiàn)概率)。
由于該方法很慢并且有相當高的內存負載,不適合直接用于對視頻數(shù)據編碼。
然而,根據本發(fā)明,檢查變長符號組合的原理被轉移到本發(fā)明使用的神經編碼方法。必須注意到,應用神經網絡來確定算術probe值的想法不是新的。1996年由Schmidhuber和Heil實現(xiàn)了一種利用神經網絡的方法。他們的方法以與PPM類似的方式來觀察先前接收到符號和新到達符號的共同出現(xiàn),并且從而確定probe值。借助這種已知的解決方案,不需要為搜索使用不同的符號組長度,因為只有神經網絡的那些輸入是有效的,其中當前被測試的組合與早先被“訓練”的組合之一之間有關聯(lián)。通過這種方式,自動執(zhí)行對這些符號組合的選擇(識別)。然而,這種已知方法沒多大實際用處,因為訓練過程非常長。例如,在一個測試例中,訓練網絡去識別大概20kB數(shù)據的相關性大概需要兩天時間。
Matthew V.Mahoney(Florida Institute of Technology)將神經網絡技術的應用推廣到二進制算術編碼(其中只有0和1是要被編碼的符號),使用從神經網絡理論中獲得的在線訓練方法并且應用自適應學習速率而不是恒定學習速率。
然而,即使這種改進方法也不足以被直接用于視頻編碼,因為最優(yōu)編碼必須的內存需求太高。Mahoney的原始方法使用超過258kB內存來對單個級別進行編碼。如果該方法被用于128級別(128種不同的數(shù)據結構,考慮預測、塊尺寸、DC和AC系數(shù),等等),總共所需的內存將大于32MB。然而,如果為視頻編碼僅僅定義一個級別,該方法將比使用多個級別的常規(guī)編碼效率要低。
已經考慮了所有這些問題,設計了一種創(chuàng)新的方法來確定神經probe值。根據本發(fā)明的方法可以使用少至1-2kB的內存對熵最大化。已經發(fā)現(xiàn)僅僅值得將內存增加到大概16kB,高于這個數(shù)字,編碼效率的提高可以被忽略。
VI.4.2.在下面幾頁中將對該方法進行詳細解釋。與上面給出的算術方法相比,唯一的區(qū)別在于probe值的計算(返回“probe”變量的值的函數(shù))已經由一種神經probe所代替。
到達的待編碼比特被提供給一個尺寸為32,64,甚至更多比特的移位寄存器(緩沖區(qū))(下面給出了一個包括32位寄存器的例子)。寄存器的內容構成了所謂的窗口?,F(xiàn)在,使用一個哈希函數(shù)將存儲在寄存器中的值(作為32比特的整數(shù)對待)動態(tài)地劃分成N部分。
考慮下面關于哈希函數(shù)的定義(僅僅作為例子提供)adr1=register mod H0adr2=H0-(H0*k)+((register/64)mod H1)adr3=(H0+H1)-(H1*k)+((register/16384)mod H2)adr4=(H0+H1+H2)-(H2*k)+((register/4194304)mod H3)H3是從先前的地址值計算得到的,因此范圍長度H3,從(H0+H1+H2)-(H2*k)開始擴展到剩余內存的末尾(直到2048)。該哈希函數(shù)的結果顯示在圖18中。
“寄存器”變量是當前存儲在寄存器150中的二進制值,H0-H2是預先確定的值。例如,H0-H2的值可以是256,512,1024,在一個具體的情況中,從這些值計算出H3的值為1536。因子k由神經網絡的輸出給出。因子k具有一個缺省值并且落在0和1之間的區(qū)間內。
上面給出的哈希函數(shù)將地址adr1-adr4映射到表155的數(shù)行,其中表155由2048行構成。更確切地,是映射到子范圍151-154,這意味著地址1指向子范圍151中的一個元素(表行),地址2指向子范圍152中的一行,地址3指向子范圍153中的一行,以及地址4指向子范圍154中的一行。本發(fā)明解決方案的一個重要特征在于子范圍可以重疊,因而構成了集合156-158,這個實施例包括三個集合156-158。從上面的表述可以理解,集合的尺寸由因子k確定。集合的重要性從最低有效位向最高有效位增加。集合在識別輸入流中的重現(xiàn)比特序列的過程中扮演著重要的角色。因為集合可以使得兩個地址可能指向表155的相同行,集合的作用因此也很重要。無需深入過多的數(shù)學細節(jié),在這里注意到這點就足夠了因為輸入是被順序處理的,如果第一個地址指向一個給定神經元,那么其權重在訓練過程中將發(fā)生變化。在另一個地址選擇了相同神經元的情況下,權重將再次與賦予它的比特頻率函數(shù)的值一起發(fā)生變化。因而,與該神經元關聯(lián)的比特頻率函數(shù)的值也會被修改兩次。在該系統(tǒng)的運行過程中,輸入具有相同權重。
因為因子k被神經網絡的輸出賦予一個值,并且子域152-154的實際長度H1-H4由k確定(間接地,通過集合尺寸,因為集合尺寸影響子域的長度),在收到每個比特之后,表155被劃分到子域151-154的分割根據神經網絡的輸出而動態(tài)變化。
由哈希函數(shù)定義的N個地址(在這個案例中N=4)選擇了表155的N個元素(行)。表155的每一行包含兩個權函數(shù)——量化權函數(shù)Wi,Q以及比例權函數(shù)Wi,s(或者,在比例因子S不需要被生成的情況下只有Wi,Q)以及一個頻率對f(0)i,f(1)i,該頻率對的定義方式與離散算法情況中的相同(就是說,根據每次收到一個比特時的比特值來更新頻率值)。在訓練過程當中,對所選擇的權函數(shù)作如下修改Wi=Wi+(error*gain*eta*f(0)i+f(1)if(0)i*f(1)i)]]>其中i是表中被尋址行的索引,“error”是預測比特與實際接收到的比特之間的差,“gain”是增益因子,“eta”是學習速率,以及f(0)和f(1)是上面定義的比特頻率。實際上,該方法使用的N-輸入神經網絡的知識庫由權函數(shù)以及表155存儲的頻率值構成。
在工作過程中,根據本例的網絡的輸出由下面的公式給出outi=expΣWi]]>其中i是輸出數(shù)量,下標i從1到N,即輸出是對所有選擇的權函數(shù)求和。可以定義網絡的輸出使得k和“prob”值本身出現(xiàn)在輸出中。
再次跳過更加詳細的數(shù)學分析,神經網絡的工作可以概述如下當?shù)谝粋€比特到達時,prob值為0(對應于概率0.5)。接著網絡計算誤差(error=bit-probe),并且將該誤差“教給”賦予上一個比特值的神經元。(在第一個步驟中這些值是不相關的。因為沒有前導數(shù)據,所有地址為0,因此將第0個神經元賦予輸入。)接著,系統(tǒng)從寄存器(緩沖區(qū))的當前值生成新地址。將由這些地址選擇的神經元的權函數(shù)(在第一個步驟中為零)相加,并且計算該和數(shù)的指數(shù)(第一個步驟中的結果也是零),其成為新的probe值。
下一個probe區(qū)間為-0.5..+0.5,因此映射在0..1區(qū)間上的當前probe值將是0.5。對于接下來到達的比特,重復上述過程,這次使用有效地址,在誤差值的基礎上對先前選擇的神經元的權函數(shù)進行修改。該過程對于因子k相同。
如我們已經提到的,該系統(tǒng)的增益和學習速率可動態(tài)地調整。在一個優(yōu)選實施例中,只有在選擇神經元的地址指向集合內的地址范圍時才會對增益作修改。
就是說,根據集合的優(yōu)先級,向每個集合賦予一個增益因子。
學習速率是由因子k和許多外部因素決定。
學習速率為網絡指定了學習曲線的斜率,就是說,在每個訓練周期中誤差被最小化的程度。
神經網絡具有兩個輸出輸出“probe”給出算術probe值,而另外一個輸出指定了用來確定集合分割的因子k。圖18b中示出了神經網絡一個可能的結構,顯示了輸入層160的神經元,以及產生“prob”和因子k的輸出169和168。圖中顯示的神經網絡還有一個隱含層162,但是本發(fā)明方法使用結構較簡單的網絡也能夠成功地工作。
以這種方式,向構成神經網絡的知識庫的表的每一行賦予了頻率f(0)和f(1),這些頻率可被當作計數(shù)器。這些計數(shù)器與上面看到的表FreqTbl[index]的元素類似,指定了當前待編碼比特是0和1的次數(shù),此時給定的表行由address1-4中的一個地址選擇,所述地址指向表155的細分產生的子范圍151-154。因而,頻率f(0)和f(1)可被存儲在N行的表中,并且,與上面描述的方式類似,如果它們的值超過給定范圍則應該對它們進行重新縮放。
VI.5.接下來,反復地測試寄存器150的分割來選擇最佳分割。神經網絡基于下一個接收到的比特的值更新最近尋址的表行的頻率數(shù)據f(0)和f(1),并且將k的最近值以及probe因子“教給”存儲在這些行中的神經元權函數(shù),probe因子是根據預測值和接收到的比特值之間的差(誤差)從頻率f(0),f(1)中導出的。
該系統(tǒng)的工作在許多方面都與上面描述的方法類似,但是動態(tài)寄存器分割以及動態(tài)增益和學習速率的使用根本上是創(chuàng)新元素。
讓我們看一個該方法在實踐中是多么有效的示例我們對20個8×8塊的DCT系數(shù)編碼,產生1280字節(jié)的數(shù)據。被編碼的塊在幀中是相鄰的,并且實際上是相同的。我們主要的興趣在于在不同塊中存在DCT系數(shù)的重現(xiàn)數(shù)據序列而在各個塊本身中不存在重現(xiàn)序列的情況下該方法的編碼效率。
在下表中與其它方法比較了結果
*多級別方法對于其它數(shù)據類型,結果顯示更廣的分布,而我們的方法仍然要比其它解決方案表現(xiàn)得好很多。
VII.帶寬(傳輸速率)控制以及壓縮比調整VII.1.帶寬(傳輸速率)控制是視頻編碼中最重要的問題之一。一個視頻幀序列中幀的信息內容變化很大,因此在目標是保持相當平滑的圖像質量的情況下,必須隨著這些變化在很大范圍上調整壓縮比。
如果壓縮數(shù)據存儲在一個存儲裝置上,該裝置的存儲容量將會限制編碼數(shù)據的總量。當數(shù)據必須在一個數(shù)據傳輸系統(tǒng)中實時傳輸時,最明顯的情況是帶寬成為一個限制。在那種情況下,傳輸視頻的質量受到可用帶寬(數(shù)據傳輸速率)的限制。因此,有必要將傳輸速率(一秒內傳輸?shù)臄?shù)據量)保持在一個近似恒定的值。這只可以通過調整壓縮比來實現(xiàn)。下面,調整壓縮比的意思是增加或減小量化因子。然而,不可能增加量化而不產生后果。更高的量化引起圖像細節(jié)隨著圖像中可識別的空間頻率的減少而消失,同時視覺上可觀察到的誤差增加。在某個點,圖像不可避免地瓦解成塊并且產生其它視覺上明顯的圖像失真。
根據可用帶寬修改量化因子實質上是周知的。在常規(guī)的解決方案中,根據編碼序列的預期長度和實際長度來計算新的量化因子,并且將新的量化因子應用到下一幀。代替一次僅僅考慮一個幀,更加成熟的解決方案使用在給定時間范圍內所壓縮的幀的平均長度和期望平均長度來計算新的量化因子。這些方法通常涉及一個反應延遲因子,該因子指定了控制系統(tǒng)應該獲得計算的最大值的時間。
這種方法提供了恒定傳輸速率或恒定比特率(CBR方法)。
通過為傳輸速率控制設置最小和最大極限,總是將傳輸速率保持在這些極限中并且試圖在長時間內獲得一個等于上下限平均值的主導傳輸速率,可以極大地改善結果。
優(yōu)選地,還應該將原始幀和重建幀之間的信噪比作為一個控制參數(shù)加以考慮,就是說,在SNR惡化時(在特定的范圍內)提高傳輸速率,而當SNR提高時降低傳輸速率。這就是所謂的可變比特率(VBR)方法。這種解決方案的一個主要缺陷在于無法準確地預計總體期望數(shù)據長度。最小和最大值不能被設置得過高,因為那樣的話,控制范圍也會太寬并且總體編碼數(shù)據長度將在一個過大尺度上變化。經常還會出現(xiàn)使用系統(tǒng)設置的最大傳輸速率不能維持期望的質量,使得有必要進一步提高傳輸速率的情況。
VII.2.根據本發(fā)明,對于帶寬(傳輸速率)控制提供了兩種解決方案。
這兩種方法都是基于應用神經網絡。
VII.3.1根據第一個解決方案,神經網絡具有一個實質上已知的后向傳播結構。在圖18c中示出了該網絡。該網絡具有N個輸入1801-180n,一個包含2N個神經元的隱含層185,以及至少一個輸出。量化因子Q以及比例因子S(下面第VIII章中詳細描述了該因子的作用)出現(xiàn)在輸出188和189。
為了提供連續(xù)控制,該網絡的輸入是最后N個接收到的數(shù)據元素,它們按照其順序被順序地提供給N個輸入。數(shù)據元素由期望幀長度和編碼幀長度的比率構成,并且這些數(shù)據元素被當作一個時間序列。
ELi-1/CLi-1,ELi/CLi,ELi+1/CLi+1,等(其中E1期望長度,CL編碼長度,i是對應于第i個數(shù)據(例如,一個編碼幀)的索引)。
用于訓練網絡的測試數(shù)據是使用一個外部控制系統(tǒng)生成或在訓練過程開始前手動生成的,并且所述數(shù)據通過復雜相關性計算減少到1000-4000個訓練樣本。設計訓練樣本以使得它們代表出現(xiàn)在普通視頻記錄中的每種幀類型。這些樣本通過數(shù)個訓練周期被“教給”系統(tǒng),在一個具體實現(xiàn)中,是50000個周期。
訓練完成之后,網絡準備好接收并處理實際數(shù)據。應當注意在這個具體的實施例中,計算被設置為使得在網絡輸出中出現(xiàn)的不是因子Q,而是KQ系數(shù),該系數(shù)反過來用于修改當前的Q。
與離散系統(tǒng)相比,神經網絡的主要優(yōu)點在于,借助神經網絡幾乎可以實現(xiàn)各種類型的控制特征。
在可變比特率控制系統(tǒng)中,控制特征遠比在恒定比特率控制系統(tǒng)中重要。
VII.3.2.正如我們已經提到的,網絡借助測量的訓練工作。神經網絡借助先前期望的幀和編碼幀的長度值評估希望的映射,后者被當作數(shù)據序列。這種方法可被成功地用于恒定帶寬(CBR)的情況,但它本身不是總適用于可變帶寬(VBR)系統(tǒng)。原因在于VBR系統(tǒng)也要考慮圖像質量。
在圖像質量超過平均質量值的情況下,增加壓縮比,而如果質量低于平均值,則減少壓縮比。神經網絡控制系統(tǒng)也必須對這點加以考慮。因此,為控制網絡指定了一個最小和最大量化因子,控制系統(tǒng)不能超過該范圍。這些值通過圖18c中參考數(shù)字186和187指代的神經元起作用。
VII.3.3.用于VBR模式的神經網絡的輸入是用于CRR模式的網絡輸入的兩倍之多,因為,除了期望長度/編碼長度比,表示圖像質量的數(shù)據也以期望質量/編碼質量比的形式被提供給網絡的輸入EQi-1/CQi-1,EQi/CQi,EQi+1/CQi+1,等。
其中,EQ是期望質量,CQ是編碼質量,i是數(shù)據索引。
如圖18c中所見,除了確定量化因子的輸出188,用于VBR模式的神經網絡也包括表示比例因子S的另一個輸出189(比例因子的作用后面描述)。與上面描述的情況類似,在訓練過程中,網絡處理一個時間序列中關于期望/編碼質量和期望/編碼長度的輸入數(shù)據,并且根據指定的最小和最大值評估所找到的映射。選擇控制數(shù)據使得其反映指定的控制特征和控制斜率。
在網絡的實際編碼過程中,即當處理實際數(shù)據時,不再進行訓練,并且神經元的權函數(shù)保持不變。編碼本身實際上是一項關聯(lián)任務基于網絡在訓練過程中所“學習”到的東西,將接收到的包含在時隙中的輸入數(shù)據映射到Q和S因子。因而,通過按照接收到的長度和質量數(shù)據確定Q和S的下一個值,網絡執(zhí)行與常規(guī)控制系統(tǒng)相同的任務。直觀地,所述時隙可以被說成是描述了一種特定的情形。網絡將在訓練過程中它所遇到的這些情形中搜索一個與當前情形最匹配的情形,給出在該特定情形下學習到的最優(yōu)響應。
神經網絡的一種實現(xiàn)變種實際上使用僅僅一個公式,所謂的S形和。
out=1/exp(1+-Gain*Σi=0NW(i)*Input(i))]]>其中N是神經元的數(shù)量“gain”值可以是整數(shù)并可由最優(yōu)搜索確定,因為它唯一的作用是確定輸出值的大小順序。首先,用上面表達式對隱藏層中神經元的權函數(shù)求和,接著同樣為輸出層的權函數(shù)執(zhí)行該計算。
在它們的實際實現(xiàn)中,除了輸入數(shù)據在VBR和CBR網絡之間沒有重大區(qū)別,這意味著執(zhí)行VBR模式的網絡也能夠執(zhí)行CBR模式的功能。對于CBR模式的操作是通過簡單地在質量輸入端提供一個常數(shù)值而實現(xiàn)的(該常數(shù)是最大可能值,在訓練期間輸入也保持不變)。在CBR模式中,最小和最大帶寬極限輸入被設置為相等并且保持不變,被設置成與期望的恒定帶寬對應的值。
VII.4.在本節(jié)中,將描述由神經網絡執(zhí)行的改進的動態(tài)量化的又一個變種(所謂的地址分解方法)。
VII.4.1.這種網絡模型是描述算術編碼的一節(jié)中所給出網絡模型的一個變種。它與上面網絡唯一的區(qū)別在于對該網絡某些選擇的神經元的尋址不是由整個時間窗口/時隙確定的。這點被示意性地顯示在圖19中,該圖顯示時間窗口中檢驗的輸入數(shù)據繞過了地址生成器。這里,輸入數(shù)據序列的元素不是0和1,因此上面描述的地址生成過程不能被直接應用。相反地,神經網絡的輸入層包括兩部分。對于在時間窗口中能夠找到的每個數(shù)據值,由一個哈希函數(shù)(與前面示出的類似)指派一個神經元,該神經元是根據到達數(shù)據是否是期望/編碼長度數(shù)據或期望/編碼質量數(shù)據從適當數(shù)目(諸如2048或256)的神經元中選擇出來的。實際上,這意味著兩個神經元權重表,一個用于對期望/編碼長度數(shù)據起作用的神經元(更確切地,用于其權函數(shù)),另一個用于對期望/編碼質量數(shù)據起作用的神經元的權函數(shù)。
如果時間窗口尺寸為N=32,并且對于兩種數(shù)據類型分別使用11比特和8比特來執(zhí)行地址生成,存儲神經元的輸入數(shù)據所需的內存大小將為Mem=2048*16+256*16(用于從期望/編碼長度生成的地址的16×11比特長的標準化數(shù)據,和用于從期望/編碼質量數(shù)據生成的地址的16×8比特長的標準化數(shù)據)。
在所用地址的轉換過程中,神經網絡的輸入是值在0和1之間的標準化數(shù)據,這些數(shù)據后來被轉換成整數(shù)以便生成地址。
Cvk=VKn*211]]>Cm=Mn*28]]>方程III其中VKn是標準化的期望/編碼長度比,Cvk是生成的地址,并且其中Mn是標準化質量,Cm是生成的地址。
基于這些表達式,根據位于時間序列各位置的數(shù)據生成了地址。這樣生成的地址對存儲在表中的神經元進行尋址。換言之,由生成的地址選擇神經元,并且這些神經元在訓練過程中接收期望/編碼長度比和期望/編碼質量比。該系統(tǒng)有兩個其它的與時間序列無關的輸入。與圖18c中顯示的網絡類似,這些輸入被用于確定最小和最大帶寬。使用公式(1/Q-1/Qprev)來計算一個誤差因子,即該誤差因子是由當前訓練的量化因子的倒數(shù)與先前計算的量化因子的倒數(shù)之差確定的,其中Qprev是先前的量化因子。
權函數(shù)作如下修改W=W+(1Q-1Qprev)*eta*]]>輸入,其中eta是學習速率out=exp(Σi=0NW(i))]]>其中N是神經元數(shù)量在網絡的有效控制工作中不再進行訓練,即該系統(tǒng)也使用一種預先訓練的網絡。
控制工作過程與訓練過程相同,除了權值修改未被激活之外。
以一種類似于上面已描述的方式,通過將最小/最大帶寬以及質量數(shù)據分別固定為常數(shù)值,該系統(tǒng)可以被切換到CBR模式。
該系統(tǒng)也可以無錯地以多步驟模式工作。這種工作模式的本質在于在第一步,該系統(tǒng)無控制地以一種恒定的量化因子(例如將Q設置為3)來對整個連續(xù)鏡頭進行編碼。在后面的第二步中,在控制系統(tǒng)被激活的情況下執(zhí)行編碼。該解決方案提供了改進精度的編碼,因為第一步指定了每一幀可被壓縮的程度,所以不需要確定Q,而是可以直接根據步驟1調整Q。另外,可以應用本發(fā)明的神經網絡而不作任何修改。在多步驟模式中,可以使用快速訓練過程執(zhí)行訓練。同樣,在這種模式中插值非常有效我們觀察到神經控制系統(tǒng)在兩個步驟中能夠達到離散控制系統(tǒng)在4-6個步驟中獲得的質量。
應當注意到,與單步驟模式相比,多步驟模式不一定提供更好的質量。這種模式的一個優(yōu)點在于輸出長度可被調整到一個預定值,例如與存儲介質的能力相對應。
VIII.動態(tài)縮放VIII.1.正如已經指出的那樣,經??赡馨l(fā)生不能維持期望長度的編碼視頻具有期望的視頻質量。這可能由下面的原因造成,例如對于特定的序列,預置的壓縮比太高了,因而使用當前設置的最小/最大壓縮極限不能維持期望的視頻質量。這種情況通常會發(fā)生在高度細節(jié)、動作豐富的膠片上。作為例子,可以提到故事片“木乃伊歸來”的頭5分鐘。在這個特定序列的情況下,對于高質量的MPEG壓縮,至少需要2.5Mbit/s的帶寬。然而,如果可用帶寬減少到1.5Mbit/s,為了消除錯誤,在壓縮和解碼時就需要非常復雜的前濾波和后濾波操作。這將將圖像銳度銳減到編碼視頻的質量幾乎不能達到“可以接受”水平的程度。
VIII.2.為了消除上面描述的問題,根據本發(fā)明,引入了動態(tài)縮放的概念。這本質上意味著如果控制系統(tǒng)由于固定的外部邊界條件不能維持期望的圖像質量,就按比例縮小(重定比例)。幀被縮小(調整大小)到提供滿意結果的尺寸。系統(tǒng)對這個尺寸減小的幀進行壓縮,并且,在解壓時,將它恢復到其原始尺寸??梢岳斫?,在這種情況下圖像質量也會下降,然而,這主要表現(xiàn)為銳度降低。至少在壓縮比未被設置得過高的情況下,不會出現(xiàn)壓縮引起的斑點和其它典型錯誤。
我們已經檢驗了如果減少這種關鍵幀序列的輸入數(shù)據量而壓縮因子保持不變將會產生什么影響。換言之,幀被縮小到其原始尺寸的3/4或1/2。因為編碼器試圖盡可能地保持數(shù)據率恒定,考慮到圖像質量,幀尺寸的減小將導致壓縮程度降低。以這種方式,輸出數(shù)據量與重定比例前保持一致。
例如,如果對整個數(shù)據流用例如0.5Mbit/s的帶寬進行編碼,并且關鍵序列中的幀被減小到原始尺寸的一半,實際傳輸速率保持在0.5Mbit/s,而壓縮率和量化因子被顯著地減小了。在上面例子中,后者的因子被減小到相當于以原始幀尺寸用2Mbit/s帶寬編碼的圖像質量的程度。這導致錯誤減少。該方法的缺陷在于縮放降低了幀的解析度。因而,當在解碼過程中幀被恢復到原始尺寸時,必須推斷出丟失像素的值。然而,通過應用一種適當?shù)目s放方法,這個問題可以被顯著地降低。必須考慮到幀中存在空間頻率分量,并且必須相應地執(zhí)行變換。
VIII.3.因此,在根據本發(fā)明的動態(tài)縮放方法中,我們需要縮放的圖像。測試了許多基于插值的幀縮放方法。Láncos方法產生了最佳結果(Láncos方法實質上是一個已知的重采樣過程,它通過一個濾波器基于該圖像的空間頻率分量對丟失的像素進行插值)。如果對有縮放和無縮放的壓縮進行比較,就會發(fā)現(xiàn)在無縮放的情況下,如果壓縮流用于0.5Mbit/s的傳輸速率,可以容易地觀察到關鍵序列中的質量損失。圖像中的許多區(qū)域變得完全“扁平”,斑點和條紋將會出現(xiàn),并且在某些區(qū)域中圖像銳度急劇下降,就如同對該圖像使用了擦除器一樣。在另一方面,在用按照本發(fā)明的幀縮放來執(zhí)行壓縮的情況下,將不會出現(xiàn)這些錯誤。唯一可察覺到的錯誤是銳度的下降。然而,通過分析序列,可以發(fā)現(xiàn)在視頻連續(xù)鏡頭中那些出現(xiàn)快速運動的點上通常需要縮放。因為快速運動的場景通常在一開始就已經被輕微地模糊了,由重定比例引起的信息丟失幾乎觀察不到。
本發(fā)明的動態(tài)縮放過程執(zhí)行如下把每個到達的幀傳送經過縮放模塊,開始時縮放因子為0(無縮放)。壓縮控制系統(tǒng)決定編碼結果是否滿足指定的范圍。如果結果不滿足,則將幀尺寸改變(減小)到即使解碼后仍然能夠提供可接受質量的程度。
應當注意到可以利用離散方法來解決縮放任務。但是,考慮到在本發(fā)明系統(tǒng)中已經把神經網絡應用于帶寬控制,也可以使用神經網絡來更加有效地執(zhí)行縮放。由于該問題與帶寬控制問題密切相關,已證明向神經網絡添加另一個輸出就能得到滿意結果(見圖18c)。因而,該網絡有兩個輸出,一個提供量化因子的Q系數(shù),另一個提供縮放因子S。
在提供給帶寬控制的第一個解決方案中(見VII.3節(jié),以及圖18c),可以直接插入一個新的神經元189,其輸出提供縮放因子S。然而,對于提出的第二個解決方案(見VII.4節(jié)),實際上應該向每個表地址賦予兩個權重向量。
實際上,這相當于兩個獨立的神經網絡,具有相同輸入但向輸出發(fā)送不同的值。為了使得網絡更加完善,建議向神經網絡增加一個隱含層,該層的神經元被連接到輸出層。在那種情況下,網絡將具有一個所謂的后向傳播結構。這里如同前一個解決方案,輸入層的神經元也是由該系統(tǒng)生成的地址所指向的位置選擇的。
縮放過程從一個I-幀(內部幀)開始,一直持續(xù)到下一個I-幀。對為其它類型的幀確定的縮放因子取平均值。這點顯示在圖20,21中,其中縮放從A開始并且在標記為B的點結束。
IX.關于本發(fā)明中應用的神經控制系統(tǒng)的一些一般性評論為了本發(fā)明控制系統(tǒng)的潛在應用,我們已經測試了大量不同的網絡類型??紤]它們的計算負載和適當?shù)目刂菩袨?,很驚訝地,最佳結果是由具有最簡單的結構的網絡產生的。所謂的反向傳播類型網絡也可以給出優(yōu)秀的結果,在許多情況中提供了比上面描述的后向傳播類型網絡更好的近似,但只有應用地址分解方法(見上文)才會如此。概括起來,第二種方法比第一種方法執(zhí)行的更好,這是由于它比對應方法使用更多的神經元,這提供了更大的知識庫。轉換到后向傳播或反向傳播,它提供優(yōu)秀的控制。
本發(fā)明本質上基于這樣一種想法提供一種能夠實現(xiàn)不同控制特征的控制系統(tǒng),并且確保最優(yōu)壓縮同時也考慮視覺上可以察覺的圖像質量。學習到的不同特征可被分組成簡檔,這些簡檔使得能夠選擇最適用于任何給定視頻序列的特征。我們已經測試了離散控制系統(tǒng)并且已經發(fā)現(xiàn)它們具有的控制動態(tài)性不足。例如,如果使用介質帶寬在兩個步驟中執(zhí)行編碼,經常能夠發(fā)現(xiàn)那些需要更高壓縮的序列,或那些能夠使用較低壓縮的場景。已知的離散編碼系統(tǒng)是閉環(huán)系統(tǒng),意思是它們通常使用恒定的函數(shù)執(zhí)行編碼。然而,神經系統(tǒng)能夠考慮先前幀的信息并且使用所學習到的瞬時特征執(zhí)行編碼控制。
因為實質上已經知道不同的神經網絡模型,在本文中沒有對本發(fā)明神經網絡的工作進行詳細分析。我們僅僅提供了用于對視頻幀序列進行編碼的神經網絡的多個具體實現(xiàn)。
X.1.實現(xiàn)本發(fā)明方法的混合視頻編碼系統(tǒng)的工作的概述整個系統(tǒng)的結構在圖8以及圖22-24中進行了描述。
在壓縮過程中,幀首先經過縮放系統(tǒng)(重采樣模塊)61(圖8)。該系統(tǒng)決定應該使用哪種方法繼續(xù)編碼,并且相應地選擇編碼模式(I,P,B)。在I-幀的情況下,為每個塊執(zhí)行了不同的預測,并且該系統(tǒng)基于方差分析的結果選擇有希望給出最佳可壓縮性的的預測。接著,使用DCT對塊進行變換,并且在適當?shù)乃綄K量化和壓縮。
在P幀的情況下,只有前導幀被用作參考幀,而對于B幀,前導幀和后繼幀一起被用作參考幀,以便為當前待編碼的塊搜索一個匹配的參考塊。接著根據塊尺寸和位置對發(fā)現(xiàn)的塊進行補償(從參考塊中減去該塊,可選地使用1/2或1/4像素解析度的搜索和運動補償),接著對該塊進行預測、變換和編碼。同時,發(fā)現(xiàn)的參考位置被轉換成運動向量,并且從先前的運動向量中減去該運動向量,并且在適當?shù)乃綁嚎s該運動向量。根據期望的和編碼的長度以及質量值,由控制系統(tǒng)調整壓縮比。如果不能將期望的質量保持在當前范圍內,則將該幀縮小到質量可被接受的尺寸。這里必須注意到在具體的實現(xiàn)中,該系統(tǒng)從未將幀減小到小于原始尺寸的一半。
令人驚訝地發(fā)現(xiàn)實現(xiàn)方法的執(zhí)行要遠遠好于預期。在450kB/s的帶寬之上,除了由重定比例引起的銳度降低,在關鍵序列中幾乎沒有任何視覺上可察覺到的錯誤。已經發(fā)現(xiàn),對于380-450kB/s范圍內的傳輸速率,本發(fā)明的混合編碼系統(tǒng)能夠提供普通錄像機SP模式的質量,而在280-380kB/s的范圍內,相當于普通錄像機LP模式的質量。在帶寬超過500kB/s的情況下,視頻質量接近DVD質量。在高于750kB/s的極限時,實際上在視覺上無法和DVD進行區(qū)分。
本發(fā)明的編碼系統(tǒng)的一個缺陷在于,由于算術編碼,它對傳輸信道中數(shù)據丟失引起的錯誤非常敏感。然而,現(xiàn)代的數(shù)字傳輸網絡(諸如互聯(lián)網)支持高度安全、幾乎無丟失的數(shù)據傳輸,即使對于極大的數(shù)據量也是如此,因此這個缺陷不太重要。為了讓編碼系統(tǒng)有效地工作,應該連續(xù)地更新頻率表。如果在解碼過程中某個地方出現(xiàn)傳輸錯誤,那么從該點開始,直到受影響幀結束,所有數(shù)據都將被損壞。X.2.1.結合圖22,解釋了本發(fā)明的混合視頻解碼器的工作,該解碼器用于對使用本發(fā)明系統(tǒng)壓縮的數(shù)據進行解碼。通過向輸入緩沖區(qū)121提供編碼數(shù)據并且對流信息塊133解碼,開始幀重建。流信息塊133包含幀的原始尺寸以及其它解碼過程中不會改變的數(shù)據。因此,流信息塊133只在解碼過程開始時被解碼一次。接著,對幀的頭部信息解碼(步驟122)。幀的頭部信息塊包含當前的幀尺寸、幀類型(I,P,B)、量化類型、以及只和給定幀唯一地有關的其它數(shù)據。
如果該幀是個內部幀,則對描述塊分割的四杈樹結構(步驟123)和DCT系數(shù)以及與各個塊有關的特定信息(步驟126)一起進行編碼。接著,在每個塊上執(zhí)行了反變換(步驟127,128,129),并且將反變換的結果塊寫入存儲新幀的當前視頻存儲器131。
在內部幀中,每個塊包含對其重建所需的所有數(shù)據(特別地,預測類型以及指示該塊是否被分割成16×16塊或四個4×4塊的信息,等等)。
在幀間幀的情況下,在步驟123對第一個描述塊分割的四杈樹結構進行了編碼,因為這個樹結構包含重建該塊所需的數(shù)據。這些數(shù)據被用于解碼DCT系數(shù)、運動向量、以及與各個子塊關聯(lián)的預測碼,以及用于對標識編碼中使用的參考幀的代碼進行解碼。也執(zhí)行了反變換(步驟127,128,129),并且接著,在步驟130中將存儲在參考存儲器125中的參考幀的那些塊添加到反變換塊,所述參考幀的塊是在步驟124中使用運動向量選擇的。
如果使用線性插值對該幀編碼,那么首先基于在步驟124中通過重建的運動向量選擇的塊和參考存儲器125中存儲的參考幀生成插值塊,并且接著將這個插值塊添加到反變換塊。將每個重建塊寫入存儲新幀的當前視頻存儲器131。
內部和幀間解碼的重建幀都被寫入參考存儲器125。參考存儲器125可以包含不止一個幀,數(shù)量取決于編碼過程中使用的最遠參考幀。參考存儲器125是一個循環(huán)緩沖區(qū),意思是每次存儲一個新幀時,將最老的幀刪除。
下一步是在步驟132中將幀尺寸恢復到原始值。優(yōu)選地,使用Láncos方法來恢復幀尺寸。由一個適當?shù)淖永淘诰幋a和解碼過程中都執(zhí)行縮放。在有可用的支持縮放的硬件視頻源或輸出裝置的情況下,編碼器或解碼器只需要指定幀尺寸。
X.2.2.神經解碼器神經算術解碼器在很大程度上與神經算術編碼模塊以相同的方式工作,因為,如已經知道的,在算術編碼中,編碼器的工作與解碼器的工作相同。由于該方法是自適應的,在開始時對單個比特解碼,并且使用解碼的比特計算了一個新的預測器。為了計算預測器,可以不作任何修改地使用用于編碼的神經網絡。編碼器/解碼器之間的差異僅僅表現(xiàn)在已知的數(shù)學計算的差異上,其它功能元素完全相同。
最后,給出了一個完整的視頻編碼/編碼轉換系統(tǒng)(見圖23)。
本發(fā)明的視頻編碼系統(tǒng)支持數(shù)字化,能夠有效地編碼和存儲視頻信號。同時,它還能夠對已經編碼的數(shù)字視頻數(shù)據進行轉換來提高存儲效率。例如,可以應用這種編碼轉換將DVB廣播的MPEG傳輸分組的帶寬從大約20M比特/s減少到大約600K比特/s,例如用于錄制衛(wèi)星或電視廣播。以一種類似的方式,本發(fā)明的高效編碼方法也可用于存儲用數(shù)字攝像機錄制的視頻序列,即使在不使用機械裝置的情況下。
編碼系統(tǒng)的輸入由模擬視頻輸入93,組合的解碼MPEG數(shù)字視頻/音頻分組輸入94,以及模擬音頻輸入105構成。
該編碼系統(tǒng)可在下面的模式中工作a,對從模擬視頻輸入93和模擬音頻輸入105輸入的信號在數(shù)字化轉換后進行編碼。
b,對數(shù)字視頻信號94和音頻信號進行編碼變換,音頻信號是由解復用器109從組合的數(shù)字視頻/音頻信號分組中分離的。
由選擇器96選擇的數(shù)字視頻數(shù)據被通過輸入97提供給編碼系統(tǒng)98(上面結合圖8做了解釋)。編碼的視頻數(shù)據99與數(shù)字音頻數(shù)據被多路復用器100復用到一個組合分組101中。數(shù)字分組,經由PSC102(外圍系統(tǒng)控制器)路由,可被存儲到硬盤103、光存儲裝置或半導體存儲器104上。由選擇器107選擇的數(shù)字音頻信號由編碼器108編碼并且如上面解釋的那樣被存儲。
X.2.3.對存儲的視頻和音頻數(shù)據的解碼在圖24中示出。
解復用器110將存儲在半導體存儲器104或硬盤103中的數(shù)據分組分離成編碼的數(shù)字視頻數(shù)據111和編碼的數(shù)字音頻數(shù)據112。數(shù)字視頻數(shù)據111由解碼系統(tǒng)113解碼,該解碼系統(tǒng)在上面結合圖22已經作了描述。解碼的視頻數(shù)據114可選地被提供給濾波和縮放模塊115,接著被D/A轉換器116轉換成模擬視頻信號117。由解復用器110分離的數(shù)字音頻數(shù)據112由解碼器118解碼,并且最后被D/A轉換器119轉換回模擬音頻信號120。
本發(fā)明不局限于上面給出的實施例,而是也可以設想到其它變化或實現(xiàn)。
權利要求
1.用于對數(shù)字編碼的視頻幀序列進行壓縮的方法,包括如下步驟a.將一個給定的幀劃分成塊,b.可選地,將各個塊進一步劃分成更小的塊,c.根據包含在一個或多個鄰接塊中的信息修改所選擇塊的信息內容(預測),d.通過在所選擇的塊上執(zhí)行一個將空間表示轉換為頻率表示的變換(DCT)生成變換塊,以及最后e.用熵編碼對變換塊的信息內容進行編碼,其特色征于i.在執(zhí)行步驟d中指定的變換之前,在所述的所選擇的塊上執(zhí)行可壓縮性分析,并且根據分析結果ii.在該塊上執(zhí)行步驟c(預測)和d(DCT)或者iii.可選地,將該塊進一步分割成子塊,并且再次在這些從各個分割產生的塊上執(zhí)行步驟i中指定的可壓縮性分析,以及iv.根據步驟i和iii給出的結果,選擇那個可能產生最佳結果的塊分割,并且最后v.根據步驟c中執(zhí)行的預測,使用具有最佳可能結果的塊分割執(zhí)行步驟d中指定的變換。
2.按照權利要求1的方法,其特征在于對屬于各個塊分割的塊執(zhí)行可壓縮性分析時考慮了塊的內容和/或各個塊類型的出現(xiàn)頻率。
3.按照權利要求1的方法,其特征在于在可壓縮性分析過程中所述塊的內容要經歷直接的方差分析或借助于哈達馬濾波器的方差分析。
4.按照權利要求3的方法,其特征在于使用下面的公式執(zhí)行方差分析 其中,M是給定塊或子塊中元素的數(shù)量,pixel(j)是未壓縮塊(原始塊)的一個元素,并且通過把計算得到的方差值與一個給定的閾值進行比較來確定該方差是否超過所述的給定閾值。
5.按照權利要求1-4中任何一條權利要求的方法,其特征在于用熵編碼對賦予一個給定幀中具有最大允許塊尺寸的塊的特定數(shù)據進行編碼,所述特定數(shù)據表示其被賦予的塊的塊分割(四杈樹)。
6.按照權利要求1-5中任何一條權利要求的方法,其特征在于應用離散余弦變換(DCT)作為將空間域表示轉換成頻率域表示的變換。
7.按照權利要求6的方法,其特征在于DCT被用在小于16×16的塊上,并且哈達馬變換被用在尺寸為16×16像素的塊上。
8.按照權利要求1-7中任何一條權利要求的方法,其特征在于在可壓縮性分析過程中,用下面的公式來量化修改(預測)塊的信息內容sum(i)=Σj=0Mabs(pixel(i))2]]>其中M是預測塊中元素個數(shù),以及pixel(i)是預測塊中的一個元素,計算得到的“sum”值與一個給定的閾值或前一個“sum”值進行比較來確定計算得到的“sum”值是否超過所述的給定閾值或所述的前一個“sum”值。
9.按照權利要求8中任何一條的方法,其特征在于在各個塊的預測過程中,使用多種預測模式來執(zhí)行預測,其中產生最低“sum”值的預測模式被用于所述的給定塊。
10.按照權利要求1-9中任何一條權利要求的方法,其特征在于如果各個塊尺寸的出現(xiàn)次數(shù)確認兩個最常出現(xiàn)的塊尺寸的出現(xiàn)頻率超過一個給定值,則將所有塊都用具有兩個最常出現(xiàn)之塊尺寸的塊來代替。
11.按照權利要求1-10中任何一條的方法,其特征在于在對塊進行可壓縮性分析的過程中計算出來一個誤差,考慮所計算的誤差,將對該誤差的貢獻超過一個閾值的塊進一步劃分成子塊。
12.按照權利要求11的方法,其特征在于在一個給定子塊的情況下,如果誤差超過一個預定值,則將該子塊進一步劃分成更小的子塊并且對包括該較小子塊的結果的塊分割執(zhí)行可壓縮性分析。
13.按照權利要求1-12中任何一條權利要求的方法,其特征在于使用尺寸為16×16,8×8,4×4,或2×2的塊或子塊。
14.用于對數(shù)字編碼的視頻幀序列進行壓縮的方法,包括如下步驟a.將一個給定的幀劃分成二維塊,b.建立該幀的一個塊分割,在特定情況下,通過將各個塊進一步劃分成子塊,c.在所述塊的信息內容上執(zhí)行一個變換(DCT),該變換將空間表示轉換成頻率表示,因而產生了多元素二維變換塊(DCT系數(shù)矩陣)以及d.根據外部邊界條件修改變換塊的元素(量化),并且最后e.用熵編碼對包含在變換塊中的信息進行編碼。該方法的特色在于在步驟d中,對多元素二維變換塊中的數(shù)據的修改是基于所述塊的尺寸和可用于傳輸編碼數(shù)據的帶寬而修改的。
15.按照權利要求14的方法,其特征在于對變換塊的修改是量化。
16.按照權利要求15的方法,其特征在于量化是按照下面的函數(shù)的MPEG量化qcoeff(j)=((data(j)*16)+(matrix(j)*0.5)matrix(j)*(217QP*2+1))/217]]>其中qcoeff(j)是多元素二維變換塊的一個元素,matrix(j)是在尺寸上與多元素二維變換塊相對應的矩陣的一個元素,QP是量化因子。
17.按照權利要求16的方法,其特征在于matrix(j)的值是從根據經驗建立的一個矩陣表中得到的,其中該表的各個元素是整個matrix(j)矩陣,根據步驟d中指定的外部邊界條件從所述表中進行選擇。
18.按照權利要求16或17的方法,其特征在于根據QP量化因子的值從所述表中進行選擇。
19.按照權利要求16-18中任何一條權利要求的方法,其特征在于將整個QP域劃分成N個子域,并且向各個子域賦予矩陣表,其中所述矩陣表的尺寸對應于塊尺寸,并且將每個子域賦予一個先前指定的帶寬范圍。
20.按照權利要求16-19中任何一條權利要求的方法,其特征在于步驟d的外部邊界條件由可用的存儲容量和/或可用的帶寬所代替。
21.按照權利要求14-20中任何一條權利要求的方法,其特征在于在特定情況中,在步驟c中執(zhí)行變換前,基于一個或多個鄰接塊(預測)的先前選擇的圖像元素中包含的信息或被包括在參考幀中的參考塊的信息內容,對所選擇的塊的信息內容作修改。
22.按照權利要求14-21中任何一條權利要求的方法,其特征在于為了編碼內部幀,也執(zhí)行按照權利要求1-13中任何一條所描述之方法的步驟。
23.用于對數(shù)字編碼的視頻幀序列進行壓縮的方法,其中某些幀的信息內容根據前導或后繼幀(參考幀)的內容進行編碼,該方法進一步包括如下步驟a.將所述的待編碼幀劃分成塊,b.在包含所述待編碼塊的幀之前或后續(xù)的參考圖像中為給定的待編碼塊搜索一個匹配的參考塊,c.通過將匹配的參考塊與待編碼塊進行比較來執(zhí)行一個可壓縮性分析,d.根據可壓縮性分析的結果選擇最佳參考塊,以及e.使用剛剛選擇的最佳參考塊對所述的塊進行編碼,其特征在于,在步驟b中,在搜索參考塊的過程中i)將待編碼塊劃分成子塊,ii)分析子塊的內容,iii)根據預定義的標準,選擇預定數(shù)量的子塊,優(yōu)選地,至少為兩塊,iv)使用所選擇的子塊執(zhí)行參考塊搜索,所述的搜索是在所選擇的參考幀中的特定搜索范圍內執(zhí)行的,以便搜索包含與所選擇的子塊區(qū)別最小的子塊的參考塊,在所述的搜索過程中,所選擇塊的相對位置保持不變,以及v)使用所選擇的子塊來選擇最佳參考塊作為搜索結果。
24.按照權利要求23的方法,其特征在于在步驟v)中,最佳參考塊是以這樣一種方式選擇的每次當該搜索發(fā)現(xiàn)一個比當前參考塊更好的塊時,將新發(fā)現(xiàn)塊的位置數(shù)據寫入多元素循環(huán)緩沖區(qū),該緩沖區(qū)的最后一個元素包含最佳子塊的位置。
25.按照權利要求23或24的方法,其特征在于使用整個待編碼塊來執(zhí)行參考搜索,并且該搜索是在被認為是最佳參考塊的參考塊附近執(zhí)行的,并且根據所述的使用整個待編碼塊執(zhí)行的搜索的結果來選擇最終的參考塊。
26.按照權利要求23-25中任何一條權利要求的方法,其特征在于確定待編碼塊和參考塊的絕對平方差,并且基于確定的差來決定所述參考塊的可接受性。
27.按照權利要求23-26中任何一條權利要求的方法,其特征在于在已濾波的參考幀中執(zhí)行參考塊搜索。
28.按照權利要求23-27中任何一條權利要求的方法,其特征在于在搜索結果仍然不滿意的情況下,在位于更多參考幀中的搜索范圍內執(zhí)行參考塊搜索。
29.按照權利要求23-28中任何一條權利要求的方法,其特征在于當搜索在所有參考幀中都不成功的情況下,將待編碼塊劃分成子塊,并且為每個子塊搜索一個匹配的參考子塊,所述的搜索是在迄今為止產生最佳結果的參考幀中被認為最好的位置附近進行的。
30.按照權利要求29的方法,其特征在于在將待編碼塊劃分成子塊未能產生滿意結果的情況下,在其它參考幀的最佳位置附近執(zhí)行參考子塊搜索。
31.按照權利要求29或30的方法,其特征在于在子塊仍然錯誤的情況下,將錯誤的子塊進一步劃分成更小的子塊,并且重復該搜索。
32.按照權利要求23-31中任何一條權利要求的方法,其特征在于從參考塊中減去待編碼塊,并且在步驟e中對該差分塊進行編碼。
33.按照權利要求23-32中任何一條權利要求的方法,其特征在于在差分塊的信息內容上執(zhí)行一個將空間表示轉換成頻率表示的變換(DCT或哈達馬變換),從而產生多元素的二維變換塊(DCT或哈達馬系數(shù)矩陣),并且用熵編碼對變換塊的信息內容進行編碼。
34.按照權利要求23-32中任何一條權利要求的方法,其特征在于在編碼過程中,也執(zhí)行按照權利要求1-13中任何一條所描述之方法的步驟。
35.用于對數(shù)字編碼的視頻幀序列進行壓縮的方法,包括如下步驟a.將每個幀劃分成將被單獨編碼的塊,b.在這些塊的信息內容上執(zhí)行一個將空間表示轉換成頻率表示的變換(DCT),從而產生變換塊,并且最后e.用熵編碼對包含在變換塊中的信息進行編碼,并且應用算術編碼作為熵編碼,在該過程中-通過修改一個區(qū)間的下限和上限來對一個比特序列進行編碼,該區(qū)間是該比特序列之連續(xù)比特值的一個函數(shù),以及-在該修改所述區(qū)間范圍的函數(shù)中考慮了該序列已經到達的比特的分布,其特征在于-從該比特序列已經到達的比特值中生成地址,-所述地址被用于對包括多個處理元素的神經網絡之各個處理元素進行尋址,和-修改處理元素的參數(shù),使得各個尋址操作的頻率以及該比特序列之當前到達的比特值被用作輸入數(shù)據,并且神經網絡的輸出被用于確定一個對所述區(qū)間的下限或上限進行修改的參數(shù),-經過涉及多比特處理的初始學習階段之后,在對到達比特進行編碼的過程中,將所述區(qū)間的上限或下限確定為神經網絡的輸出的一個函數(shù)。
36.按照權利要求35的方法,其特征在于將到達的待編碼比特序列提供給一個緩沖區(qū),并且劃分成多個較短的比特序列。
37.按照權利要求36的方法,其特征在于把由較短比特序列之比特表示的二進制值當作為一個地址。
38.按照權利要求35-37中任何一條權利要求的方法,其特征在于該地址被用于選擇一個表的行,其中所述的表包含表示當前待編碼比特之可能值的出現(xiàn)頻率的函數(shù)值以及至少一個權函數(shù)。
39.按照權利要求38的方法,其特征在于各個神經元的權函數(shù)被修改為一個表示待編碼比特的可能值之出現(xiàn)頻率的函數(shù)值的函數(shù)。
40.按照權利要求35的方法,其特征在于所述地址的可能地址范圍彼此形成集合(至少部分重疊)。
41.按照權利要求35-40中任何一條的方法,其特征在于根據邊界條件動態(tài)調整神經網絡的增益和學習速率。
42.按照權利要求35-41中任何一條權利要求的方法,其特征在于編碼器可以以不同的級別使用,其中每個級別的參數(shù)可被單獨地調整,向每個級別賦予一個使用專用參數(shù)工作的神經網絡。
43.按照權利要求35-42中任何一條權利要求的方法,其特征在于在編碼過程中,也執(zhí)行了按照權利要求1-34中任何一條所描述之方法的步驟。
44.用于對數(shù)字編碼的視頻幀序列進行壓縮的方法,包括如下步驟a.將一個給定幀劃分成二維塊,b.在所述塊的信息內容上執(zhí)行一個變換(DCT),該變換將空間表示轉換成頻率表示,從而產生多元素二維變換塊(DCT系數(shù)矩陣),并且c.根據外部邊界條件修改變換塊的元素(量化),并且最后d.用熵編碼對包含在變換塊中的信息進行編碼,其特征在于對多元素二維變換塊之數(shù)據的修改在步驟c中作為神經網絡的輸出的函數(shù)而執(zhí)行。
45.按照權利要求44的方法,其特征在于神經網絡具有后向傳播或反向傳播結構,或者是一個由多個神經元構成的簡單網絡,其中-將期望/編碼的長度以及期望/編碼的質量的標準化值用作輸入數(shù)據,-將特定數(shù)量的先前接收到的輸入數(shù)據和當前輸入數(shù)據存儲在一個時間窗口(時隙)中,包含在時間窗口(時隙)中的數(shù)據被賦予神經網絡的輸入神經元。
46.按照權利要求45的方法,其特征在于所述網絡輸入層中神經元的數(shù)量等于存儲在時間窗口中的數(shù)據元素的數(shù)量。
47.按照權利要求46的方法,其特征在于所述網絡包括一個隱含層。
48.按照權利要求47的方法,其特征在于隱含層中神經元的數(shù)量大于輸入層中神經元的數(shù)量。
49.按照權利要求44的方法,其特征在于將標準化的期望/編碼的長度值以及期望/編碼的質量值作為輸入數(shù)據使用,-將預定數(shù)量(N)的先前接收到的輸入數(shù)據元素(優(yōu)選地N=31或N=63)與當前輸入數(shù)據一起存儲在時間窗口中,并且基于包含在時隙中的數(shù)據生成地址,-將輸入數(shù)據舍入到用于地址生成過程的一個給定的比特長度,-通過哈希函數(shù)從時間窗口中的每個元素生成一個地址,所述的地址指向與該網絡的其中一個處理元素對應的表的元素。
50.按照權利要求49的方法,其特征在于在將期望/編碼的長度和質量數(shù)據舍入以用于地址生成之前,利用它們的原始形式對所述網絡進行預先訓練。
51.按照權利要求49或50的方法,其特征在于通過哈希函數(shù)根據包含在時間窗口中的數(shù)據生成地址。
52.按照權利要求44-51中任意一條權利要求的方法,其特征在于將允許的最小和最大帶寬值用作兩個處理元素的輸入數(shù)據,所述兩個處理元素與所述網絡的其它部分相獨立。
53.按照權利要求52的方法,其特征在于由所述網絡的處理元素以及兩個獨立的處理元素生成的結果出現(xiàn)在兩個輸出上。
54.按照權利要求52的方法,其特征在于所述神經網絡的輸出是一個幀尺寸縮放因子和/或一個量化因子。
55.按照權利要求52的方法,其特征在于所述神經網絡的輸出是一個幀尺寸縮放因子和/或一個量化因子。
56.按照權利要求44-55中任意一條權利要求的方法,其特征在于在編碼過程中也執(zhí)行按照權利要求1-43中任意一條所描述的方法的步驟。
57.用于對數(shù)字視頻數(shù)據進行編碼的裝置,其特征在于它包括適用于執(zhí)行按照權利要求1-55中任意一條所描述的方法的步驟的裝置。
58.包含用于執(zhí)行按照權利要求1-55中任意一條所描述的方法的步驟的指令的軟件。
59.由按照權利要求1-55中任意一條所描述的壓縮方法產生的編碼序列。
60.用于從編碼序列中解壓編碼的視頻數(shù)據的方法,所述編碼序列是由按照權利要求1-55中任意一條所描述的壓縮方法產生的。
全文摘要
本發(fā)明涉及一種用于壓縮數(shù)字編碼的視頻幀序列的方法。在該方法中,將一個給定的幀劃分成塊,并且根據相鄰的一塊或多塊中包含的信息修改了所選塊的信息內容(預測),并且將所選塊從空間表示轉換成了頻率表示。通過算術編碼對轉換塊的信息內容進行編碼。通過各種方法來提高編碼效率,諸如動態(tài)地將所述的塊分割成子塊,或者在執(zhí)行進一步的變換前在所述塊中執(zhí)行一個可壓縮性分析。熵編碼使用一個神經網絡來確定算術編碼的參數(shù)。根據可用的帶寬以及編碼圖像的質量,將這些幀動態(tài)地重新縮放。
文檔編號H04N7/46GK1857001SQ200480020907
公開日2006年11月1日 申請日期2004年5月20日 優(yōu)先權日2003年5月20日
發(fā)明者P·托思, J·卡羅利 申請人:Amt 先進多媒體科技公司