專利名稱:圖象數(shù)據(jù)編碼的制作方法
技術領域:
本發(fā)明涉及一種包含下述步驟的類型的視頻幀預測編碼方法通過用從幀n-1至幀n-2的矢量套接幀n至幀n-1的矢量生成幀n-2相對于幀n的運動矢量。本發(fā)明還涉及包括下述裝置的類型的視頻幀預測編碼裝置通過用幀n-2的矢量套接幀n-1相對于幀n的矢量生成幀n-2相對于幀n的運動矢量的裝置。
預測編碼為壓縮視頻數(shù)據(jù)的已知技術。將待編碼的一個視頻幀與一個參照幀進行比較,不生成孤立地表示該幀的數(shù)據(jù),而生成表示參照幀與待編碼的幀之間的差的數(shù)據(jù)。
如果圖象內發(fā)生了運動,則比較參照幀與待編碼的幀之間的逐個象素成為明顯地低效。然而,假定運動通過導致一個圖象內的元素的重新排列而不是圖象的完全再生,則為了便于進一步的壓縮,其中仍然存在一定程度的內在冗余性而可以加以利用。
視頻序列內的運動通常包含在圖象的不同部分之間運動的一個元素。假定視頻幀是以每秒25或30幀出現(xiàn)的,大多數(shù)可觀察的目標從一幀到另一幀的運動程度是相對地有節(jié)制的。從而,如上所述,運動通常包含象素值的重新排列,為了方便進一步的壓縮便可利用這一內在的冗余性。
理論上,有可能考慮各單個象素,并且為各單個象素計算一個運動矢量,該矢量為當前正在考慮的幀識別參照幀中具有相似的值的一個象素的位置。然而,可以理解,為各單個象素生成運動矢量與傳輸單個象素值本身相比,并不提供壓縮,因此,為了達到一定程度的壓縮,有必要為象素區(qū)計算運動矢量并假定整個區(qū)以相同的方式運動。因此已知將視頻圖象分成由諸如16×16個象素構成的正方形組成的象素塊。從而,在為塊內的各象素傳輸差數(shù)據(jù)之前,先圍繞一個參照塊中的相似區(qū)執(zhí)行搜索來識別參照塊中的一塊象素,它們與待傳輸?shù)膲K相比平均上得出最低的約對差項。從而,一旦確定,便連同標識實際參照塊的位置相對于與參照幀中傳輸?shù)膲K相同位置的塊的一個運動矢量一起傳輸這些差項。
預測編碼能用于為緊跟在參照幀后面的幀生成差值。此外,本方法也可用來預測后面的幀,如幀n+2、n+3等。在這些情況中,隨著幀位移的增加,運動必須考慮的參照幀搜索區(qū)也隨之增大。再者,應理解這種增大是在兩個維度上的。
為了方便運動矢量的計算,有可能執(zhí)行一種套接技術,其中為幀n與幀n+1之間的第一幀位移識別一個運動矢量,此后,參照幀n及為幀n+1計算的運動矢量為幀n+2計算運動矢量。從而,可將這兩個運動矢量“套接”在一起來提供從幀n至幀n+2的運動矢量。
實時傳輸編碼的幀時,總希望盡可能快速地傳輸數(shù)據(jù)。從而在上述實例中,為了為幀n+2計算運動矢量,必須編碼幀n+1。結果,幀n+1一編碼完便立即希望傳輸該幀,然后起動編碼幀n+2的處理以便傳輸該幀。
在某些情況中,尤其是在按照一種采用的標準傳輸數(shù)據(jù)時,所要求的傳輸次序可能與套接過程的自然結果不同。因此導致如果得到的編碼的幀是以錯誤的次序生成時便難于實現(xiàn)套接過程的問題。
本發(fā)明的一個目的為提供一種用于視頻幀預測編碼的改進的方法與裝置。
本發(fā)明的另一目的為提供一種采用套接預測編碼的改進的方法與裝置,其中得出的編碼的幀是以與特定的傳輸標準所要求的次序不同的次序生成的。
按照本發(fā)明的第一方面,提供了上述類型的方法,其特征在于在將幀n-2寫入一個緩沖器之前將幀n-1寫入所述緩沖器;而在從所述緩沖器讀出幀n-1之前從所述緩沖器讀出幀n-2。
在一個較佳實施例中,用向前預測編碼從一個較早的幀n-m預測幀n。
按照本發(fā)明的第二方面,提供了上述類型的裝置,其特征在于緩沖存儲裝置;在將編碼的幀n-2寫入所述緩沖存儲裝置之前將編碼的幀n-1寫入所述緩沖存儲裝置的裝置;以及在從所述緩沖存儲裝置讀出編碼的幀n-1之前從所述緩沖存儲裝置讀出編碼的幀n-2的裝置。
在一個較佳實施例中,該裝置按照MPEG建議編碼幀。
在另一個較佳實施例中,該裝置用在可視電話的電視會議設施中。
下面參照附圖僅用示例方式描述本發(fā)明,附圖中
圖1示出用于壓縮與解壓供傳輸或存儲用的視頻信號系統(tǒng),其中包含用于實行時間壓縮的電路;圖2A示出待編碼的幀的一塊象素及一個參照幀中的一塊象素,其目的為計算一個運動矢量;圖2B示出計算運動矢量的一種算法;
圖3詳細示出圖1中所示的類型的實行時間壓縮的已知電路;圖4A示出編碼前按照MPEG建議考慮的幀的類型;圖4B示出MPEG幀的編碼流;圖5詳示解碼按MPEG建議壓縮的視頻幀的電路圖6示出當幀間相隔一個以上的幀間隔時,用于計算運動矢量的區(qū)域或參照幀與一個待編碼的幀的比較;圖7示出用于計算運動矢量的套接搜索;圖8示出用套接計算運動矢量的電路,其中包含一個用于計算運動矢量的電路;以及圖9詳示圖8中所標識的運動矢量計算電路。
圖1中示出了用于壓縮視頻信號、傳輸或存儲所述信號及解壓所述傳輸或存儲的視頻信號的一個系統(tǒng),采取攝象機或諸如磁帶或光盤播放機等視頻再生裝置的形式的視頻信號發(fā)生器14生成全帶寬的視頻信號。信號發(fā)生器14生成提供給一個時間壓縮電路16的一序列原始幀15。時間壓縮電路利用時間上分隔開的幀之間的相似性生成表示所述的幀之間的差的編碼信號。所述時間壓縮電路16的輸出提供給配置成利用特定的圖象幀內的進一步冗余性的一個空間壓縮電路17。從而,空間壓縮電路17可利用離散余弦變換編碼,使得為各幀生成的數(shù)據(jù)量取決于包含在該幀內的實際信息量。
從而,已知時間壓縮與空間壓縮的組合能達到顯著程度的視頻數(shù)據(jù)壓縮,允許在有限帶寬的信道上傳輸這種類型的壓縮視頻信號,諸如用在可視電話中的,或者將它們存儲在基于標準計算機的存儲介質上,諸如單片磁盤或基于音頻的緊致光盤(CD-ROM)。
從空間壓縮電路17得出的輸出信號被放大器18放大供傳輸或存儲,如用參照數(shù)字19所標出的。
在接收機上或播放裝置中,將從傳輸介質接收的或從存儲設備讀出的編碼信號提交給放大器20,此后實際上反演進行壓縮所執(zhí)行的過程,以便解壓該畫面。從而,電路21執(zhí)行空間解壓,此后電路22執(zhí)行時間解壓,借此將一個全帶寬視頻畫面提供給畫面生成裝置23,諸如依次顯示一序列解壓的視頻幀24的一臺視頻監(jiān)視器。
雖然應當理解,在許多情況中除了時間壓縮技術以外還應包含空間壓縮技術,但本發(fā)明特別關注時間編碼與解碼方面。真正利用這兩種類型壓縮的優(yōu)點的一種壓縮技術便是由通常稱作MPEG的國際標準組織(ISO)的運動畫面專家組所建議的壓縮技術。
時間壓縮是通過取一第一幀作為一個參照幀并將該參照幀與一個待編碼的幀進行比較而實行的。編碼是通過識別待編碼的幀與參照幀之間的差并編碼這些差的一種表示而達到的,從而可在接收機上或在播放時重構原始的幀。
第一步將包含將待傳輸?shù)膸母飨笏嘏c參照幀的對應象素進行比較。通常,象素是由諸如RGB等若干彩色分量構成的,或者更通常地在傳輸系統(tǒng)中用亮度加兩個色差信號構成。從而對于各個這些分量,待傳輸?shù)膸闹悼梢耘c參照幀進行比較,并且不傳輸待傳輸?shù)南笏氐娜?,而是傳輸兩個象素值之間的差。這樣,在某些情況中,在逐幀基礎上的這兩個值之間的差可能是非常小的,尤其是如果原始圖象是靜止的。然而,隨著運動的出現(xiàn),這些差開始變大,并且對于明顯的運動量,節(jié)省可變得很小。再者給定具有有限的傳輸或存儲帶寬的環(huán)境,運動可導致畫面破裂。
雖然出現(xiàn)顯著的運動時,差分編碼技術最終將崩潰,但是很明顯在大多數(shù)視頻序列中,運動是由一個圖象幀內在預定的時間間隔上運動的實際目標構成的。從而,假定僅僅在視頻序列的一秒鐘中便流逝相當大的數(shù)目的幀,很可能一個運動目標不會導致整個幀的信息內含的明顯變化,雖然單個象素會發(fā)生明顯的變化。從而,如果能夠傳輸標識運動矢量的信息連同不取自參照幀的原始位置而取自按照運動矢量從原圖移位了的位置的差信號,便有可能減少傳輸?shù)男畔⒘俊?br>
在轉讓給本受讓人的5,083,202號美國專利中公開了除了差分編碼以外用運動矢量計算的方法壓縮視頻數(shù)據(jù)的一種系統(tǒng)。按照這一公開,將一個視頻幀分成多塊,各包含16行,各行上有16個象素,即16×16的塊。對于采用離散變換法的空間壓縮也需要將幀分成塊,但通常它是分成8×8個象素的塊。在采用兩種技術時,每一個16×16個象素區(qū)是由四個8×8的塊組成的,并且為了區(qū)別兩者,將較大的塊稱作宏塊。
圖2A中示出了這一類型的象素的宏塊。運動矢量不是從圖象幀中所示的目標的實際運動導出的,也不一定涉及它們。如這里所使用的,一個運動矢量是指一個特定的16×16宏塊而言,并且它表示與待傳輸?shù)膲K相比產(chǎn)生最低差值的參照圖象中的一塊在正或負X與Y方向上的整數(shù)個象素間隔的一個運動。從而,識別出滿足這一標準的一個矢量有可能并不真正涉及圖象幀中一個目標的實際運動。然而,在實踐中,很可能由于基本上在運動矢量的方向上出現(xiàn)了實際運動而識別出滿足這一標準的一個矢量。
運動矢量的分辨率基本上是基于所要求的壓縮程度與可得到的處理設備的一種任意選擇。在本例中,運動矢量是以整個的象素間隔為單位測量的,但是也能采用分數(shù)象素間隔,并且也能用插入法計算亞象素位置上的新象素值。類似地,將搜索區(qū)的大小選擇為便于容納大多數(shù)運動速度,同時為了計算運動矢量而對所需要的處理設備加以現(xiàn)實的限制。這一點在傳輸方的運動矢量為實時計算的時尤其重要。
一個特定塊的最佳運動矢量的識別是一種要求大量計算的過程,然而應當理解,一旦真正建立了該矢量、將其用于實行編碼、然后為實行解碼而將其傳輸或記錄,則解碼過程是明顯地對計算要求不高的。從而,給定一個運動矢量,用這一矢量來識別傳輸?shù)膮⒄諑械淖罴褖K是一種非常直觀的實踐。然而在傳輸方,在將其用于實行編碼之前,必須實際計算該矢量。
下面參照圖2A與圖2B描述為一個特定塊計算運動矢量的方法。在圖2A中,將待編碼的一個16×16象素塊標識為25。這一象素塊是通過在一個參照幀中識別一個相似塊而編碼的,并且不傳輸該當前塊的實際象素值,而傳輸表示待傳輸?shù)膸膲K中的象素值與參照幀中識別出的塊中的象素值之間的算述差的差值。
塊26為出現(xiàn)在與當前幀中塊25的等價位置上的參照幀中的一個16×16象素塊。從而,如果采用不帶運動矢量的預測編碼,塊25內的象素值將直接與塊26內的象素值進行比較。
然而,當計入運動并采用運動矢量時,則執(zhí)行搜索而在參照幀中識別一個產(chǎn)生比從塊26計算產(chǎn)生的差值小的差項的16×16象素塊。
理論上有可能檢驗參照幀中所有的可能塊,然而這將需要大量的計算需求并且實際上是不可能實時實現(xiàn)的。從而,采取了折衷方案,在這一特定的實施例中,通過從該16×16象素塊的基位置(從參照數(shù)字26標識的位置)位移到在X與Y兩個方向上加減15個象素間隔的位置中進行搜索。
從而,給定加或減15個象素的位移,便可以從參照幀的塊27內的任何地方得到用于編碼塊25的一個參照象素塊。從而,塊27為由46×46個象素位置構成的塊,而一個16×16的象素塊可占據(jù)塊27內961(31×31)個位置中的任何一個。
為了確定這些可能的位置中哪一個提供最佳的運動矢量,要考慮所有的可能位置并根據(jù)得出待傳輸?shù)膲K25與塊27內的一個參照塊之間最小差值的位置進行選擇。圖2B中示出確定最佳可能運動矢量所執(zhí)行的算法。
為了本公開的目的,在諸如塊27的較大搜索區(qū)內的諸如塊26的一個16×16宏塊的位置將稱作“塊位置”。再者,16×16象素的宏塊內的實際象素位置將稱作象素位置。塊位置是參照該塊不受運動矢量的影響移位時所占據(jù)的位置描述的。從而,區(qū)27內的一塊的位置是參照塊26的位置描述的。再者,區(qū)27內的塊位置的X、Y坐標也等價于將塊26變換到計算出實際差值的一個塊位置所要求的運動矢量。
如上所述,通過考慮區(qū)27內的各可能塊位置而為各塊確定一個運動矢量。這是通過考慮用一個運動矢量(-5,-5)將該塊放置在左上角啟動的。
在步驟30確定下一個塊位置,該位置在第一次循環(huán)上將由如上所述左上塊的一個運動矢量(X、Y)定義。
在步驟31,將標識為差之和的一個變量∑D設置為零。步驟32啟動一個考慮該特定的塊位置內的所有象素位置的循環(huán),從而在步驟32考慮該塊內的下一個象素位置,而在步驟33通過從塊25導出的待傳輸象素值中減去參照象數(shù)值,同時略去差的符號而計算出絕對差值D。
在步驟34將在步驟33計算的差值加在表示差之和的變量∑D上,在第一次循環(huán)上,這便是將步驟33上計算的值D加在零上。
在步驟35上提出問題是否要考慮另一個象素位置,在第一次循環(huán)時,答復是肯定的,而導致控制返回到步驟32。
從而,在步驟32識別下一個象素位置,在步驟33計算該象素位置的差值并在步驟34再度將差值加在差之和上。
這樣將16×16個象素的宏塊的所有差值加在一起直到考慮了宏塊內的所有象素位置而在步驟35提出的問題的答復為否定為止。
除了確定表示一個特定的塊的差之和的值∑D以外,還存儲了表示差值的最低模量和的標識為∑D(MIN)的另一個變量。
在啟動算法時,∑D(MIN)可設定為充分大的值,使得∑D的任何典型值都具有較小的模量,而導致在步驟36提出的問題的答復為肯定的。
當步驟36提出的問題的答復為肯定時,便將∑D(MIN)設定為等于步驟37計算的∑D值。類似地,在步驟38將運動矢量的X分量V(X)設定為等于X,如在步驟30所確定的,類似地將運動矢量的Y分量V(Y)設為等于Y。
在步驟39,提出問題是否要考慮另一個塊位置,并當答復為肯定時,控制返回到步驟30,選擇下一個X、Y塊位置。
這樣,對于各個塊位置,將該塊內的所有象素值與塊25對比,塊25即待編碼的塊。將所有的絕對象素差值(即模量差值)加在一起,并比較這一和的模量以檢驗它是否是到此為止找到的最小值。如果它是到此為止找到的最小值,便用它來取代前面的最小值,而在步驟38建立一個到此為止的新的最佳運動矢量。
考慮了所有的塊位置之后,在步驟39提出的問題得到否定的答復,變量∑D(MIN)表示最小的差之和,而為V(X)與V(Y)存儲的值表示最佳運動矢量的X與Y坐標,這便是將待傳輸?shù)膲K25與區(qū)27內的一個參照塊比較時得出最小差值的運動矢量。
圖3中示出了用于執(zhí)行差分編碼的電路。預測電路41包括一個用于存儲前一幀的象素值的幀緩沖器。從而,前一幀成為參照幀,而將表示新幀與該參照幀之間的差的信號傳輸或轉發(fā)到壓縮的下一階段,如圖1中所示。減法電路42計算差,它從進入的象素值中減去預測電路41所產(chǎn)生的輸出。然后用有可能執(zhí)行量化或Huffman編碼的一個編碼電路43編碼這些象素值,供隨后的傳輸或處理。
還將編碼電路43的輸出提供給配置成執(zhí)行編碼電路43的逆過程的一個解碼電路44。執(zhí)行解碼過程,以便保證在發(fā)源方生成與接收方重構的相同的參照幀。電路43執(zhí)行的編碼中有可能引入損失,因此在發(fā)源方必須計入這些損失,以保證重構一個相同的幀。
從而,將解碼電路44的輸出提供給一個加法電路45,其輸出則提供給預測電路41。操作中,將來自待編碼的幀的圖象數(shù)據(jù)塊組合在一個輸入緩沖器46中。將下一塊待傳輸?shù)臄?shù)據(jù)提供給預測電路41,該電路配置成執(zhí)行前面詳述的運動矢量計算過程。作為這一過程的結果,預測電路41為該塊確定一個運動矢量,并將其傳輸或記錄,如前所述。
預測電路41存儲參照幀的一個完整的拷貝。開始,它在參照幀中識別與當前正在編碼的塊等價地定位的塊。從這一等價地定位的塊,預測電路通過按照運動矢量所定義的移動若干象素間隔而識別一個經(jīng)過運動校正的等價塊。
預測電路41一旦識別了一個預測塊,便將正在編碼的該塊的象素值提供給加法電路42,該電路還接收來自預測電路41的等價預測值。從而,對于正在編碼的塊中的各象素,從其中減去其等價的經(jīng)過運動校正的象素,并將作為電路42的輸出產(chǎn)生的差提供給編碼電路43。
將來自編碼電路43的輸出象素匯集在一個輸出緩沖器48中,該緩沖器能存儲若干滿幀象素,以便傳輸緩沖存儲。這便是說,希望以不變的速率傳輸或記錄象素,以便優(yōu)化利用能得到的帶寬。然而,由于編碼過程的復雜性質,難于以不變的速率生成編碼象素,因此設置了緩沖器48來消除產(chǎn)生編碼數(shù)據(jù)的速率中的變化。
如上所述,將編碼電路43的輸出提供給一個等價的解碼電路44,在那里通過加法電路45將預測電路41生成的象素預測加在解碼的值上,并反饋給預測電路41,以便建立一個后隨的參照幀而允許序列中下一個幀的編碼。
從而能夠理解,給定一個特定序列的視頻幀中的一幀,便有可能計算出現(xiàn)在該序列中的后隨的幀。這種編碼方式稱作向前預測編碼,其意義在于參照較早出現(xiàn)在序列中的幀來編碼或解碼一個新的幀。具體地,新幀的各塊是參照前一幀的一塊解碼的。首先,該塊可能在與該前一幀中對應的位置不同的位置中,新的位置是用一個運動矢量標識的。第二,傳輸?shù)闹抵邪聣K與前面?zhèn)鬏數(shù)膲K之間的象素差。
如5,083,202號美國專利中所描述的,有可能實時偏碼向前預測視頻信號,從而除了在編碼過程可占用比解碼過程長得多的時間的系統(tǒng)之外,還允許在傳輸系統(tǒng)中采用這種技術。
按照MPEG視頻壓縮建議,壓縮的視頻幀是按照上述向前預測法生成的。將這一類型的幀標識為“P”幀,并且是構成一個壓縮的位流的三種類型的幀之一。
MPEG系統(tǒng)的一種要求是它必須具有入口點,這便是說,不參照前面?zhèn)鬏數(shù)膸?,能從其啟動播放的參照幀。從而,可認為一個MPEG流是由幀構成的,其中各群是基本上自含的,允許在所述群的邊界上定出編輯點。為了能夠將圖象幀壓縮到中,必須傳輸這樣的一幀,它是以這樣的方式壓縮的,即為了再生它不需來自其它任何幀的信息。這一幀稱作幀內編碼的;以示與需要來自其它幀的信息的幀間編碼的區(qū)別。在MPEG標準中將這種類型的幀標識為“I”幀(幀內編碼的),而P幀則是從I幀或其它P幀各前預測的幀。
圖4中示出MPEG編碼的典型輸入幀序列。雖然按照建議,群數(shù)是實際上作為壓縮比(即壓縮數(shù)據(jù)對原來數(shù)據(jù)之比)與圖象質量之間的一種折衰可以調整的,在本例中將一群指定為包含15幀。
在圖4A中所示的15幀的群中,幀內編碼幀I0標識為幀3。如上所述,輸入序列的幀6是參照I0幀(幀3)用向前預測編碼的。類似地,向前預測編碼也用于參照幀P0編碼標識為P1的幀9。下一預測幀P2是從幀P1編碼的,而最后的向前預測編碼幀P3則是從幀P2編碼的。從而,在一群15幀中,有一個幀內編碼的幀,它預期比后面的幀需要明顯地更多的帶寬;以及基本上采用參照圖3所示的技術導出的四個向前預測的幀。
15幀的群中的其余10幀,可認為是參照將它們連接在兩面的那些幀導出的。在考慮實際編碼時,幀4.5.7.8.10.11.13與14可用P幀的向前預測的相同方法從一個I幀或一個P幀向前預測。從而,對于各塊,標識一個運動矢量,后面跟著該塊內各象素的象素差值。
然而,應理解,在某些情況中,在一個向前預測的幀與從中導出預測值的參照幀之間可出現(xiàn)場景變化。出現(xiàn)這種情況時,預測幀與參照幀之間極少相互關聯(lián),而導致極大的差值,這可能占用與作為幀內編碼傳輸預測幀所需的信息水平相同的比例。因此,在這種情況中,預測編碼的優(yōu)點便喪失了,當系統(tǒng)試圖傳輸需要超出可利用的帶寬的場景變化時,會導致畫面劣化。如果用足夠的效率來編碼其它的幀而提供了額外的帶寬容量的話,輸出緩沖器48在一定程度上可容忍這種情況。然而有時這種形式的變化有可能導致明顯的畫面劣化。
在試圖克服這種情況及進一步減少帶寬需求中,幀1.2.4.5.7.8.10.13與14可有可能參照視頻序列中的后面的一幀編碼,而不是前面的一幀。這樣,預測編碼不是出現(xiàn)在向前的方向上,而實際上出現(xiàn)在向后的方向上,將這些幀標識為B幀(雙向的),但應理解,向前編碼或向后編碼的選擇是取決于哪種方法需要最少的信息量而在逐幀的基礎上作出的。再者,一個雙向編碼幀可參照前面與后面的幀兩者編碼。
假定幀4與幀5之間出現(xiàn)場景變化。如果已采用向前預測編碼生成了幀5,則其參照幀將是幀3。幀3構成前一場景的一部分因此與取自后一場景的幀5很少關聯(lián)。從而如果忠實地再生幀5,便需要可觀的信息量。
在本例中,為了用向前預測編碼法生成幀6,將要傳輸可觀的信息量。如生成幀6所需的信息量所表示的,很明顯在幀3與幀6之間已出現(xiàn)了場景變化,因此很清楚在編碼幀3與幀6中已經(jīng)實際上考慮了場景變化的后果。
變化出現(xiàn)在幀4與幀5之間而幀4能參照幀3忠實地再生。然而,如果幀5是采用向后預測法參照幀6而不是參照幀3編碼的,則在編碼幀5時只需要極少的信息。然而編碼系統(tǒng)在尚未執(zhí)行過兩種編碼嘗試之前,并不知道幀5應從幀6編碼而不是幀3。在已經(jīng)執(zhí)行過兩種編碼時,然后有可能比較它們的結果而選擇導致最少數(shù)據(jù)傳輸量的那種編碼。
從而在本實例中,幀4與5兩者原先都是從向前預測方式及向后預測方式編碼的。然后,幀4將參照向前預測編碼傳輸,而幀5則將參照向后預測編碼傳輸。
假定以向前預測編碼從一個較早的幀,或者以向后預測編碼從隨后的幀生成了一個B幀,必須為傳輸或記錄的目的重組幀數(shù)據(jù)次序。圖4B中示出了這種重新排序。如果假定圖4A中所示的幀1為一個特定的序列中最前面的幀,由于不存在更早的幀而不可能用向前預測產(chǎn)生此幀。從而,幀1與2兩者都是用向后預測編碼產(chǎn)生的,因此是在幀3之后傳輸?shù)?。從而如圖5中所示,傳輸?shù)牡谝粠菐?,后隨幀1與2。由于幀4與5也可能參照幀6而不是幀3編碼,所以在幀3后面不可能傳輸幀4與5,因此要傳輸?shù)南乱粠菐?,后隨幀4與5。類似地,下一幀是幀9,后隨幀7與8,此后傳輸幀12即P2幀,后隨幀10與11,此后傳輸P3幀即幀15,后隨幀13與14。
圖5中示出MPEG編碼流的一個解碼電路。類似于圖1中所示的放大器20的一個放大器51放大所接收的信號。一個信號分離器52將頻率域中輸送的象素信息與運動矢量分離,并將所述象素數(shù)據(jù)提供給一個空間解壓電路53。類似于圖1中所示的電路21,空間解壓電路53將空間壓縮數(shù)據(jù)轉換成象素值或象素差值,依次將它們提供給處理器54。
處理器54執(zhí)行時間解壓,并且除了接收來自空間解壓電路53的壓縮象素數(shù)據(jù)之外,還配置成接收來自信號分離器52的運動矢量及來自視頻幀存儲器A與B的參照數(shù)據(jù)。根據(jù)這些信息,處理器54配置成以傳統(tǒng)的視頻格式生成輸出幀。
如圖4B中所示,一個幀群是以重新排列的次序傳輸?shù)模沟媒鈮弘娐?3接收編碼幀3,后面跟隨編碼幀1、編碼幀2及編碼幀6,等等。執(zhí)行空間解壓并將解壓后的幀數(shù)據(jù)提供給處理器54。
幀3為一幀內編碼幀,因而只以空間壓縮傳輸。從而,電路53執(zhí)行過空間解壓之后便完成了來自幀3的象素數(shù)據(jù),因此為了生成輸出數(shù)據(jù),處理器54不需要進一步附加的處理,而將幀3的象素值提供給一個選擇器55。
然而在解碼完幀1與2之前不能將幀3提供給輸出,因此選擇器55將象素數(shù)據(jù)寫入幀存儲器A中。
如圖4B中所示,下一個到達的幀為幀1,空間解壓之后,將其提供給處理器54。幀1是參照幀3預測編碼的(向后編碼),因此通過根據(jù)運動矢量從存儲器A中讀取參照值并在傳輸?shù)南笏厣霞由蠀⒄障笏?,而為?生成輸出數(shù)據(jù)。沒有其它的幀是參照幀1編碼的,因此選擇器55配置成將經(jīng)過解碼的幀1提供給輸出。
下一個到達的幀為幀2。同樣,這一幀只是參照幀3編碼的,因此處理器54再一次根據(jù)信號分離器52提供的運動矢量參照從存儲器A讀取的值解碼幀2。同樣,選擇器55將解碼的值提供給輸出。
下一個到達的幀為幀6,它又是參照幀3用向前預測法編碼的。因而,空間解壓之后,處理器54參照運動矢量及存儲在存儲器A中的參照值解碼幀6,并將幀6的解碼值提供給選擇器55。此時,不能在幀4與5解碼之前將幀6提供給輸出,因此,選擇器55將幀6的解碼值提供給存儲器B。與此同時,從存儲器A中讀出幀3并提供給輸出。
這時已存儲了幀3與6兩者的解碼版本,便有可能解碼幀4與5及將它們提供給輸出。假定可以得到所有的必要信息,幀4與5便可向前解碼、向后解碼或雙向解碼。將幀4與5提供給輸出之后,從存儲器B中讀出幀6并且也將其提供給輸出。
將幀5提交給輸出之后,便不再需要保留幀3,因此存儲器A可以改寫。下一個到達的幀為幀9。參照幀6解碼該幀并寫入存儲器A中。對幀7與8重復上述用于幀4與5的過程。解碼幀7與8并提供給輸出,此后便能從存儲器A中讀出幀9并將其提供給輸出。
這樣便能理解,通過遵循類似的技術,所有的幀都能解碼,直到接收到另一個幀內編碼的幀為止,然后重復整個過程。還應理解,硬件需求,特別是以幀存儲器的數(shù)目表示的硬件需求,不受包含在幀群中的雙向幀的數(shù)目的影響。雙向幀是在接收它們時參照存儲在存儲器A與B中的兩幀解碼的。
在編碼速度不是關鍵的應用中,在按照圖4中所示的MPEG要求編碼一個視頻序列中不會遇到特殊的困難。然而,當試圖按照這一標準實時編碼時,將產(chǎn)生兩個明顯的問題。
如圖2A中所示,為了只為一個16×16個象素的宏塊25確定一個運動矢量,必須考慮區(qū)27(一個46×46個象素位置的正方形)內所有的塊位置的象素差值。當在相鄰的幀之間實行預測編碼時,這樣一個區(qū)能夠確定適當?shù)倪\動矢量。然而,如圖2A中所示,必須參照幀3來預測編碼幀6。在這一情況中,幀6不是直接與幀3鄰接的,而是一共與幀3相隔3幀的間隔。
如果在幀3、4、5與6所定義的持續(xù)時間中出現(xiàn)了運動,這一運動有可能是在同一方向上發(fā)生的。從而,從中確定最小的差值的象素參照塊會越過圖象幀運動而使得搜索區(qū)在逐幀的基礎上實際移位。從而,盡管對于鄰接的幀位置,所需要的是加或減15個象素位置的位移,但為了達到相同的效果,該區(qū)的大小必須隨幀間隔的增加而增加。
從而,為了從幀3預測編碼幀4,必須考慮加或減15個象素單元的塊位置,如圖2A中所示。然而,在從幀3預測編碼幀5時,幀間隔增加了一幀的位置,為了達到可比的結果,必須考慮加或減30個象素位置的塊位置。類似地,從幀3編碼幀6時,搜索區(qū)還要增加加或減15個象素位置。從而,為了實行三幀的間隔,必須考慮由加或減45個象素位置的塊位移所定義的一個象素區(qū)。
從而,容易理解,如果要按照圖2B中所定義的算法搜索加或減45個象素位置的位移所定義的一個區(qū),則參照幀3直接計算幀6的運動矢量會導致巨額的計算開銷。
通過參照圖6便能理解這一問題。在本例中,壓縮編碼裝置接收到要作為I0.B1.B2與P0編碼的原始圖象幀3.4.5與6。幀P0是參照幀I0用向前預測法編碼的。從而,所有的幀都已分成16×16個象素的宏塊,并且通過定義一個運動矢量連同象素差值來編碼各宏塊。如上所述,在考慮用于編碼幀P0的塊時,在從幀I0導出的塊與參照幀P0編碼的塊之間存在著三幀的間隔。在幀6中,塊61表示要作為P0幀的一部分傳輸而編碼的一個16×16個象素的宏塊。采用向前預測編碼法,幀I0中的對應幀是參照62的。為一幀的間隔定義一個運動矢量,該幀為幀4,該矢量指定正方形63內任何地方的塊62的位置。這表示在X與Y方向上的加或減15個象素的一個可能的位移。
在下一個幀間隔上,即從幀4到幀5,必須考慮一個加或減15個象素的位移,因此,兩幀之后,塊62有可能在正方形64內任何地方。從而,明顯地增加了要計算差值的面積。然而,即使出現(xiàn)了明顯的增加,仍然不可能為幀P0提供一個運動矢量,因為它還需要另一個幀間隔。
另一個幀間隔導致在X與Y兩個方向上另一個加或減15個象素的位移,得出塊62是在正方形65內的任何地方。從而,為了保持從塊63導出的運動矢量相同的質量水平而從塊65中為塊61提供一個運動矢量,必須在X與Y兩個方向上考慮高達加與減45個位置的象素位移。很清楚,這種計算水平實際上是不可能用現(xiàn)實的硬件實現(xiàn)實時提供的。
如上所述,還必須雙向編碼幀4與5。從而,無論實際傳輸?shù)氖欠袷菐?與5的各前預測值,仍然必須計算它們,因此,必須參照幀3中的塊計算關于幀4中的塊的運動矢量。這等價于在方框63中移動塊62,如圖2中所示。在塊62中所有的象素在X與Y方向上位移了加或減15個象素位置之后,才可能平均這些值并為塊62計算出一個最佳運動矢量。
圖7中示出了稱作“套接”的一種替代方法。塊62在圖7中示出為塊72。通過在區(qū)73中移動塊72而確定一個運動矢量。作為這些操作的結果,計算出一個運動矢量,它實際上將塊72重定位到塊76上。從而塊76內的象素可用于向前預測幀4中的一塊象素。在正常預測編碼中,這時將用幀4來預測幀5的值,而后者又依次用來預測幀6的值。
如上所述,按照MPEG建議,幀6的值并不是經(jīng)由幀4從幀5預測的,而是直接從幀3預測的。然而,如果遲早總是要計算幀4與幀5的運動矢量的,這些運動矢量便可用來計算幀6的最終運動矢量。從而,不是試圖一蹴而就計算出幀6的運動矢量,而需要加或減45個象素位置的象素位移,幀6的運動矢量是分階段計算的,類似于將望遠鏡的小段連接在一起而制成一個相當長的裝置那樣。從而將通過參照幀3計算幀4的一個運動矢量;用前面計算的運動矢量作為偏移而參照幀3計算幀5的運動矢量;以及再次用一個偏移參照幀3最終計算幀6的運動矢量,這種參照幀3導出幀6的運動矢量的過程稱作“套接”。
圖7表示一個參照幀內的象素塊。為了本實例的目的,將待傳輸?shù)囊粠瑑鹊囊粔K與參照幀分隔開三幀的間隔。然而,不是執(zhí)行一個單一的操作將參照幀中的象素值與最終輸出幀進行比較,而是考慮中間幀以便計算一序列運動矢量,然后按照套接技術將它們加在一起。
從而,考慮中的幀中包含一個參照幀、一個待傳輸?shù)膸?、以及位于參照幀與待傳輸?shù)膸g的兩個中間幀。
單個地考慮待傳輸?shù)膸母骱陦K。從而,對于一個特定的宏塊,在中間幀及參照幀中存在一個等價的塊位置。圖7中將這一等價塊位置標識為塊72。將這一等價定位的塊與第一中間幀中的一個等價定位的塊比較。這時在用X與Y兩個方向上加或減15個象素位移所定義的一個區(qū)73內進行搜索。從而,搜索是基本上類似于參照圖2A所描述的。作為這一搜索的結果,在參照幀中識別出一塊76,作為為了在第一中間幀中重構該塊而應從其中得到象素值的塊。此外,識別出將等價地定位的塊轉移到塊76所需的運動矢量。
為了為第二中間幀生成運動矢量,在區(qū)77所定義的加或減15個象素位置間隔內實行進一步的搜索。這再一次導致計算出實際上在參照幀中標識塊78的另一個運動矢量。從而,第二中間幀的運動矢量將塊位置76變換到塊位置78,而第一中間幀的運動矢量則將塊位置72變換到塊位置76。
計算了第二中間幀的運動矢量之后,為包圍塊78的區(qū)79再度重復該過程,區(qū)79也是通過加與減15個象素位置間隔定義的。作為結果,識別出參照幀中的又一個塊位置,并生成了一共3個運動矢量,它們將參照幀中的一塊變換到相隔3幀間隔的待傳輸?shù)膸械囊粔K上。通過套接這三個獨立的運動矢量便產(chǎn)生了一個單一的運動矢量,使得一塊能被傳輸,連同一個標識相隔了幀間隔的參照幀內的從其中計算出差值的一塊的運動的矢量。
套接過程的結果在于得到標識幀3中的一塊的運動的一個單一的矢量,它能用于預測幀6中的一塊,而無須進行圖6所提出的示例所建議的曲折的計算量。
圖8中示出按照MPEG建議實時編碼視頻幀的一個時間壓縮電路。圖8中所示的電路包括一個輸入存儲區(qū)81、一個參照存儲區(qū)82、一個運動矢量計算電路83、一個空間壓縮器84、一個空間解壓器85及一個緩沖區(qū)86。
在所示的實例中,輸入存儲區(qū)包含一個第一幀存儲器87及一個第二輸入幀存儲器88。實際包含在輸入存儲區(qū)中的幀存儲器的數(shù)目取決于傳輸流中的雙向幀的群集。從而,在本例中,雙向幀是成雙群集的,因此需要兩個存儲器87與88。然而按照建議,包含在各雙向幀群中的雙向幀的數(shù)目是可變的,并且應理解,當這一群集值增加時,設置在輸入存儲區(qū)中的輸入幀存儲器的數(shù)目需要對應地增加。
參照存儲區(qū)82包含一個第一參照幀存儲器89及一個第二參照幀存儲器90。在參照存儲區(qū)中需要兩個幀存儲器來容許雙向預測編碼。從而在參照存儲區(qū)內幀存儲器的設置不取決于以出現(xiàn)在各群中的雙向幀的數(shù)目表示的所采用的實際MPEG流的類型。
參照數(shù)字91標識提供給電路的輸入幀的清單,它與圖4A中所示的次序等價。如圖4A中所示,一群的開始是由雙向幀B-2起動的,后隨雙向幀B-1然后是該群的幀內編碼幀I0。因此這些幀可分別用幀號1、2與3參照。
當幀B-2到達電路時,由于編碼是參照這一階段尚未到達的幀內編碼的幀實行的,因此不可能編碼這一幀。從而選擇器92將輸入幀數(shù)據(jù)寫入第一輸入幀存儲器87。類似地,當幀B-1到達(幀2)時,不可能編碼這一幀,因而選擇器92將象素信息寫入第二輸入幀存儲器88。
當?shù)谌斎霂竭_時,它將作為I0幀對待,如上所述,這一幀是不加任何時間壓縮傳輸?shù)?,因此一個特定的群的幀可以不參照任何別的群而再生。從而,輸入選擇器92直接將I0幀的象素值提供給輸出選擇器93,后者依次通過加法器94與空間壓縮器84將所述值轉發(fā)到緩沖區(qū)86。
加法器94在其第二輸入端上接收來自參照存儲區(qū)82的預測值。參照存儲區(qū)82包括一個輸入選擇器95及一個輸出選擇器96,分別配置成寫入數(shù)據(jù)到參照幀存儲器89與90以及從所述存儲器讀取數(shù)據(jù)。
當在將I0幀提供給空間壓縮器84時,選擇器96實際上是停用的,使得沒有額外的值提供給加法器94并且沒有預測值從輸出選擇器93提供給所述加法器的值中減去。
在緩沖區(qū)86上,在寫尋址器98的控制下將空間壓縮器84生成的象素值寫入緩沖器97。從而,如參照數(shù)字99所指示的,該I0幀是在寫尋址器98控制下寫入緩沖器97中的第一幀。
除了提供給寫尋址器98以外,空間壓縮器84生成的I0幀的象素值還提供給實際上執(zhí)行空間壓縮器84的逆功能的空間解壓器85。將空間壓縮器的輸出提供給加法器100,后者在其第二輸入端上接收選擇器96生成的輸出。如上所述,處理I0幀時,該選擇器96不生成輸出,因此加法器100的I0幀輸出等價于空間壓縮器85生成的輸出。
將加法器100的輸出提供給參照存儲區(qū)82的輸入選擇器95,后者又將象素值寫入第一參照幀存儲器89。存儲在輸入幀存儲器87與88中的值連同存儲在參照幀存儲器89與90中的值,可由運動矢量計算電路83尋址。運動矢量計算電路83能用上述套接技術在時間上從一個參照幀相隔一個幀間隔以上的四個幀中計算運動矢量。從而,采用這些技術,運動矢量計算電路計算作為一個B-2幀的第一幀及作為一個B-1幀的第二幀內的塊的運動矢量。如圖4B中所示,理想上B-2幀應在B-1之前編碼。然而,在為B-1幀計算出類似的向后運動矢量之前,不可能計算B-2幀的向后運動矢量。這是因為B-2幀的運動矢量是用套接過程計算的,因此在計算B-2幀的運動矢量時,需要為B-1幀生成的矢量作為編移值。從而,將B-1幀寫入輸入幀存儲器88,并且通過從這一幀存儲器中讀取值,連同從參照幀存儲器89中讀取的I0幀的值,運動矢量計算電路83計算幀B-1內的塊的運動矢量。
計算出幀B-1的運動矢量之后,便有可能編碼幀B-1了。假定要求電路實時操作,必須采取每一種節(jié)省來保證盡可能快地處理數(shù)據(jù)。從而處于編碼幀B-1的地位中,只采用實際編碼幀B-1的必要步驟。從而將運動矢量從運動矢量計算電路83提供給輸出選擇器96。根據(jù)這些運動矢量,從參照幀存儲器89中讀出構成幀I0的一部分的象素值,從生成提供給加法器94的預測值。從而,從輸入幀存儲器88中讀取幀B-1的象素值并經(jīng)由輸出選擇器93提供給加法器94。在加法器94上,從輸出選擇器93所提供的存儲的象素值中減去輸出選擇器96所生成的預測值,然后將差提供給空間壓縮器84。
B型幀本身并不為任何其它幀提供參照幀,于是空間解壓器85所生成并提供給選擇器95的任何輸出并不導致將象素值提供給參照幀存儲器89或90中任何一個。然而,幀B-1的編碼象素值被提供給寫尋址器98,后者又將這些象素值寫入緩沖器97。
對幀B-1進行編碼并將相關的運動矢量組存儲在運動矢量計算電路83中之后,便有可能通過首先為這一特定的幀計算運動矢量而編碼幀B-2。
如上所述,通過采用以套接過程為幀B-1確定偏移,便減小了計算運動時的搜索區(qū)。從而,生成了套接的運動矢量,而允許參照已存儲在參照幀存儲器89中的幀I0來編碼幀B-2。這導致輸出選擇器93從輸入幀存儲器87中讀取幀B-2的象素值,并經(jīng)由加法器94提供給空間壓縮器84。在加法器94上,減去輸出選擇器96選擇的預測值,并且壓縮器84壓縮所得出的差值。再一次沒有必要存儲這些象素值中任何一個作為參照值,盡管所述值是提供給寫尋址器98的,后者依次將它們寫入緩沖器97。
編碼幀B-2與B-1之后,不再需要保存這些幀的象素值了,因此便可改寫輸入存儲器87與88。也能理解,在這一階段,沒有數(shù)據(jù)寫入?yún)⒄沾鎯ζ?0。
輸入序列中下一個到達的幀,幀4,是作為幀B0處理的。幀B0可以是雙向編碼的,因此在接收下一個P幀之前不可能編碼這一幀。結果,將幀B0寫入第一輸入幀存儲器87。還將幀B0的輸入象素值直接提供給運動矢量計算電路83,后者參照所存儲的I0幀的象素值實時計算運動矢量。計算及存儲從幀I0到幀B0的向前預測,供以后與從下一個P幀的向后預測的比較使用。
類似地,下一個到達的幀,幀5,也是一個B型幀,因而在輸入選擇器92的控制下將這一幀的象素值寫入第二輸入幀存儲器88,以及導至輸出選擇器93供從存儲的幀I0向前預測,如對照幀B0描述的。
下一個到達的幀,幀6,是作為一個向前預測的幀,幀P0處理的,因此輸入選擇器92直接將這些象素值導向輸出選擇器93。幀P0的象素值是用來自存儲的I0幀的向前預測值編碼的。P0幀的輸入象素值直接提供給運動矢量計算電路83,后者利用來自幀4與5的套接的運動矢量參照存儲在幀存儲器89中的I0幀的存儲的象素值實時計算運動矢量。
將為P0幀計算的運動矢量提供給選擇器96,得出從存儲器89的參照值的適當尋址,而為加法器94提供預測值。
從輸出選擇器93將P0幀的象素值提供給加法器94,并在加法器94上從中減去預測值,而向空間壓縮器84提供一個輸入。將來自空間壓縮器84的輸出提供給寫尋址器98,后者依次將編碼象素值寫入緩沖器97。與此同時,將來自壓縮器84的輸出編碼值提供給空間解壓器85,以實行空間壓縮器84所執(zhí)行的過程的逆過程。
如上所述,將來自空間解壓器85的輸出解壓后的象素值提供給加法器100,后者在其第二輸入端上接收選擇器96所生成的預測值。從而,象素值是以基本上等價于P0幀的重構象素值的形式提供給選擇器95的。這些象素值本身提供B幀的參照值,因此將所述值寫入第二參照幀存儲器90。
在考慮過P0幀的所有象素值之后,便有可能用向后預測編碼分別存儲在輸入幀存儲器87與88中的幀B0與B1的象素值了。
在參照I0幀生成P0幀的運動矢量中,運動矢量計算電路83已經(jīng)實現(xiàn)了套接過程。從而已參照幀3為幀4計算出了運動矢量。類似地,已參照幀3與4為幀5計算出了運動矢量,并且進一步已參照幀3與4為幀5計算出了運動矢量,并且進一步已參照幀3、4與5用套接過程為幀6,P0幀,計算出了運動矢量。從而已在前進方向上為B0與B1幀計算出了運動矢量。當前必須在向后方向上計算運動矢量,如為幀B-2與B-1所進行的。
再次假定幀B0的運動矢量將用套接過程計算,便必須首先計算幀B1,即幀5的向后運動矢量。
為了進行這些運動矢量的計算,從第二輸入幀存儲器88中讀取值,產(chǎn)將其提供給運動矢量計算電路83。然后相對于參照幀進行搜索,這時參照幀為讀自第二參照幀存儲器90的P0幀。在計算出運動矢量之后,將它們提供給選擇器96,后者通過從第二參照幀存儲器90中讀取適當?shù)膮⒄罩?,而編碼幀B1。從而,從幀存儲器88中讀取幀B1的象素值,并經(jīng)由選擇器93將其提供給加法器94。在加法器94上,從選擇器93提供的實際象素值中減去輸出選擇器96生成的預測值,將得出的差值提供給空間壓縮器84。再次將空間壓縮器84生成的空間壓縮值用寫尋址器98寫入緩沖器97。
一旦編碼了幀B1,這時便可以編碼幀B0。再次在存儲在第二參照幀存儲器90中的參照幀的區(qū)內進行搜索,在這一循環(huán)中這是P0幀。通過利用前面為幀5計算的運動矢量作為對搜索的偏移進行套接。將新計算的運動矢量提供給選擇器96,而允許加法器94實行預測編碼。
一旦在向前與向后兩個方向上編碼了幀B0與B1,運動矢量計算電路83便為雙向幀確定應采用向后預測編碼,向前預測編碼或插值雙向編碼中哪一種。這一決定是根據(jù)哪種編碼方案產(chǎn)生最小的誤差作出的。根據(jù)這一計算,選擇器96從存儲器89、存儲器90或這兩個存儲器的組合中選擇適當?shù)闹怠?br>
如上所述,按照寫入尋址器98將幀寫入緩沖器97的次序是用參照數(shù)字99標識的??蓪⑦@一次序與圖4B中所示的在MPEG標準下所要求的次序進行比較。按照該標準,傳輸?shù)牡谝粠瑸镮0幀,后隨B-2幀、B-1幀及P0幀等。然而,假定套接過程已計算出雙向幀的向后預測運動矢量,便導致所述幀是以錯誤的次序寫入緩沖器97的。從而如清單99所示,在將I0幀寫入緩沖器97之后,便立即將幀B-1(幀2)寫入所述緩沖器,然后跟隨B-2幀。從而B-1幀與B-2幀是以錯誤次序生成的。
用一個讀尋址器101在緩沖區(qū)86內解決這一排序情況。將讀尋址器101配置成以不同于寫入緩沖器97的次序來讀取壓縮的象素數(shù)據(jù)。對讀尋址器101提供有識別緩沖器97內各壓縮幀的位置的信息。從而,在以清單99所示的次序將信息寫入緩沖器97之后便按照清單102所示的建議排序從緩沖器97中讀取。從而,從緩沖器97中讀取的第一幀便是I0幀,如上所述,它是寫入所述緩沖器的第一幀。然而此后從緩沖器97讀取的不是作為下一幀寫入所述緩沖器的B-1幀,而是如清單99中所示的實際上作為第三幀寫入所述緩沖器的B-2幀。從而,讀尋址器實現(xiàn)了將幀的排序重新排列成建議所要求的排序。
如用清單102所示,要讀取的下一幀為P0幀,此后優(yōu)先于B1幀讀取B0幀,然后才讀取B1幀。
參照圖8描述的系統(tǒng)的重大優(yōu)點在于雖然緩沖器86在容許向后套接矢量計算中扮演重要的角色,它并不顯著地增加系統(tǒng)的硬件需求。緩沖器86也是必要的,因為象素值傾向于在可變的比特率上寫入緩沖器。比特率極大地依賴于圖象的內在冗余性,很明顯,這是在視頻序列之間變化的。從而,在整個視頻序列上,壓縮后產(chǎn)生的位的實際數(shù)目是變化的。然而,許多視頻與傳輸設備要求不變的比特率,因此數(shù)據(jù)是在不變的比特率上讀出緩沖器86的。從而,除了重新排列B幀的位置之外,緩沖器86還執(zhí)行吸收產(chǎn)生數(shù)據(jù)的速率的浮動的重要功能。
圖9中示出用于計算運動矢量的電路。該電路將參照一個套接過程加以描述,在該過程中,運動矢量是為與一個參照幀相隔兩幀間隔的一個幀確定的。
設置了多個處理器,并在檢驗兩幀間隔的一個象素區(qū)時,需要五個處理器。圖9中示出了標識為P1至P5的五個這種處理器。各處理器為待編碼的幀的一個特定塊確定一個運動矢量。
通過從一個參照幀的一個區(qū)中順序地讀取象素并將讀取的象素提供給全部五個處理器,可以減少讀取參照幀的次數(shù)。一個區(qū)包含象素的一個水平帶,但它同樣可以是一個垂直帶。讀取來自該區(qū)的象素并將該區(qū)移動一塊的間隔,此后為另一群塊的運動矢量的計算,再次讀取新定議的區(qū)中的象素。
在圖9中,為塊n-2、n-1、n、n+1與n+2計算運動矢量。如果在一幀的間隔的基礎上,正在為塊n計算運動矢量,有必要考慮參照幀的塊121的所有象素。然而,假定正在編碼的塊是從參照幀相隔兩幀間隔的,可能的象素位置的范圍則為用塊122標識的。
如參照圖7描述的,沒有必要去考慮塊122內的所有象素位置,因為已為中間幀計算出一個運動矢量,它是用來在考慮中的象素區(qū)上作用一個偏移的。從而要考慮的象素區(qū)在大小上等價于塊121。但是該塊可位于塊122的空間內的任何地方。
該電路配置成并行處理五個運動矢量。對于其中每個,所關注的窗口(塊121的大小)的垂直偏移可能不同。從而,為了保證各處理器從參照幀接收所要求的象素值,有必要擴展該區(qū),使其具有等價于塊122的高度的一個垂直尺度。
在象素位置123上起動所示的區(qū)的區(qū)掃描。它垂直向下延伸到塊122的邊界124上,五塊間隔的一個距離。根據(jù)尋址器125所生成的地址執(zhí)行數(shù)據(jù)讀取,該尋址器是編程為按照正在編碼的幀與參照幀之間的幀間隔的數(shù)目,來讀取所要求的大小的區(qū)。
通過將水平位置增加一個象素間隔并再次讀取全部五塊距離上的象素而繼續(xù)讀下去。重復這一過程直到考慮了該區(qū)中的所有象素為止。
當正在讀取塊n連同塊n上面與下面的塊中的所有象素時,向處理器P提供可能在編碼塊n-2時需要的角素值。類似地,處理器P2接收可能與塊n-1相關的象素值,處理器P3接收塊n可能需要的值,處理器P4接收編碼塊n+1可能需要的值,而處理器P5則接收編碼塊n+2可能需要的象素值。
隨著在該區(qū)內的掃描進行到包含塊n+1的下一列塊,計算塊n-2的運動矢量所需的所有象素將已經(jīng)提供給處理器P1。從而,處理器P1計算塊n-2的運動矢量,而無需再進一步考慮該塊。這時處理器P1空閑而計算另一塊的運動矢量,從而處理器相對于塊位置的排序實際上是循環(huán)的,處理器P1繼續(xù)接收來自參照幀的象素值,但這時相對于塊n+3處理這些值。
為了計算一個運動矢量,各處理器接收相當于五個塊列的象素數(shù)據(jù)。因此各處理器接收五塊乘五塊正方形象素區(qū)的象素數(shù)據(jù),但是由于前面的運動矢量所定義的偏移與作為套接的結果,處理器只須處理3塊乘3塊的正方形象素區(qū)。再者,在可利用的時間內,將是不可能處理5塊乘5塊的區(qū)的。
為了得益于套接過程,在允許來自參照幀的象素數(shù)據(jù)提供給多個處理器的同時,將前一幀(或多幀)的運動矢量提供給一個啟動電路126。為了計算套接的運動矢量,將啟動電路配置成為各處理器計算何時它正在從參照幀接收實際需要的數(shù)據(jù)。當正在從參照幀讀取這種數(shù)據(jù)時,便生成一個啟動信號并將其提供給相應的處理器。
當從參照幀讀取象素值時,處理器P1將需要這些值中的某一些。正在讀取P1所需要的象素值時,啟動電路126生成一個啟動信號并在處理器啟動線127上將其提供給P1。類似地,如果正在讀取的象素值是P2所需要的,便在線128上將一個啟動信號提供給P2。再者,設置了從啟動電路126到對應的處理器P3、P4與P5的類似啟動線129、130與131。
從而,一個處理電路(P1等)為了計算一個特定的塊的運動矢量,它接收在大小上等價于一個5塊乘5塊的區(qū)的一個區(qū)中的象素值。然而,處理器只處理等于3塊乘3塊的一個區(qū)中的數(shù)據(jù),雖然這一區(qū)可位于較大的5塊乘5塊區(qū)內的任何地方。較小的3×3塊區(qū)是由啟動電路126定義的,使得正在讀取當前感興趣的區(qū)內的象素時,處理器響應啟動信號只是鎖存數(shù)據(jù)。
一旦已讀取了具有五塊間隔的高度一個整個水平區(qū),便通過將該區(qū)垂直移動一塊的間隔而選擇一個新區(qū)。從而,各塊的行落在5個重疊的區(qū)中(除了在幀的邊沿上之外)而各象素值被讀取5次。
假定出現(xiàn)感興趣的象素的區(qū)較大而在較大距離上套接時,則需要較多的處理器。從而在相隔三幀的間隔時,需要7個處理器。而啟動信號則響應套接的運動矢量,仍然標識3塊×3塊的一個正方形區(qū)。從而,隨著幀間距離的增加,讀出的數(shù)據(jù)量也增加,但是在啟動信號活躍時處理器的實際處理器保持不變;由于在啟動信號活躍時,處理器的實際處理量保持不變;由于啟動信號不活躍而成比例地忽略更多的數(shù)據(jù)。
權利要求
1.一種向后預測編碼視頻信號的幀的方法,包括參照幀n為幀n-1生成運動矢量及編碼幀n-1;通過套接從幀n到幀n-1的運動矢量與從幀n-1到幀n-2的矢量,參照幀n生成幀n-2的運動矢量及編碼幀n-2;其特征在于在將編碼的幀n-2寫入一個緩沖器(97)之前,將編碼的幀n-1寫入所述緩沖器;以及在從所述緩沖器讀出編碼的幀n-1之前,從所述緩沖器讀出編碼的幀n-2。
2.按照權利要求1的一種方法,其中幀n是用向前預測編碼從一個較早的幀n-m預測的。
3.按照權利要求2的一種方法,其中幀n-m是不參照任何前面的或后面的幀傳輸?shù)摹?br>
4.按照權利要求2的一種方法,其中幀n-m是用向前預測編碼從另一幀編碼的。
5.按照任何一項前面的權利要求的一種方法,其中數(shù)據(jù)是在可變比特率上寫入緩沖器(97),而在基本上不變的比特率上讀自所述緩沖器的。
6.用于預測編碼一個視頻信號的幀的裝置,包括用于通過套接參照幀n的幀n-1的矢量與幀n-2的矢量而參照幀n生成幀n-2的運動矢量的裝置;用于編碼視頻幀的裝置;緩沖存儲裝置(97);用于在將編碼的幀n-2寫入所述緩沖存儲裝置之前,將編碼的幀n-1寫入所述緩沖存儲裝置的裝置(98);以及用于在從所述緩沖存儲裝置讀取編碼的幀n-1之前,從所述緩沖存儲裝置讀取編碼的幀n-2的裝置(101)。
7.按照權利要求6的裝置,包括用向前預測編碼從幀n-m編碼幀n的裝置。
8.按照權利要求7的裝置,包括用于不參照任何其它的幀編碼幀n-m的裝置。
9.按照權利要求7的裝置,包括從一個前面的幀向前預測編碼幀n-m的裝置。
10.按照權利要求6至9中任何一項的裝置,其中所述緩沖存儲裝置是配置成在可變的比特率上接收編碼數(shù)據(jù)的。
11.按照權利要求6至10中任何一項的裝置,其中用于編碼視頻幀的裝置是按照MPEG建議的。
12.電視會議裝置或可視電話裝置,包括按照權利要求6至11中任何一項預測編碼的裝置。
13.一種預測編碼視頻信號的幀的方法,該方法包括首先生成幀n-1相對于幀n的運動矢量,編碼幀n-1及將其寫入一個緩沖器。其次通過搜索一個偏移了幀n-1的運動矢量的一個區(qū)而生成幀n-2的運動矢量及計算幀n-2的運動矢量,將所生成的兩組運動矢量加在一起以構成幀n-2相對于幀n的運動矢量,編碼幀n-2并將其寫入緩沖器,以及在從緩沖器讀取編碼的幀n-1之前,從緩沖器讀取編碼的幀n-2。
14.按照權利要求13的一種預測編碼視頻信號的幀的方法,相對于幀n生成運動矢量之前,相對于一個較早的幀n-m生成幀n-2、n-1與n的運動矢量,其中m大于2。
15.按照權利要求14的一種方法,其中幀n-m是不參照任何前面的或后面的幀編碼的。
16.預測編碼視頻信號的裝置,該裝置包括一個在前幀存儲器,用于存儲在前幀數(shù)據(jù)及一個在后幀存儲器,用于存儲在后幀數(shù)據(jù),一個運動矢量計算器,用于相對于在前幀數(shù)據(jù)和/或在后幀數(shù)據(jù),計算輸入幀的運動矢量,用于編碼視頻信號的幀的裝置,編碼的幀是輸出到一個緩沖器的,以及讀出裝置,用于以逆向次序從緩沖器中讀出允許雙向編碼的幀。
全文摘要
按照MPEG標準實時編碼視頻幀的系統(tǒng),在向前預測B幀與P幀期間,采用套接過程計算運動矢量。類似地,在向后預測編碼期間,采用套接過程來計算B幀的運動矢量。在向后預測編碼中采用套接,導致以錯誤的次序編碼B幀。通過以生成它們的次序將幀寫入一個緩沖器(97),然后以傳輸或記錄所要求的次序從緩沖器中讀出幀數(shù)據(jù)而重新為B幀建立正確的次序。采用套接過程明顯地減少在預測編碼偏移一個以上幀周期的幀時計算運動矢量所需的計算量。采用一個緩沖器來重組幀并不明顯增加硬件需求,因為這一緩沖器通常用于消除不規(guī)則的數(shù)據(jù)率。
文檔編號H04N7/32GK1128098SQ94192948
公開日1996年7月31日 申請日期1994年7月29日 優(yōu)先權日1993年7月30日
發(fā)明者伊恩·帕克 申請人:英國電訊有限公司