技術(shù)領(lǐng)域
本發(fā)明一般屬于圖像處理的領(lǐng)域,更準確地屬于數(shù)字圖像以及數(shù)字圖像序列的編碼和解碼。
本發(fā)明由此尤其可被用于在目前的視頻編碼器(MPEG、H.264等)或未來的視頻編碼器(ITU-T/VCEG(H.265)或ISO/MPEG(HVC))中實現(xiàn)的視頻編碼。
背景技術(shù):
目前的視頻編碼器(MPEG、H264等)使用視頻序列的按塊(block-wise)表示。圖像被切分為宏塊,每個宏塊自身被切分為塊,并且每個塊或宏塊通過圖像內(nèi)或圖像間預測來編碼。于是,特定的圖像通過空間預測(幀內(nèi)預測)來編碼,而其他圖像在本領(lǐng)域技術(shù)人員已知的運動補償?shù)妮o助下關(guān)于一個或多個編碼-解碼參考圖像通過時間預測(幀間預測)來編碼。此外,對于每個塊,可以對殘留塊進行編碼,該殘留塊與原始塊減去預測相對應(yīng)。在可選的變換之后,該塊的系數(shù)可被量化,然后被熵編碼器編碼。
幀內(nèi)預測和幀間預測需要之前已編碼和解碼的特定塊可用,從而在解碼器或編碼器中被用于預測當前塊。圖1A表示這樣的預測編碼的示意性示例,其中,圖像IN被分為塊,該圖像的當前塊MBi經(jīng)受與例如由陰影箭頭表示的之前編碼和解碼的預定數(shù)量的三個塊MBr1、MBr2、MBr3相關(guān)的預測編碼。上述三個塊特別包括緊鄰地位于當前塊MBi的左邊的塊MBr1、以及分別緊鄰地位于當前塊MBi的上方和右上方的兩個塊MBr2和MBr3。
這里更為特別關(guān)心的是熵編碼器。熵編碼器按照到達的順序來對信息編碼。典型地實現(xiàn)“光柵掃描”類型的塊的逐行遍歷,如圖1A由參考(標號)PRS所示,從圖像的左上角的塊開始。對于每個塊,表示該塊所需的各個信息項(塊類型、預測模式、殘留系數(shù)等)被順序分發(fā)給熵編碼器。
已知一種足夠復雜的有效算術(shù)編碼器,被稱為“CABAC”(“上下文適應(yīng)二進制算術(shù)編碼器”),其被引入到AVC壓縮標準(也被稱為ISO-MPEG4第10部分和ITU-T H.264)。
熵編碼器實現(xiàn)各種構(gòu)思:
-算術(shù)編碼:例如最初在文檔J.Rissanen and G.G.Langdon Jr,“Universal modeling and coding,”IEEE Trans.Inform.Theory,vol.IT-27,pp.12–23,Jan.1981中描述的編碼器使用該符號的出現(xiàn)概率來對符號進行編碼;
-上下文適應(yīng):這包括適應(yīng)要編碼的符號的出現(xiàn)概率。一方面,實現(xiàn)快速獲悉。另一方面,根據(jù)之前編碼的信息的狀態(tài),特定的上下文被用于編碼。每個上下文存在相對應(yīng)的固有的符號出現(xiàn)概率。例如,上下文根據(jù)給定的配置對應(yīng)于編碼符號的類型(殘留的系數(shù)、編碼模式的信令等的表示),或者對應(yīng)于鄰居的狀態(tài)(例如從鄰居選擇的“幀內(nèi)”模式的數(shù)量等);
-二進制化:要編碼的符號被轉(zhuǎn)換為比特串的形式。隨后,該各個比特被相繼分發(fā)給二進制熵編碼器。
于是,該熵編碼器針對使用的每個上下文來實現(xiàn)一種系統(tǒng),用于快速獲悉與之前針對考慮的上下文來編碼的符號相關(guān)的概率。該獲悉基于這些符號的編碼順序。典型地,如上所述根據(jù)“光柵掃描”類型的順序來遍歷圖像。
在對可等于0或1的給定符號b進行編碼時,以下列方式針對當前塊MBi來更新該符號的出現(xiàn)概率Pi的獲悉:
其中,α是預定值,例如0.95,且Pi-1是在該符號最后出現(xiàn)時所計算的符號出現(xiàn)概率。
圖1A表示這樣的熵編碼的示意性示例,其中,圖像IN的當前塊MBi被熵編碼。在當前塊MBi的熵編碼開始時,所使用的符號出現(xiàn)概率是在之前編碼和解碼的塊的編碼之后獲得的符號出現(xiàn)概率,根據(jù)上述“光柵掃描”類型的塊的逐行遍歷,該在之前編碼和解碼的塊緊鄰在當前塊MBi的前面。僅為了圖示清楚,圖1A中通過細線箭頭來表示針對特定的塊的基于逐塊依賴性的獲悉。
該類型的熵編碼的缺陷在于如下事實,在對位于行開始的符號進行編碼時,使用的概率主要對應(yīng)于位于前一行的末尾的符號所觀察到的概率,與塊的“光柵掃描”遍歷相關(guān)。現(xiàn)在,由于符號概率的可能空間變化(例如,對于與運動信息項相關(guān)的符號,位于圖像右側(cè)部分的運動與在左側(cè)部分觀察到的可以不同,且從而對于由此產(chǎn)生的局部概率來說是類似的),可以觀察到概率的局部適應(yīng)性的缺失,這在編碼時具有引起有效性損失的風險。
在互聯(lián)網(wǎng)地址http://wftp3.itu.int/av-arch/jctvc-site/2010_04_A_Dresden/JCTVC-A114-AnnexA.doc(2011年2月8日)提供的文檔“Annex A:CDCM Video Codec Decoder Specification”中描述了一種編碼方法,其緩解了上述缺陷。如圖1B所示,在以上文檔中描述的編碼方法包括:
-將圖像IN切分為多個塊的步驟,
-結(jié)合例如由陰影箭頭表示的之前編碼和解碼的預定數(shù)量的三個塊MBr1、MBr2、MBr3對該圖像的當前塊MBi進行預測編碼的步驟。上述三個塊特別包括緊鄰地位于當前塊MBi的左邊的塊MBr1、以及分別緊鄰地位于當前塊MBi的上方和右上方的兩個塊MBr2和MBr3,
-對圖像IN的塊進行熵編碼的步驟,據(jù)此,在這些塊可用時,每塊使用分別針對緊鄰地位于當前塊上方的已編碼和解碼的塊以及緊鄰地位于當前塊的左側(cè)的已編碼和解碼的塊來計算的符號出現(xiàn)概率。為了使后者更為清楚,在圖1B中通過細線箭頭來部分表示該符號出現(xiàn)概率的使用。
該熵編碼的好處在于,它利用了由當前塊的緊鄰環(huán)境產(chǎn)生的概率,由此使得可能獲得更高的編碼性能。此外,使用的編碼技術(shù)使得可能對預定數(shù)量的成對的相鄰塊的子集并行編碼。在圖1B展示的例子中,三個子集SE1、SE2和SE3被并行編碼,在該例子中每個子集由虛線表示的一行塊構(gòu)成。當然,該編碼需要分別位于當前塊的上方和右上方的塊可用。
該并行編碼技術(shù)的缺陷在于,為了允許訪問針對緊鄰地位于當前塊上方的塊來計算的符號出現(xiàn)概率,需要存儲與一行塊關(guān)聯(lián)的一些概率。如果例如在圖1B中考慮第二行SE2的塊,通過使用針對之前的第一行SE1的第一塊來計算的符號出現(xiàn)概率,該行的第一塊被熵編碼。在完成第二行的第一塊的編碼時,出現(xiàn)概率的值V1的狀態(tài)被存儲在緩沖存儲器MT中。隨后,通過使用同時針對第一行SE1的第二塊和第二行SE2的第一塊來計算的符號出現(xiàn)概率,第二行SE2的第二塊被熵編碼。在完成第二行的第二塊的編碼時,出現(xiàn)概率的值V2的狀態(tài)被存儲在緩沖存儲器MT中。該過程持續(xù),直到第二行SE的最后一塊。由于概率的數(shù)量非常大(存在與語法元素的數(shù)量和關(guān)聯(lián)上下文的數(shù)量的組合一樣多的概率),整一行的這些概率的存儲在存儲器資源方面非常昂貴。
技術(shù)實現(xiàn)要素:
本發(fā)明的一個目標是彌補上述現(xiàn)有技術(shù)的缺陷。
為此,本發(fā)明的主題涉及一種對至少一個圖像進行編碼的方法,包括下列步驟:
-將圖像劃分為多個塊,
-將所述塊分組為預定數(shù)量的塊的子集,
-對所述塊的子集中的每個并行編碼,所考慮的子集中的塊是根據(jù)遍歷的預定順序來編碼的,針對所考慮的子集中的當前塊,所述編碼步驟包括下列子步驟:
·關(guān)于至少一個之前編碼和解碼的塊對所述當前塊進行預測編碼,
·通過獲悉至少一個之前的符號出現(xiàn)概率對當前塊進行熵編碼,
根據(jù)本發(fā)明的方法值得關(guān)注之處在于:
-在當前塊是所考慮的子集中要編碼的第一塊的情形下,符號出現(xiàn)概率是針對至少一個其他子集中的編碼和解碼的預定塊來計算的符號出現(xiàn)概率,
-在當前塊是所考慮的子集中除第一塊以外的塊的情形下,符號出現(xiàn)概率是針對屬于相同子集的至少一個已編碼和解碼的塊來計算的符號出現(xiàn)概率。
該布置使得可能在編碼器的緩沖存儲器中存儲較少數(shù)量的符號出現(xiàn)概率,因為除了塊的子集的第一塊之外的當前塊的熵編碼不再必定需要使用關(guān)于之前已編碼和解碼的塊所計算的符號出現(xiàn)概率,該之前已編碼和解碼的塊位于另一子集中并位于當前塊上方。
該布置還使得可能保持現(xiàn)有的壓縮性能,因為當前塊的熵編碼使用針對當前塊所屬的子集中的另一個之前編碼和解碼的塊來計算的符號出現(xiàn)概率,并且最終已經(jīng)通過更新概率來實現(xiàn)獲悉,從而后者符合視頻信號的統(tǒng)計。
在所考慮的塊的子集中的第一當前塊熵編碼期間使用針對所述其他子集的第一塊來計算的符號出現(xiàn)概率的主要好處在于,通過在編碼器的緩沖存儲器中僅存儲所述符號出現(xiàn)概率的更新來節(jié)省該緩沖存儲器,而不用考慮所述其他子集的其他連續(xù)塊所獲悉的符號出現(xiàn)概率。
在所考慮的塊的子集的第一當前塊的熵編碼期間使用針對所述其他子集中除第一塊以外的塊(例如第二塊)來計算的符號出現(xiàn)概率的主要好處在于,獲得對符號出現(xiàn)概率的更精確且因此更好的獲悉,由此帶來更好的視頻壓縮性能。
在特定的實施例中,與所述子集中除第一塊以外的要編碼的當前塊屬于相同子集的所述編碼和解碼塊是要編碼的當前塊的最近相鄰塊。
該布置由此使得可能在所考慮的子集中的第一塊的熵編碼期間僅存儲所獲悉的符號出現(xiàn)概率,因為在該特殊情形下,僅考慮針對位于第一當前塊上方且屬于另一子集的塊來計算的符號出現(xiàn)概率。這帶來了編碼器的存儲器資源的大小降低的優(yōu)化。
在另一特殊實施例中,在所考慮的子集中的塊的預測編碼將關(guān)于所述考慮的子集以外的預定數(shù)量的之前編碼和解碼的塊來執(zhí)行的情形下,所述考慮的子集中的塊的并行編碼是以相對于在執(zhí)行并行編碼的順序下緊鄰在前面的塊的子集而偏移預定數(shù)量的塊來執(zhí)行的。
該布置允許針對要編碼的當前的塊的子集來實現(xiàn)在執(zhí)行并行編碼的順序下在當前子集前面的塊的子集中的塊的處理過程的同步,由此使得可能保證被用于當前塊的編碼的前面子集中的一個或多個塊的可用性。通過該方式,在驗證前面的子集中的該塊的可用性的步驟(例如為在現(xiàn)有技術(shù)的并行編碼器中實現(xiàn)的步驟)可被有利地忽略,由此允許在根據(jù)本發(fā)明的編碼器中對塊進行處理所需的處理時間的加速。
相關(guān)地,本發(fā)明還涉及一種對至少一個圖像進行編碼的設(shè)備,包括:
-用于將圖像劃分為多個塊的部件,
-用于將塊分組為預定數(shù)量的塊的子集的部件,
-對塊的子集中的每個并行編碼的部件,所考慮的子集中的塊是根據(jù)遍歷的預定順序來編碼的,針對所考慮的子集中的當前塊,所述編碼部件包括:
·關(guān)于至少一個之前編碼和解碼的塊對當前塊進行預測編碼的子部件,
·基于至少一個符號出現(xiàn)概率對當前塊進行熵編碼的子部件,
所述編碼設(shè)備值得關(guān)注之處在于:
-在當前塊是所考慮的子集中要編碼的第一塊的情形下,針對第一當前塊的熵編碼,熵編碼的子部件考慮針對至少一個其他子集中的編碼和解碼的預定塊來計算的符號出現(xiàn)概率,
-在當前塊是所考慮的子集中除第一塊以外的塊的情形下,針對當前塊的熵編碼,熵編碼的子部件考慮針對屬于相同子集的至少一個編碼和解碼塊來計算的符號出現(xiàn)概率。
通過相應(yīng)的方式,本發(fā)明還涉及一種對表示至少一個編碼圖像的流進行解碼的方法,包括下列步驟:
-在圖像中識別要解碼的預定數(shù)量的塊的子集,
-對與塊的子集中的每個關(guān)聯(lián)的流的部分并行解碼,所考慮的子集中的塊是根據(jù)遍歷的預定順序來解碼的,針對所考慮的子集中的當前塊,所述解碼步驟包括下列子步驟:
·基于至少一個符號出現(xiàn)概率對當前塊進行熵解碼,
·關(guān)于至少一個之前解碼的塊對當前塊進行預測解碼,
該解碼方法值得關(guān)注之處在于:
-在當前塊是所考慮的子集中要解碼的第一塊的情形下,符號出現(xiàn)概率是針對至少一個其他子集的已解碼預定塊來計算的,
-在當前塊是所考慮的子集中除該子集中第一塊以外的塊的情形下,符號出現(xiàn)概率是針對屬于相同子集的至少一個解碼的塊來計算的。
在特定的實施例中,與所述子集中第一塊以外的要被解碼的當前塊屬于相同的子集的解碼塊是要解碼的當前塊的最近相鄰塊。
在另一特定實施例中,在所考慮的子集中的塊的預測解碼想要針對除了所考慮的子集以外的預定數(shù)量的之前編碼和解碼的塊來執(zhí)行的情形下,所考慮的子集中的塊的并行解碼是相對于在執(zhí)行并行解碼的順序下緊鄰在前面的塊的子集而偏移預定數(shù)量的塊來執(zhí)行的。
相關(guān)地,本發(fā)明還涉及一種對表示至少一個編碼圖像的流進行解碼的設(shè)備,包括:
-在圖像中識別要解碼的預定數(shù)量的塊的子集的部件,
-對與塊的子集中的每個關(guān)聯(lián)的流的部分并行解碼的部件,所考慮的子集中的塊是根據(jù)遍歷的預定順序來解碼的,針對所考慮的子集的當前塊,所述解碼部件包括:
·基于至少一個符號出現(xiàn)概率對當前塊進行熵解碼的子部件,
·關(guān)于至少一個之前解碼的塊對當前塊進行預測解碼的子部件,
所述解碼設(shè)備值得關(guān)注之處在于:
-在當前塊是所考慮的子集中要解碼的第一塊的情形下,針對第一當前塊的熵解碼,進行熵解碼的子部件考慮針對至少一個其他子集的已解碼預定塊來計算的符號出現(xiàn)概率,
-在當前塊是所述考慮的子集中除第一塊以外的塊的情形下,針對當前塊的熵解碼,進行熵解碼的子部件考慮針對屬于相同子集的至少一個解碼塊來計算的符號出現(xiàn)概率。
本發(fā)明的目標還在于一種包含指令的計算機程序,當該程序在計算機上執(zhí)行時,所述指令用于執(zhí)行以上的編碼或解碼方法的步驟。
該程序可以使用任意編程語言,且可以是源代碼、目標代碼或源代碼和目標代碼之間的中間代碼的形式,例如部分編譯的形式,或者任意其他想要的形式。
本發(fā)明的又一目標還在于一種可被計算機讀取的記錄介質(zhì),并且其包含例如上述計算機程序指令。
記錄介質(zhì)可以是能夠存儲程序的任意實體或設(shè)備。例如,該介質(zhì)可以包括:存儲裝置,諸如ROM(如CD ROM)、或微電子電路ROM;或者磁記錄裝置,例如磁盤(軟盤)或硬盤。
此外,該記錄介質(zhì)可以是傳輸介質(zhì)例如電或光信號,其可以通過電或光纜以無線電或其他方式來傳輸。根據(jù)本發(fā)明的程序特別地可在互聯(lián)網(wǎng)類型的網(wǎng)絡(luò)上下載。
替換地,該記錄介質(zhì)可以是集成電路,程序被合并在該集成電路中,該電路適于執(zhí)行所討論的方法或可用于后者的執(zhí)行。
上述編碼設(shè)備、解碼方法、解碼設(shè)備和計算機程序至少具有與根據(jù)本發(fā)明的編碼方法所表現(xiàn)的優(yōu)勢相同的優(yōu)勢。
附圖說明
通過參考附圖來描述的兩個優(yōu)選實施例,其他特征和優(yōu)勢將變得明顯,在附圖中:
-圖1A表示根據(jù)第一例子的現(xiàn)有技術(shù)的圖像編碼圖,
-圖1B表示根據(jù)第二例子的現(xiàn)有技術(shù)的圖像編碼圖,
-圖2A表示根據(jù)本發(fā)明的編碼方法的主要步驟,
-圖2B詳細地展示了在圖2A中的編碼方法中實現(xiàn)的并行編碼,
-圖3A表示根據(jù)本發(fā)明的編碼設(shè)備的實施例,
-圖3B表示圖3A中的編碼設(shè)備的編碼單元,
-圖4A表示根據(jù)第一優(yōu)選實施例的圖像編碼/解碼圖,
-圖4B表示根據(jù)第二優(yōu)選實施例的圖像編碼/解碼圖,
-圖5A表示根據(jù)本發(fā)明的解碼方法的主要步驟,
-圖5B詳細地展示了圖5A中的解碼方法中實現(xiàn)的并行編碼,
-圖6A表示根據(jù)本發(fā)明的解碼設(shè)備的實施例,
-圖6B表示圖6A中的解碼設(shè)備的解碼單元。
具體實施方式
現(xiàn)在將描述本發(fā)明的實施例,其中,根據(jù)本發(fā)明的編碼方法被用于根據(jù)二進制流對一系列圖像進行編碼,該二進制流接近于用根據(jù)H.264/MPEG-4AVC標準的編碼來獲取的二進制流。在該實施例中,通過對初始符合H.264/MPEG-4AVC標準的編碼器的調(diào)整例如以軟件或硬件的方式來實現(xiàn)根據(jù)本發(fā)明的編碼方法。以圖2A所示的包含步驟C1到C5的算法的形式來展示根據(jù)本發(fā)明的編碼方法。
根據(jù)本發(fā)明的實施例,在圖3A所示的編碼設(shè)備CO中實現(xiàn)根據(jù)本發(fā)明的編碼方法。
參考圖2A,第一編碼步驟C1是將要編碼的一系列圖像中的圖像IE切分為多個塊或宏塊MB,如圖4A或4B所示。在所示例子中,所述塊MB為正方形并且都有相同的大小。作為圖像大小的函數(shù),其不必是塊大小的倍數(shù),左側(cè)的最后的塊和底部的最后的塊可以不是正方形。在替代的實施例中,塊例如可以是矩形大小并且/或者互相不對齊。
每個塊或宏塊自身還可被分為子塊,該子塊自身還可細分。
該切分是通過圖3A所示的劃分模塊PCO來實現(xiàn)的,其使用例如眾所周知的劃分算法。
參考圖2A,第二編碼步驟C2是將上述塊分組為預定數(shù)量P的連續(xù)的塊的子集SE1、SE2、…SEk、…、SEP,該子集將被并行編碼。在圖4A和4B所示的例子中,預定數(shù)量P等于4,并且用虛線表示的四個子集SE1、SE2、SE3、SE4分別由圖像IE的前四行塊構(gòu)成。
該分組操作是通過圖3A所示的計算模塊GRCO利用眾所周知的算法來實現(xiàn)的。
參考圖2A,第三編碼步驟C3包括對所述塊的子集SE1、SE2、SE3和SE4中的每個并行編碼,所考慮的子集中的塊是根據(jù)遍歷的預定順序PS來編碼的。在圖4A和4B所示的例子中,當前子集SEk(1≤k≤4)中的塊如箭頭PS所示從左到右被依次編碼。
該并行編碼是通過圖3A所示的數(shù)量為R(R=4)的編碼單元UCk(1≤k≤R)來實現(xiàn)的,并允許編碼方法的大幅加速。通過這樣已知的方式,編碼器CO包括緩沖存儲器MT,其適于包含例如與當前塊的編碼協(xié)作的逐漸更新的符號出現(xiàn)概率。
如圖3B更詳細的展示,每個編碼單元UCk包括:
·關(guān)于至少一個之前編碼和解碼的塊對當前塊進行預測編碼的子單元,用SUCPk來表示;
·通過使用針對所述之前編碼和解碼的塊來計算的至少一個符號出現(xiàn)概率對所述當前塊進行熵編碼的子單元,用SUCEk來表示。
預測編碼子單元SUCPk能夠根據(jù)傳統(tǒng)的預測技術(shù)例如以幀內(nèi)和/或幀間模式來執(zhí)行當前塊的預測編碼。
熵編碼子單元SUCEk本身是CABAC類型,但根據(jù)本發(fā)明來調(diào)整,在說明書中將進一步描述。
作為變體,熵編碼子單元SUCEk可以是已知的霍夫曼編碼器。
在圖4A和4B所示的例子中,第一單元UC1對第一行SE1的塊從左向右進行編碼。在到達第一行SE1的最后一塊時,會傳遞到第(N+1)行這里是第5行等的第一塊。第二單元UC2對第二行SE2的塊從左向右進行編碼。在到達第二行SE2的最后一塊時,會傳遞到第(N+2)行這里是第6行等的第一塊。該遍歷被重復直到單元UC4,其對第四行SE4的塊從左向右進行編碼。在到達第一行的最后一塊時,會傳遞到第(N+4)行這里是第8行的第一塊,以此類推直到圖像IE的最后一塊被編碼。
與以上剛才描述的不同的其他類型的遍歷當然也是可能的。于是,可以將圖像IE切分為若干個子圖像,并將該類型的切分獨立地應(yīng)用于每個子圖像。每個編碼單元也可以不處理如上解釋的嵌套的行而是嵌套的列。還可以以任意方向來遍歷行或列。
參考圖2A,第四編碼步驟C4是產(chǎn)生N個子比特流Fk(1≤k≤N)以及每個子集SEk中的已處理塊的解碼版本,該子比特流Fk表示被上述每個編碼單元壓縮的已處理的塊。根據(jù)將在說明書中進一步詳細描述的同步機制,用SED1、SED2、…SEDk、…、SEDP表示的所考慮的子集中的解碼的已處理塊可被圖3A所示的某些編碼單元UC1、UC2、……、UCk、……、UCP重新使用。
參考圖2A,第五編碼步驟C5包括基于上述子流Fk來構(gòu)造全局的流F。根據(jù)一個實施例,子流Fk被簡單地并列,其額外的信息項用于向解碼器表示每個子流Fk在全局流F中的位置。所述全局流F通過通信網(wǎng)絡(luò)(未示出)傳輸?shù)竭h程終端。后者包括圖6A所示的解碼器DO。
于是,如說明書中將更詳細地描述,根據(jù)本發(fā)明的解碼器能夠隔離全局流F中的子流Fk,并將它們分配給解碼器的每個組成解碼單元。需要注意,將子流分解為全局流獨立于選擇使用若干個并行地操作的解碼單元,并且通過該方法可以僅使用包含并行操作單元的編碼器或解碼器。
全局流F的該構(gòu)造是在如圖3A所示的流構(gòu)造模塊CF中實現(xiàn)的。
現(xiàn)在將參考圖2B來描述例如在上述并行編碼步驟C3期間在編碼單元UCk中實現(xiàn)的本發(fā)明的各個特定子步驟。
在步驟C31的過程中,編碼單元UCk選擇圖4A或4B所示的當前行SEk中要編碼的第一塊作為當前塊。
在步驟C32的過程中,單元UCk測試當前塊是否是圖像IE中的第一塊(位于頂部和左側(cè)),在上述步驟C1中該圖像已被切分為塊。
如果是這種情形,在步驟C33的過程中,編碼概率被初始化為之前在圖3A的編碼器CO中定義的值Pinit。
如果不是這種情形,在后續(xù)說明中將詳細描述的步驟C40中,確定必要的之前編碼和解碼的塊的可用性。
在步驟C34的過程中,對圖4A或4B所述的第一行SE1中的第一當前塊MB1進行編碼。該步驟C34包括將在下面描述的多個子步驟C341到C348。
在第一子步驟C341的過程,通過幀內(nèi)和/或幀間預測的已知技術(shù)來對當前塊MB1進行預測編碼,在其過程中,關(guān)于至少一個之前編碼和解碼的塊來預測塊MB1。
毋庸贅述,例如在H.264標準中提出的其他模式的幀內(nèi)預測也是可以的。
當前塊MB1還可以經(jīng)過幀間模式的預測編碼,在其過程中,關(guān)于從之前編碼和解碼的圖像產(chǎn)生的塊來預測當前塊。當然可以設(shè)想其他類型的預測。在用于當前塊的可能的預測中,根據(jù)對于本領(lǐng)域技術(shù)人員來說眾所周知的速率失真準則來選擇最優(yōu)的預測。
上述預測編碼步驟使得可能構(gòu)造預測塊MBp1,這是對當前塊MB1的近似。與該預測編碼相關(guān)的信息隨后將被寫入到流F,該流F被發(fā)送到解碼器DO。該信息特別包含預測的類型(幀間或幀內(nèi)),且如果合適,包含幀內(nèi)預測的模式、塊或宏塊的劃分類型(如果宏塊已被細分)、參考圖像索引、以及在幀間預測模式中使用的偏移矢量。該信息被編碼器CO壓縮。
在后面的子步驟C342的過程中,從當前塊MB1中減去預測塊MBp1,產(chǎn)生殘留塊MBr1。
在后面的子步驟C343的過程中,根據(jù)傳統(tǒng)的直接變換操作(例如DCT類型的離散余弦變換)來變換殘留塊MBr1,產(chǎn)生變換的塊MBt1。
在后面的子步驟C344的過程中,根據(jù)傳統(tǒng)的量化操作(例如標量量化)來對變換的塊MBt1進行量化。然后獲得系數(shù)被量化的塊MBq1。
在后面的子步驟C345的過程中,對系數(shù)被量化的塊MBq1進行熵編碼。在優(yōu)選的實施例中,這需要CABAC熵編碼。
在后面的子步驟C346的過程中,根據(jù)傳統(tǒng)的反量化操作來對塊MBq1進行反量化,這是在步驟C344中執(zhí)行的量化的逆操作。然后獲得系數(shù)被反量化的塊MBDq1。
在后面的子步驟C347的過程中,對系數(shù)被反量化的塊MBDq1進行逆變換,這是以上步驟C343中執(zhí)行的直接變換的逆操作。然后獲得解碼的殘留塊MBDr1。
在后面的子步驟C348的過程中,通過將解碼的殘留塊MBDr1加到預測塊MBp1來構(gòu)造解碼的塊MBD1。需要注意,后者與在說明書中進一步描述的對圖像IE進行解碼的方法完成時獲取的解碼塊相同。解碼塊MBD1于是可被編碼單元UC1或構(gòu)成預定數(shù)量R的編碼單元的任意其他編碼單元使用。
在完成上述編碼步驟C34時,例如如圖3B所示的熵編碼子單元SUCEk包含例如與第一塊的編碼協(xié)作而逐漸更新的所有概率。這些概率對應(yīng)于各種可能的語法元素且對應(yīng)于各種相關(guān)的編碼上下文。
在上述編碼步驟C34之后,在步驟C35的過程中進行測試,以確定當前塊是否是該相同行的第j塊,其中,j是編碼器CO的已知預定值、且至少等于1。
如果是這樣的情形,在步驟C36的過程中,針對第j塊來計算的一組概率被存儲在例如如圖3A以及圖4A和4B所示的編碼器CO的緩沖存儲器MT中,所述存儲器的大小適于存儲所計算的數(shù)量的概率。
在步驟C37的過程中,單元UCk測試剛才被編碼的行SEk中的當前塊是否是圖像IE的最后一塊。
如果是這種情形,則在步驟C38的過程中,編碼方法結(jié)束。
如果不是這種情形,在步驟C39的過程中根據(jù)圖4A或4B中的箭頭PS所表示的遍歷順序來選擇下一要編碼的塊MBi。
如果在步驟C35的過程中,當前塊不是所考慮的行SEk中的第j塊,則不經(jīng)過以上步驟C37。
在步驟C40的過程中,確定對于當前塊MBi的編碼來說必要的之前編碼和解碼的塊的可用性??紤]到這需要通過不同的編碼單元UCk來對圖像IE的塊并行編碼的事實,用于對這些塊進行編碼的編碼單元可能未對這些塊進行編碼和解碼,且因此它們還不可用。所述確定步驟包括驗證位于前一行SEk-1中的預定數(shù)量N'的塊例如分別位于當前塊的上方和右上方的兩個塊是否可用于當前塊的編碼,即它們是否已經(jīng)被對其進行編碼的編碼單元UCk-1編碼且然后被解碼。所述確定步驟還包括驗證位于要編碼的當前塊MBi的左側(cè)的至少一塊的可用性。但是,考慮到圖4A或4B所示的實施例中選擇的遍歷順序PS,對所考慮的行SEk中的塊依次進行編碼。因此,左側(cè)的已編碼和解碼的塊總是可用的(除了一行中的第一塊)。在圖4A或4B所示的例子,這需要塊緊鄰地位于要編碼的當前塊的左側(cè)。為此,僅測試分別位于當前塊的上方和右上方的兩個塊的可用性。
該測試步驟易于使編碼方法變慢,通過根據(jù)本發(fā)明的替代方法,圖3A所示的時鐘CLK適于對塊編碼的過程進行同步,從而確保分別位于當前塊的上方和右上方的兩個塊的可用性,而不需要驗證這兩個塊的可用性。于是,如圖4A或4B所示,編碼單元UCk總是以用于當前塊的編碼的前一行SEk-1中的預定數(shù)量N'(這里N'=2)的編碼和解碼塊作為偏移來開始對第一塊的編碼。從軟件的角度來看,實現(xiàn)這樣的時鐘使得可能在編碼器CO中顯著加速用于處理圖像IE中的塊所需的處理時間。
在步驟C41的過程中,進行測試來確定當前塊是否是所考慮的行SEk中的第一塊。
如果是這樣的情形,在步驟C42的過程中,在緩沖存儲器MT中僅讀取在前一行SEk-1的第j塊的編碼期間計算的符號出現(xiàn)概率。
根據(jù)圖4A所示的第一變體,第j塊是前一行SEk-1中的第一塊(j=1)。該讀取包括用緩沖存儲器MT中存在的概率來替換CABAC編碼器的概率。對第二行SE2、第三行SE32和第四行SE4中的各個第一塊進行處理,在圖4A中通過細線表示的箭頭來描述該讀取步驟。
根據(jù)圖4B所示的上述步驟C42的第二變體,第j塊是前一行SEk-1的第二塊(j=2)。該讀取包括用緩沖存儲器MT中存在的概率來替換CABAC編碼器的概率。對第二行SE2、第三行SE32和第四行SE4中的各個第一塊進行處理,在圖4B中通過虛線表示的箭頭來描述該讀取步驟。
在步驟C42之后,通過上述步驟C34到C38的迭代,當前塊被編碼且然后被解碼。
如果在上述步驟C41之后,當前塊不是所考慮的行SEk的第一塊,有利地不會讀取從位于同一行SEk的之前編碼和解碼的塊(即所示例子中緊鄰地位于當前塊的左側(cè)的編碼和解碼塊)產(chǎn)生的概率。確實,考慮到位于同一行中的塊的順序遍歷讀PS,如圖4A或4B所示,在當前塊的編碼開始時在CABAC編碼器中存在的符號出現(xiàn)概率正好是在該相同行中前一塊的編碼/解碼之后存在的符號出現(xiàn)概率。
因此,在步驟C43的過程中,獲悉所述當前塊的熵編碼的符號出現(xiàn)概率,其僅對應(yīng)于如圖4A或4B中的雙實線箭頭表示的針對同一行中的所述前一塊來計算的符號出現(xiàn)概率。
在步驟C43之后,通過上述步驟C34到C38的迭代,當前塊被編碼且然后被解碼。
解碼部分的實施例的詳細描述
現(xiàn)在將描述根據(jù)本發(fā)明的解碼方法的實施例,其中,以軟件或硬件的方式通過對初始符合H.264/MPEG-4AVC標準的解碼器的調(diào)整來實現(xiàn)該解碼方法。
以圖5A所示的包含步驟D1到D4的算法的形式來展示根據(jù)本發(fā)明的解碼方法。
根據(jù)本發(fā)明的實施例,在如圖6A所示的解碼設(shè)備DO中實現(xiàn)根據(jù)本發(fā)明的解碼方法。
參考圖5A,第一解碼步驟D1是在所述流F中識別N個子流F1、F2、…、Fk、…、FP,該子流分別包含如圖4A或4B所示的之前編碼的塊或宏塊MB的N個子集SE1、SE2、…、SEk、…、SEP。為此,流F中的每個子流Fk與指示符關(guān)聯(lián),以允許解碼器DO確定每個子流在流F中的位置。在所示例子中,所述塊MB具有正方形并且都有相同的大小。作為圖像大小的函數(shù),其不必是塊大小的倍數(shù),左側(cè)的最后的塊和底部的最后的塊可以不是正方形。在替代的實施例中,塊例如可以是矩形大小并且/或者互相不對齊。
每個塊或宏塊自身還可被分為子塊,該子塊自身還可細分。
這樣的識別是通過如在圖6A中表示的流提取模塊EXDO來執(zhí)行的。
在圖4A或4B所示的例子中,預定數(shù)量等于4,并且四個子集SE1、SE2、SE3、SE4用虛線表示。
參考圖5A,第二解碼步驟D2是對所述塊的子集SE1、SE2、SE3和SE4中的每個并行解碼,所考慮的子集中的塊根據(jù)遍歷的順序PS來編碼。在圖4A或4B所示的例子中,當前子集SEk(1≤k≤4)中的塊如箭頭PS所示從左到右被依次解碼。在步驟D2完成時,獲得解碼的塊的子集SED1、SED2、SED3、…、SEDk、…、SEDP。
該并行解碼是由如圖6A所示的數(shù)量為R(R=4)的解碼單元UDk(1≤k≤R)來實現(xiàn)的,并且允許解碼方法的大幅加速。按照這樣已知的方式,解碼器DO包括緩沖存儲器MT,其適于包含例如與當前塊的解碼協(xié)作地逐漸更新的符號出現(xiàn)概率。
如圖6B更詳細地展示,每個解碼單元UDk包括:
·通過獲悉針對至少一個之前解碼的塊來計算的至少一個符號出現(xiàn)概率、對所述當前塊進行熵解碼的子單元,用SUDEk來表示,
·關(guān)于所述之前解碼的塊來對當前塊進行預測解碼的子單元,用SUDPk來表示。
預測解碼子單元SUDPk能夠根據(jù)傳統(tǒng)的預測技術(shù)例如在幀內(nèi)和/或幀間模式下執(zhí)行當前塊的預測解碼。
熵解碼子單元SUDEk本身是CABAC類型,但根據(jù)本發(fā)明來調(diào)整,在說明書中將進一步描述。
作為變體,熵解碼子單元SUDEk可以是已知的霍夫曼解碼器。
在圖4A或4B所示的例子中,第一單元UD1對第一行SE1中的塊從左向右進行解碼。在到達第一行SE1的最后一塊時,會傳遞到第(N+1)行(這里是第5行)等的第一塊。第二單元UC2對第二行SE2中的塊從左到右進行解碼。在到達第二行SE2的最后一塊時,會傳遞給第(N+2)行(這里是第6行)等的第一塊。該遍歷重復直到單元UD4,其對第四行SE4中的塊從左向右進行解碼。在到達第一行的最后一塊時,會傳遞給第(N+4)行(這里是第8行)的第一塊,以此類推直到最后識別的子流中的最后一塊被解碼。
與以上剛才描述的不同的其他類型的遍歷當然也是可能的。例如,每個解碼單元也可以不處理如上解釋的嵌套的行而是嵌套的列。還可以以任意方向來遍歷行或列。
參考圖5A,第三解碼步驟D3是基于在解碼步驟D2中獲得的每個解碼的子集SED1、SED2、…、SEDk、…、SEDP來重構(gòu)解碼的圖像。更準確地說,每個解碼的子集SED1、SED2、…、SEDk、…、SEDP中的解碼塊被發(fā)送到例如如圖6A所示的圖像重構(gòu)單元URI。在步驟D3的過程中,當這些塊變得可用時,單元URI在解碼的圖像中寫入解碼塊。
在圖5A所示的第四解碼步驟D4的過程中,圖6A所示的單元URI給出完全解碼的圖像ID。
現(xiàn)在將參考圖5B來描述例如在上述并行解碼步驟D2期間在解碼單元UDk中實現(xiàn)的本發(fā)明的各個特定子步驟。
在步驟D21的過程中,解碼單元UDk選擇在圖4A或4B所示的當前塊SEk中要解碼的第一塊作為當前塊。
在步驟D22的過程中,單元UDk測試當前塊是否是被解碼的圖像中的第一塊,在該實例中為子流F1的第一塊。
如果是這種情形,在步驟D23的過程中,解碼概率被初始化為之前在圖6A的解碼器DO中定義的值Pinit。
如果不是這種情形,將在后續(xù)說明中描述的步驟D30的過程中確定必要的之前解碼的塊的可用性。
在步驟D24的過程中,對圖4A或4B所示的第一行SE1中的第一當前塊MB1進行解碼。該步驟D24包括以下將描述的多個子步驟D241到D246。
在第一子步驟D241的過程中,對與當前塊相關(guān)的語法元素進行熵解碼。更準確地說,通過例如圖6B所示的CABAC熵解碼子單元SUDE1對與當前塊相關(guān)的語法元素進行解碼。CABAC熵解碼子單元SUDE1對壓縮文件的子比特流F1進行解碼以產(chǎn)生語法元素,且同時以該方式來更新其概率,從而在該子單元對符號進行解碼的時刻,該符號的出現(xiàn)概率等于在上述熵編碼步驟C345中對該相同符號進行編碼時得到的符號出現(xiàn)概率。
在后面的子步驟D242的過程中,通過幀內(nèi)和/或幀間預測的已知技術(shù)來對當前塊MB1進行預測解碼,在其過程中,關(guān)于至少一個之前解碼的塊來預測所述塊MB1。
毋庸贅述,例如在H.264標準中提出的其他模式的幀內(nèi)預測也是可以的。
在該步驟的過程中,借助于在之前的步驟中解碼的語法元素進行預測解碼,該語法元素特別包含預測的類型(幀間或幀內(nèi)),且如果合適,包含幀內(nèi)預測的模式、塊或宏塊的劃分類型(如果后者已被細分)、參考圖像索引、以及在幀間預測模式中使用的偏移矢量。
上述預測解碼步驟使得可能構(gòu)造預測塊MBp1。
在后面的子步驟D243的過程中,借助于之前解碼的語法元素來構(gòu)造量化殘留塊MBq1。
在后面的子步驟D244的過程中,根據(jù)傳統(tǒng)的反量化操作來對量化的殘留塊MBq1進行反量化,這是在上述步驟C344中執(zhí)行的量化的逆操作,以產(chǎn)生解碼的反量化塊MBDt1。
在后面的子步驟D245的過程中,對反量化塊MBDt1進行逆變換,這是以上步驟C343中執(zhí)行的直接變換的逆操作。然后獲得解碼的殘留塊MBDr1。
在后面的子步驟D246的過程中,通過將預測塊MBp1加到解碼的殘留塊MBDr1來構(gòu)造解碼塊MBD1。所述解碼塊MBD1于是可被解碼單元UD1或構(gòu)成預定數(shù)量N的解碼單元的一部分的任意其他解碼單元使用。
在完成上述解碼步驟D246時,例如如圖6B所示的熵解碼子單元SUDE1包含例如與第一塊的解碼協(xié)作而逐漸更新的所有概率。這些概率對應(yīng)于各種可能的語法元素以及各種關(guān)聯(lián)的解碼上下文。
在上述解碼步驟D24之后,在步驟D25的過程中進行測試,以確定當前塊是否是該相同行的第j塊,其中j是解碼器DO的已知預定值且至少等于1。
如果是這種情形,在步驟D26的過程中,針對第j塊來計算的一組概率被存儲在例如如圖6A以及圖4A或4B所示的解碼器DO的緩沖存儲器MT中,所示存儲器的大小適于存儲所計算的概率的數(shù)量。
在步驟D27的過程中,單元UDk測試剛才被解碼的當前塊是否是最后的子流中的最后一塊。
如果是這種情形,在步驟D28的過程中,解碼方法結(jié)束。
如果不是這種情形,執(zhí)行步驟D29,在步驟D29的過程中根據(jù)圖4A或4B中的箭頭PS所示的遍歷順序來選擇要解碼的下一塊MBi。
如果在上述步驟D25的過程中,當前塊不是所考慮的行SEDk中的第j塊,進行以上的步驟D27。
在上述步驟D29之后的步驟D30的過程中,確定對于當前塊MBi的解碼來說必要的之前解碼的塊的可用性??紤]到這需要通過不同的解碼單元UDk來對塊并行編碼的事實,用于對這些塊進行解碼的解碼單元可能未對這些塊進行解碼,且因此它們還不可用。所述確定步驟包括驗證位于前一行SEk-1中的預定數(shù)量N'的塊(例如分別位于當前塊的上方和右上方的兩個塊)是否可用于當前塊的解碼,即它們是否已經(jīng)被對其進行解碼的解碼單元UDk-1解碼。所述確定步驟還包括驗證位于要解碼的當前塊MBi的左側(cè)的至少一塊的可用性。但是,考慮到圖4A或4B所示的實施例中選擇的遍歷順序PS,對所考慮的行SEk中的塊依次進行解碼。因此,左側(cè)的解碼的塊總是可用的(除了一行中的第一塊)。在圖4A或4B所示的例子中,這需要塊緊鄰地位于要解碼的當前塊的左側(cè)。為此,僅測試分別位于當前塊的上方和右上方的兩個塊的可用性。
該測試步驟易于使解碼方法變慢,通過根據(jù)本發(fā)明的替代方法,圖6A所示的時鐘CLK適于對塊解碼的過程進行同步,從而確保分別位于當前塊的上方和右上方的兩個塊的可用性,而不需要驗證這兩個塊的可用性。于是,如圖4A或4B所示,解碼單元UDk總是以用于解碼當前塊的前一行SEk-1中的預定數(shù)量N'(這里N'=2)的解碼塊作為偏移來開始對第一塊進行解碼。從軟件的角度來看,實現(xiàn)這樣的時鐘使得可能在解碼器DO中顯著加速處理每個子集SEk中的塊所需的處理時間。
在步驟D31的過程中,進行測試以確定當前塊是否是所考慮的行SEk中的第一塊。
如果是這樣的情形,在步驟D32的過程中,在緩沖存儲器MT中僅讀取在前一行SEk-1的第j塊的解碼期間計算的符號出現(xiàn)概率。
根據(jù)圖4A所示的第一變體,第j塊是前一行SEk-1中的第一塊(j=1)。該讀取包括用緩沖存儲器MT中存在的概率來替換CABAC解碼器的概率。對第二行SE2、第三行SE3和第四行SE4中的各個第一塊進行同樣處理,在圖4A中通過細線表示的箭頭來描述該讀取步驟。
根據(jù)圖4B所示的上述步驟D32的第二變體,第j塊是前一行SEk-1的第二塊(j=2)。該讀取包括用緩沖存儲器MT中存在的概率來替換CABAC解碼器的概率。對第二行SE2、第三行SE3和第四行SE4中的各個第一塊進行處理,在圖4B中通過虛線表示的箭頭來描述該讀取步驟。
在步驟D32之后,通過上述步驟D24到D28的迭代,當前塊被解碼。
如果在上述步驟D31之后,當前塊不是所考慮的行SEk的第一塊,有利地不會讀取從位于同一行SEk的之前解碼的塊(即所示例子中緊鄰地位于當前塊的左側(cè)的解碼塊)產(chǎn)生的概率。確實,考慮到位于同一行中的塊的順序遍歷讀PS,如圖4A或4B所示,在當前塊的解碼開始時在CABAC解碼器中存在的符號出現(xiàn)概率正好是在該相同行中前一塊的解碼之后存在的符號出現(xiàn)概率。
因此,在步驟D33的過程中,獲悉用于所述當前塊的熵解碼的符號出現(xiàn)概率,其僅對應(yīng)于如圖4A或4B中的雙實線箭頭表示的針對同一行中的所述前一塊來計算的符號出現(xiàn)概率。
在步驟D33之后,通過上述步驟D24到D28的迭代,當前塊被解碼。