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