本申請總體涉及數(shù)據(jù)壓縮,且具體地涉及用于圖像和視頻編碼中的二進制化器選擇的方法和設(shè)備。
背景技術(shù):
在通信和計算機聯(lián)網(wǎng)中使用數(shù)據(jù)壓縮來高效地存儲、發(fā)送和復(fù)制信息。數(shù)據(jù)壓縮在圖像、音頻和視頻的編碼中得到了具體應(yīng)用。常見的圖像壓縮格式包括jpeg、tiff和png。新開發(fā)的視頻編碼標準是itu-th.265/hevc標準。其他視頻編碼格式包括由google公司開發(fā)的vp8和vp9格式。對所有這些標準和格式的演進正在積極開發(fā)中。
所有這些圖像和視頻編碼標準和格式基于預(yù)測編碼,預(yù)測編碼創(chuàng)建對要編碼的數(shù)據(jù)的預(yù)測,然后對預(yù)測中的誤差(通常稱為殘差)進行編碼以作為比特流發(fā)送給解碼器。然后,解碼器進行相同的預(yù)測,并通過從比特流中解碼出的重構(gòu)誤差來對其進行調(diào)整。編碼器處對誤差的無損數(shù)據(jù)壓縮經(jīng)常包括誤差的頻譜變換以創(chuàng)建變換域系數(shù)的塊。這通常伴隨著有損量化。在解碼器處執(zhí)行相反操作以重構(gòu)誤差/殘差。在許多編碼方案,通常使用二進制算術(shù)編碼(bac)對該數(shù)據(jù)加上用于做出預(yù)測的邊信息(例如,幀內(nèi)編碼模式或幀間編碼運動矢量)進行編碼。這意味著可能需要對數(shù)據(jù)(這里稱為“符號”)的非二進制部分進行二進制化,以創(chuàng)建用于bac引擎進行編碼的二進制數(shù)據(jù)流。在一些編碼器/解碼器中,可以使用多級算術(shù)編碼器而不是二進制算術(shù)編碼器,在這種情況下,二進制化器被嵌入在多級算術(shù)編碼器內(nèi)。
在現(xiàn)有的編碼方案中,二進制化器由標準規(guī)定。例如,在h.265/hevc中,二進制化方案(cabac)與上下文建模非常緊密地結(jié)合在一起。在vp8/vp9中,使用預(yù)定義的編碼樹來執(zhí)行對“令牌”(對已量化系數(shù)的幅度進行信號通知的符號)的二進制化。
附圖說明
作為示例,參考示出了本發(fā)明的示例實施例的附圖,在附圖中:
圖1a以簡化框圖的形式示出了使用二進制化器和二進制算術(shù)編碼器對視頻進行編碼的編碼器;
圖1b以簡化框圖的形式示出了具有二進制化器選擇器和二進制算術(shù)編碼器的示例編碼器;
圖2a以簡化框圖的形式示出了使用逆二進制化器和二進制算術(shù)解碼器對視頻進行解碼的解碼器;
圖2b以簡化框圖的形式示出了具有二進制化器選擇器和二進制算術(shù)解碼器的示例解碼器;
圖3a以簡化框圖的形式示出了使用二進制化器和多級算術(shù)編碼器對視頻進行編碼的編碼器;
圖3b以簡化框圖的形式示出了具有二進制化器選擇器和多級算術(shù)編碼器的示例編碼器;
圖4a以簡化框圖的形式示出了使用逆二進制化器和多級算術(shù)解碼器對視頻進行解碼的解碼器;
圖4b以簡化框圖的形式示出了具有二進制化器選擇器和多級算術(shù)解碼器的示例解碼器;
圖5以圖表方式示出了用于vp8和vp9中的令牌的示例編碼樹;
圖6以圖表方式示出了用于令牌的已修改編碼樹的示例;
圖7以流程圖形式示出了使用二進制化器選擇對圖像進行編碼的示例過程;
圖8以流程圖形式示出了使用二進制化器選擇對比特流進行解碼以重構(gòu)圖像的示例過程;
圖9示出了編碼器的示例實施例的簡化框圖;以及
圖10示出了解碼器的示例實施例的簡化框圖。
在不同的附圖中已使用類似的附圖標記來表示類似的組件。
具體實施方式
本申請描述了用于對圖像和/或視頻進行編碼和解碼的方法和編碼器/解碼器。
在第一方案中,本申請描述了一種在視頻或圖像解碼器中從比特流中解碼出圖像的方法,所述比特流具有針對塊組的首部信息,所述解碼器具有用于將比特流轉(zhuǎn)換為二進制碼(bin)序列的算術(shù)解碼器,所述解碼器具有將二進制碼轉(zhuǎn)換為符號的缺省二進制化器。該方法包括:從比特流中獲得首部信息;根據(jù)所述首部信息確定關(guān)于針對所述塊組的二進制碼序列要使用已修改二進制化器而不是所述缺省二進制化器;以及使用所述已修改二進制化器對所述二進制碼序列進行逆二進制化,以從所述二進制碼序列中重構(gòu)符號序列。
在另一方案中,本申請描述一種在圖像或視頻編碼器內(nèi)對圖像進行編碼以生成編碼數(shù)據(jù)的比特流的方法,所述圖像具有塊組,所述編碼器具有將二進制碼轉(zhuǎn)換為編碼數(shù)據(jù)的比特流的算術(shù)編碼器,所述編碼器具有將符號變換為二進制碼的缺省二進制化器。該方法包括:針對所述塊組,確定要使用已修改二進制化器而不是所述缺省二進制化器來對所述塊組內(nèi)的符號序列進行二進制化;使用所述已修改二進制化器來對所述符號序列進行二進制化以生成二進制碼序列;使用所述算術(shù)編碼器對所述二進制碼序列進行算術(shù)編碼以生成編碼數(shù)據(jù)的比特流;以及在所述比特流中插入對要關(guān)于所述二進制碼序列使用所述已修改二進制化器而不是所述缺省二進制化器進行指示的首部信息。
在又一方案中,本申請描述了配置為實現(xiàn)這種編碼和解碼的方法的編碼器和解碼器。
在又一方案中,本申請描述了存儲計算機可執(zhí)行程序指令的非瞬時計算機可讀介質(zhì),所述計算機可執(zhí)行程序指令在被執(zhí)行時將處理器配置為執(zhí)行所描述的編碼和/或解碼的方法。
本領(lǐng)域普通技術(shù)人員將通過結(jié)合附圖閱讀以下示例的描述,來理解本申請的其他方面和特征。
將會理解,本申請的一些方案不限于圖像或視頻編碼,并且在一些實施例中可以應(yīng)用于一般的數(shù)據(jù)壓縮。
在下面的描述中,參考用于視頻編碼的h.264/avc標準、h.265/hevc標準、vp8格式、vp9格式等描述一些示例實施例。本領(lǐng)域的普通技術(shù)人員將理解,本申請不限于那些視頻編碼標準和格式,而是可以應(yīng)用于其它視頻編碼/解碼標準和格式,包括可能的未來標準、多視點編碼標準、可分級視頻編碼標準、3d視頻編碼標準和可重配置視頻編碼標準。類似地,就參考具體圖像編碼標準和格式而言,將理解,所描述的過程和設(shè)備可結(jié)合其他標準(包括未來的標準)來實現(xiàn)。
在隨后的描述中,當(dāng)提到視頻或圖像時,術(shù)語幀、圖片、切片(slice)、分片(tile)、量化組和矩形切片組可以在某種程度上互換使用。本領(lǐng)域技術(shù)人員將理解,圖片或幀可以包含一個或多個切片或片段。在一些情形中,一系列幀/圖片可稱為“序列”。其他術(shù)語可在其他視頻或圖像編碼標準中使用。還將認識到,取決于可應(yīng)用的圖像或視頻編碼標準的具體要求或術(shù)語,某些編碼/解碼操作可以逐幀執(zhí)行,而一些操作逐切片執(zhí)行,一些操作逐圖片執(zhí)行,一些操作逐分片執(zhí)行,還有一些操作逐矩形切片組執(zhí)行等。在任何特定實施例中,適用的圖像或視頻編碼標準可以確定是否關(guān)于幀和/或切片和/或圖片和/或分片和/或矩形切片組等來執(zhí)行以下描述的操作,視情況而定。相應(yīng)地,根據(jù)本公開,本領(lǐng)域普通技術(shù)人員將理解,本文描述的特定操作或過程以及對幀、切片、圖片、分片、矩形切片組的特定引用對于給定實施例是否適用于幀、切片、圖片、分片、矩形切片組、或者其中的一些或全部。其還適用于編碼樹單元、編碼單元、預(yù)測單元、變換單元、量化組等,這些將通過以下描述而變得清楚。
在下面的描述中,描述了涉及來自vp8和vp9的示例二進制化器(特別是用于令牌的編碼樹)的示例實施例。將會理解,vp8和vp9中的令牌是“符號”的一個示例,并且本申請不限于“令牌”。還將理解,盡管本申請的示例實現(xiàn)可以涉及vp8、vp9或該格式的演進,但是其不限于這樣的編碼方案。還將會理解,本申請可以應(yīng)用于除了編碼樹之外且除了本文所描述的特定編碼樹之外的二進制化器。
在本申請中,術(shù)語“和/或”旨在覆蓋列出元素的所有可能組合和子組合,包括列出元素的單獨的任意一個、任意子組合或所有元素,而不是必須排除附加元素。
在本申請中,短語“...或...中的至少一個”旨在覆蓋列出元素的任意一個或多個,包括列出元素的單獨的任意一個、任意子組合或所有元素,而不是必須排除任何附加元素,且不是必須要求所有元素。
現(xiàn)在參考圖1a,圖1a以簡化框圖的形式示出了用于對視頻進行編碼的編碼器10。該示例編碼器涉及上下文建模之前的二進制化。換言之,針對被二進制化的二進制碼而不是針對輸入數(shù)據(jù)序列的預(yù)二進制化符號來確定上下文。
編碼器10包括二進制化器12,二進制化器12將輸入數(shù)據(jù)符號序列(其可包括已經(jīng)通過其它編碼處理(包括頻譜變換、量化、預(yù)測操作等)生成的數(shù)據(jù))轉(zhuǎn)換成二進制碼序列b1,b2,…bj-1,bj…。
編碼器10還包括上下文生成器14。為了編碼二進制碼bj,上下文生成器14根據(jù)編碼歷史(例如,bj-1bj-2…和可用的邊信息,如,bj在變換塊的位置)確定上下文cj。概率生成器16然后根據(jù)cj和編碼歷史bj-1bj-2…確定pj,例如,出現(xiàn)在相同上下文下cj下的已編碼二進制符號。
給定針對bj的上下文cj,二進制算術(shù)編碼(bac)編碼器18基于所確定的概率pj對bj進行編碼。bac編碼器18輸出算術(shù)編碼數(shù)據(jù)的比特流。換言之,bac編碼器18依賴特定于所確定的針對正被編碼的二進制碼的上下文的概率。在一些實施例中,例如h.265/hevc,二進制化與上下文模型密切相關(guān)。例如,h.265/hevc規(guī)定將量化的變換系數(shù)二進制化為符號比特、重要性系數(shù)標記、大于1標記等。這些二進制語法元素中的每一個可具有其自己的定義上下文模型,用于確定上下文,且因此用于確定與由bac用于編碼的語法元素相關(guān)聯(lián)的概率(在h.265/hevc的情況下,其是上下文自適應(yīng)的)。
圖2a以簡化框圖的形式示出了對應(yīng)于圖1a的示例編碼器10的示例解碼器50。示例解碼器50包括bac解碼器52。bac解碼器52接收用于解碼比特流的概率pj。概率pj由概率生成器56提供,并且特定于由上下文生成器54指定的上下文cj。將會理解,上下文建模、上下文的確定以及概率確定與在對應(yīng)的編碼器10中執(zhí)行的相同,以使得解碼器50能夠精確地解碼比特流。逆二進制化器58基于由bac解碼器52輸出的已解碼的二進制碼序列來重構(gòu)符號序列。
本申請還可以適用于多級算術(shù)編碼(mac)的情況。這種類型的編碼處理由來自字母表的符號形成的序列,該字母表的基數(shù)(cardinality)大于2。在mac中,使用二叉搜索樹來表示a,其中,a中的每個符號對應(yīng)于二叉搜索樹中獨一的葉子。由此,為了編碼和解碼a中的符號a,對由從根到與a相對應(yīng)的葉子的分支組成的路徑進行編碼和解碼。要注意,可以采用約定來標記左分支“0”和右分支“1”,或采用任何其他約定來用{0,1}中的元素標記分支。觀察到字母表a的二叉搜索樹表示是mac的一部分。因此,可將mac與針對原始序列所設(shè)計的上下文模型一起使用。
現(xiàn)在參考圖3a,圖3a以簡化框圖的形式示出了用于對視頻進行編碼的編碼器30。編碼器30包括用于根據(jù)上下文模型確定上下文的上下文生成器32和用于確定與給定上下文相關(guān)聯(lián)的概率的概率生成器34。該示例編碼器30涉及上下文建模之后的二進制化。換言之,針對輸入數(shù)據(jù)序列的預(yù)二進制化符號確定上下文,且然后在mac編碼器36內(nèi)對該序列進行二進制化,mac編碼器36包括二進制化器38作為其一部分。在一些實施例中,二進制化器38可以采用二叉搜索樹的形式,該二叉搜索樹用于在給定針對符號確定的上下文的情況下將該符號轉(zhuǎn)換為二進制串。
在圖4a中示出了解碼器70的對應(yīng)簡化框圖。解碼器70包括具有集成的逆二進制化器74的mac解碼器72,并且從上下文生成器76和概率生成器78接收用于對輸入的編碼數(shù)據(jù)比特流進行解碼的概率信息。
現(xiàn)在將參考圖5,圖5示出了示例系數(shù)編碼樹500。該示例中的樹500是用于編碼“令牌”的編碼樹,該“令牌”表示vp8和vp9中的已量化變換域系數(shù)。vp8和vp9中的令牌是指示已量化變換域系數(shù)的幅度的二進制串。如下對其進行定義:
上面的dct_cat1、...、dct_cat6各自對應(yīng)于有限的值集合。為了確定集合中的精確的值,要對附加比特進行編碼和解碼。例如,在對dct_cat1進行解碼之后,要對附加比特進行解碼以確定該值是5還是6。類似地,在對dct_cat2進行解碼之后,要對兩個附加比特進行解碼以確定{7,8,9,10}中的值。對于dct_cat3到dct_cat5,分別需要3、4和5個附加比特。對于dct_cat6,需要11個附加比特。此外,對于除dct_0和dct_eob之外的任何令牌,要編碼和解碼符號比特。
為了使用樹500來解碼令牌,解碼器從根節(jié)點(0)開始并且遵循到與令牌相對應(yīng)的葉子節(jié)點的路徑。每個內(nèi)部節(jié)點具有相關(guān)聯(lián)的二元概率分布,該相關(guān)聯(lián)的二元概率分布與是采用左路徑還是采用右路徑相關(guān)聯(lián)。假設(shè)存在11個內(nèi)部節(jié)點,這意味著存在11個二元分布。
基于平面類型、掃描位置和附近系數(shù)來針對令牌確定上下文。在vp8和vp9中有96個上下文,這意味著有1056個二元概率分布(11x96),因為每個上下文都有其自己的概率分布集合。這些概率分布可以存儲在數(shù)組中,該數(shù)組被定義為:
probcoeff_probs[4][8][3][num_dct_tokens-1];
coeff_probs通常對于幀/圖片或片段而言是固定的??梢杂删幋a器將其信號通知給解碼器。
圖5的示例編碼樹500可以表達如下:
編碼器和解碼器中的二進制算術(shù)編碼引擎將內(nèi)部概率分布用于對令牌(即,二進制化串)的比特進行算術(shù)編碼。將會理解,二進制化器的結(jié)構(gòu)被樹500所固定,并且如果需要的話,隨著時間僅調(diào)整針對給定上下文的內(nèi)部概率。
對熵編碼方法的壓縮性能的理論極限的分析揭示了:在bac的實際實現(xiàn)中,非歸一化壓縮率(其被定義為以比特為單位的壓縮數(shù)據(jù)序列的長度)關(guān)于二進制序列長度n線性增長。要注意,(歸一化)壓縮率被定義為非歸一化壓縮率與輸入序列長度的比率,即針對每輸入符號的平均比特數(shù)。相應(yīng)地,提高壓縮效率的可能方法之一是改善二進制化的質(zhì)量或功效,以減小二進制序列長度n。如上所述,在現(xiàn)有的編碼標準(如h.265/hevc和vp8/vp9中的上下文自適應(yīng)bac(cabac))中,二進制化器被合并(bake)到上下文建模中。具體地,針對給定的上下文,二進制化器是固定的。二進制化基于規(guī)定如何將非二進制數(shù)據(jù)(例如,已量化系數(shù))劃分為二進制串的固定的樹或固定的語法定義。所發(fā)生的任何二進制化與上下文和變換系數(shù)數(shù)據(jù)本身密切相關(guān),而不與任何可用概率信息密切相關(guān)。
本申請?zhí)嶙h向解碼器發(fā)信號通知要使用已修改二進制化器而不是缺省二進制化器。編碼器可以在以下情況下確定使用已修改二進制化器:其預(yù)期與使用缺省二進制化器的情況相比,已修改二進制化器將導(dǎo)致更短的二進制序列。二進制化器中的這種改變不是必然是上下文的確定函數(shù),這意味著在相同的上下文中(在不同的塊或圖片中),編碼器/解碼器可以根據(jù)編碼器做出的選擇使用不同的二進制化器。
在一些示例實施例中,二進制化器是預(yù)先設(shè)計的,并且編碼器從兩個或更多個預(yù)定義二進制化器之間選擇已修改二進制化器,該兩個或更多個預(yù)定義二進制化器之一是缺省二進制化器。在一些其他示例實施例中,已修改二進制化器可以在編碼器上即時地構(gòu)建。解碼器可以在比特流中接收新構(gòu)建的二進制化器的細節(jié),或者可以使用與編碼器相同的處理來自己構(gòu)建已修改二進制化器。在一些情況下,作為構(gòu)建已修改二進制化器的機制,編碼器信號通知對缺省二進制化器的改變。
二進制化器中的改變可以基于塊、塊系列、切片、圖片或圖像/視頻數(shù)據(jù)的任何其它分組(grouping)來做出,并且可以在與分組相關(guān)聯(lián)的首部中作為首部信息來信號通知。
對使用已修改二進制化器的確定可以基于多個因素。例如,其可以基于數(shù)據(jù)序列的編碼歷史。在一些情況下,其可以基于與上下文相關(guān)聯(lián)的歷史概率或估計概率。在一些情況下,其可涉及確定或估計已量化變換域系數(shù)的編碼分布以及構(gòu)建更好地匹配所確定的編碼分布的新編碼樹。根據(jù)對示例實施例的以下描述,本領(lǐng)域普通技術(shù)人員將理解其它機制。
現(xiàn)在將參考圖1b和2b,其分別示出了使用自適應(yīng)二進制化器選擇的編碼器110和解碼器150的簡化框圖。
編碼器110包括上下文生成器114、概率生成器116和用于從二進制化序列中生成編碼比特流的bac編碼器118。在編碼器110中,二進制化器選擇器120構(gòu)建或選擇用于二進制化輸入數(shù)據(jù)序列的二進制化器112(例如,可能從預(yù)定義候選二進制化器的有限集合構(gòu)建或選擇)。關(guān)于選擇的信息(標記為選擇信息)可以與用于存儲或發(fā)送的編碼比特流(標記為比特流)組合(例如,復(fù)用)。在一些實施例中,選擇信息被編碼在首部信息字段內(nèi)。
二進制化器選擇器120的構(gòu)建/選擇可以基于數(shù)據(jù)序列的編碼歷史。其可以取決于具體代碼或序列的概率分布,無論是根據(jù)經(jīng)驗確定還是基于先前編碼的數(shù)據(jù)估計。在一些實施例中,上下文信息可以由二進制化器選擇器120接收。
解碼器150包括bac解碼器152、上下文生成器154和概率生成器156。bac解碼器對編碼數(shù)據(jù)的輸入(解復(fù)用)比特流進行解碼,以重構(gòu)二進制序列。逆二進制化器158對二進制序列進行逆二進制化,以重構(gòu)符號序列。逆二進制化器158由二進制化器選擇器160至少部分地基于選擇信息流中的信息來選擇/構(gòu)建。如上所述,在一些情況下,可以從編碼數(shù)據(jù)的比特流的首部字段中提取選擇信息。在一些實施例中,該信息可以包括標識多個預(yù)定義二進制化器中的一個預(yù)定義二進制化器的信息、指定逆二進制化器158的結(jié)構(gòu)的信息、指定解碼器150根據(jù)其來構(gòu)建對應(yīng)的逆二進制化器158的概率分布的信息、或使解碼器150能夠選擇或構(gòu)建逆二進制化器158的其他這樣的信息。
現(xiàn)在還參考圖3b和4b,其分別示出了使用自適應(yīng)二進制化器選擇的編碼器130和解碼器170的附加示例的簡化框圖。這些示例還包括二進制化器選擇器以及將關(guān)于二進制化器的選擇/構(gòu)建的信息從編碼器130傳遞給解碼器170。
在下面的示例實施例中,圖5中所示的缺省編碼樹是示例缺省二進制化器。各個實施例詳細說明可如何選擇或構(gòu)建已修改二進制化器,以及解碼器如何確定使用或構(gòu)造哪個二進制化器。
vp8和vp9中缺省編碼樹的結(jié)構(gòu)基于令牌(即,符號)的預(yù)期分布。針對給定塊組的令牌的實際分布可能偏離所假定的分布。要注意,令牌的分布(有時被稱為“令牌的邊緣分布”)不同于在coeff_probs數(shù)組中指定的內(nèi)部節(jié)點概率,其以二元分布的匯集的形式為bac所使用。令牌的邊緣分布可以由長度為12的向量指定,其中每個元素對應(yīng)于不同令牌的概率,且所有令牌概率之和等于1。對應(yīng)地,塊組(例如,切片/圖片/幀)中令牌的經(jīng)驗分布是如下邊緣分布:其可被定義為長度為12的向量,使得每個元素對應(yīng)于在該塊組中出現(xiàn)令牌的歸一化頻率。具體而言,設(shè)n表示圖片/幀中令牌的總數(shù),并且設(shè)fi表示令牌i,0≤i<12出現(xiàn)在圖片/幀中的次數(shù)。則向量中的第i個元素等于
為了方便起見,下面我們還可以使用非歸一化頻率向量
(f0,f1,…,f11)
其有時被稱為非歸一化經(jīng)驗分布。
設(shè)l*i表示用于對在vp8和vp9中定義的缺省系數(shù)編碼樹中的令牌i進行表示的二進制碼的數(shù)量:
因此,如果使用缺省系數(shù)樹,則要編碼和解碼的切片/圖片/幀中的二進制碼的總數(shù)是
設(shè)li表示通過使用所選擇的不同于缺省系數(shù)編碼樹的二進制化器來表示令牌i所使用的二進制碼的數(shù)量。整體而言,(l0,l1,…,l11)被稱為二進制化器的長度函數(shù)。很容易看到,只要
則所選擇的二進制化器減少了二進制碼的總數(shù),且節(jié)省通過
要注意,不是必須顯式地構(gòu)建霍夫曼編碼樹。事實上,二叉碼編碼樹滿足以下條件可能就足夠了:
對于任何i≠j,如果fi>fj,則,li≤lj
要注意,霍夫曼編碼樹滿足上述條件,并因此可以作為候選包括。還要注意,一旦信號通知了新的二進制化器,要使用新的二進制化器來解譯概率分布,即,coeff_probs。也就是說,coeff_prob[a][b][c][i]表示新的二進制化器中內(nèi)部節(jié)點i處的二元分布,其中,a、b、c是根據(jù)平面類型、coeff位置和附近系數(shù)導(dǎo)出的上下文。
從預(yù)定義的二進制化器選擇
在一個實施例中,編碼器和解碼器二者都具有在存儲器中定義的兩個或更多個預(yù)定義二進制化器,其中之一是缺省二進制化器。例如,在使用編碼樹的二進制化的情況下,可存在缺省編碼樹和一個或多個備選編碼樹。在一些示例中,可以基于符號(例如,令牌)的不同邊緣分布來開發(fā)備選編碼樹。
編碼器(具體地,二進制化器選擇器)可針對塊組(例如,切片、幀、圖片、圖片組等)確定是使用缺省二進制化器還是使用備選二進制化器中的一個。例如,編碼器可以確定或估計針對該塊組的令牌的分布。為了實際確定分布,編碼器可能需要使用二次(two-pass)編碼。備選地,編碼器可以估計分布,可能是基于來自一個或多個先前塊組的統(tǒng)計來估計分布。編碼器處的二進制化器選擇器確定使用哪個二進制化器來對塊進行編碼,且然后在與該塊組有關(guān)的首部信息中信號通知該選擇。
在一些情況下,向解碼器信號通知二進制化器可包括使用首部信息內(nèi)的標記或碼。在單個備選二進制化器的情況下,編碼器可使用二元標記來指示是否正在使用缺省二進制化器。在多個備選二進制化器的情況下,編碼器可包括用來對要使用哪個二進制化器解碼塊組進行指示的碼。
葉子節(jié)點的重新分布
在一個實施例中,缺省二進制化器的結(jié)構(gòu)保持不變,但編碼器可以信號通知令牌的重新分布,即,針對將哪些符號/令牌指派給哪些葉子節(jié)點的改變。例如,參考vp8和vp9編碼樹,編碼器可以確定指派給具體葉子節(jié)點的令牌應(yīng)該被重新布置以提高具體塊組的二進制化的效率。在這種情況下,可以通過在首部字段中指定令牌的順序來向解碼器信號通知該重新布置。內(nèi)部系數(shù)概率的分布(coeff_prob數(shù)組)保持不變。
例如,在圖5中,存儲dct_eob的葉子節(jié)點和存儲dct_1的葉子節(jié)點可能被交換,即,在交換后,具有到根節(jié)點的短路徑的前者存儲dct_1,且具有較長路徑的后者存儲dct_eob。使用現(xiàn)有樹的優(yōu)點之一是對熵編碼的簡單設(shè)計,其也與vp8和vp9中的現(xiàn)有設(shè)計后向兼容。觀察到在這些情況下,bac解碼邏輯不需要改變,因為:
1.其可以使用現(xiàn)有設(shè)計來確定是否到達葉子節(jié)點,以及
2.存儲在coeff_probs中的概率對應(yīng)于系數(shù)編碼樹中的相同內(nèi)部節(jié)點。
對樹的唯一改變是改變了存儲在葉子節(jié)點中的相應(yīng)令牌。由此,當(dāng)use_new_coeff_coding_tree_flag等于1時,我們可以通過使用數(shù)組t[num_dct_tokens]來指定新的二進制化,其中,t[i](i=0,...,num_dct_tokens-1)指定存儲在第(i+1)個(在圖5中從左數(shù)到右)葉子節(jié)點處的令牌。示例數(shù)組如下:
新的樹結(jié)構(gòu)
代替保持編碼樹的缺省形狀,編碼器可以確定更好地擬合實際或估計的邊緣令牌分布的新的樹結(jié)構(gòu)。然后,編碼器可以在塊組的首部信息中向解碼器信號通知該新結(jié)構(gòu)。作為示例,新的系數(shù)編碼樹可被解析為數(shù)組t[2*(num_dct_tokens-1)],其中應(yīng)用以下約定:
1.如果t[i]在{0,-1,-2,...,-num_dct_token中,則t[i]是葉子節(jié)點,且-t[i]是令牌,即0指示dct_eob,1指示dct_0等。
2.如果t[i]是偶數(shù)整數(shù),則t[i]是內(nèi)部節(jié)點,其左子節(jié)點在位置t[i]處,且其右子節(jié)點在位置t[i]+1處。注意,如果t[i]是偶數(shù),則通過約定,t[i]不小于i+1,即,子節(jié)點總是出現(xiàn)在它們的父節(jié)點之后。
3.t[0]是根節(jié)點的左子節(jié)點,t[1]是根節(jié)點的右子節(jié)點。
參考圖6,其示出了用于vp8和vp9令牌的備選編碼樹600的一個示例。下面是用于定義和信號通知圖6所示的備選編碼樹600的數(shù)組t的示例:
t的長度函數(shù)可以被驗證為是(2,2,3,3,4,4,5,5,6,6,6,6)。
上述數(shù)組t被構(gòu)建為便于解析和樹表示。為了進行編碼和發(fā)送,t可以被變換到另一個數(shù)組t′以便于熵編碼,其中從t到t′的變換是可逆的,即t可以從t′完全重構(gòu)。例如,如果t[i]是正的,則t[i]≥2且始終是偶數(shù)。因此,代替直接對t[i]進行編碼,編碼器可對t′[i]=(t[i]-2)>>1進行編碼。在解碼器側(cè),在解碼t′[i]之后,可以將t[i]重構(gòu)為t[i]=t′[i]*2+2。
該編碼器可通過首先確定或估計針對塊組的邊緣令牌分布(即,在對塊組編碼時每個令牌出現(xiàn)的歸一化頻率)確定新的樹結(jié)構(gòu)。根據(jù)該信息,編碼器可在然后確定更好地擬合邊緣分布的編碼樹(例如,霍夫曼編碼樹)。在一些實現(xiàn)中,編碼器可以通過使用由令牌的頻率計數(shù)組成的非歸一化經(jīng)驗分布而不是歸一化邊緣分布來確定編碼樹。
在一些實施例中,編碼器可以在確定擬合邊緣分布的編碼樹之前過濾邊緣令牌分布或等效地非歸一化經(jīng)驗分布。例如,小于閾值的頻率計數(shù)可被非歸一化經(jīng)驗分布中的缺省值(例如,0、1或已知正整數(shù))替換。不失一般性,假設(shè)非歸一化經(jīng)驗分布由(f0,f1,…,f11)給出,其中fi表示令牌i(0≤i≤11)的頻率計數(shù)。然后,對于每個i,如果fi<th(其中th表示閾值),則
將會理解,在僅實現(xiàn)樹的部分更新的情況下,在一些實施例中可以不信號通知整個樹。這可被用于平衡信號通知新的二進制化器的成本和二進制碼節(jié)省的益處。例如,可能希望基于5中的缺省樹來信號通知新的樹,其中
1.改變限于對應(yīng)于{dct_eob,dct_0,dct_1,dct_2,dct_3,dct_4}的子樹;以及
2.以內(nèi)部節(jié)點(12)為根節(jié)點的子樹保持不變。
更新概率
如上所述,vp8和vp9缺省樹的內(nèi)部節(jié)點處的二元概率分布存儲在coeff_probs數(shù)組中。如果使用新的樹,則解碼器可能需要將與現(xiàn)有缺省樹相關(guān)聯(lián)的概率分布(在coeff_probs中)映射到新的樹。
設(shè)t1和t2指示表示具有n個符號的相同字母表a={a0,…an-1}的兩個二叉樹。假定t1和t2都是滿的,并且因此它們正好具有n-1個內(nèi)部節(jié)點。設(shè)(p1,0,…p1,n-2)表示t1的n-1個內(nèi)部節(jié)點處的二元概率分布:例如,p1,0表示第一內(nèi)部節(jié)點(根)處的概率1(或等效地,采用右側(cè)分支),p1,1表示第二內(nèi)部節(jié)點處的概率1(或等效地,采用右側(cè)分支),等等。要注意,對內(nèi)部節(jié)點進行標記的順序無關(guān)緊要,換言之,任何已知的順序都將適用于本解決方案。類似地,設(shè)(p2,0,…p2,n-2)表示t2的n-1個內(nèi)部節(jié)點處的二元概率分布。假設(shè)(p1,0,…p1,n-2)和(p2,0,…p2,n-2)是從a上的同一邊緣分布學(xué)習(xí)得到的。因而挑戰(zhàn)是將(p1,0,…p1,n-2)映射到(p2,0,…p2,n-2),且反之亦然。
設(shè)(q0,…qn-1)表示a上的該公共邊緣分布,其中qi(0≤i<n),表示ai的概率。從而通過使用以下兩階段過程解決了該挑戰(zhàn):
1.在t1中,根據(jù)(p1,0,…p1,n-2)確定(q0,…qn-1)。
2.在t2中,根據(jù)(q0,…qn-1)確定(p2,0,…p2,n-2)。
上述第一級可通過使用樹遍歷的方法來實現(xiàn)(例如,深度優(yōu)先或廣度優(yōu)先),以從上到下地填入概率(自上而下)。下面是一個深度優(yōu)先迭代法的示意性示例,其中,不失去一般性,假定根節(jié)點被標記為“0”且對應(yīng)于p1,0:
作為另一示例,可將第一階段的廣度優(yōu)先方案描述為:
通過類似的方式,第二階段可以通過遍歷樹來實現(xiàn),以從下到上地填入概率(自下而上)。在以下偽代碼中使用后序深度優(yōu)先橫向法示出了示例方法:
因此,在一些實施例中,可以對更新概率的過程進行以下改變,以減少信令開銷。代替信號通知針對coeff_probs中的條目(例如,1056個)中的每個的更新標記,本解決方案可以如下推斷(未在比特流中存在的)標記。假設(shè)給出二進制化器(或等效地,系數(shù)編碼樹)。要注意,coeff_probs中的每個條目對應(yīng)于系數(shù)編碼樹中的內(nèi)部節(jié)點。如果與在coeff_probs中的條目相關(guān)聯(lián)的更新標記被信號通知為1,且該條目對應(yīng)于節(jié)點a,則關(guān)聯(lián)于與從根節(jié)點到節(jié)點a的路徑中的節(jié)點相對應(yīng)的條目的所有更新標記都被推斷為1,且不需要在比特流中信號通知。例如,如果與圖5中的節(jié)點(8)相關(guān)聯(lián)的更新標記被信號通知為1,則與節(jié)點(6)、(4)、(2)、(0)相關(guān)聯(lián)的更新標記被推斷為1,且不需要在比特流中信號通知。
在另一實施例中,更新標記可以與系數(shù)編碼樹中的級別相關(guān)聯(lián),其中,根節(jié)點處于級別0,其子節(jié)點處于級別1,等等。如果與級別l>=0相關(guān)聯(lián)的更新標記被信號通知為1,則與所有1<l的級別相關(guān)聯(lián)(即更接近根級別)的更新標記被推斷為1。
將會理解,上述樹遍歷方法是示例??梢允褂闷渌闅v方法(例如,迭代深化深度優(yōu)先搜索)(例如,以滿足如存儲器復(fù)雜度、調(diào)用堆棧限制等的應(yīng)用需求)。還將理解,在一些實施例中,可在上述針對概率的兩階段映射過程中填入概率時使用定點運算。要注意到,可以在中間步驟中使用不同的(更高的)精度或甚至浮點運算,以在最終結(jié)果中獲得更好的精度。
基于概率的解碼器構(gòu)造的二進制化器
在上述實施例中,編碼器確定/選擇二進制化器,然后將選擇信號通知給解碼器。在一個情況下,編碼器傳送其從多個預(yù)定義的二進制化器中的選擇。在另一情況下,編碼器指定二進制化器。例如,其可以發(fā)送對用于構(gòu)建已修改二進制化器的令牌的結(jié)構(gòu)和指派進行指定的數(shù)據(jù)。在另一示例中,其可以信號通知對解碼器可用來創(chuàng)建已修改二進制化器的令牌的缺省結(jié)構(gòu)或指派的改變。
在又一實施例中,編碼器不指定新確定的編碼樹或其他二進制化器的結(jié)構(gòu)或令牌,而是代之以發(fā)送已更新概率信息和對解碼器應(yīng)基于該已更新概率信息來構(gòu)建新二進制化器的指示。
再次使用vp8和vp9編碼樹作為示例,編碼器可傳送內(nèi)部節(jié)點概率分布,例如coeff_probs數(shù)組,或?qū)υ摂?shù)組的改變。編碼器還信號通知解碼器是否應(yīng)構(gòu)造新的樹。編碼器可以基于coeff_probs概率分布與最初設(shè)計缺省編碼樹所針對的概率之間的差異程度來確定新的樹是否有正當(dāng)理由。在一個或多個內(nèi)部節(jié)點概率之間超出閾值偏差可信號通知應(yīng)該使用新的編碼樹。在另一實施例中,編碼器獲得令牌的邊緣分布,并根據(jù)那些概率值確定是否應(yīng)該構(gòu)建新的樹。編碼器可以使用上述樹遍歷技術(shù)之一來根據(jù)內(nèi)部節(jié)點概率獲得令牌的邊緣分布。在令牌的邊緣分布中超出閾值改變可以確定應(yīng)該構(gòu)建新的樹。例如,編碼器可以指示解碼器使用首部中的標記來構(gòu)造新的樹。
解碼器然后可以使用上述樹遍歷技術(shù)來根據(jù)已更新coeff_probs概率分布確定令牌的對應(yīng)邊緣分布。然后,可以使用令牌的邊緣分布來確定合適的編碼樹,該合適的編碼樹導(dǎo)致使用較少二進制碼來編碼數(shù)據(jù)。
在又一實施例中,編碼器不指示解碼器是否應(yīng)該創(chuàng)建新的二進制化器。相反,解碼器自己確定是否應(yīng)該構(gòu)建和使用新的樹。該確定可以基于在已更新coeff_probs數(shù)組中指定的概率分布是否已經(jīng)超出閾值改變。在另一實施例中,每當(dāng)更新coeff_probs數(shù)組時,解碼器計算令牌的邊緣分布,并且根據(jù)令牌的邊緣分布確定是否應(yīng)該構(gòu)建新的樹,例如基于令牌的邊緣分布是否偏離缺省樹(或者,如果使用了已修改編碼樹,則為當(dāng)前樹)所基于的概率超過閾值量。
上下文自適應(yīng)的二進制化器選擇
在一些上述實施例中,選擇單個二進制化器來對塊組(例如幀/圖片)的令牌進行編碼。在另一實施例中,可以在塊組(例如圖片/幀)內(nèi)使用多個可用的二進制化器,并且針對當(dāng)前的非二進制符號,根據(jù)上下文信息(例如,針對該符號導(dǎo)出的上下文)選擇該多個可用的二進制化器中的一個二進制化器。
使用vp8和vp9的元素作為示例來說明該解決方案,其中:
1.針對12個令牌定義了96個上下文。
2.在對令牌進行編碼之前,從已知信息中導(dǎo)出上下文:平面類型、coeff位置和附近系數(shù)。
3.在解碼令牌之前,從已知信息中導(dǎo)出上下文:平面類型、coeff位置和附近系數(shù)。
4.對于每個上下文,可以估計在圖片/幀中的令牌上的經(jīng)驗分布。
在對令牌進行編碼和解碼之前,上下文對于vp8和vp9中的編碼器和解碼器分別是已知的。
在本實施例中,上下文被用作從候選二進制化器的有限集合中選擇二進制化器的基礎(chǔ)。在一個示例中,在圖片/幀首部中,可在比特流中信號通知將96個上下文映射到二進制化器的表;以及當(dāng)這樣的表在比特流中不存在時,可以使用缺省表。設(shè)
一旦表m被解析,解碼器可在然后根據(jù)導(dǎo)出的上下文來針對要解碼的每個令牌選擇二進制化器。此外,我們注意到,現(xiàn)在應(yīng)該根據(jù)針對由(a,b,c)給出的上下文選擇的二進制化器tm[a][b][c]來解譯coeff_probs[a][b][c][]中的概率分布。
總而言之,示例解碼器可以使用以下過程來解碼令牌v:
d1.確定針對在vp#中定義的令牌的上下文(a,b,c)。
d2.將二進制化器t選擇為tm[a][b][c]°
d3.使用coeff_probs[a][b][c]和t來解碼v。
對應(yīng)地,示例編碼器可以使用以下處理來對令牌v進行編碼:
e1.確定針對在vp#中定義的令牌的上下文(a,b,c)。
e2.將二進制化器t選擇為tm[a][b][c]。
e3.使用t將v二進制化為二進制串t(v)=b0b1…bl(v),其中l(wèi)(v)是二進制碼的數(shù)目,并且t(v)是t中從根到對應(yīng)于v的葉子的路徑。
e4.使用coeff_probs[a][b][c]來編碼t(v)。
現(xiàn)在參考圖7,其示出了用于對圖像或視頻編碼器中的圖像進行編碼的示例編碼過程700的流程圖。使用包括算術(shù)編碼器的編碼架構(gòu)來實現(xiàn)過程700,該算術(shù)編碼器使用算術(shù)編碼(無論是二進制算術(shù)編碼還是多級算術(shù)編碼)將二進制碼轉(zhuǎn)換為編碼數(shù)據(jù)的比特流。過程700假定圖像已經(jīng)歷圖像或視頻編碼過程以創(chuàng)建符號序列。示例符號可以包括已量化變換域系數(shù)的幅度,或表示已量化變換域系數(shù)的“令牌”。
編碼架構(gòu)還包括缺省二進制化器。缺省二進制化器的一個示例是針對vp8/vp9中的令牌的缺省編碼樹。
過程700包括操作702,確定要使用已修改二進制化器而不是針對符號序列規(guī)定的缺省二進制化器。對使用已修改二進制化器的確定可以基于:例如,對符號在圖像中的歸一化出現(xiàn)頻率的評估(測量出或估計出),以及對這些頻率與缺省二進制化器所基于的這些符號的邊緣概率之間的差的評估。
在一些實施例中,操作702可以包括基于測量或估計出的符號的歸一化出現(xiàn)頻率來構(gòu)建已修改二進制化器。在一些實施例中,操作702可以包括從多個預(yù)構(gòu)建/預(yù)建立的二進制化器中選擇已修改二進制化器。
在操作704中,使用已修改二進制化器來對符號序列進行二進制化,以生成二進制碼序列。然后,在操作706中,使用算術(shù)編碼器對二進制碼序列進行算術(shù)編碼,以產(chǎn)生編碼數(shù)據(jù)的比特流。
為了確保解碼器可以正確地重構(gòu)圖像,過程700還包括將首部信息插入到比特流中的操作708。首部信息指示要使用已修改二進制化器對與符號序列相對應(yīng)的二進制碼序列進行逆二進制化。將會理解,首部信息可以放置在與一系列塊(例如,切片、幀、圖片、圖片組或塊的其他匯集)相對應(yīng)的首部中。首部信息指示:針對該一系列的塊中至少具體符號序列(例如,令牌),解碼器要使用已修改二進制化器而不是缺省二進制化器。
在最簡單的情況下,首部信息包括對要使用已修改二進制化器進行指示的標記。然后,解碼器可以使用邊信息(例如,概率信息)來選擇或構(gòu)建二進制化器。在一些其他情況下,首部信息指定符號到缺省結(jié)構(gòu)的葉子節(jié)點的分配。在又一些其他情況下,首部信息指定編碼樹的新結(jié)構(gòu)或修改結(jié)構(gòu)。在又一些情況下,可以在首部信息中指定二進制化器構(gòu)建的其它細節(jié)。
現(xiàn)在參考圖8,其示出了示例解碼過程800的流程圖。過程800由用于圖像或視頻的示例解碼器實現(xiàn),示例解碼器包括算術(shù)解碼器,且包括缺省二進制化器(用于將二進制碼逆二進制化為重構(gòu)符號)。示例過程800包括從比特流中提取首部信息,如操作802所示。
首部信息指示是使用已修改二進制化器還是使用缺省二進制化器。相應(yīng)地,在操作804中,解碼器根據(jù)首部信息確定要使用已修改二進制化器而不是缺省二進制化器。要注意,在一些情況下,這可以是首部信息中的顯式指令,例如對要使用已修改二進制化器進行指定的標記,或者對多個預(yù)定二進制化器選項中的具體已修改二進制化器進行指定的索引。在一些其他情況下,首部信息指定已修改二進制化器。例如,其可以指定對缺省二進制化器的改變,例如在編碼樹的葉子節(jié)點之間重新分配符號,或者其可以指定對編碼樹的結(jié)構(gòu)的改變。在又一些其他示例中,首部信息可以指定二進制化器的全部或部分結(jié)構(gòu),例如霍夫曼樹的結(jié)構(gòu)以及符號在其葉子節(jié)點之間的分配。在又一些其它實施例中的任一者中,首部信息可以提供數(shù)據(jù),如概率信息(例如,coeff_probs數(shù)組),解碼器可根據(jù)其來確定要使用已修改二進制化器而不是缺省二進制化器。
在操作806中,已修改二進制化器被用于對二進制碼序列(其已被從比特流中算術(shù)解碼出)進行逆二進制化,以重構(gòu)符號序列。
現(xiàn)在參考圖9,其中示出了編碼器900的示例性實施例的簡化框圖。編碼器900包括處理器902、存儲器904、和編碼應(yīng)用906。編碼應(yīng)用906可以包括存儲在存儲器904中并包含指令的計算機程序或應(yīng)用,所述指令在執(zhí)行時使處理器902執(zhí)行諸如本文描述的操作等的操作。例如,編碼應(yīng)用906可以編碼并輸出根據(jù)本文描述的過程所編碼的比特流??梢岳斫?,編碼應(yīng)用906可以存儲在非瞬時計算機可讀介質(zhì)上,如致密光盤、閃存設(shè)備、隨機存取存儲器、硬盤等等。當(dāng)執(zhí)行指令時,結(jié)果是將902處理器配置為使得可創(chuàng)建實現(xiàn)所描述的過程的專用處理器。在一些示例中,這樣的處理器可以被稱為“處理器線路”或“處理器電路”。
現(xiàn)在還參考圖10,其示出了解碼器1000的示例實施例的簡化框圖。解碼器1000包括處理器1002、存儲器1004、以及解碼應(yīng)用1006。解碼應(yīng)用1006可以包括存儲在存儲器1004中并包含指令的計算機程序或應(yīng)用,所述指令在執(zhí)行時使處理器1002執(zhí)行諸如本文描述的操作等的操作。可以理解,解碼應(yīng)用1006可以存儲在計算機可讀介質(zhì)上,如致密光盤、閃存設(shè)備、隨機存取存儲器、硬盤等等。當(dāng)執(zhí)行指令時,結(jié)果是將處理器1002配置為使得可創(chuàng)建實現(xiàn)所描述的過程的專用處理器。在一些示例中,這樣的處理器可以被稱為“處理器線路”或“處理器電路”。
可以認識到,根據(jù)本申請的解碼器和/或編碼器可以在多個計算設(shè)備中實現(xiàn),包括但不限于服務(wù)器、合適編程的通用計算機、音頻/視頻編碼和回放設(shè)備、電視機頂盒、電視廣播設(shè)備和移動發(fā)備。解碼器或編碼器可以通過軟件來實現(xiàn),該軟件包含用于將處理器配置為執(zhí)行本文所述功能的指令。軟件指令可以存儲在任何合適的非瞬時計算機可讀存儲器上,包括cd、ram、rom、閃存等。
將理解的是,可以使用標準計算機編程技術(shù)和語言來實現(xiàn)本文描述的解碼器和/或編碼器以及實現(xiàn)所描述的用于配置編碼器的方法/過程的模塊、例程、進程、線程或其他軟件組件。本申請不限于特定處理器、計算機語言、計算機編程慣例、數(shù)據(jù)結(jié)構(gòu)、其他這種實現(xiàn)細節(jié)。本領(lǐng)域技術(shù)人員將認識到,可以將所描述的處理實現(xiàn)為存儲在易失性或非易失性存儲器中的計算機可執(zhí)行代碼的一部分、專用集成芯片(asic)的一部分等。
可以對所述實施例進行某種調(diào)整和修改。因此,上文討論的實施例應(yīng)被認識是說明性而非限制性的。