專利名稱:圖像解碼設備和圖像解碼方法
技術領域:
本發(fā)明涉及對利用按塊進行的運動預測而編碼的動態(tài)圖像信號進行解碼的圖像解碼設備和圖像解碼方法,每個塊具有預定數(shù)量的像素。
本申請要求2002年5月27日提出的日本專利申請第2002-152717號的優(yōu)先權,特此引用,以供參考。
背景技術:
作為動態(tài)圖像信號的壓縮編碼系統(tǒng),MPEG-2(運動圖像專家組-2)(ISO/IEC(國際標準化組織/國際電工委員會)13818-2)和MPEG-4(ISO/IEC14496-2)等是眾所周知的。在MPEG-2和MPEG-4中,動態(tài)圖像信號利用運動預測通過編碼系統(tǒng)壓縮。在MPEG-2和MPEG-4中,幀之間的運動預測按塊來進行,每個塊包括例如16×16或16×8個像素。在MPEG-2和MPEG-4中,預測運動量通過矢量(稱為運動矢量)來表達,并且包括在編碼數(shù)據(jù)中。在MPEG-2和MPEG-4中,在編碼的時候,利用運動矢量,從前一個編碼幀中生成預測幀。然后,計算編碼目標幀和預測幀之間的差值,并且通過例如DCT(離散余弦變換)只編碼那個差值。在MPEG-2和MPEG-4中,在解碼的時候,相對于前一個解碼參考幀,利用運動矢量生成預測幀,并且,相加預測幀和解碼幀,以恢復原始幀。
在諸如MPEG-2和MPEG-4之類利用運動預測的編碼系統(tǒng)中,由于只編碼運動矢量和差圖像就足夠了,因此動態(tài)圖像數(shù)據(jù)得到有效壓縮。
接著,描述對通過MPEG-2系統(tǒng)或MPEG-4系統(tǒng)壓縮編碼的動態(tài)圖像數(shù)據(jù)流(基本流)進行解碼的傳統(tǒng)MPEG解碼設備。
圖1顯示了傳統(tǒng)MPEG解碼設備的方塊結(jié)構圖。
如圖1所示,傳統(tǒng)MPEG解碼設備100含有語法分析電路111、可變長度代碼(VLC)表112、逆量化(IQ)電路113、離散余弦逆變換(IDCT)電路114、運動補償電路115、幀存儲器116和彩色格式轉(zhuǎn)換電路117。在運動補償電路115的內(nèi)部,配備了選擇器121、MC控制器122和加法器123。
把基本流輸入語法分析電路111中。語法分析電路111從輸入的基本流中檢測固定長度代碼,分析可變長度代碼的代碼長度和計算可變長度代碼表的地址。語法分析電路111從參照VLC表112的計算地址中檢測可變長度編碼之前的代碼。語法分析電路111檢測這些固定長度代碼和可變長度代碼,從而為逆量化和運動補償而解碼DCT系數(shù)數(shù)據(jù)、運動矢量和各控制數(shù)據(jù)。按照預定掃描次序重新排列DCT系數(shù)數(shù)據(jù),然后將其供應給逆量化電路113。把用于運動補償?shù)倪\動矢量和控制數(shù)據(jù)供應給運動補償電路115的MC控制器122。
當把沒有存在于VLC表112之中的代碼輸入輸入的基本流中時,或者,當在要輸出的DCT系數(shù)中存在錯誤時,例如當在一個DCT塊中DCT系數(shù)的數(shù)量超過64時,語法分析電路111輸出錯誤標志。錯誤標志是按宏塊生成的。把錯誤標志供應給運動補償電路115中的MC控制器122。
逆量化電路113利用用在編碼中的量化參數(shù),進行DCT系數(shù)數(shù)據(jù)的逆量化。把逆量化DCT系數(shù)數(shù)據(jù)供應給離散余弦逆變換電路114。
離散余弦逆變換電路114對DCT系數(shù)數(shù)據(jù)的、包括8×8個DCT系數(shù)的每個DCT塊進行二維離散余弦逆變換運算,并且對空間域的圖像數(shù)據(jù)進行解碼。把通過離散余弦逆變換變換的圖像數(shù)據(jù)供應給運動補償電路115。
運動補償電路115對已經(jīng)通過離散余弦逆變換變換的空間域的圖像數(shù)據(jù)進行運動補償處理。
運動補償電路115中的MC控制器122根據(jù)語法分析電路111供應的用于運動補償?shù)倪\動矢量和控制數(shù)據(jù),相對存儲在幀存儲器116中的參考幀,按宏塊進行運動預測,從而生成預測幀。運動補償電路115中的加法器123按宏塊把從參考幀中生成的預測幀加入離散余弦逆變換電路114供應的差幀中,因而生成原始幀。把加法器123輸出的幀存儲在幀存儲器116中,作為解碼幀。
在進行錯誤隱蔽(conceal)處理的時候,運動補償電路115中的選擇器121進行按宏塊終止從離散余弦逆變換電路114輸出差幀的處理。
錯誤隱蔽處理是例如如果在傳輸?shù)臅r候,在編碼數(shù)據(jù)中出現(xiàn)錯誤,并且存在與周邊正常圖像極為不同的宏塊,就減少錯誤部分中的視覺缺陷的處理。
MC控制器122對其上錯誤標志被語法分析電路111喚起的宏塊進行錯誤隱蔽處理。當其上錯誤標志被語法分析電路111喚起的宏塊,即,其中已經(jīng)出現(xiàn)了錯誤和其圖像已經(jīng)遭受破壞的宏塊是運動補償?shù)哪繕撕陦K時,MC控制器122不進行普通運動補償,而是進行內(nèi)插處理,即利用與那個宏塊處在相同位置的參考幀的像素內(nèi)插宏塊中存在錯誤的像素,從而進行錯誤隱蔽處理。具體說,MC控制器122把引用I-畫面或P-畫面的模式用作作為用于指定那個宏塊的參考幀的模式的MB模式,并且把運動矢量值設置成指示從參考幀沒有運動的0。然后,MC控制器122把作為解碼目標的宏塊的值設置成0。也就是說,通過切換選擇器121,把0設置成從離散余弦逆變換電路114到運動補償電路115的輸入數(shù)據(jù),MC控制器122進行錯誤隱蔽處理。
彩色格式轉(zhuǎn)換電路117進行存儲在幀存儲器116中的解碼圖像數(shù)據(jù)的視頻格式轉(zhuǎn)換處理。例如,彩色格式轉(zhuǎn)換電路117進行到ITU(國際電信聯(lián)盟)-R601規(guī)定的4:2:2格式或4:2:0格式的格式轉(zhuǎn)換。
如上所述,在傳統(tǒng)MPEG解碼設備100中,可以解碼利用運動預測的編碼數(shù)據(jù)。在傳統(tǒng)MPEG解碼設備100中,即使在傳輸?shù)臅r候遭受破壞的圖像塊在幀中存在,也可以進行錯誤隱蔽處理,利用沒有遭受破壞的另一個幀的圖像塊內(nèi)插圖像塊。因此,可以減少由于存在因錯誤而與周邊正常圖像極為不同的塊造成的視覺缺陷。
同時,在進行運動補償?shù)那闆r,如果錯誤隱蔽幀變成參考幀并且引用錯誤隱蔽宏塊中的像素用于運動補償,運動補償就是根據(jù)錯誤的參考值進行的。如果根據(jù)這樣的錯誤參考值進行運動補償,那個宏塊內(nèi)的圖像就作為畫面而遭受破壞(broken)。在對下一個幀進行運動補償?shù)那闆r,可能進一步引用作為畫面遭受破壞的宏塊內(nèi)的像素。也就是說,如果進行錯誤隱蔽處理,錯誤可能在時間和空間方面?zhèn)鞑ァ?br>
現(xiàn)在參照圖2、3和4描述錯誤隱蔽宏塊在時間和空間方面?zhèn)鞑サ挠绊憽?br>
首先,如圖2所示,假設在某個I-畫面(I1)中傳輸錯誤存在于兩個宏塊(MB3,MB4)中。在這種情況下,當進行錯誤隱蔽處理時,例如利用正好在I1之前的P-畫面(P0)中處在相同位置的宏塊(MB3,MB4)內(nèi)插這些宏塊(MB3,MB4)。因此,解碼I1的宏塊(MB3,MB4)的圖像不同于原始畫面,但是作為畫面沒有遭受破壞。
下一個P-畫面(P2)把I1用作運動補償?shù)膮⒖紟?。由于在這個P2中不存在傳輸錯誤,進行錯誤隱蔽處理。但是例如如圖3所示,在用于運動補償?shù)膮⒖紖^(qū)中,P2中的三個宏塊(MB1,MB3,MB4)包含了參考幀中的錯誤隱蔽宏塊的像素。因此,解碼宏塊(MB1,MB3,MB4)的圖像不同于原始畫面,并且其畫面遭受破壞。
隨后,如圖4所示,下一個P-畫面(P3)把P2用作運動補償?shù)膮⒖紟?。在這個P3的某個宏塊(MB4)中存在傳輸錯誤。在這種情況下,在進行錯誤隱蔽處理時,例如利用正好在P3之前的P-畫面(P2)中處在相同位置的宏塊(MB4)內(nèi)插宏塊(MB4)。但是,由于作為內(nèi)插源的前一個宏塊(MB4)存在其已經(jīng)遭受破壞的畫面,要內(nèi)插的宏塊(MB4)的圖像不同于原始畫面,并且其畫面遭受破壞。
此外,例如在用于某些宏塊(MB1,MB2,MB3)的運動補償?shù)膮⒖紖^(qū)中,P-畫面(P3)包括參考幀中的錯誤隱蔽宏塊的像素。因此,解碼宏塊(MB1,MB2,MB3)的圖像不同于原始畫面,并且其畫面遭受破壞。
如上所述,在進行錯誤隱蔽處理的情況下,錯誤是會傳播到下一個I-畫面(I4)解碼為止,并且,錯誤通過運動補償沿著平面方向擴散。錯誤的這種擴大嚴重地劣化了圖像。
發(fā)明內(nèi)容
本發(fā)明的一個目的是提供一種能解決傳統(tǒng)圖像解碼設備和圖像解碼方法存在的問題的新圖像解碼設備和圖像解碼方法。
本發(fā)明的另一個目的是提供一種即使在正在解碼的圖像塊在運動補償中已經(jīng)引用了包含錯誤的幀的情況下,也能限制錯誤的傳播和減少圖像質(zhì)量的劣化的動態(tài)圖像解碼設備和方法。
基于本發(fā)明的圖像解碼設備是一種解碼通過編碼系統(tǒng)編碼的動態(tài)圖像編碼數(shù)據(jù)的圖像解碼設備,該編碼系統(tǒng)用于將一個幀劃分成數(shù)個塊和進行每個塊的運動補償編碼,該設備包括運動補償裝置,用于當運動預測編碼塊是解碼目標塊時,利用包括在圖像編碼數(shù)據(jù)中的運動預測信息指定解碼幀中的參考區(qū),和利用指定參考區(qū)的信息進行解碼目標塊的運動補償;和錯誤映像表保存裝置,用于保存進行運動補償時要引用的與解碼幀有關的錯誤映像表;其中,在錯誤映像表中顯示存在于解碼幀中的錯誤塊,和當引用錯誤映像表和發(fā)現(xiàn)在包括在參考區(qū)中的塊中包括錯誤塊時,或者,當解碼目標塊的動態(tài)圖像編碼數(shù)據(jù)遭受破壞時,運動補償裝置進行錯誤隱蔽處理,以利用解碼幀的像素內(nèi)插解碼目標塊中的像素和輸出所得數(shù)據(jù),然后,生成把錯誤隱蔽塊顯示成錯誤塊的錯誤映像表,并且把錯誤映像表存儲在錯誤映像表保存裝置中。
基于本發(fā)明的圖像解碼方法是一種解碼通過編碼系統(tǒng)編碼的動態(tài)圖像編碼數(shù)據(jù)的圖像解碼方法,該編碼系統(tǒng)用于將一個幀劃分成數(shù)個塊和進行每個塊的運動補償編碼,該方法包括利用包括在圖像編碼數(shù)據(jù)中的運動預測信息指定解碼幀中的參考區(qū),然后,利用指定參考區(qū)的信息進行解碼目標塊的運動補償,從而解碼動態(tài)圖像編碼數(shù)據(jù);其中,在進行運動補償中,當引用顯示存在于解碼塊之中的錯誤塊的錯誤映像表和發(fā)現(xiàn)在包括在參考區(qū)中的塊中包括錯誤塊時,或者,當解碼目標塊的動態(tài)圖像編碼數(shù)據(jù)遭受破壞時,進行錯誤隱蔽處理以利用解碼幀的像素內(nèi)插解碼目標塊中的像素和輸出所得數(shù)據(jù),和生成把錯誤隱蔽塊顯示成錯誤塊的錯誤映像表。
本發(fā)明的其它目的和本發(fā)明提供的具體優(yōu)點將通過如下參照附圖描述的實施例的描述得到進一步澄清。
圖1是顯示傳統(tǒng)MPEG解碼設備的方塊圖。
圖2是說明錯誤隱蔽宏塊的影響的時間和空間傳播的圖。
圖3是顯示接在圖2之后的狀態(tài)的圖。
圖4是顯示接在圖3之后的狀態(tài)的圖。
圖5是應用本發(fā)明的MPEG解碼設備的方塊圖。
圖6是顯示錯誤映像表的圖。
圖7是顯示錯誤映像表的另一種形式的圖。
圖8是顯示MC控制器對包括I-畫面和P-畫面的流進行的處理的流程圖。
圖9A和9B是顯示幀中的宏塊和錯誤映像表的結(jié)構的圖。
圖10是說明參考區(qū)的圖。
圖11是說明包括I-畫面和P-畫面的流的錯誤隱蔽處理的具體內(nèi)容的圖。
圖12是顯示接在圖11之后的狀態(tài)的圖。
圖13是顯示接在圖12之后的狀態(tài)的圖。
圖14是顯示MC控制器對包括I-畫面、P-畫面和B-畫面的流進行的處理的流程圖。
圖15是顯示接在圖14之后的流程圖。
圖16是說明包括I-畫面、P-畫面和B-畫面的流的錯誤隱蔽處理的具體內(nèi)容的圖。
圖17是顯示接在圖16之后的狀態(tài)的圖。
圖18是顯示接在圖17之后的狀態(tài)的圖。
具體實施例方式
下文說明把本發(fā)明應用于MPEG解碼設備的例子。
應用本發(fā)明的MPEG解碼設備是用于解碼通過MPEG-2系統(tǒng)(ISO/IEC13818-2)或MPEG-4系統(tǒng)(ISO/IEC 14496-2)壓縮編碼的圖像數(shù)據(jù)流(基本流)的設備。在MPEG-2和MPEG-4中,按預定像素塊進行幀之間的運動預測,從而進行壓縮編碼。下文把進行運動補償?shù)淖钚∠袼貕K稱為宏塊。
如圖5所示,應用本發(fā)明的MPEG解碼設備10含有語法分析電路11、可變長度代碼(VLC)表12、逆量化(IQ)電路13、離散余弦逆變換(IDCT)電路14、運動補償電路15、幀存儲器16、彩色格式轉(zhuǎn)換電路17、錯誤控制器18和兩個錯誤映像表存儲單元19a和19b。在運動補償電路15的內(nèi)部,配備了選擇器21、MC控制器22和加法器23。
把基本流輸入語法分析電路11中。語法分析電路11從輸入的基本流中檢測固定長度代碼,分析可變長度代碼的代碼長度和計算可變長度代碼表的地址。語法分析電路11從參考VLC表12的計算地址中檢測可變長度編碼之前的代碼。語法分析電路11檢測這些固定長度代碼和可變長度代碼,從而為逆量化和運動補償?shù)冉獯aDCT系數(shù)數(shù)據(jù)、運動矢量和各種控制數(shù)據(jù)。按照預定掃描次序重新排列DCT系數(shù)數(shù)據(jù),然后將其供應給逆量化電路13。把用于運動補償?shù)倪\動矢量和控制數(shù)據(jù)供應給運動補償電路15的MC控制器22。
當把沒有存在于VLC表12之中的代碼輸入輸入的基本流中時,或者,當在要輸出的DCT系數(shù)中存在錯誤時,例如當在一個DCT塊中DCT系數(shù)的數(shù)量超過64時,語法分析電路11輸出錯誤標志。錯誤標志是按宏塊生成的。把錯誤標志供應給運動補償電路15中的MC控制器22。
逆量化電路13利用用在編碼中的量化參數(shù),進行DCT系數(shù)數(shù)據(jù)的逆量化。把逆量化的DCT系數(shù)數(shù)據(jù)供應給離散余弦逆變換電路14。
離散余弦逆變換電路14對DCT系數(shù)數(shù)據(jù)的、包括例如8×8個DCT系數(shù)的每個DCT塊進行二維離散余弦逆變換運算,并且解碼空間域的圖像數(shù)據(jù)。把通過離散余弦逆變換變換的圖像數(shù)據(jù)供應給運動補償電路15。
運動補償電路15對已經(jīng)通過離散余弦逆變換變換的空間域的圖像數(shù)據(jù)進行運動補償處理。只運動補償P-畫面和B-畫面之間的中間宏塊。當輸入內(nèi)部宏塊時,不進行運動補償處理。運動補償電路15進行滿足預定條件的宏塊的錯誤隱蔽處理。進行錯誤隱蔽處理與輸入內(nèi)部宏塊還是輸入中間宏塊無關。運動補償電路15對要錯誤隱蔽的宏塊不進行普通運動補償處理。后面將詳細描述用在本設備中的錯誤隱蔽處理。
當輸入宏塊是中間宏塊時,運動補償電路15中的MC控制器22根據(jù)語法分析電路11供應的用于運動補償?shù)倪\動矢量和控制數(shù)據(jù),對存儲在幀存儲器16中的參考幀,按宏塊進行運動預測,因而生成預測幀。運動補償電路15中的加法器23按宏塊把從參考幀中生成的預測幀加入離散余弦逆變換電路14供應的差幀中,因而生成原始幀。當輸入宏塊是內(nèi)部宏塊時,MC控制器22不生成預測幀。在這種情況下,運動補償電路15中的加法器23不把數(shù)據(jù)加入離散余弦逆變換電路14輸出的內(nèi)部宏塊中,按原樣輸出宏塊。把加法器23輸出的還原幀存儲在幀存儲器116中。
在進行普通運動補償?shù)那闆r下,運動補償電路15中的選擇器(SEL)21按原樣把來自離散余弦逆變換電路14的差幀輸出供應給加法器23。另一方面,在錯誤隱蔽處理中,選擇器21進行按宏塊終止從離散余弦逆變換電路14中輸出差幀的處理。選擇器21受MC控制器22控制。
彩色格式轉(zhuǎn)換電路17進行存儲在幀存儲器16中的解碼圖像數(shù)據(jù)的視頻格式轉(zhuǎn)換處理。例如,彩色格式轉(zhuǎn)換電路17進行到ITU-R601規(guī)定的4:2:2格式或4:2:0格式的格式轉(zhuǎn)換。
錯誤控制器18進行存儲在第一錯誤映像表存儲單元19a和第二錯誤映像表存儲單元19b中的錯誤映像表的寫和讀的更新控制。錯誤控制器18根據(jù)從MC控制器22輸出的錯誤隱蔽信息,進行錯誤映像表的更新控制。
現(xiàn)在描述錯誤映像表。
錯誤映像表是指定錯誤隱蔽宏塊的位置的信息。錯誤映像表是按幀生成的。如果一個幀是由X個水平宏塊×Y個垂直宏塊形成的,那么例如如圖6所示,錯誤映像表是Y個字的信息,每個字由X個位構成。也就是說,錯誤映像表是指示每個位的內(nèi)容是否被錯誤隱蔽的信息,每個位的地址位置對應于宏塊在幀中的位置。錯誤映像表的結(jié)構不限于圖6的結(jié)構,例如如圖7所示,也可以使用每個字由一個位構成的X×Y個字的信息。
在對任意宏塊進行錯誤隱蔽處理的情況下,錯誤控制器18訪問與正在解碼的幀相對應的錯誤映像表,使與那個宏塊相對應的地址的位值有效(1)。在不對任意宏塊進行錯誤隱蔽處理的情況下,錯誤控制器18訪問與正在解碼的幀相對應的錯誤映像表,使與那個宏塊相對應的地址的位值無效(0)。
在錯誤映像表存儲單元19a和19b中,存儲與正好在當前解碼幀之前或之后顯示的和可以是參考幀的幀相對應的錯誤映像表。具體地說,如果當前解碼幀是P-畫面,把與正好在P-畫面之前的I-畫面或P-畫面(在時間上與P-畫面最接近的過去畫面)相對應的錯誤映像表存儲在錯誤映像表存儲單元19a和19b中。如果當前解碼幀是B-畫面,把與正好在B-畫面之前的I-畫面或P-畫面(在時間上與B-畫面最接近的過去畫面)和正好在B-畫面之后的I-畫面或P-畫面(在時間上與B-畫面最接近的將來畫面)相對應的錯誤映像表存儲在錯誤映像表存儲單元19a和19b中。如果當前解碼幀是I-畫面,把與正好在I-畫面之前的I-畫面或P-畫面(在時間上與I-畫面最接近的過去畫面)相對應的錯誤映像表存儲在錯誤映像表存儲單元19a和19b中。也就是說,如果正在解碼I-畫面或P-畫面,把與正好在當前解碼的I-畫面或P-畫面之前的I-畫面或P-畫面相對應的一個錯誤映像表存儲在錯誤映像表存儲單元19a和19b之一中。如果正在解碼B-畫面,把與兩個幀——即正好在當前解碼的B-畫面之前的I-畫面或P-畫面和正好在當前解碼的B-畫面之后的I-畫面或P-畫面——相對應的錯誤映像表存儲在錯誤映像表存儲單元19a和19b中。
如果當前解碼幀可以是參考幀,那么,生成新的錯誤映像表。也就是說,如果當前解碼幀是I-畫面或P-畫面,那么,生成新的錯誤映像表。如果當前解碼幀是I-畫面或P-畫面,那么,每次處理一個宏塊時,MC控制器22就向錯誤控制器18發(fā)送指示是否對那個幀中的宏塊進行了錯誤隱蔽處理的信息(錯誤隱蔽信息)。根據(jù)錯誤隱蔽信息,錯誤控制器18更新錯誤映像表存儲單元19a和19b中錯誤映像表的內(nèi)容。
當正在解碼I-畫面或P-畫面時,把與參考幀相對應的錯誤映像表存儲在錯誤映像表存儲單元19a和19b之一中。也就是說,因為對于I-畫面或P-畫面只存在一個參考幀,所以只存儲一個錯誤映像表。因此,錯誤控制器18更新其中沒有存儲與參考幀相對應的錯誤映像表的其它存儲單元中的錯誤映像表。結(jié)果,隨著解碼不斷進行下去,交替選擇兩個錯誤映像表存儲單元19a和19b,并且更新錯誤映像表的內(nèi)容。
B-畫面不能是參考幀。因此,當正在解碼B-畫面時,不更新與當前解碼幀相對應的錯誤映像表。但是,在對B-畫面進行運動補償?shù)那闆r下,由于過去和將來都存在兩個參考幀,把有效的錯誤映像表存儲在錯誤映像表存儲單元19a和19b兩者之中。
現(xiàn)在描述錯誤隱蔽處理。
錯誤隱蔽處理是利用參考幀中與作為運動補償?shù)奶幚砟繕说暮陦K處在相同位置的宏塊的像素,內(nèi)插那個宏塊中的所有像素的處理。在像素內(nèi)插處理中,可以對作為運動補償?shù)奶幚砟繕说暮陦K中的像素取代參考幀的像素值,或者,可以以某種方式處理參考幀的像素值,然后,將其用作作為運動補償?shù)奶幚砟繕说暮陦K的像素。
錯誤隱蔽處理由MC控制器22來執(zhí)行。以宏塊為單位進行錯誤隱蔽處理。錯誤隱蔽處理可以這樣來進行,把引用I-畫面或P-畫面的模式設置成那個宏塊的MB模式,即指定參考幀的模式,然后,把運動矢量的值設置成0,即假設從參考幀沒有運動,并且,把作為解碼目標的宏塊的值設置成0,即,關閉(switch off)選擇器21,把0設置成從離散余弦逆變換電路14到運動補償電路15的輸入數(shù)據(jù)。
接著,描述在當前MPEG解碼設備10中進行錯誤隱蔽處理的條件。
MC控制器22引用當前解碼幀的畫面類型、參考幀的錯誤映像表的內(nèi)容、來自語法分析電路11的與當前解碼宏塊有關的錯誤標志和當前解碼宏塊的MB模式,并且當如下條件1到3之一得到滿足時,進行當前解碼宏塊的錯誤隱蔽處理。
條件1如果MC控制器22接收到來自語法分析電路11的錯誤標志,MC控制器22對為其生成錯誤標志的宏塊進行錯誤隱蔽處理。也就是說,如果輸入沒有存在于VLC表12中的代碼,或者,如果在DCT系數(shù)中存在錯誤,例如如果一個DCT塊中DCT系數(shù)的數(shù)量超過64,那么,MC控制器22進行錯誤隱蔽處理。這個處理條件與傳統(tǒng)錯誤隱蔽處理的處理條件相似。
條件2如果當前解碼宏塊是屬于P-畫面或B-畫面的宏塊并且在運動補償中要引用的參考幀內(nèi)的參考區(qū)已經(jīng)經(jīng)過錯誤隱蔽,那么,MC控制器22進行當前解碼宏塊的錯誤隱蔽處理。參考區(qū)是進行運動補償時要引用的參考幀內(nèi)的任意區(qū)域。這個參考區(qū)具有與宏塊相同的大小,并且它的位置通過相對于正在解碼的宏塊的運動矢量來指定。運動矢量以半個像素為單位來表達。因此,參考區(qū)被設置在最多跨過四個宏塊的位置上。在這個條件2下,如果包括在參考區(qū)中的宏塊的至少一個已經(jīng)經(jīng)過錯誤隱蔽,那么,還要進行當前解碼宏塊的錯誤隱蔽處理。通過首先從運動矢量中計算出包括在參考區(qū)中的宏塊(最多四個宏塊),然后從錯誤映像表中讀出與指定宏塊相對應的位值,可以判斷包括在參考區(qū)中的宏塊是否已經(jīng)經(jīng)過錯誤隱蔽處理。MC控制器22為參考幀讀出錯誤映像表,并且,當判斷指示包括在參考幀中的宏塊的位值有效時,MC控制器22進行當前解碼宏塊的錯誤隱蔽處理。
條件3如果當前解碼宏塊是屬于B-畫面的宏塊和在那個B-畫面的將來參考幀中與當前解碼宏塊處在相同位置的宏塊已經(jīng)經(jīng)過錯誤隱蔽處理,那么,MC控制器22進行當前解碼宏塊的錯誤隱蔽處理。例如,假設以I1、B2和P3的顯示次序排列幀和通過用I1的圖像內(nèi)插P3的任意宏塊已經(jīng)進行了錯誤隱蔽處理。在這種情況下,如果沒有進行B2的錯誤隱蔽處理,那么,解碼之后的顯示次序?qū)⑹荌1、B2和I1,并且,不能實現(xiàn)顯示的時間匹配。因此,根據(jù)這個條件3進行B-畫面的錯誤隱蔽處理。
下文描述MC控制器22對包括I-畫面和P-畫面的流進行的處理的例子。
圖8顯示了MC控制器22中對包括I-畫面和P-畫面的流的處理流程。
對于輸入到運動補償電路15的每個宏塊,MC控制器22重復如下步驟S11到S24的處理。
首先,在步驟S11,MC控制器22根據(jù)語法分析電路11提供的信息,判斷作為解碼目標的宏塊的宏塊類型。如果宏塊類型是內(nèi)部宏塊,處理轉(zhuǎn)到步驟S12。如果宏塊類型是中間宏塊,處理轉(zhuǎn)到步驟S18。
如果宏塊類型是內(nèi)部宏塊,MC控制器22在步驟S12中判斷對于解碼目標的宏塊,是否從語法分析電路11提供了錯誤標志。也就是說,MC控制器22判斷在解碼目標的宏塊中是否存在錯誤。如果不存在錯誤,處理轉(zhuǎn)到步驟S13。如果已經(jīng)出現(xiàn)錯誤,處理轉(zhuǎn)到步驟S15。
在步驟S13中,MC控制器22使錯誤映像表中與解碼目標的宏塊相對應的位值無效。具體地說,MC控制器22更新錯誤映像表,以便指示沒有進行那個宏塊的錯誤隱蔽處理。接著,在步驟S14中,MC控制器22利用語法分析電路11提供的運動矢量和宏塊模式,進行普通運動補償,然后,結(jié)束這個流程的處理。
在步驟S15中,MC控制器22把運動矢量的值設置成x=0和y=0,并且還把前向預測模式設置成宏塊模式。也就是說,設置運動矢量和宏塊模式,以便引用過去參考幀中與作為解碼目標的宏塊處在相同位置的宏塊。接著,在步驟S16中,MC控制器22使錯誤映像表中與作為解碼目標的宏塊相對應的位值有效。也就是說,MC控制器22更新錯誤映像表,以便指示宏塊已經(jīng)經(jīng)過錯誤隱蔽。接著,在步驟S17中,MC控制器22利用在步驟S15中設置的運動矢量和宏塊模式,進行運動補償處理。在這個處理中,切換選擇器21,將0設置為從離散余弦變換電路14供應的宏塊的圖像數(shù)據(jù)的輸入。這個步驟S17的處理是在上述條件1下的錯誤隱蔽處理。當步驟S17的處理完成時,MC控制器22結(jié)束這個流程的處理。
另一方面,如果宏塊類型是中間宏塊,那么,MC控制器22在步驟S18中判斷語法分析電路11是否對作為解碼目標的宏塊提供了錯誤標志。也就是說,MC控制器22判斷在作為解碼目標的宏塊中是否存在錯誤。如果不存在錯誤,處理轉(zhuǎn)到步驟S19。如果存在錯誤,處理轉(zhuǎn)到步驟S22。
在步驟S19中,MC控制器22判斷包括在參考區(qū)中的宏塊是否已經(jīng)經(jīng)過錯誤隱蔽。
步驟S19中的這個判斷可以通過例如執(zhí)行如下程序做出。
<pre listing-type="program-listing"><![CDATA[ 10Vector_xr=Vector_x>>4 20Vector_yr=Vector_y>>4 30If(Vector_x%16?。?) If(Vector_x<0)x_flag=-1 else x_flag=1 else x_flag=0 40If(Vector_y%16!=0) If(Vector_y<0)y_flag=-1 else y_flag=1 else y_flag=0 50MB_flag={Error_Map[mb_adr_x+Vector_xr][mb_adr_y+Vector_yr] orError_Map[mb_adr_x+Vector_xr+x_flag][mb_adr_y+Vector_yr]orError_Map[mb_adr_x+Vector_xr][mb_adr_y+Vector_yr+y_flag]orError_Map[mb_adr_x+Vector_xr+x_flag][mb_adr_y+Vector_yr+y_flag]} 60if(MB_flag=1)Search_MB_error=Y(jié)es 70if(MB_flag=0)Search_MB_error=No]]></pre>下面詳細描述上述程序。
在行10,進行對通過二進制數(shù)表達的原始運動矢量沿著X方向的值(Vector_x)的4位右移操作,并且把所得的值代入變量Vector_xr中。由于一個宏塊包括16×16個像素,當運動矢量沿著X方向的值除以16時,對每個像素表達的運動矢量的值可以被轉(zhuǎn)換成對每個宏塊表達的運動矢量。也就是說,在這個行10,計算按宏塊轉(zhuǎn)換的沿著X方向的運動矢量(Vector_xr)。
在行20,進行對通過二進制數(shù)表達的原始運動矢量沿著Y方向的值(Vector_y)的4位右移操作,并且把所得的值代入變量Vector_yr中。也就是說,在這個行20,計算按宏塊轉(zhuǎn)換的沿著Y方向的運動矢量(Vector_yr)。
在行30,如果原始運動矢量沿著X方向的值(Vector_x)可以被16整除,將0代入變量x_flag中。如果Vector_x不能被16整除,并且是負的,將-1代入變量x_flag中。如果Vector_x不能被16整除,并且不是負的,將1代入變量x_flag中。也就是說,如果參考區(qū)沿著X方向的位置完全與宏塊的邊界位置吻合,將0代入變量x_flag中。否則,把1或-1代入變量x_flag中。如果位置不吻合,參考區(qū)沿著X方向跨過兩個宏塊。
在行40,如果原始運動矢量沿著Y方向的值(Vector_y)可以被16整除,將0代入變量y_flag中。如果Vector_y不能被16整除,并且是負的,將-1代入變量y_flag中。如果Vector_y不能被16整除,并且不是負的,將1代入變量x_flag中。也就是說,如果參考區(qū)沿著Y方向的位置完全與宏塊的邊界位置吻合,將0代入變量y_flag中。否則,把1或-1代入變量y_flag中。如果位置不吻合,參考區(qū)沿著Y方向跨過兩個宏塊。
在行50,引用錯誤映像表并且找出錯誤映像表中與包括在參考區(qū)中的所有宏塊(最多四個宏塊)相對應的位值。計算這些值的邏輯和,并且將其代入變量MB_flag中。操作表達式Error_Map[X][Y]讀出錯誤映像表中地址X和Y的位置上的位。mb_adr_x指示當前解碼宏塊沿著X方向的地址,和mb_adr_y指示當前解碼宏塊沿著Y方向的地址。
在行60和70,如果變量MB_flag是1,也就是說,如果MB_flag有效,那么,判斷Search_MB_error=Y(jié)es(與參考幀有關的錯誤映像表中與參考宏塊相對應的位的值有效)。如果變量MB_flag是0,也就是說,如果MB_flag無效,那么,判斷Search_MB_error=No(與參考幀有關的錯誤映像表中與參考宏塊相對應的位的值有效)。
通過執(zhí)行上述行10到70的處理程序,MC控制器22可以判斷參考區(qū)是否已經(jīng)經(jīng)過錯誤隱蔽。如果MC控制器22判斷參考區(qū)還沒有經(jīng)過錯誤隱蔽,處理轉(zhuǎn)到步驟S20。如果MC控制器22判斷參考區(qū)已經(jīng)經(jīng)過錯誤隱蔽,處理轉(zhuǎn)到步驟S22。
在步驟S20中,MC控制器22使錯誤映像表中與作為解碼目標的宏塊相對應的位值對那個宏塊無效。也就是說,MC控制器22更新錯誤映像表,以便指示那個宏塊的錯誤隱蔽處理沒有執(zhí)行。接著,在步驟S21中,MC控制器22利用語法分析電路11提供的運動矢量和宏塊模式,進行普通運動補償,然后,結(jié)束這個流程的處理。
在步驟S22中,MC控制器22把運動矢量的值設置成x=0和y=0,并且把前向預測模式設置成宏塊模式。也就是說,MC控制器22設置運動矢量和宏塊模式,以便引用過去參考幀中與作為解碼目標的宏塊處在相同位置的宏塊。接著,在步驟S23中,MC控制器22使錯誤映像表中與作為解碼目標的宏塊相對應的位值對那個宏塊有效。也就是說,MC控制器22更新錯誤映像表,以便指示該宏塊已經(jīng)經(jīng)過錯誤隱蔽。接著,在步驟S24中,MC控制器22利用在步驟S22中設置的運動矢量和宏塊模式,進行運動補償處理。在這個處理中,MC控制器22切換選擇器21和將0設置為從離散余弦逆變換電路14供應的那個宏塊的圖像數(shù)據(jù)的輸入。這個步驟S24中的處理是在上述條件2下的錯誤隱蔽處理。當步驟S24的處理完成時,MC控制器22結(jié)束這個流程的處理。
上述處理是MC控制器22對包括I-畫面和P-畫面的流的處理。
現(xiàn)在,參照附圖描述包括I-畫面和P-畫面的流的錯誤隱蔽處理的具體內(nèi)容。
在錯誤隱蔽處理的具體例子的如下描述中,假設一個幀包括4個水平宏塊×3個垂直宏塊,也就是說,總共12個宏塊。將幀中的宏塊編號,以便可以像圖9A所示那樣,指定它們各自的位置。例如,上面最左邊的宏塊被表達成M1。上面從左算起第2個的宏塊被表達成M2。最左邊從上算起第2個宏塊被表達成M3。從左算起第2個和從上算起第2個宏塊被表達成M4。
如圖9B所示,錯誤映像表中的位值用O的形式表達。有效位值通過把O涂黑來表達,和無效位值通過使O保持空白來表達。在O中描述的數(shù)字是相應宏塊的號碼。
如圖10所示,為進行任意宏塊的運動補償而要引用的參考區(qū)用帶有附在其一側(cè)的箭頭的直線和虛線的長方形框來表達。直線的起點(沒有箭頭的一端)指示當前解碼宏塊的中心位置,和箭頭的終端指示當前解碼宏塊的參考區(qū)。在圖10中,P-畫面(P1)的宏塊(M1)引用I-畫面(I0)內(nèi)的區(qū)域。如圖10所示的宏塊中用“I”表示的部分代表內(nèi)部宏塊。如圖10所示的宏塊中用“P”表示的部分代表中間宏塊。
在本例中,將描述對由按P0、I1、P2、P3和I4的解碼次序和顯示次序排列的I-畫面和P-畫面組成的基本流的示范性處理。
首先,如圖11所示,解碼I-畫面(I1)。假設I1包括存在傳輸錯誤的宏塊(M3,M4)。在這種情況下,進行I1的宏塊(M3,M4)的錯誤隱蔽處理。具體地說,利用P-畫面(P0)——即可以是過去參考幀的幀——的宏塊(M3,M4)內(nèi)插I1的宏塊(M3,M4)。在I1的錯誤映像表中,使宏塊(M3,M4)的位有效。
接著,如圖12所示,解碼P-畫面(P2)。假設P2包括宏塊(M1,M3,M4)的參考區(qū)中I1的錯誤隱蔽宏塊(M3,M4)。在這種情況下,進行P2的宏塊(M1,M3,M4)的錯誤隱蔽處理。具體地說,利用作為P2的參考幀的I1的宏塊M1、M3、M4內(nèi)插P2的宏塊(M1,M3,M4)。在P2的錯誤映像表中,使宏塊(M1,M3,M4)的位有效。
接著,如圖13所示,解碼P-畫面(P3)。假設P2的錯誤隱蔽宏塊(M1,M3,M4)包括在P3的宏塊(M1,M2,M3)的參考區(qū)中。在這種情況下,進行P3的宏塊(M1,M2,M3)的錯誤隱蔽處理。假設P3的宏塊(M4)存在傳輸錯誤。在這種情況下,進行P3的宏塊(M4)的錯誤隱蔽處理。具體地說,利用作為P3的參考幀的P2的宏塊(M1,M2,M3,M4)內(nèi)插P3的宏塊(M1,M2,M3,M4)。在P3的錯誤映像表中,使宏塊(M1,M2,M3,M4)的位有效。
下文描述MC控制器22對包括I-畫面、P-畫面和B-畫面的流進行的處理的例子。
圖14和15顯示了MC控制器22中對包括I-畫面、P-畫面和B-畫面的流的處理流程。
對于輸入到運動補償電路15的每個宏塊,MC控制器22重復如下步驟S10到S43的處理。
首先,在步驟S10中,MC控制器22根據(jù)語法分析電路11提供的信息,判斷作為解碼目標的宏塊是屬于I-畫面的宏塊、屬于P-畫面的宏塊、還是屬于B-畫面的宏塊。如果是屬于I-畫面或P-畫面的宏塊,處理轉(zhuǎn)到步驟S11。如果是屬于B-畫面的宏塊,處理轉(zhuǎn)到步驟S31。
在I-畫面或P-畫面的情況下,MC控制器22進行與如圖8所示的步驟S11到S23的處理相同的處理。
在B-畫面的情況下,MC控制器22在步驟S31中,根據(jù)語法分析電路11提供的信息,判斷作為解碼目標的宏塊的宏塊類型。如果宏塊類型是內(nèi)部宏塊,處理轉(zhuǎn)到步驟D32。如果宏塊類型是中間宏塊,處理轉(zhuǎn)到步驟S36。
如果宏塊類型是內(nèi)部宏塊,MC控制器22在步驟S32中判斷對于作為解碼目標的宏塊語法分析電路11是否提供了錯誤標志。也就是說,MC控制器22判斷在作為解碼目標的宏塊中是否存在錯誤。如果不存在錯誤,處理轉(zhuǎn)到步驟S33。如果存在錯誤,處理轉(zhuǎn)到步驟S37。
在步驟S33中,MC控制器22引用與將來參考幀有關的錯誤映像表,并且判斷與當前解碼宏塊處在相同位置上的宏塊是否已經(jīng)經(jīng)過錯誤隱蔽。如果該宏塊還沒有經(jīng)過錯誤隱蔽,處理轉(zhuǎn)到步驟S34。如果該宏塊已經(jīng)經(jīng)過錯誤隱蔽,處理轉(zhuǎn)到步驟S35。
在步驟S34中,MC控制器22利用語法分析電路11提供的運動矢量和宏塊模式,進行普通運動補償,然后,結(jié)束這個流程的處理。
在步驟S35中,MC控制器22把運動矢量的值設置成x=0和y=0,并且還把后向預測模式設置成宏塊模式。也就是說,設置運動矢量和宏塊模式,以便引用將來參考幀中與作為解碼目標的宏塊處在相同位置的宏塊。接著,在步驟S36中,MC控制器22利用在步驟S35中設置的運動矢量和宏塊模式,進行運動補償處理。在這個處理中,切換選擇器21,將0設置為從離散余弦變換電路14供應的宏塊的圖像數(shù)據(jù)的輸入。這個步驟S36的處理是在上述條件3下的錯誤隱蔽處理。當步驟S36的處理完成時,MC控制器22結(jié)束這個流程的處理。
在步驟S37中,MC控制器22把運動矢量的值設置成x=0和y=0,并且還把前向預測模式設置成宏塊模式。也就是說,設置運動矢量和宏塊模式,以便引用過去參考幀中與作為解碼目標的宏塊處在相同位置的宏塊。接著,在步驟S38中,MC控制器22利用在步驟S37中設置的運動矢量和宏塊模式,進行運動補償處理。在這個處理中,切換選擇器21,將0設置為從離散余弦變換電路14供應的宏塊的圖像數(shù)據(jù)的輸入。這個步驟S38的處理是在上述條件1下的錯誤隱蔽處理。當步驟S38的處理完成時,MC控制器22結(jié)束這個流程的處理。
另一方面,如果宏塊類型是中間宏塊,那么,MC控制器22在步驟S39中判斷對于作為解碼目標的宏塊,語法分析電路11是否提供了錯誤標志。也就是說,MC控制器22判斷在作為解碼目標的宏塊中是否存在錯誤。如果不存在錯誤,處理轉(zhuǎn)到步驟S40。如果存在錯誤,處理轉(zhuǎn)到步驟S42。
在步驟S40中,MC控制器22判斷包括在參考區(qū)中的宏塊是否已經(jīng)經(jīng)過錯誤隱蔽,或者,與當前解碼宏塊處在相同位置的宏塊是否已經(jīng)經(jīng)過錯誤隱蔽。
步驟S40中的這個判斷可以通過例如執(zhí)行如下程序做出。
<pre listing-type="program-listing"><![CDATA[ 10f_Vector_xr=f_Vector_x>>4 20f_Vector_yr=f_Vector_y>>4 30If(f_Vector_x%16?。?) If(f_Vector_x<0)f_x_flag=-1 else f_x_flag=1 else f_x_flag=0 40If(f_Vector_y%16!=0) If(f_Vector_y<0)f_y_flag=-1 else f_y_flag=1 else f_y_flag=0 50b_Vector_xr=b_Vector_x>>4 60b_Vector_yr=b_Vector_y>>4 70If(b_Vector_x%16?。?) If(b_Vector_x<0)b_x_flag=-1 else b_x_flag=1 else b_x_flag=0 80If(b_Vector_y%16?。?) If(b_Vector_y<0)b_y_flag=-1 else b_y_flag=1else b_y_flag=0 90f_MB_flag={f_Error_Map[mb_adr_x+f_Vector_xr][mb_adr_y+f_Vector_yr]orf_Error_Map[mb_adr_x+f_Vector_xr+f_x_flag][mb_adr_y+f_Vector_yr]orf_Error_Map[mb_adr_x+f_Vector_xr][mb_adr_y+f_Vector_yr+f_y_flag]orf_Error_Map[mb_adr_x+f_Vector_xr+f_x_flag][mb_adr_y+f_Vector_yr+f_y_flag]} 100b_MB_flag={b_Error_Map[mb_adr_x+b_Vector_xr][mb_adr_y+b_Vector_yr]orb_Error_Map[mb_adr_x+b_Vector_xr+b_x_flag][mb_adr_y+b_Vector_yr]orb_Error_Map[mb_adr_x+b_Vector_xr][mb_adr_y+b_Vector_yr+b_y_flag]orb_Error_Map[mb_adr_x+b_Vector_xr+b_x_flag][mb_adr_y+b_Vector_yr+b_y_flag]} 110c_MB_flag=b_Error_Map[mb_adr_x][mb_adr_y] 120MB_flag=f_MB_flag or b_MB_flag or c_MB_flag 130if(MB_flag=1)Search_or_Future_MB_error=Y(jié)es 140if(MB_flag=0)Search_or_Future_MB_error=No]]></pre>下面詳細描述上述程序。
在行10,進行對通過二進制數(shù)表達的原始前向運動矢量沿著X方向的值(f_Vector_x)的4位右移操作,把所得的值代入變量f_Vector_xr中。由于一個宏塊包括16×16個像素,當運動矢量沿著X方向的值除以16時,對每個像素表達的運動矢量的值可以被轉(zhuǎn)換成對每個宏塊表達的運動矢量。也就是說,在這個行10,計算按宏塊轉(zhuǎn)換的沿著X方向的前向運動矢量(f_Vector_xr)。前向運動矢量是引用過去參考幀的運動矢量。
在行20,進行對通過二進制數(shù)表達的原始前向運動矢量沿著Y方向的值(f_Vector_y)的4位右移操作,并且把所得的值代入變量f_Vector_yr中。也就是說,在這個行20,計算按宏塊轉(zhuǎn)換的沿著Y方向的前向運動矢量(f_Vector_yr)。
在行30,如果原始前向運動矢量沿著X方向的值(f_Vector_x)可以被16整除,將0代入變量f_x_flag中。如果f_Vector_x的值不能被16整除,并且是負的,將-1代入變量f_x_flag中。如果f_Vector_x的值不能被16整除,并且不是負的,將1代入變量f_x_flag中。也就是說,如果與過去參考幀有關的參考區(qū)沿著X方向的位置完全與宏塊的邊界位置吻合,將0代入f_x_flag中。否則,把1或-1代入f_x_flag中。如果位置不吻合,與過去參考幀有關的參考區(qū)沿著X方向位于兩個宏塊上。
在行40,如果原始前向運動矢量沿著Y方向的值(f_Vector_y)可以被16整除,將0代入變量f_y_flag中。如果f_Vector_y不能被16整除,并且是負的,將-1代入變量f_y_flag中。如果f_Vector_y不能被16整除,并且不是負的,將1代入變量f_y_flag中。也就是說,如果與過去參考幀有關的參考區(qū)沿著Y方向的位置完全與宏塊的邊界位置吻合,將0代入f_y_flag中。否則,把1或-1代入f_y_flag中。如果位置不吻合,與過去參考幀有關的參考區(qū)沿著Y方向位于兩個宏塊上。
在行50,進行對通過二進制數(shù)表達的原始后向運動矢量沿著X方向的值(b_Vector_x)的4位右移操作,把所得的值代入變量b_Vector_xr中。由于一個宏塊包括16×16個像素,當運動矢量沿著X方向的值除以16時,對每個像素表達的運動矢量的值可以被轉(zhuǎn)換成對每個宏塊表達的運動矢量。也就是說,在這個行50,計算按宏塊轉(zhuǎn)換的沿著X方向的后向運動矢量(b_Vector_xr)。后向運動矢量是引用將來參考幀的運動矢量。
在行60,進行對通過二進制數(shù)表達的原始后向運動矢量沿著Y方向的值(b_Vector_y)的4位右移操作,把所得的值代入變量b_Vector_yr中。也就是說,在這個行60,計算按宏塊轉(zhuǎn)換的沿著Y方向的后向運動矢量(b_Vector_yr)。
在行70,如果原始后向運動矢量沿著X方向的值(b_Vector_x)可以被16整除,將0代入變量b_x_flag中。如果b_Vector_x的值不能被16整除,并且是負的,將-1代入變量b_x_flag中。如果b_Vector_x的值不能被16整除,并且不是負的,將1代入變量b_x_flag中。也就是說,如果與過去參考幀有關的參考區(qū)沿著X方向的位置完全與宏塊的邊界位置吻合,將0代入b_x_flag中。否則,把1或-1代入b_x_flag中。如果位置不吻合,與過去參考幀有關的參考區(qū)沿著X方向位于兩個宏塊上。
在行80,如果原始前向運動矢量沿著Y方向的值(b_Vector_y)可以被16整除,將0代入變量b_y_flag中。如果b_Vector_y不能被16整除,并且是負的,將-1代入變量b_y_flag中。如果b_Vector_y不能被16整除,并且不是負的,將1代入變量b_y_flag中。也就是說,如果與過去參考幀有關的參考區(qū)沿著Y方向的位置完全與宏塊的邊界位置吻合,將0代入b_y_flag中。否則,把1或-1代入b_y_flag中。如果位置不吻合,與過去參考幀有關的參考區(qū)沿著Y方向位于兩個宏塊上。
在行90,引用過去參考幀的錯誤映像表和找出錯誤映像表中與包括在參考區(qū)中的所有宏塊(最多四個宏塊)相對應的位值。計算這些值的邏輯和,并且將其代入變量f_MB_flag中。操作表達式f_Error_Map[X][Y]讀出過去參考幀的錯誤映像表中地址X和Y的位置上的位。mb_adr_x指示當前解碼宏塊沿著X方向的地址,和mb_adr_y指示當前解碼宏塊沿著Y方向的地址。
在行100,引用將來參考幀的錯誤映像表和找出錯誤映像表中與包括在參考區(qū)中的所有宏塊(最多四個宏塊)相對應的位值。計算這些值的邏輯和,并且將其代入變量b_MB_flag中。操作表達式b_Error_Map[X][Y]讀出將來參考幀的錯誤映像表中地址X和Y的位置上的位。
在行110,參考將來參考幀的錯誤映像表,找出錯誤映像表中對應與當前解碼宏塊處在相同位置上的宏塊的位值,將其代入變量c_MB_flag中。
在行120,計算變量f_MB_flag、b_MB_flag和c_MB_flag的邏輯和,將其代入MB_flag中。
在行130和140,如果變量MB_flag是1,也就是說,如果MB_flag有效,那么,判斷Search_or_Future_MB_error=Y(jié)es(與參考幀有關的錯誤映像表中與參考宏塊相對應的位的值有效,或者與當前解碼宏塊處在相同位置上的宏塊已經(jīng)經(jīng)過錯誤隱蔽)。如果變量MB_flag是0,也就是說,如果MB_flag無效,那么,判斷Search_or_Future_MB_error=No(與參考幀有關的錯誤映像表中與參考宏塊相對應的位的值無效,和與當前解碼宏塊處在相同位置上的宏塊還沒有經(jīng)過錯誤隱蔽)。
通過執(zhí)行上述行10到140的處理程序,MC控制器22可以判斷參考區(qū)是否已經(jīng)經(jīng)過錯誤隱蔽,或者與當前解碼宏塊處在相同位置上的宏塊是否已經(jīng)經(jīng)過錯誤隱蔽。如果MC控制器22判斷參考區(qū)還沒有經(jīng)過錯誤隱蔽,處理轉(zhuǎn)到步驟S41。如果MC控制器22判斷參考區(qū)已經(jīng)經(jīng)過錯誤隱蔽,處理轉(zhuǎn)到步驟S42。
在步驟S41中,MC控制器22利用語法分析電路11提供的運動矢量和宏塊模式,進行普通運動補償,然后,結(jié)束這個流程的處理。
在步驟S42中,MC控制器22把運動矢量的值設置成x=0和y=0,并且把后向預測模式設置成宏塊模式。也就是說,MC控制器22設置運動矢量和宏塊模式,以便引用將來參考幀中與作為解碼目標的宏塊處在相同位置的宏塊。接著,在步驟S43中,MC控制器22利用在步驟S42中設置的運動矢量和宏塊模式,進行運動補償處理。在這個處理中,MC控制器22切換選擇器21和將0設置為從離散余弦逆變換電路14供應的那個宏塊的圖像數(shù)據(jù)的輸入。這個步驟S43中的處理是在上述條件2或3下的錯誤隱蔽處理。當步驟S43的處理完成時,MC控制器22結(jié)束這個流程的處理。
上述處理是MC控制器22對包括I-畫面、P-畫面和B-畫面的流的處理。
現(xiàn)在,參照附圖描述對包括I-畫面、P-畫面和B-畫面的流的錯誤隱蔽處理的具體內(nèi)容。
附圖中的描述是與上述用于包括I-畫面和P-畫面的流的說明性條件相同的條件。在本例中,將描述具有P10、B9、I2、B1和P3的解碼次序和B9、P10、B1、I2和P3的顯示次序的基本流的處理。
首先,如圖16所示,解碼I-畫面(I2)。假設I2包括存在傳輸錯誤的宏塊(M3,M4)。在這種情況下,進行I2的宏塊(M3,M4)的錯誤隱蔽處理。具體地說,利用P-畫面(P10),即可以是I2的過去參考幀的幀的宏塊(M3,M4)內(nèi)插I2的宏塊(M3,M4)。在I2的錯誤映像表(第二錯誤映像表)中,使宏塊(M3,M4)的位有效。
接著,如圖17所示,解碼B-畫面(B1)。
B1的宏塊(M1)的參考區(qū)包括過去參考幀P10的宏塊(M1-M4)和將來參考幀I2的宏塊(M1,M2)。在這種情況下,由于過去參考幀P10的宏塊M4已經(jīng)經(jīng)過了錯誤隱蔽處理,因此,進行B1的宏塊(M1)的錯誤隱蔽處理。
由于B1的宏塊(M2)是內(nèi)部宏塊,并且不存在錯誤,因此,不進行這個宏塊的錯誤隱蔽處理。
B1的宏塊(M3)的參考區(qū)包括過去參考幀P10的宏塊(M3-M6)和將來參考幀I2的宏塊(M3,M5)。在這種情況下,由于過去參考幀P10的宏塊M4和將來參考幀I2的宏塊M3已經(jīng)經(jīng)過了錯誤隱蔽處理,因此,進行B1的宏塊M3的錯誤隱蔽處理。
B1的宏塊(M4)的參考區(qū)不包括過去或?qū)韰⒖紟腻e誤隱蔽宏塊。但是,與B1的這個宏塊M4處在相同位置上的將來參考幀I2的宏塊M4已經(jīng)經(jīng)過了錯誤隱蔽處理。因此,還要進行B1的這個宏塊M4的錯誤隱蔽處理。
接著,如圖18所示,解碼P-畫面(P3)。
對于這個P-畫面(P3),更新其中事先存儲P-畫面(P10)的錯誤隱蔽信息的第一錯誤映像表中的位。
如上所述,在基于本發(fā)明的MPEG解碼設備10中,可以解碼利用運動預測的編碼數(shù)據(jù)。在這種MPEG解碼設備10中,即使在幀中存在在傳輸?shù)鹊臅r候遭受破壞的圖像塊,也可以進行錯誤隱蔽處理,以利用沒有遭受破壞的另一個幀的圖像塊內(nèi)插該圖像塊。因此,可以減少由于存在因錯誤而與周邊正常圖像極為不同的塊所造成的視覺缺陷。
此外,在基于本發(fā)明的MPEG解碼設備10中,即使正在解碼的圖像塊在運動補償中引用了包含錯誤的幀,也可以限制由于錯誤隱蔽處理引起的錯誤的傳播和可以減少圖像質(zhì)量的劣化。
雖然根據(jù)在附圖中所示的和在上面的說明中詳細描述的本發(fā)明的某些優(yōu)選實施例,已經(jīng)對本發(fā)明進行了描述,但本領域的普通技術人員應該明白,本發(fā)明不局限于這些實施例,而可以在不偏離如所附權利要求所陳述和限定的本發(fā)明的精神和范圍的情況下,實現(xiàn)各種各樣的修改、可替代構造或等效物。
工業(yè)可應用性在基于發(fā)明的圖像解碼設備和圖像解碼方法中,當引用錯誤映像表和發(fā)現(xiàn)錯誤塊包括在包括在參考區(qū)中的塊中時,或者,當解碼目標塊的動態(tài)圖像編碼數(shù)據(jù)遭受破壞時,對利用解碼幀的像素內(nèi)插解碼目標塊中的像素和輸出所得塊進行錯誤隱蔽處理,并且生成把錯誤隱蔽塊視為錯誤塊的錯誤映像表。因此,可以對利用運動補償?shù)腻e誤隱蔽編碼數(shù)據(jù)進行解碼。在本發(fā)明中,即使在幀中存在在傳輸?shù)鹊臅r候遭受破壞的圖像塊,也可以進行錯誤隱蔽處理,以利用沒有遭受破壞的另一個幀的圖像塊內(nèi)插該圖像塊。因此,可以減少由于存在因錯誤而與周邊正常圖像極為不同的塊所造成的視覺缺陷。
此外,在基于本發(fā)明的圖像解碼設備中,即使正在解碼的圖像塊在運動補償中引用了包含錯誤的幀,也可以限制由于錯誤隱蔽處理引起的錯誤的傳播和可以減少圖像質(zhì)量的劣化。
權利要求
1.一種解碼通過編碼系統(tǒng)編碼的動態(tài)圖像編碼數(shù)據(jù)的圖像解碼設備,該編碼系統(tǒng)用于將一個幀劃分成數(shù)個塊和進行每個塊的運動補償編碼,該設備包括運動補償裝置,用于當運動預測編碼塊是解碼目標塊時,利用包括在圖像編碼數(shù)據(jù)中的運動預測信息指定解碼幀中的參考區(qū),和利用指定參考區(qū)的信息進行解碼目標塊的運動補償;和錯誤映像表保存裝置,用于保存進行運動補償時要引用的與解碼幀有關的錯誤映像表;其中,在錯誤映像表中顯示存在于解碼幀中的錯誤塊,和當引用錯誤映像表和發(fā)現(xiàn)在包括在參考區(qū)中的塊中包括錯誤塊時,或者,當解碼目標塊的動態(tài)圖像編碼數(shù)據(jù)遭受破壞時,運動補償裝置進行錯誤隱蔽處理,以利用解碼幀的像素內(nèi)插解碼目標塊中的像素和輸出所得數(shù)據(jù),然后,生成把錯誤隱蔽塊顯示成錯誤塊的錯誤映像表,并且把錯誤映像表存儲在錯誤映像表保存裝置中。
2.根據(jù)權利要求1所述的圖像解碼設備,其中,當進行錯誤隱蔽處理時,運動補償裝置利用與解碼目標塊處在相同位置上的解碼幀的像素內(nèi)插解碼目標塊中的像素。
3.根據(jù)權利要求1所述的圖像解碼設備,其中,當對只包括沒有引用另一個幀而編碼的塊的幀內(nèi)預測幀進行錯誤隱蔽處理時,或者對包括沒有引用另一個幀而編碼的塊和參考過去幀進行運動預測的塊的前向預測幀進行錯誤隱蔽處理時,運動補償裝置利用包括解碼目標塊的幀之前的過去幀中的像素,內(nèi)插解碼目標塊中的像素。
4.根據(jù)權利要求3所述的圖像解碼設備,其中,當對幀內(nèi)預測幀進行錯誤隱蔽處理時,運動補償裝置利用正好在幀內(nèi)預測幀之前的前向預測幀的像素內(nèi)插解碼目標塊中的像素。
5.根據(jù)權利要求3所述的圖像解碼設備,其中,當對前向預測幀進行錯誤隱蔽處理時,運動補償裝置利用前向預測幀的參考幀的像素內(nèi)插解碼目標塊中的像素。
6.根據(jù)權利要求1所述的圖像解碼設備,當對能參考過去和/或?qū)韼M行運動預測的雙向預測幀進行錯誤隱蔽處理時,運動補償裝置利用包括解碼目標塊的幀之后的將來參考幀的像素內(nèi)插解碼目標塊中的像素。
7.根據(jù)權利要求6所述的圖像解碼設備,其中,當對雙向預測幀進行錯誤隱蔽處理時,運動補償裝置利用雙向預測幀的將來參考幀的像素內(nèi)插解碼目標塊中的像素。
8.根據(jù)權利要求1所述的圖像解碼設備,其中,當對能參考過去和/或?qū)韼M行運動預測的雙向預測幀進行運動補償時,如果雙向預測幀的將來參考幀的那些塊中,與解碼目標塊處在相同位置上的塊已經(jīng)經(jīng)過錯誤隱蔽,運動補償裝置利用將來參考幀的像素內(nèi)插解碼目標塊中的像素。
9.一種解碼通過編碼系統(tǒng)編碼的動態(tài)圖像編碼數(shù)據(jù)的圖像解碼方法,該編碼系統(tǒng)用于將一個幀劃分成數(shù)個塊和進行每個塊的運動補償編碼,該方法包括利用包括在圖像編碼數(shù)據(jù)中的運動預測信息指定解碼幀中的參考區(qū),然后,利用指定參考區(qū)的信息進行解碼目標塊的運動補償,從而解碼動態(tài)圖像編碼數(shù)據(jù);其中,在進行運動補償中,當引用顯示存在于解碼塊之中的錯誤塊的錯誤映像表和發(fā)現(xiàn)在包括在參考區(qū)中的塊中包括錯誤塊時,或者,當解碼目標塊的動態(tài)圖像編碼數(shù)據(jù)遭受破壞時,進行錯誤隱蔽處理以利用解碼幀的像素內(nèi)插解碼目標塊中的像素和輸出所得數(shù)據(jù),和生成把錯誤隱蔽塊顯示成錯誤塊的錯誤映像表。
10.根據(jù)權利要求9所述的圖像解碼方法,其中,當進行錯誤隱蔽處理時,利用與解碼目標塊處在相同位置上的解碼幀的像素內(nèi)插解碼目標塊中的像素。
11.根據(jù)權利要求9所述的圖像解碼方法,其中,當對只包括沒有引用另一個幀而編碼的塊的幀內(nèi)預測幀進行錯誤隱蔽處理時,或者對包括沒有引用另一個幀而編碼的塊和參考過去幀進行運動預測的塊的前向預測幀進行錯誤隱蔽處理時,利用包括解碼目標塊的幀之前的過去幀中的像素內(nèi)插解碼目標塊中的像素。
12.根據(jù)權利要求11所述的圖像解碼方法,其中,當對幀內(nèi)預測幀進行錯誤隱蔽處理時,利用正好在幀內(nèi)預測幀之前的前向預測幀的像素內(nèi)插解碼目標塊中的像素。
13.根據(jù)權利要求11所述的圖像解碼方法,其中,當對前向預測幀進行錯誤隱蔽處理時,利用前向預測幀的參考幀的像素內(nèi)插解碼目標塊中的像素。
14.根據(jù)權利要求9所述的圖像解碼方法,當對能參考過去和/或?qū)韼M行運動預測的雙向預測幀進行錯誤隱蔽處理時,利用包括解碼目標塊的幀之后的將來參考幀的像素內(nèi)插解碼目標塊中的像素。
15.根據(jù)權利要求14所述的圖像解碼方法,其中,當對雙向預測幀進行錯誤隱蔽處理時,利用雙向預測幀的將來參考幀的像素內(nèi)插解碼目標塊中的像素。
16.根據(jù)權利要求9所述的圖像解碼方法,其中,當對能參考過去和/或?qū)韼M行運動預測的雙向預測幀進行運動補償時,如果雙向預測幀的將來參考幀的塊中與解碼目標塊處在相同位置上的塊已經(jīng)經(jīng)過錯誤隱蔽,利用將來參考幀的像素內(nèi)插解碼目標塊中的像素。
全文摘要
一種解碼已經(jīng)壓縮/編碼的圖像數(shù)據(jù)流的MPEG解碼設備(10),包括運動補償電路(15)和保存進行運動補償時要引用的解碼幀的錯誤映像表的錯誤映像表保存電路(19)。運動補償電路(15)引用錯誤映像表。如果在包括在參考區(qū)中的塊中包括錯誤塊,或者,如果用于要解碼的塊的運動圖像編碼數(shù)據(jù)已經(jīng)破壞,就在輸出像素前通過利用解碼幀的像素內(nèi)插要解碼的塊中的像素,進行錯誤隱蔽處理。運動補償電路(15)生成和存儲其中把已經(jīng)進行錯誤隱蔽處理的塊定義成錯誤塊的錯誤映像表。這個MPEG解碼設備(10)抑制了伴隨錯誤隱蔽處理的錯誤的傳播并且減少了質(zhì)量劣化。
文檔編號H04N7/50GK1547857SQ03800929
公開日2004年11月17日 申請日期2003年5月27日 優(yōu)先權日2002年5月27日
發(fā)明者小倉譽之, 利, 高嵨昌利 申請人:索尼株式會社