本申請(qǐng)是申請(qǐng)?zhí)枮?01280031335.9,申請(qǐng)日為2012年6月20日,題為“用于對(duì)圖像編碼和解碼的方法、編碼和解碼設(shè)備以及相應(yīng)的計(jì)算機(jī)程序”的中國(guó)發(fā)明專(zhuān)利申請(qǐng)的分案申請(qǐng)。
本發(fā)明一般屬于圖像處理的領(lǐng)域,且更準(zhǔn)確地屬于數(shù)字圖像和數(shù)字圖像序列的編碼和解碼。
本發(fā)明由此可特別應(yīng)用于在目前的數(shù)字視頻編碼器(mpeg,h.264等)或未來(lái)的視頻編碼器(itu-t/vceg(h.265)或iso/mpeg(hvc))中實(shí)現(xiàn)的視頻編碼。
背景技術(shù):
目前的視頻編碼器(mpeg、h264等)使用視頻序列的逐塊表示。圖像被分為宏塊,每個(gè)宏塊本身可以被分為塊,并且每個(gè)塊或宏塊通過(guò)圖像內(nèi)或圖像間預(yù)測(cè)來(lái)編碼。于是,特定的圖像通過(guò)空間預(yù)測(cè)(內(nèi)預(yù)測(cè))來(lái)編碼,而其他圖像在相對(duì)于一個(gè)或多個(gè)被編碼-解碼的參考圖像的時(shí)間預(yù)測(cè)(間預(yù)測(cè))、在本領(lǐng)域技術(shù)人員已知的運(yùn)動(dòng)補(bǔ)償?shù)膸椭逻M(jìn)行編碼。此外,針對(duì)每個(gè)塊,可以對(duì)與原始?jí)K減去預(yù)測(cè)相對(duì)應(yīng)的殘留塊進(jìn)行編碼。該塊的系數(shù)可以在變換之后被量化,然后被熵編碼器編碼。
內(nèi)預(yù)測(cè)和間預(yù)測(cè)需要之前已經(jīng)被編碼和解碼的特定塊可用,從而在解碼器上或在編碼器上被用于預(yù)測(cè)當(dāng)前塊。圖1示出了這樣的預(yù)測(cè)編碼的示例性例子,其中,圖像in被分為塊,該圖像的當(dāng)前塊mbi正在關(guān)于預(yù)訂數(shù)量的之前被編碼和解碼的塊mbr1、mbr2和mbr3進(jìn)行預(yù)測(cè)編碼,例如如陰影箭頭所示。上述三個(gè)塊特別包含緊接當(dāng)前塊mbi左側(cè)的塊mbr1,以及分別僅緊接當(dāng)前塊mbi上方和右上方的兩個(gè)塊mbr2和mbr3。
熵編碼器在這里更為感興趣。熵編碼器以其到達(dá)的順序來(lái)編碼信息。典型地實(shí)現(xiàn)“光柵掃描”類(lèi)型的塊的逐行遍歷,如圖1所示通過(guò)引用prs,從圖像左上角的塊開(kāi)始。對(duì)于每個(gè)塊,用來(lái)表示塊所必須的各個(gè)信息項(xiàng)(塊的類(lèi)型、預(yù)測(cè)模式、殘留系數(shù)等)被順序分發(fā)到熵編碼器。
已知在avc壓縮標(biāo)準(zhǔn)(也被稱(chēng)為iso-mpeg4第10部分和itu-th.264)中引入的被稱(chēng)為“cabac”(上下文適應(yīng)二進(jìn)制算術(shù)編碼器)的足夠復(fù)雜的有效的算術(shù)編碼器。
熵編碼器實(shí)現(xiàn)各個(gè)概念:
-算術(shù)編碼:編碼器例如初始在文檔j.rissanenandg.g.langdonjr,“universalmodelingandcoding,”ieeetrans.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)學(xué)習(xí)。另一方面,依賴(lài)于之前被編碼的信息的狀態(tài),特定的上下文被用于編碼。對(duì)于每個(gè)上下文,存在固有的符號(hào)出現(xiàn)概率與之對(duì)應(yīng)。例如,上下文對(duì)應(yīng)于根據(jù)給定配置來(lái)編碼的符號(hào)的類(lèi)型(殘留系數(shù)的表示、編碼模式的信號(hào)等),或者鄰居的狀態(tài)(例如在鄰居中選擇的“內(nèi)”模式的數(shù)量等)。
-二進(jìn)制化:實(shí)現(xiàn)要編碼的符號(hào)的比特序列的成形。隨后,這些各個(gè)比特被相繼分發(fā)到二進(jìn)制熵編碼器。
于是,針對(duì)使用的每個(gè)上下文,該熵編碼器實(shí)現(xiàn)一種系統(tǒng),針對(duì)所考慮的上下文來(lái)快速學(xué)習(xí)關(guān)于之前被編碼的符號(hào)的概率。該學(xué)習(xí)基于對(duì)這些符號(hào)進(jìn)行編碼的順序。典型地,根據(jù)如上所述的“光柵掃描”類(lèi)型的順序來(lái)遍歷圖像。
在可以是0或1的給定符號(hào)b的編碼期間,通過(guò)下列方式來(lái)更新當(dāng)前塊mbi的該符號(hào)的出現(xiàn)概率pi的學(xué)習(xí):
其中,α是預(yù)定值例如0.95,pi-1是在該符號(hào)最后出現(xiàn)時(shí)計(jì)算的符號(hào)出現(xiàn)概率。
圖1示出了這樣的熵編碼的示例性例子,其中,圖像in的當(dāng)前塊mbi被熵編碼。在塊mbi的熵編碼開(kāi)始時(shí),所使用的符號(hào)出現(xiàn)概率是之前被編碼和解碼的塊的編碼之后獲得的概率,根據(jù)上述“光柵掃描”類(lèi)型的塊的逐行遍歷,該塊正好在當(dāng)前塊mbi的前面。僅為了圖的清楚,在圖1中通過(guò)細(xì)箭頭針對(duì)特定的塊來(lái)表示這樣的基于塊和塊的依賴(lài)性的學(xué)習(xí)。
該類(lèi)型的熵編碼的缺點(diǎn)在于,考慮到塊的“光柵掃描”遍歷,在對(duì)位于一行開(kāi)始的符號(hào)進(jìn)行編碼時(shí),使用的概率主要對(duì)應(yīng)于在前一行結(jié)束位置的符號(hào)所看到的那些概率?,F(xiàn)在,考慮到符號(hào)概率的可能的空間變化(例如,對(duì)于和運(yùn)動(dòng)信息項(xiàng)相關(guān)的符號(hào),位于圖像右側(cè)部分的運(yùn)動(dòng)可以和在左側(cè)部分看到的不同,并且因此對(duì)于隨后的局部概率來(lái)說(shuō)也是類(lèi)似的),可以看到概率的局部一致性的缺失,由此可能增加編碼期間的效率損失。
為了限制該現(xiàn)象,已經(jīng)提出了對(duì)塊的遍歷順序的調(diào)整,目標(biāo)是確保更好的局部一致性,但編碼和解碼仍保持順序。
該類(lèi)型的熵編碼器還有另一個(gè)缺點(diǎn)。確實(shí),符號(hào)的編碼和解碼依賴(lài)于就此學(xué)習(xí)的概率,符號(hào)的解碼可以?xún)H以與在編碼期間使用的順序相同的順序來(lái)實(shí)現(xiàn)。典型地,于是解碼可以只是順序的,由此阻止若干個(gè)符號(hào)的并行解碼(例如從多核架構(gòu)中受益)。
文檔thomaswiegand,garyj.sullivan,gislebjontegaard,andajayluthra,″overviewoftheh.264/avcvideocodingstandard″,ieeetransactionsoncircuitsandsystemsforvideotechnology,vol.13,no.7,pp.560-576,july2003還指出,cabac熵編碼器具有將非整數(shù)數(shù)量的比特分配給要編碼的當(dāng)前字母表的每個(gè)符號(hào)的特殊特征,這對(duì)于大于0.5的符號(hào)出現(xiàn)概率是有利的。特別地,cabac編碼器等待直到它已經(jīng)讀取了若干個(gè)符號(hào),然后將預(yù)定數(shù)量的比特分配給讀取的該符號(hào)集,編碼器將該比特寫(xiě)到要發(fā)送到解碼器的壓縮流中。這樣的規(guī)定由此使其可能使若干個(gè)符號(hào)上的比特“交互作用”,并對(duì)分?jǐn)?shù)數(shù)量的比特上的符號(hào)進(jìn)行編碼,該數(shù)量反映了與通過(guò)符號(hào)實(shí)際發(fā)送的信息更接近的信息。與讀取的符號(hào)關(guān)聯(lián)的其他比特未在壓縮流中發(fā)送,而是保持等候,等待被分配給cabac編碼器讀取的一個(gè)或多個(gè)新的符號(hào),使其可能再次使這些其他比特交互作用。通過(guò)已知的方式,熵編碼器在給定的時(shí)刻“清空”這些未發(fā)送的比特。除非另外說(shuō)明,在所述給定的時(shí)刻,編碼器提取還未被發(fā)送的比特,并將它們寫(xiě)入到去往解碼器的壓縮流中。該清空例如在已經(jīng)讀取要編碼的最后一個(gè)符號(hào)的時(shí)刻進(jìn)行,以確保壓縮流確實(shí)包含所有比特,該比特將允許解碼器對(duì)字母表中的所有符號(hào)進(jìn)行解碼。通過(guò)更一般的方式,作為專(zhuān)用于給定編碼器/解碼器的性能和功能的函數(shù)來(lái)確定進(jìn)行清空的時(shí)刻。
在2011年4月15號(hào)的互聯(lián)網(wǎng)地址http://research.microsoft.com/en-us/um/people/jinl/paper_2002/msri_jpeg.htm上可用的文檔描述了一種對(duì)符合jpeg2000壓縮標(biāo)準(zhǔn)的靜態(tài)圖像進(jìn)行編碼的方法。該靜態(tài)圖像經(jīng)過(guò)離散小波變換,然后被量化,由此使其可能獲得量化的小波系數(shù),量化索引分別與之關(guān)聯(lián)。在熵編碼器的幫助下對(duì)獲取的量化索引進(jìn)行編碼。量化系數(shù)之前被分組為稱(chēng)為代碼塊的矩形塊,大小典型為64x64或32x32。每個(gè)代碼塊然后被熵編碼獨(dú)立編碼。于是,在對(duì)當(dāng)前的代碼塊進(jìn)行編碼時(shí),熵編碼器不會(huì)使用在之前的代碼塊的編碼期間計(jì)算的符號(hào)出現(xiàn)概率。熵編碼器由此在每次開(kāi)始代碼塊的編碼時(shí)處于初始化狀態(tài)。該方法展示了對(duì)代碼塊的數(shù)據(jù)進(jìn)行解碼而不用對(duì)相鄰的代碼塊進(jìn)行解碼的好處。于是,例如,一個(gè)客戶(hù)端軟件可以請(qǐng)求一個(gè)服務(wù)器軟件提供僅客戶(hù)需要的壓縮代碼塊來(lái)對(duì)圖像中識(shí)別的子部分進(jìn)行解碼。該方法還展示了允許代碼塊的并行編碼和/或解碼的優(yōu)勢(shì)。于是,代碼塊的大小越小,并行化級(jí)別就越高。例如,對(duì)于固定為2的并行化級(jí)別,兩個(gè)代碼塊將被并行編碼和/或解碼。理論上,并行化級(jí)別的值等于圖像中要編碼的代碼塊的數(shù)量。但是,考慮到該編碼沒(méi)有利用從當(dāng)前代碼塊的中間環(huán)境出現(xiàn)的概率,該方法獲得的壓縮性能不是最優(yōu)的。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的一個(gè)目標(biāo)是修復(fù)上述現(xiàn)有技術(shù)的缺陷。
為此,本發(fā)明的主題涉及一種對(duì)至少一個(gè)圖像進(jìn)行編碼的方法,包括下列步驟:
-將圖像分割為可以包含屬于預(yù)定符號(hào)集的符號(hào)的多個(gè)塊,
-將所述塊分組為預(yù)定數(shù)量的塊子集,
-通過(guò)熵編碼模塊、通過(guò)將數(shù)字信息與所考慮的子集中的每個(gè)塊的符號(hào)進(jìn)行關(guān)聯(lián)來(lái)對(duì)所述塊子集中的每個(gè)進(jìn)行編碼,該編碼步驟包括針對(duì)圖像的第一塊來(lái)初始化熵編碼模塊的狀態(tài)變量的子步驟,
-生成表示被編碼的塊子集中的至少一個(gè)的至少一個(gè)數(shù)據(jù)子流,
根據(jù)本發(fā)明的方法值得注意,在于:
-在當(dāng)前塊是所考慮的子集中要被編碼的第一塊的情形下,確定該第一當(dāng)前塊的符號(hào)出現(xiàn)概率,該概率是針對(duì)至少一個(gè)其他子集的編碼和解碼的預(yù)定塊而已經(jīng)確定的那些概率,
-在當(dāng)前塊是所考慮的子集中最后編碼的塊的情形下:
●將在所考慮的所述子集中的塊的編碼期間與所述符號(hào)關(guān)聯(lián)的所有數(shù)字信息寫(xiě)入到子流中,該子流表示所考慮的子集,
●實(shí)現(xiàn)初始化子步驟。
上述寫(xiě)入步驟相當(dāng)于,一旦塊子集中的最后一塊已被編碼,清空還未被發(fā)送的數(shù)字信息(比特),如上描述所解釋。
上述寫(xiě)入步驟和重新初始化熵編碼模塊的步驟的耦合使其可能產(chǎn)生包含各個(gè)數(shù)據(jù)子流的被編碼的數(shù)據(jù)流,該數(shù)據(jù)子流分別對(duì)應(yīng)于該至少一個(gè)被編碼的塊子集,所述流適合根據(jù)各種并行化級(jí)別來(lái)編碼,并且這與應(yīng)用于塊子集的編碼類(lèi)型不管是順序還是并行無(wú)關(guān)。于是,在編碼時(shí)可以在并行級(jí)別的選擇上有很大的自由度,該并行級(jí)別作為期望的編碼/解碼性能的函數(shù)。解碼的并行級(jí)別可變,且甚至可以與編碼的并行級(jí)別不同,因?yàn)樵陂_(kāi)始?jí)K子集的解碼時(shí),解碼器總是處于初始化狀態(tài)。
根據(jù)第一例子,熵編碼模塊的狀態(tài)變量是表示預(yù)定符號(hào)集的符號(hào)中的符號(hào)出現(xiàn)概率的區(qū)間的兩個(gè)邊界。
根據(jù)第二例子,熵編碼模塊的狀態(tài)變量是本領(lǐng)域技術(shù)人員熟知并且在2011年6月21日在下列互聯(lián)網(wǎng)地址http://en.wikipedia.org/wiki/lempel%e2%80%93ziv%e2%80%93welch中描述的lzw(lempel-ziv-welch)熵編碼器的轉(zhuǎn)換表中包含的符號(hào)的串。
使用在所考慮的塊子集的第一當(dāng)前塊的熵編碼期間使用針對(duì)所述其他子集的第一塊來(lái)確定的符號(hào)出現(xiàn)概率的主要好處是,通過(guò)在后者中僅存儲(chǔ)所述符號(hào)出現(xiàn)概率的更新而不用考慮通過(guò)所述其他子集中的其他連續(xù)塊來(lái)學(xué)習(xí)的符號(hào)出現(xiàn)概率,來(lái)節(jié)省編碼器的緩沖存儲(chǔ)器。
在所考慮的塊子集中的第一當(dāng)前塊的熵編碼期間使用針對(duì)所述子集中除了第一塊以外的塊例如第二塊來(lái)確定的符號(hào)出現(xiàn)概率的好處是獲得更準(zhǔn)確且由此更好地學(xué)習(xí)符號(hào)出現(xiàn)概率,由此提升更好的視頻壓縮性能。
在特定的實(shí)施例中,塊子集被順序或者并行編碼。
子集塊被順序編碼的事實(shí)所具有的好處是展示符合h.264/mpeg-4avc標(biāo)準(zhǔn)的根據(jù)本發(fā)明的編碼方法。
子集塊被并行編碼的事實(shí)所具有的好處是加速編碼器處理時(shí)間且受益于圖像編碼的多平臺(tái)架構(gòu)。
在另一特定實(shí)施例中,當(dāng)至少兩個(gè)塊子集與至少一個(gè)其他的塊子集并行編碼時(shí),該至少兩個(gè)被編碼的塊子集被包含在相同的數(shù)據(jù)子流中。
該規(guī)定使其特別可能節(jié)省數(shù)據(jù)子流的信令。確實(shí),為了使解碼單元能夠盡可能早地對(duì)子流進(jìn)行解碼,需要在壓縮文件中指示所考慮的子流在何處開(kāi)始。當(dāng)若干個(gè)塊子集被包含在相同的數(shù)據(jù)子流中時(shí),需要單個(gè)指示符,由此降低壓縮文件的大小。
在又一特定實(shí)施例中,當(dāng)所述被編碼的塊子集想要以預(yù)定的順序來(lái)并行編碼時(shí),在對(duì)該塊子集中的每個(gè)分別編碼之后給出的數(shù)據(jù)子流在為了解碼而被發(fā)送之前根據(jù)該預(yù)定順序來(lái)預(yù)先排序。
該規(guī)定使其可能使被編碼的數(shù)據(jù)子流適應(yīng)特定類(lèi)型的解碼,而不需要對(duì)圖像進(jìn)行解碼然后再次編碼。
相關(guān)地,本發(fā)明還涉及一種對(duì)至少一個(gè)圖像進(jìn)行編碼的設(shè)備,包括:
-將圖像分割為多個(gè)塊的裝置,該多個(gè)塊可以包含屬于預(yù)定符號(hào)集的符號(hào),
-用于將所述塊分組為預(yù)定數(shù)量的塊子集的裝置,
-對(duì)該塊子集中的每個(gè)進(jìn)行編碼的裝置,該編碼裝置包括熵編碼模塊,能夠?qū)?shù)字信息與所考慮的子集中的每個(gè)塊的符號(hào)相關(guān)聯(lián),該編碼裝置包含針對(duì)圖像中的第一塊來(lái)初始化熵編碼模塊的狀態(tài)變量的子裝置,
-用于生成數(shù)據(jù)的至少一個(gè)數(shù)據(jù)子流的裝置,該數(shù)據(jù)子流表示被編碼的塊子集中的至少一個(gè)。
該編碼裝置值得注意,在于它包括:
-用于確定當(dāng)前塊的符號(hào)出現(xiàn)概率的裝置,在當(dāng)前塊是所考慮的子集中要被編碼的第一塊的情形下,該裝置確定第一塊的符號(hào)出現(xiàn)概率為針對(duì)至少一個(gè)其他子集的編碼和解碼的預(yù)定塊所已經(jīng)確定的那些概率,
-寫(xiě)入裝置,在當(dāng)前塊是所考慮的子集中最后編碼的塊的情形下,其被激活以將在所考慮的子集中的塊的編碼期間已經(jīng)與所述符號(hào)關(guān)聯(lián)的所有數(shù)字信息寫(xiě)入到子流中,該子流至少表示所考慮的子集,
初始化子裝置還被激活以重新初始化熵編碼模塊的狀態(tài)變量。
通過(guò)相應(yīng)的方式,本發(fā)明還涉及一種用于對(duì)表示至少一個(gè)被編碼的圖像的流進(jìn)行解碼的方法,包括下列步驟:
-在所述流中識(shí)別與要解碼的至少一個(gè)塊子集分別對(duì)應(yīng)的預(yù)定數(shù)量的數(shù)據(jù)子流,所述塊能夠包含屬于預(yù)定符號(hào)集的符號(hào),
-通過(guò)熵解碼模塊,通過(guò)在至少一個(gè)被識(shí)別的子流中讀取與對(duì)應(yīng)于該至少一個(gè)所述被識(shí)別的子流的子集中的每個(gè)塊的符號(hào)相關(guān)聯(lián)的數(shù)字信息,來(lái)對(duì)所述被識(shí)別的塊子集進(jìn)行解碼,該解碼步驟包括針對(duì)圖像中要被解碼的第一塊來(lái)初始化所述熵解碼模塊的狀態(tài)變量的子步驟,
該解碼方法值得注意,在于:
-在當(dāng)前塊是所考慮的子集中要被解碼的第一塊的情形下,確定所考慮的子集中的第一塊的符號(hào)出現(xiàn)概率,該概率是針對(duì)至少一個(gè)其他子集的被解碼的預(yù)定塊而已經(jīng)確定的那些概率,
-在當(dāng)前塊是所考慮的子集中最后解碼的塊的情形下,實(shí)現(xiàn)所述初始化子步驟。
在特定的實(shí)施例中,所述塊子集被順序或并行地解碼。
在另一特定的實(shí)施例中,當(dāng)至少兩個(gè)塊子集與至少一個(gè)其他的塊子集并行解碼時(shí),被識(shí)別的數(shù)據(jù)子流中的一個(gè)表示所述至少兩個(gè)塊子集。
在又一特定的實(shí)施例中,當(dāng)被編碼的塊子集想要以預(yù)定的順序來(lái)并行解碼時(shí),與被編碼的塊子集分別對(duì)應(yīng)的數(shù)據(jù)子流之前在所述要解碼的流中以該預(yù)定順序來(lái)排序。
相關(guān)地,本發(fā)明還涉及一種用于對(duì)表示至少一個(gè)被編碼的圖像的流進(jìn)行解碼的設(shè)備,包括:
-用于在所述流中識(shí)別與要解碼的至少一個(gè)塊子集分別對(duì)應(yīng)的預(yù)定數(shù)量的數(shù)據(jù)子流的裝置,所述塊能夠包含屬于預(yù)定符號(hào)集的符號(hào),
-用于對(duì)被識(shí)別的塊子集進(jìn)行解碼的裝置,該解碼裝置包括熵解碼模塊,其能夠在至少一個(gè)所述被識(shí)別的子流中讀取與對(duì)應(yīng)于該至少一個(gè)被識(shí)別的子流的子集中的每個(gè)塊的符號(hào)相關(guān)聯(lián)的數(shù)字信息,該解碼裝置包括針對(duì)圖像中要被解碼的第一塊來(lái)初始化熵解碼模塊的狀態(tài)變量的子裝置,
該解碼裝置值得注意,在于它包括用于確定當(dāng)前塊的符號(hào)出現(xiàn)概率的裝置,在當(dāng)前塊是所考慮的子集中要被解碼的第一塊的情形下,該裝置確定該第一塊的符號(hào)出現(xiàn)概率,作為針對(duì)至少一個(gè)其他子集的被解碼的預(yù)定塊而已經(jīng)確定的那些概率,
并且在于,在當(dāng)前塊是所考慮的子集中最后解碼的塊的情形下,初始化子裝置被激活以重新初始化熵解碼模塊的狀態(tài)變量。
本發(fā)明的目標(biāo)還在于一種包含指令的計(jì)算機(jī)程序,當(dāng)程序被計(jì)算機(jī)執(zhí)行時(shí),用于執(zhí)行上述編碼或解碼方法的步驟。
該程序可以使用任意編程語(yǔ)言,并且可以采用源代碼、目標(biāo)代碼或介于源代碼和目標(biāo)代碼之間的中間代碼的形式,例如部分編譯的形式或任意其他想要的形式。
本發(fā)明的又一主題還在于一種記錄介質(zhì),其可被計(jì)算機(jī)讀取,并且包含如上所述的計(jì)算機(jī)程序指令。
該記錄介質(zhì)可以是能存儲(chǔ)程序的實(shí)體或裝置。例如,該介質(zhì)可以包括存儲(chǔ)裝置例如rom如cdrom或微電子電路rom,或者磁存儲(chǔ)裝置如磁盤(pán)(軟盤(pán))或硬盤(pán)。
此外,該記錄介質(zhì)可以是可傳輸介質(zhì)例如電或光信號(hào),其可以通過(guò)電或光纜、通過(guò)無(wú)線電或其他方式來(lái)傳遞。根據(jù)本發(fā)明的程序特別地可以從互聯(lián)網(wǎng)類(lèi)型的網(wǎng)絡(luò)上下載。
或者,該記錄介質(zhì)可以是其中包含程序的集成電路,該電路適于執(zhí)行所考慮的方法或者在后者執(zhí)行時(shí)使用。
上述編碼裝置、解碼方法、解碼裝置和計(jì)算機(jī)程序展示了與根據(jù)本發(fā)明的編碼方法所具有的相同的優(yōu)勢(shì)。
附圖說(shuō)明
閱讀參考附圖來(lái)描述的兩個(gè)優(yōu)選實(shí)施例,其他特征和優(yōu)勢(shì)將變得明顯,在附圖中:
-圖1表示現(xiàn)有技術(shù)的圖像編碼圖,
-圖2a表示根據(jù)本發(fā)明的編碼方法的主要步驟,
-圖2b詳細(xì)地表示在圖2a的編碼方法中實(shí)現(xiàn)的編碼,
-圖3a表示根據(jù)本發(fā)明的編碼裝置的第一實(shí)施例,
-圖3b表示圖3a中的編碼裝置的編碼單元,
-圖3c表示根據(jù)本發(fā)明的編碼裝置的第二實(shí)施例,
-圖4a表示根據(jù)第一優(yōu)選實(shí)施例的圖像編碼/解碼圖,
-圖4b表示根據(jù)第二優(yōu)選實(shí)施例的圖像編碼/解碼圖,
-圖5a表示根據(jù)本發(fā)明的解碼方法的主要步驟,
-圖5b詳細(xì)地表示在圖5a的解碼方法中實(shí)現(xiàn)的解碼,
-圖6a表示根據(jù)本發(fā)明的解碼裝置的實(shí)施例,
-圖6b表示圖6a中的解碼裝置的解碼單元,
-圖7a表示實(shí)現(xiàn)順序類(lèi)型的編碼和并行類(lèi)型的解碼的圖像編碼/解碼圖,
-圖7b表示以各自不同的并行級(jí)別來(lái)實(shí)現(xiàn)并行類(lèi)型的編碼/解碼的圖像編碼/解碼圖。
具體實(shí)施方式
現(xiàn)在將描述本發(fā)明的實(shí)施例,其中,根據(jù)例如符合h.264/mpeg-4avc標(biāo)準(zhǔn)的編碼而獲得的二進(jìn)制流,依據(jù)根據(jù)本發(fā)明的編碼方法被用于對(duì)圖像序列進(jìn)行編碼。在該實(shí)施例中,通過(guò)對(duì)初始符合h.264/mpeg-4avc標(biāo)準(zhǔn)的編碼器的調(diào)整,根據(jù)本發(fā)明的編碼方法例如以軟件或硬件的方式來(lái)實(shí)現(xiàn)。根據(jù)本發(fā)明的編碼方法以包含步驟c1到c5的算法的形式來(lái)表示,如圖2a所示。
根據(jù)本發(fā)明的實(shí)施例,根據(jù)本發(fā)明的編碼方法在編碼裝置co中實(shí)現(xiàn),其兩個(gè)實(shí)施例分別在圖3a和3c中表示。
參考圖2a,第一編碼步驟c1是將要編碼的圖像序列中的圖像ie劃分為多個(gè)塊或宏塊mb,如圖4a或4b所示。所述宏塊可以包含一個(gè)或多個(gè)符號(hào),所述符號(hào)形成預(yù)定符號(hào)集的一部分。在所示例子中,所述塊mb具有正方形并且都具有相同的大小。作為圖像大小的函數(shù),該圖像不必是塊大小的倍數(shù),左側(cè)的最后一塊和底部的最后一塊可以不是正方形。在替代的實(shí)施例中,塊例如可以是長(zhǎng)方形大小并且/或者互相不對(duì)齊。
每個(gè)塊或宏塊自身可以進(jìn)一步被分為子塊,該子塊本身可以再細(xì)分。
該劃分是通過(guò)圖3a所示的劃分模塊pco來(lái)執(zhí)行的,其使用眾所周知的劃分算法。
參考圖2a,第二編碼步驟c2是將上述塊分組為要被順序或并行編碼的預(yù)訂數(shù)量p的連續(xù)塊的子集se1,se2,...,sek,...,sep。在圖4a和4b所示的例子中,為了圖的清楚,僅展示了四個(gè)子集se1、se2、se3、se4。這四個(gè)塊子集每個(gè)用虛線表示,并且分別包含圖像ie的前四行的塊。
該分組是通過(guò)圖3a中所示的計(jì)算模塊grco在本身眾所周知的算法的輔助下執(zhí)行的。
參考圖2a,第三編碼步驟c3包括對(duì)所述塊子集se1到se6中的每個(gè)進(jìn)行編碼,根據(jù)例如順序類(lèi)型的預(yù)定遍歷次序ps來(lái)對(duì)所考慮的子集中的塊進(jìn)行編碼。在圖4a和4b所示的例子中,當(dāng)前塊sek(l≤k≤p)中的塊如箭頭ps所示從左到右被依次編碼。
根據(jù)第一變體,該編碼是順序類(lèi)型,并且通過(guò)如圖3a所示的單個(gè)編碼單元uc來(lái)實(shí)現(xiàn)。通過(guò)本身已知的方式,編碼器co包括緩沖存儲(chǔ)器mt,其被適配為包含在當(dāng)前塊編碼時(shí)被逐漸重復(fù)更新的符號(hào)出現(xiàn)的概率。
如圖3b中更詳細(xì)地展示,編碼單元uc包括:
*關(guān)于至少一個(gè)之前被編碼和解碼的塊對(duì)當(dāng)前塊進(jìn)行預(yù)測(cè)編碼的模塊,被表示為mcp;
*使用針對(duì)所述之前被編碼和解碼的塊來(lái)計(jì)算的至少一個(gè)符號(hào)出現(xiàn)的概率來(lái)對(duì)所述當(dāng)前塊進(jìn)行熵編碼的模塊,被表示為mce。
預(yù)測(cè)編碼模塊mcp是軟件模塊,其能夠根據(jù)傳統(tǒng)的預(yù)測(cè)技術(shù)例如以?xún)?nèi)和/或間模式對(duì)當(dāng)前塊進(jìn)行預(yù)測(cè)編碼。
熵編碼模塊mce本身是cabac類(lèi)型,但根據(jù)本發(fā)明來(lái)調(diào)整,在描述中將進(jìn)一步描述。
作為變體,熵編碼模塊mce可以是本身已知的霍夫曼編碼器。
在圖4a和4b所示的例子中,單元uc對(duì)第一行se1中的塊從左到右進(jìn)行編碼。當(dāng)它到達(dá)第一行se1的最后一塊時(shí),它傳遞到第二行se2的第一塊。當(dāng)它到達(dá)第二行se2的最后一塊時(shí),它傳遞到第三行se3的第一塊。當(dāng)它到達(dá)第三行se3的最后一塊時(shí),它傳遞到第四行se4的第一塊,等等,直到圖像ie的最后一塊被編碼。
與以上剛才描述的不同的其他類(lèi)型的遍歷當(dāng)然是可能的。于是,可以將圖像ie劃分為若干個(gè)子圖像并將該類(lèi)型的劃分獨(dú)立應(yīng)用于每個(gè)子圖像。編碼單元還可以不和以上解釋的那樣相繼處理各行,而是相繼(處理)各列。還可以以任意方向來(lái)遍歷行或列。
根據(jù)第二變體,該編碼是并行類(lèi)型,并且,僅通過(guò)由預(yù)訂數(shù)量r的編碼單元uck(l≤k≤r)來(lái)實(shí)現(xiàn)的事實(shí)(在圖3c所示的例子中r=2),它與順序編碼的第一變體相區(qū)分。已知該并行編碼給編碼方法帶來(lái)了明顯的加速。
編碼單元uck中的每個(gè)等價(jià)于圖3b所示的編碼單元uc。通過(guò)相應(yīng)的方式,編碼單元uck包括預(yù)測(cè)編碼模塊mcpk和熵編碼模塊mcek。
再次參考圖4a和4b,第一單元uc1對(duì)奇數(shù)排名的行中的塊進(jìn)行編碼,而第二單元uc2對(duì)偶數(shù)排名的行中的塊進(jìn)行編碼。更準(zhǔn)確地說(shuō),第一單元uc1從左到右對(duì)第一行se1中的塊進(jìn)行編碼。當(dāng)它達(dá)到第一行se1的最后一塊時(shí),它傳遞第(2n+1)行即第三行se3等的第一塊。與第一單元uc1執(zhí)行的處理并行,第二單元uc2從左到右對(duì)第二行se2中的塊進(jìn)行編碼。當(dāng)它到達(dá)第二行se2的最后一塊,它傳遞到第(2n)行在這里是第四行se4等的第一塊。上述兩個(gè)遍歷被重復(fù),直到圖像ie的最后一塊被編碼。
參考圖2a,第四編碼步驟c4是產(chǎn)生比特的l個(gè)子流f1,f2,...,fm,...,fl(l≤m≤l≤p)來(lái)表示通過(guò)上述編碼單元uc或者上述編碼單元uck中的每個(gè)來(lái)壓縮的被處理的塊以及每個(gè)子集sek中被處理的塊的解碼版本。根據(jù)在描述中將進(jìn)一步細(xì)化的同步機(jī)制,所考慮的子集中用sed1,sed2,...,sedk,...,sedp表示的被解碼的處理的塊可以被圖3a所示的編碼單元uc或圖3c所示的編碼單元uck中的每個(gè)復(fù)用。
參考圖3b,產(chǎn)生l個(gè)子流的步驟是通過(guò)流生成軟件模塊mgsf或msgfk來(lái)實(shí)現(xiàn)的,其被適配為產(chǎn)生數(shù)據(jù)流例如比特。
參考圖2a,第五編碼步驟c5包括基于上述l個(gè)子流f1,f2,...,fm,...,fl來(lái)構(gòu)造全局流f。根據(jù)一個(gè)實(shí)施例,子流f1,f2,...,fm,...,fl被簡(jiǎn)單地并置,用額外的信息項(xiàng)來(lái)向解碼器指示全局流f中的每個(gè)子流fm的位置。后者之后被通信網(wǎng)絡(luò)(未示出)發(fā)送到遠(yuǎn)程終端。后者包括圖5a所示的解碼器do。根據(jù)另一實(shí)施例,這尤其有利,因?yàn)椴恍枰獙?duì)圖像解碼然后再次編碼,在將流f發(fā)送到解碼器do之前,解碼器do之前以預(yù)定的順序來(lái)對(duì)l個(gè)子流f1,f2,...,fm,...,fl進(jìn)行排序,該順序?qū)?yīng)于do能夠?qū)ψ恿鬟M(jìn)行解碼的順序。
于是,如描述中更詳細(xì)地描述,根據(jù)本發(fā)明的解碼器能夠在全局流f中分離子流f1,f2,...,fm,...,fl,并將它們分配給組成解碼器的一個(gè)或多個(gè)解碼單元。需要注意,全局流中的子流的該分解獨(dú)立于使用單個(gè)編碼單元或并行操作的若干個(gè)編碼單元的選擇,并且用該方法,可以只有編碼器或只有解碼器,其包含并行操作的單元。
全局流f的該構(gòu)造是在例如圖3a和圖3c所示的流構(gòu)造模塊cf中實(shí)現(xiàn)的。
現(xiàn)在將參考圖2b來(lái)描述本發(fā)明的各個(gè)特定子步驟,例如在上述編碼步驟c3期間在編碼單元uc或uck中實(shí)現(xiàn)的子步驟。
在步驟c31的過(guò)程中,編碼單元uc或uck選擇圖4a或4b所示的當(dāng)前塊sek例如第一行se1中要編碼的第一塊作為當(dāng)前塊。
在步驟c32的過(guò)程中,單元uc或uck測(cè)試當(dāng)前塊是否是圖像ie的第一塊(位于頂部且位于左側(cè)),該圖像在上述步驟c1中已被劃分為塊。
如果是這種情況,在步驟c33的過(guò)程中,熵編碼模塊mce或mcek對(duì)其狀態(tài)變量進(jìn)行初始化。根據(jù)所示例子,其使用如前所述的算術(shù)編碼,這包含表示預(yù)定符號(hào)集中包含的符號(hào)的出現(xiàn)的概率的間隔的初始化。通過(guò)本身已知的方式,用兩個(gè)邊界l和h,分別為下邊界和上邊界,來(lái)初始化該間隔。下邊界l的值被固定為0,而上邊界的值被固定為1,由此對(duì)應(yīng)于預(yù)定符號(hào)集的所有符號(hào)中的第一符號(hào)的出現(xiàn)的概率。該間隔的大小r因此在此刻由r=h-l=1來(lái)定義。被初始化的間隔被傳統(tǒng)地進(jìn)一步劃分為多個(gè)預(yù)定的子間隔,其分別表示預(yù)定符號(hào)集中的符號(hào)的出現(xiàn)的概率。
作為變體,如果使用的熵編碼是lzw編碼,符號(hào)的串的轉(zhuǎn)換表被初始化,從而它包含所有可能的符號(hào)一次且僅一次。
如果在上述步驟c32之后,當(dāng)前塊不是圖像ie的第一塊,則在后續(xù)描述中之后被描述的步驟c40的過(guò)程中確定必要的之前被編碼和解碼的塊的可用性。
在步驟c34的過(guò)程中,對(duì)圖4a或4b中表示的第一行se1中的第一當(dāng)前塊mb1進(jìn)行編碼。該步驟c34包括以下將描述的多個(gè)子步驟c341到c348。
在圖2b所示的第一子步驟c341的過(guò)程中,通過(guò)內(nèi)和/或間預(yù)測(cè)的已知技術(shù)對(duì)當(dāng)前塊mb1進(jìn)行預(yù)測(cè)編碼,在其過(guò)程中,關(guān)于至少一個(gè)之前被編碼和解碼的塊來(lái)對(duì)塊mb1進(jìn)行預(yù)測(cè)。
毋庸置疑,例如h.264標(biāo)準(zhǔn)中提出的其他模式的內(nèi)預(yù)測(cè)也是可以的。
還可以以?xún)?nèi)模式對(duì)當(dāng)前塊mb1進(jìn)行預(yù)測(cè)編碼,在其過(guò)程中,關(guān)于在之前被編碼和解碼的圖像中出現(xiàn)的塊來(lái)對(duì)當(dāng)前塊進(jìn)行預(yù)測(cè)。其他類(lèi)型的預(yù)測(cè)當(dāng)然也是可能的。在對(duì)當(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)的信息后續(xù)將被寫(xiě)入到流f中,該流f被發(fā)送到解碼器do。該信息特別包括預(yù)測(cè)類(lèi)型(間或內(nèi)(預(yù)測(cè))),并且如果合適,包括內(nèi)預(yù)測(cè)的類(lèi)型、塊或宏塊(如果后者已經(jīng)被細(xì)分)的劃分類(lèi)型、在間預(yù)測(cè)模式中使用的參考圖像索引和位移矢量。該信息被編碼器co壓縮。
在之后的子步驟c342的過(guò)程中,從當(dāng)前塊mb1中減去預(yù)測(cè)塊mbp1以產(chǎn)生殘留塊mbr1。
在之后的子步驟c343的過(guò)程中,根據(jù)傳統(tǒng)的直接變換操作例如dct類(lèi)型的離散余弦變換來(lái)對(duì)殘留塊mbr1進(jìn)行變換,以產(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熵編碼。該步驟包括:
a)讀取與所述當(dāng)前塊關(guān)聯(lián)的符號(hào)或預(yù)定符號(hào)集中的符號(hào),
b)將數(shù)字信息例如比特與讀取的符號(hào)進(jìn)行關(guān)聯(lián)。
在上述變體中(根據(jù)該變體,使用的編碼是lzw編碼),與當(dāng)前轉(zhuǎn)換表中的符號(hào)的代碼相對(duì)應(yīng)的數(shù)字信息項(xiàng)與要編碼的符號(hào)關(guān)聯(lián),并根據(jù)本身已知的過(guò)程來(lái)更新該轉(zhuǎn)換表。
在之后的子步驟c346的過(guò)程中,根據(jù)傳統(tǒng)的反量化操作即與步驟c344中執(zhí)行的量化相反的操作來(lái)對(duì)塊mbq1進(jìn)行反量化。然后得到系數(shù)被反量化的塊mbdq1。
在之后的子步驟c347的過(guò)程中,對(duì)系數(shù)被反量化的塊mbdq1進(jìn)行逆變換,這是與以上步驟c343中執(zhí)行的直接變換相反的操作。然后得到被解碼的殘留塊mbdr1。
在之后的子步驟c348的過(guò)程中,通過(guò)將解碼的殘留塊mbdr1加到預(yù)測(cè)塊mbp1來(lái)構(gòu)造被解碼的塊mbd1。需要注意,后一塊與在描述中將進(jìn)一步描述的對(duì)圖像ie進(jìn)行解碼的方法完成之后得到的被解碼的塊相同。被解碼的塊mbd1由此被呈現(xiàn)為可用,以被構(gòu)成預(yù)定數(shù)量r的編碼單元的一部分的編碼單元uck或任意其他編碼單元使用。
在完成上述編碼步驟c34之后,例如如圖3b所示的熵編碼模塊mce或mcek包含在第一塊的編碼時(shí)被逐漸重復(fù)更新的所有概率。這些概率對(duì)應(yīng)于可能的語(yǔ)法的各個(gè)元素或者各個(gè)關(guān)聯(lián)的編碼上下文。
在上述編碼步驟c34之后,在步驟c35的過(guò)程中執(zhí)行測(cè)試以確定當(dāng)前塊是否是同一行的第j塊,其中j是編碼器co已知的預(yù)定值,其至少等于1。
如果是該情況,在圖2b所示的步驟c36的過(guò)程中,針對(duì)第j塊來(lái)計(jì)算的概率集合被存儲(chǔ)在例如圖3a或3b以及圖4a和4b中所示的編碼器co的緩沖存儲(chǔ)器mt中,所述存儲(chǔ)器的大小被適配為存儲(chǔ)所計(jì)算的概率數(shù)量。
在圖2b所示的步驟c37的過(guò)程中,編碼單元uc或uck測(cè)試剛才被編碼的行sek的當(dāng)前塊是否是圖像ie中的最后一塊。如果在步驟c35的過(guò)程中當(dāng)前塊不是行se1的第j塊,該步驟也會(huì)被實(shí)現(xiàn)。
在當(dāng)前塊是圖像ie的最后一塊時(shí),在步驟c38的過(guò)程中,編碼方法結(jié)束。
如果不是該情況,在步驟c39的過(guò)程中,根據(jù)如圖4a或4b中的箭頭ps所示的遍歷順序來(lái)選擇要編碼的下一塊mbi。
在圖2b所示的步驟c40的過(guò)程中,確定對(duì)于當(dāng)前塊mbi的編碼來(lái)說(shuō)必須的之前被編碼和解碼的塊的可用性。
如果這是第一行se1,該步驟包括驗(yàn)證位于要編碼的mbi的左側(cè)的至少一個(gè)塊的可用性。但是,針對(duì)圖4a或4b所示的實(shí)施例中選擇的遍歷順序ps,在所考慮的行sek中依次對(duì)各個(gè)塊進(jìn)行編碼。結(jié)果,左側(cè)被編碼和解碼的塊總是可用的(除了一行的第一塊)。在圖4a或4b所示的例子中,這是直接位于要編碼的當(dāng)前塊的左側(cè)的塊。
如果這是與第一行不同的行sek,所述確定步驟還包括驗(yàn)證位于前一行sek-1中的預(yù)訂數(shù)量n’的塊例如分別位于當(dāng)前塊的上方和右上方的兩個(gè)塊是否可用于當(dāng)前塊的編碼,即,它們是否已經(jīng)被編碼單元uc或uck-1編碼且然后被解碼。
由于該測(cè)試步驟容易降低編碼方法的速度,通過(guò)根據(jù)本發(fā)明的替代方式,在行的編碼是并行類(lèi)型的情形下,圖3c所示的時(shí)鐘clk被適配為同步塊編碼的進(jìn)展以確保分別位于當(dāng)前塊的上方和右上方的兩個(gè)塊的可用性,而不需要驗(yàn)證這兩塊的可用性。于是,編碼單元uck總是以被用于當(dāng)前塊的編碼的前一行sek-1中的預(yù)訂數(shù)量n’(例如n’=2)的被編碼和解碼的塊的偏移來(lái)開(kāi)始第一塊的編碼。從軟件的角度來(lái)看,這樣的時(shí)鐘的實(shí)現(xiàn)使其可能顯著加速編碼器co中對(duì)圖像ie中的塊的處理時(shí)間。
在圖2b所示的步驟c41的過(guò)程中,執(zhí)行測(cè)試以確定當(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編碼器的概率。為使其處理第二、第三和第四行se2、se3和se4中的各個(gè)第一塊,如細(xì)線所示的箭頭在圖4a中示出該讀取步驟。
根據(jù)圖4b所示的上述步驟c43的第二變體,第j塊是前一行sek-1的第二塊(j=2)。該讀取包括用在緩沖存儲(chǔ)器mt中存在的概率來(lái)替換cabac編碼器的概率。為使其處理第二、第三和第四行se2、se3和se4中的各個(gè)第一塊,如細(xì)虛線所示的箭頭在圖4b中示出該讀取步驟。
在步驟c42之后,通過(guò)重復(fù)上述步驟c34到c38來(lái)對(duì)當(dāng)前塊進(jìn)行編碼然后進(jìn)行解碼。
如果在上述步驟c41之后,當(dāng)前塊不是所考慮的行sek的第一塊,有利地不用讀取在位于同一行sek中的之前被編碼和解碼的塊即在所示例子中直接位于當(dāng)前塊的左側(cè)的被編碼和解碼的塊中出現(xiàn)的概率。確實(shí),考慮到如圖4a或4b所示的用于讀取位于同一行中的塊的遍歷順序ps,在開(kāi)始當(dāng)前塊的編碼時(shí)在cabac編碼器中存在的符號(hào)出現(xiàn)的概率正好是在該同一行中的前一塊的編碼/解碼后存在的那些概率。
結(jié)果,在圖2b所示的步驟c43的過(guò)程中,針對(duì)所述當(dāng)前塊的熵編碼來(lái)學(xué)習(xí)符號(hào)出現(xiàn)的概率,這些(概率)僅對(duì)應(yīng)于如圖4a或4b中的雙實(shí)線箭頭所示的針對(duì)同一行中的所述前一塊來(lái)計(jì)算的那些概率。
在步驟c43之后,重復(fù)上述步驟c34到c38來(lái)對(duì)當(dāng)前塊進(jìn)行編碼然后進(jìn)行解碼。
在步驟c44的過(guò)程之后執(zhí)行測(cè)試以確定當(dāng)前塊是否是所考慮的行sek中的最后一塊。
如果不是該情況,在步驟c44之后,再次實(shí)現(xiàn)對(duì)要編碼的下一塊mbi進(jìn)行選擇的步驟c39。
如果當(dāng)前塊是所考慮的行sek的最后一塊,在步驟c45的過(guò)程中,圖3a或3c的編碼裝置co執(zhí)行如上描述中提到的清空。為此,編碼單元uck將已經(jīng)與在所考慮的所述行中的每個(gè)塊的編碼期間讀取的符號(hào)關(guān)聯(lián)的所有比特發(fā)送到相應(yīng)的子流生成模塊mgsfk,通過(guò)這樣的方式從而模塊mgsfk將所有比特寫(xiě)入到子流fm中,該子流包含的二進(jìn)制串表示所考慮的所述行sek中被編碼的塊。這樣的情況在圖4a和4b中用每行sek的末端的三角形來(lái)表示。
在圖2b所示的步驟c46的過(guò)程中,編碼單元uc或uck執(zhí)行與上述步驟c33相同的步驟,即再次初始化表示預(yù)定符號(hào)集中包含的符號(hào)的出現(xiàn)的概率的間隔。該重新初始化在圖4a和4b中用每行sek開(kāi)始的黑點(diǎn)來(lái)表示。
在該編碼級(jí)別上執(zhí)行步驟c45和c46的好處是,在編碼單元uc或編碼單元uck處理的下一塊的編碼期間,編碼器co處于初始化狀態(tài)。于是,如下將在描述中進(jìn)一步描述,并行工作的解碼單元可能從該點(diǎn)開(kāi)始對(duì)壓縮過(guò)的流f進(jìn)行直接解碼,因?yàn)樗鼭M(mǎn)足處于初始化狀態(tài)。
解碼部分的實(shí)施例的詳細(xì)描述
現(xiàn)在將描述根據(jù)本發(fā)明的解碼方法的實(shí)施例,其中,通過(guò)對(duì)初始符合h.264/mpeg-4avc標(biāo)準(zhǔn)的編碼器的調(diào)整,根據(jù)本發(fā)明的解碼方法例如以軟件或硬件的方式來(lái)實(shí)現(xiàn)。
根據(jù)本發(fā)明的編碼方法以包含步驟d1到d4的算法的形式來(lái)表示,如圖5a所示。
根據(jù)本發(fā)明的實(shí)施例,根據(jù)本發(fā)明的解碼方法在圖6a所示的解碼裝置do中實(shí)現(xiàn)。
參考圖5a,第一解碼步驟是在所述流f中識(shí)別l個(gè)子流f1,f2,...,fm,...,fl,該子流分別包含如圖4a或4b所示之前被編碼的塊或宏塊mb的p個(gè)子集se1,se2,...,sek,...,sep。為此,流f中的每個(gè)子流與指示符關(guān)聯(lián),該指示符旨在允許解碼器do確定每個(gè)子流fm在流f中的位置。作為變體,在完成上述編碼步驟c3時(shí),解碼器co以解碼器do期望的順序?qū)α鱢中的子流f1,f2,...,fm,...,fl進(jìn)行排序,由此避免在流f中插入子流標(biāo)識(shí)符。該規(guī)定由此使其可能降低與數(shù)據(jù)流f的比特率相關(guān)的成本。
在圖4a或4b所示的例子中,所述塊mb具有正方形并且都具有相同的大小。取決于圖像大小,該圖像不必是塊大小的倍數(shù),左側(cè)的最后一塊和底部的最后一塊可以不是正方形。在替代的實(shí)施例中,塊例如可以是長(zhǎng)方形大小并且/或者互相不對(duì)齊。
每個(gè)塊或宏塊自身可以進(jìn)一步被分為子塊,該子塊本身可以再細(xì)分。
該識(shí)別是通過(guò)例如圖6a所示的流提取模塊exdo來(lái)執(zhí)行的。
在圖4a或4b所示的例子中,預(yù)定數(shù)量p等于6,并且為了圖的清楚,僅用虛線示出了四個(gè)子集se1、se2、se3、se4。
參考圖5a,第二解碼步驟d2是對(duì)所述塊子集se1、se2、se3和se4中的每個(gè)進(jìn)行解碼,所考慮的子集中的塊是根據(jù)預(yù)定的遍歷順序ps來(lái)編碼的。在圖4a或4b所示的例子中,當(dāng)前子集sek(l≤k≤p)中的塊如箭頭ps所示從左到右被依次被解碼。在步驟d2完成時(shí),得到被解碼的塊子集sed1,sed2,sed3,...,sedk,...,sedp。
這樣的解碼可以是順序類(lèi)型的,且因此在單個(gè)解碼單元的輔助下執(zhí)行。
但是,為了能夠受益于多平臺(tái)解碼架構(gòu),塊子集的解碼是并行類(lèi)型并且通過(guò)數(shù)量r的解碼單元udk(l≤k≤r)來(lái)實(shí)現(xiàn),例如如圖6a所示r=4。該規(guī)定由此允許解碼方法的明顯加速。通過(guò)本身已知的方式,解碼器do包括緩沖存儲(chǔ)器mt,其被適配為包含在當(dāng)前塊解碼時(shí)被逐漸重復(fù)更新的符號(hào)出現(xiàn)的概率。
如圖6b中更詳細(xì)的表示,每個(gè)解碼單元udk包括:
●通過(guò)學(xué)習(xí)針對(duì)至少一個(gè)之前被解碼的塊來(lái)計(jì)算的至少一個(gè)符號(hào)出現(xiàn)的概率來(lái)對(duì)所述當(dāng)前塊進(jìn)行熵解碼的模塊,用mdek來(lái)表示,
●關(guān)于所述之前被解碼的塊來(lái)對(duì)當(dāng)前塊進(jìn)行預(yù)測(cè)解碼的模塊,用mdpk來(lái)表示。
預(yù)測(cè)解碼模塊sudpk能夠根據(jù)傳統(tǒng)的預(yù)測(cè)技術(shù)例如內(nèi)和/或間模式來(lái)對(duì)當(dāng)前塊進(jìn)行解碼。
熵解碼模塊mdek本身是cabac類(lèi)型,但根據(jù)本發(fā)明來(lái)調(diào)整,如下在描述中將進(jìn)一步描述。
作為變體,熵解碼模塊mdek可以是本身已知的霍夫曼解碼器。
在圖4a或4b所示的例子中,第一單元ud1從左到右對(duì)第一行se1中的塊進(jìn)行解碼。當(dāng)它到達(dá)第一行se1的最后一塊,它傳遞到第(n+1)行在這里是第5行等的第一塊。第二單元uc從左到右對(duì)第二行se2中的塊進(jìn)行解碼。當(dāng)它到達(dá)第二行se2的最后一塊,它傳遞到第(n+2)行這里是第6行等的第一塊。該遍歷重復(fù)直到單元ud4,其從左到右對(duì)第四行進(jìn)行解碼。當(dāng)它到達(dá)第一行的最后一塊,它傳遞到第(n+4)行在這里是第8行的第一塊,等待,直到最后被識(shí)別的子流中的最后一塊被解碼。
與上述剛才描述的不同的遍歷類(lèi)型當(dāng)然是可能的。例如,每個(gè)解碼單元可以不處理如上解釋的嵌入的行而是嵌入的列。還可以以任意方向來(lái)遍歷行或列。
參考圖5a,第三解碼步驟d3是基于在解碼步驟d2中得到的每個(gè)被解碼的子集sed1,sed2,...,sedk,...,sedp來(lái)重構(gòu)被解碼的圖像id。更準(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)描述本發(fā)明的各個(gè)特定子步驟例如在并行解碼的上述步驟d2期間在解碼單元udk中實(shí)現(xiàn)的子步驟。
在步驟d21的過(guò)程中,解碼單元udk選擇圖4a或4b所示的當(dāng)前塊sek中要解碼的第一塊作為當(dāng)前塊。
在步驟d22的過(guò)程中,解碼單元udk測(cè)試當(dāng)前塊是否是被解碼的圖像在的第一塊,在該情形下,是否是子流f1中的第一塊。
如果是該情況,在步驟d23的過(guò)程中,熵解碼模塊mde或mdek初始化其狀態(tài)變量。根據(jù)所示例子,這需要對(duì)表示預(yù)定符號(hào)集中包含的符號(hào)的出現(xiàn)的概率的間隔進(jìn)行初始化。
作為變體,如果使用的熵解碼是lzw解碼,符號(hào)的串的轉(zhuǎn)換表被初始化,從而它包含所有可能的符號(hào)一次且僅一次。步驟d23等同于上述編碼步驟c33,后面不會(huì)再被描述。
如果在上述步驟d22之后,當(dāng)前塊不是被解碼的圖像id中的第一塊,在后續(xù)描述中之后被描述的步驟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)行熵解碼。該步驟主要包括:
a)讀取與所述第一行se1關(guān)聯(lián)的子流中包含的比特,
b)基于讀取的比特來(lái)重構(gòu)符號(hào)。
在上述變體中(根據(jù)該變體,使用的解碼是lzw解碼),讀取與當(dāng)前轉(zhuǎn)換表中的符號(hào)代碼相對(duì)應(yīng)的數(shù)字信息項(xiàng),基于讀取的代碼來(lái)重構(gòu)符號(hào),并根據(jù)本身已知的過(guò)程來(lái)更新轉(zhuǎn)換表。
更準(zhǔn)確地說(shuō),與當(dāng)前塊相關(guān)的符號(hào)元素被例如如圖6b所示的cabac熵解碼模塊mde1解碼。后者對(duì)壓縮文件中的比特子流f1進(jìn)行解碼以產(chǎn)生符號(hào)元素,并且同時(shí)以該方式來(lái)重新更新其概率,從而在后者對(duì)符號(hào)進(jìn)行解碼時(shí),該符號(hào)出現(xiàn)的概率等于在上述熵解碼步驟c345期間對(duì)該相同符號(hào)進(jìn)行編碼時(shí)得到的那些概率。
在之后的子步驟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ǔ)法元素的輔助下執(zhí)行預(yù)測(cè)解碼,該語(yǔ)法元素特別包括(間或內(nèi))預(yù)測(cè)的類(lèi)型,并且如果合適,包括內(nèi)預(yù)測(cè)的模式、塊或宏塊(如果后者已經(jīng)被細(xì)分)的劃分類(lèi)型、在間預(yù)測(cè)模式中使用的參考圖像索引和位移矢量。
上述預(yù)測(cè)解碼步驟使其可能重構(gòu)預(yù)測(cè)的塊mbp1。
在之后的子步驟d243的過(guò)程中,在之前被解碼的語(yǔ)法元素的輔助下重構(gòu)量化的殘留塊mbq1。
在之后的子步驟d244的過(guò)程中,根據(jù)傳統(tǒng)的反量化操作即與上述步驟c344中執(zhí)行的量化相反的操作來(lái)對(duì)被量化的殘留塊mbq1進(jìn)行反量化,以產(chǎn)生被解碼的反量化的塊mbdt1。
在之后的子步驟d245的過(guò)程中,對(duì)被反量化的塊mbdt1進(jìn)行逆變換即與上述步驟c343中執(zhí)行的直接變換相反的操作。于是得到被解碼的殘留塊mbdr1。
在之后的子步驟d246的過(guò)程中,通過(guò)將被解碼的殘留塊mbdr1加到預(yù)測(cè)塊mbp1來(lái)構(gòu)造被解碼的塊mbd1。被解碼的塊mbd1由此被呈現(xiàn)為可用,以被解碼單元ud1或構(gòu)成預(yù)訂數(shù)量n的解碼單元的一部分的任意其他解碼單元使用。
在完成上述解碼步驟d246時(shí),例如如圖6b所示的熵解碼模塊mde1包含在第一塊的解碼的同時(shí)被逐漸重復(fù)更新的所有概率。這些概率對(duì)應(yīng)于可能的語(yǔ)法的各個(gè)元素并且對(duì)應(yīng)于各個(gè)關(guān)聯(lián)的解碼上下文。
在上述解碼步驟d24之后,在步驟d25的過(guò)程中執(zhí)行測(cè)試來(lái)確定當(dāng)前塊是否是同一行的第j塊,其中j是解碼器do已知的預(yù)定值,其至少等于1。
如果是這種情況,在步驟d26的過(guò)程中,針對(duì)第j塊計(jì)算的概率集合被存儲(chǔ)在例如如圖6a所示以及圖4a或4b中的解碼器do中的緩沖存儲(chǔ)器mt,所述存儲(chǔ)器的大小被適配為存儲(chǔ)所計(jì)算的概率數(shù)量。
在步驟d27的過(guò)程中,單元udk測(cè)試剛才被解碼的當(dāng)前塊是否是最后的子流中的最后一塊。
如果是這種情況,在步驟d28的過(guò)程中,解碼方法結(jié)束。
如果不是該情況,在步驟d29的過(guò)程中根據(jù)圖4a或4b中的箭頭ps所示的遍歷順序來(lái)選擇要解碼的下一塊mbi。
如果在上述步驟d25的過(guò)程中,當(dāng)前塊不是所考慮的行sedk的第j塊,則執(zhí)行以上步驟d27。
在上述步驟d29之后的步驟d30的過(guò)程中,確定對(duì)于當(dāng)前塊mbi的解碼來(lái)說(shuō)必要的之前被解碼的塊的可用性??紤]到這需要通過(guò)不同解碼單元udk來(lái)對(duì)塊進(jìn)行并行解碼的事實(shí),可能出現(xiàn)這些塊沒(méi)有被指定對(duì)這些塊進(jìn)行解碼的解碼單元來(lái)解碼,且因此它們還不可用。所述確定步驟包括驗(yàn)證位于前一行sek-1中的預(yù)訂數(shù)量n’的塊例如分別位于當(dāng)前塊的上方和右上方的兩個(gè)塊是否可用于當(dāng)前塊的解碼,即,它們是否已經(jīng)被指定對(duì)其進(jìn)行解碼的解碼單元udk-1解碼。所述確定步驟還包括確定位于要編碼的當(dāng)前塊mbi的左側(cè)的至少一塊的可用性。但是,考慮到圖4a或4b所示的實(shí)施例中選擇的遍歷順序ps,所考慮的行sek中的塊被依次解碼。結(jié)果,左側(cè)被解碼的塊總是可用的(除了一行中的第一塊)。在圖4a或4b所示的例子中,這需要直接位于當(dāng)前塊的左側(cè)的塊被解碼。為此,只有分別位于當(dāng)前塊的上方和右上方的兩個(gè)塊的可用性被測(cè)試。
由于該測(cè)試步驟容易降低解碼方法的速度,通過(guò)根據(jù)本發(fā)明的替代方式,圖6a所示的時(shí)鐘clk被適配為同步塊解碼的進(jìn)展以確保分別位于當(dāng)前塊的上方和右上方的兩個(gè)塊的可用性,而不需要驗(yàn)證這兩塊的可用性。于是,如圖4a或4b所示,解碼單元udk總是以被用于當(dāng)前塊的解碼的前一行sek-1中的預(yù)訂數(shù)量n’(這里n’=2)的被解碼的塊的偏移來(lái)開(kāi)始第一塊的解碼。從軟件的角度來(lái)看,這樣的時(shí)鐘的實(shí)現(xiàn)使其可能顯著加速解碼器do中對(duì)每個(gè)子集sek中的塊進(jìn)行處理的時(shí)間。
在步驟d31的過(guò)程中,執(zhí)行測(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解碼器的概率。為使其處理第二、第三和第四行se2、se3和se4中的各個(gè)第一塊,如細(xì)線所示的箭頭在圖4a中示出該讀取步驟。
根據(jù)圖4b所示的上述步驟d32的第二變體,第j塊是前一行sek-1的第二塊(j=2)。該讀取包括用在緩沖存儲(chǔ)器mt中存在的概率來(lái)替換cabac解碼器的概率。為使其處理第二、第三和第四行se2、se3和se4中的各個(gè)第一塊,如細(xì)虛線所示的箭頭在圖4b中示出該讀取步驟。
在步驟d32之后,通過(guò)重復(fù)上述步驟d24到d28來(lái)對(duì)當(dāng)前塊進(jìn)行解碼。
如果在上述步驟d31之后,當(dāng)前塊不是所考慮的行sek的第一塊,有利地不用讀取在位于同一行sek中的之前被解碼的塊即在所示例子中直接位于當(dāng)前塊的左側(cè)的被解碼的塊中出現(xiàn)的概率。確實(shí),考慮到如圖4a或4b所示的用于讀取位于同一行中的塊的遍歷順序ps,在開(kāi)始當(dāng)前塊的解碼時(shí)在cabac解碼器中存在的符號(hào)出現(xiàn)的概率正好是在該同一行中的前一塊的解碼后存在的那些概率。
結(jié)果,在步驟d33的過(guò)程中,針對(duì)所述當(dāng)前塊的熵解碼來(lái)學(xué)習(xí)符號(hào)出現(xiàn)的概率,所述概率僅對(duì)應(yīng)于如圖4a或4b中的雙實(shí)線箭頭所示的針對(duì)同一行中的所述前一塊來(lái)計(jì)算的那些概率。
在步驟d33之后,重復(fù)上述步驟d24到d28來(lái)對(duì)當(dāng)前塊進(jìn)行解碼。
在步驟d34的過(guò)程之后執(zhí)行測(cè)試以確定當(dāng)前塊是否是所考慮的行sek中的最后一塊。
如果不是該情況,在步驟d34之后,再次實(shí)現(xiàn)對(duì)要解碼的下一塊mbi進(jìn)行選擇的步驟d29。
如果當(dāng)前塊是所考慮的行sek的最后一塊,在步驟d35的過(guò)程中,解碼裝置udk執(zhí)行與上述步驟d23相同的步驟,即再次初始化表示預(yù)定符號(hào)集中包含的符號(hào)的出現(xiàn)的概率的間隔。該重新初始化在圖4a和4b中用每行sek開(kāi)始的黑點(diǎn)來(lái)表示。
于是,解碼器do在每行開(kāi)始時(shí)處于初始化狀態(tài),由此從選擇解碼的并行級(jí)別以及優(yōu)化解碼的處理時(shí)間的角度來(lái)看允許更大的靈活性。
在圖7a所示的示例性編碼/解碼圖中,編碼器co包括單個(gè)編碼單元uc,如圖3a所示,而解碼器do包括六個(gè)解碼單元。
解碼單元對(duì)行se1、se2、se3、se4、se5和se6順序進(jìn)行編碼。在所示例子中,行se1到se4被完全編碼,行se5正在被編碼的過(guò)程中且行se6還沒(méi)有被編碼??紤]到編碼的順序性,編碼單元uc被適配為給出流f,該流包含依次排序的子流f1、f2、f3、f4,以對(duì)行se1、se2、se3和se4進(jìn)行編碼。為此,子流f1、f2、f3和f4用與分別表示被編碼的行se1、se2、se3、se4的相同的陰影來(lái)表示。通過(guò)在所述被編碼的行的編碼結(jié)束時(shí)的清空步驟以及在開(kāi)始對(duì)要編碼/解碼的下一行的編碼或解碼時(shí)重新初始化概率的間隔,當(dāng)解碼器do每次讀取子流來(lái)解碼時(shí),解碼器處于初始化狀態(tài),并且可以以?xún)?yōu)化的方式用例如可被安裝在四個(gè)不同平臺(tái)上的解碼單元ud1、ud2、ud3和ud4對(duì)四個(gè)子流f1、f2、f3和f4進(jìn)行并行解碼。
在圖7b所示的示例性編碼/解碼圖中,編碼器co包括如圖3c所示的兩個(gè)編碼單元uc1和uc2,而解碼器do包括六個(gè)解碼單元。
編碼單元uc1對(duì)奇數(shù)排名的行se1、se3和se5進(jìn)行順序編碼,而編碼單元uc2對(duì)偶數(shù)排名的行se2、se4和se6進(jìn)行順序編碼。為此,行se1、se3和se5表現(xiàn)為白色背景,而行se2、se4和se6表現(xiàn)為帶點(diǎn)的背景。在所示例子中,行se1到se4被完全編碼,行se5正在被編碼的過(guò)程中而行se6還沒(méi)有被編碼??紤]到所執(zhí)行的編碼的級(jí)別為2的并行類(lèi)型的事實(shí),編碼單元uc1被適配為給出子流f2n,該子流可被分解為在對(duì)行se2和se4分別解碼之后得到的兩個(gè)部分f2和f4。解碼器co因此被適配為向解碼器do發(fā)送流f,該流包含兩個(gè)子流f2n+1和f2n的并置,以及因此與圖7a所示不同的子流排序f1、f3、f2、f4。為此,子流f1、f2、f3和f4用與分別表示被編碼的行se1、se2、se3、se4的相同的陰影來(lái)表示,子流f1和f3表現(xiàn)為白色背景(奇數(shù)排序的行的編碼),且子流f2和f4表現(xiàn)為帶點(diǎn)的背景(偶數(shù)排序的行的編碼)。
關(guān)于結(jié)合圖7a所述的優(yōu)勢(shì),該編碼/解碼圖還展示了能夠清空解碼器的優(yōu)勢(shì),該解碼器的解碼并行級(jí)別完全獨(dú)立于編碼的并行級(jí)別,由此使其可能進(jìn)一步優(yōu)化編碼器/解碼器的操作。