基于幀內(nèi)預(yù)測模式對變換系數(shù)塊進行轉(zhuǎn)置的制作方法
【專利摘要】描述了用于視頻編碼的方法和設(shè)備。如果要在對殘余數(shù)據(jù)塊進行編碼時使用的幀內(nèi)預(yù)測模式在特定預(yù)定類(例如,水平類)中,則在編碼期間對殘余數(shù)據(jù)的量化變換塊的至少一部分進行轉(zhuǎn)置。同樣地,如果曾用于產(chǎn)生殘余數(shù)據(jù)的編碼塊的幀內(nèi)預(yù)測模式在這種類中,則在解碼期間對殘余數(shù)據(jù)的熵解碼塊的至少一部分進行轉(zhuǎn)置。
【專利說明】基于幀內(nèi)預(yù)測模式對變換系數(shù)塊進行轉(zhuǎn)置
[0001]版權(quán)通知
[0002]本文件的一部分公開內(nèi)容和隨附材料包含了要求版權(quán)的材料。當該專利文件或?qū)@_內(nèi)容的傳真復(fù)制出現(xiàn)在美國專利商標局的文件或記錄中時,版權(quán)所有者不反對任何人對該專利文件或?qū)@_內(nèi)容的傳真復(fù)制,但是保留其他所有無論什么情況下的版權(quán)權(quán)利。
【技術(shù)領(lǐng)域】
[0003]本公開總體上涉及數(shù)據(jù)壓縮,更具體地涉及對用于視頻編碼和解碼的方法和設(shè)備的改進。
【背景技術(shù)】
[0004]在多種背景下出現(xiàn)數(shù)據(jù)壓縮。其在通信和計算機聯(lián)網(wǎng)中經(jīng)常用于高效地存儲、發(fā)送、和再現(xiàn)信息。其在圖像、音頻和視頻的編碼中具有特別的應(yīng)用。由于每個視頻幀所要求的大量數(shù)據(jù)以及編碼和解碼經(jīng)常需要發(fā)生的速度,視頻向數(shù)據(jù)壓縮提出了重大的挑戰(zhàn)。
[0005]音頻和視頻譯碼標準(AVS)工作組規(guī)定了在中國使用的音頻譯碼、視頻譯碼、和傳輸協(xié)議。為了本文件的目的,AVS指代由AVS工作組定義的第一版視頻譯碼規(guī)范,而AVS2指代由AVS工作組當前正在開發(fā)的第二版視頻譯碼規(guī)范。如本文所使用的,術(shù)語“譯碼(coding) ” 包含編碼(encoding)和解碼(decoding)。
[0006]包括AVS和AVS2在內(nèi)的很多視頻譯碼標準使用基于塊的譯碼過程。在這些過程中,將圖像或幀分為塊,通常是4x4或8x8 (然而在一些情況下可以使用非正方形的塊),且將塊變換為系數(shù),并進行量化和熵編碼。在很多情況下,被變換的數(shù)據(jù)不是實際的像素數(shù)據(jù),而是在預(yù)測操作之后的殘余數(shù)據(jù)。預(yù)測可以是幀內(nèi)預(yù)測(即在幀/圖像內(nèi)的塊到塊)或幀間預(yù)測(i,在幀之間(也被稱為運動預(yù)測))。
[0007]為了壓縮數(shù)據(jù),量化變換系數(shù)的譯碼被設(shè)計為利用變換特性的優(yōu)點來改進壓縮。在AVS的情況下,使用四部序列對系數(shù)進行譯碼:平(level)、跑(run)、符號(sign)、塊結(jié)束(EOB)標志。譯碼是從變換塊中按鋸齒(zig-zag)掃描順序的最后一個非零系數(shù)開始沿反鋸齒方向的(因此,要求EOB標志)。
[0008]使用一元二進制化將“平減一”(level-minus-one)和“跑”數(shù)據(jù)進行二進制化,然后使用基于上下文的熵譯碼對二進制值(bin)進行編碼。AVS針對變換系數(shù)數(shù)據(jù)具體地使用算術(shù)譯碼。
[0009]在AVS的現(xiàn)有譯碼方案中存在一些限制。例如,將現(xiàn)有AVS譯碼方案直接擴展到更大的塊大小可能不是有效率的。此外,在預(yù)測之后對殘余塊的譯碼不使用諸如幀內(nèi)預(yù)測信息之類的補充信息。
【專利附圖】
【附圖說明】
[0010]現(xiàn)在將通過示例來參考附圖,復(fù)占示出了本公開的樣本實施例,且在附圖中:
[0011]圖1a以框圖形式示出了用于對視頻編碼的已知編碼器;
[0012]圖1b以框圖形式示出了根據(jù)本公開的用于對視頻編碼的編碼器;
[0013]圖2a示出了將幀內(nèi)預(yù)測模式分為無交集的三個類的已知劃分;
[0014]圖2b示出了根據(jù)本公開將幀內(nèi)預(yù)測模式分為無交集的三個類的劃分;
[0015]圖3a示出了用于對殘余塊編碼的已知方法的流程圖;
[0016]圖3b示出了根據(jù)本公開并入了塊轉(zhuǎn)置的用于對殘余塊編碼的方法的流程圖;
[0017]圖3c示出了圖3b所示方法的一個實施例的邏輯流程的流程圖;
[0018]圖4a示出了對量化變換系數(shù)的樣本8x8塊應(yīng)用全塊轉(zhuǎn)置;
[0019]圖4b示出了對與圖4a —樣的量化變換系數(shù)的樣本8x8塊應(yīng)用部分塊轉(zhuǎn)置;
[0020]圖5a以框圖形式示出了用于對視頻解碼的已知解碼器;
[0021]圖5b以框圖形式示出了根據(jù)本公開的并入了塊轉(zhuǎn)置的用于對視頻解碼的解碼器;
[0022]圖6a示出了用于對殘余塊解碼的已知方法的流程圖;
[0023]圖6b示出了根據(jù)本公開的用于對殘余塊解碼的方法的流程圖;
[0024]圖6c示出了圖6b所示方法的一個實施例的邏輯流程的流程圖;
[0025]圖7示出了將系數(shù)組的變換系數(shù)分為無交集的三個變換系數(shù)區(qū)域的三種不同方式;
[0026]圖8a示出了在不使用塊轉(zhuǎn)置的情況下用于對殘余塊進行模式相關(guān)的平跑(level-run)編碼的已知方法的流程圖;
[0027]圖Sb示出了根據(jù)本公開的方法對圖8a所示的方法的一個步驟詳細說明的流程圖,此外該流程圖適于說明從圖7所示的那些劃分中對劃分的選擇;
[0028]圖Sc示出了對根據(jù)圖Sb所示方法所選擇的劃分的使用進行詳細說明的流程圖;
[0029]圖9a示出了在幀內(nèi)預(yù)測模式處于預(yù)定類中的情況下使用塊轉(zhuǎn)置對殘余塊進行模式相關(guān)編碼的方法的流程圖;
[0030]圖9b示出了對圖8a所示方法的一個步驟進行詳細說明的流程圖,其類似于圖Sb的流程圖,但是適應(yīng)對塊轉(zhuǎn)置的任何使用,此外適于說明從圖7所示的那些劃分中對劃分的選擇;
[0031]圖9c示出了對根據(jù)圖9b所示的方法所選擇的劃分的使用進行詳細說明的流程圖,其在水平類中的幀內(nèi)預(yù)測模式的具體情況下;
[0032]圖1Oa示出了被分為系數(shù)組的具有大小16x16的樣本塊,并示出了塊內(nèi)的系數(shù)組的鋸齒組掃描順序;
[0033]圖1Ob示出了與圖1Oa所示的樣本塊相對應(yīng)的系數(shù)組標志塊,并示出了按塊內(nèi)系數(shù)組的組掃描順序的最后一個非零系數(shù)組的位置;
[0034]圖1Oc更詳細地示出了與圖1Oa所示相同的樣本塊,其示出了(a) —個特定系數(shù)組內(nèi)的變換系數(shù)的掃描順序和(b)兩個其他系數(shù)組的最后一個非零系數(shù)(按掃描順序);
[0035]圖1la示出了與圖1Oa所示相同的樣本塊,以及將塊的系數(shù)組分為無交集的四個系數(shù)組區(qū)域的方式;
[0036]圖1lb示出了與圖1Oa所示相同的樣本塊,以及將塊的系數(shù)組分為無交集的三個系數(shù)組區(qū)域的方式;
[0037]圖12示出了對圖1lb所示的劃分的使用進行詳細說明的流程圖;
[0038]圖13示出了對按當前正被編碼的系數(shù)組的掃描順序的最后一個非零系數(shù)的(X,y)位置的經(jīng)修改表示進行編碼的方法的流程圖;
[0039]圖13a示出了圖13所示方法的一個步驟的一個實施例的流程圖,該實施例基于幀內(nèi)預(yù)測模式所屬的類來修改(X,y)位置;
[0040]圖13b示出了圖13所示方法的一個步驟的另一實施例的流程圖,該實施例基于當前系數(shù)組的至少一個相鄰系數(shù)組來修改(X,y)位置;
[0041]圖13c示出了圖13所示方法的一個步驟的又一實施例的流程圖,該實施例基于幀內(nèi)預(yù)測模式所屬的類以及基于當前系數(shù)組的至少一個相鄰系數(shù)組來修改(x,y)位置;
[0042]圖14示出了用于針對當前系數(shù)組的、對按該系數(shù)組的掃描順序的最后一個非零系數(shù)的真實(x,y)位置的編碼表示進行解碼并轉(zhuǎn)換該表示以獲得真實(x,y)位置的方法的流程圖;以及
[0043]圖15示出了根據(jù)本公開的并入了解碼器和編碼器的設(shè)備的示例實施例的簡化框圖;
[0044]以及其中不同附圖中使用的相似附圖標記用于表示相似的特征。
【具體實施方式】
[0045]本公開描述了用于對殘余視頻數(shù)據(jù)進行編碼和解碼的方法以及編碼器/解碼器。
[0046]在第一方面中,本公開描述了一種用于使用設(shè)備1500根據(jù)編碼視頻的比特流中的殘余數(shù)據(jù)的編碼塊來重構(gòu)殘余數(shù)據(jù)的當前塊的方法。所述方法包括:(a)確定在生成所述編碼塊時使用的模式是預(yù)定類中的幀內(nèi)預(yù)測模式;(b)對所述編碼塊進行熵解碼,以獲得熵解碼塊;以及(C)響應(yīng)于確定所述模式在所述預(yù)定類中,對至少一部分所述熵解碼塊進行轉(zhuǎn)置,以獲得轉(zhuǎn)置塊。
[0047]在另一方面中,本公開公開了一種用于使用視頻編碼器對視頻進行編碼的方法,所述視頻包括被分為塊的圖片。所述方法包括:(a)使用預(yù)定類中的幀內(nèi)譯碼模式根據(jù)當前塊的空間預(yù)測來生成所述當前塊的殘余數(shù)據(jù);(b)對所述殘余數(shù)據(jù)進行頻譜變換和量化,以獲得量化變換塊;(C)對至少一部分所述量化變換塊進行轉(zhuǎn)置,以獲得轉(zhuǎn)置塊;(d)對所述轉(zhuǎn)置塊的變換系數(shù)進行平跑編碼,以獲得平跑對;以及(e)使用上下文模型對所述平跑對進行二進制化和熵編碼。
[0048]在另一方面中,本公開描述了被配置為實現(xiàn)這種用于編碼和解碼的方法的編碼器和解碼器。
[0049]在又一方面中,本公開描述了存儲處理器可執(zhí)行程序指令的非瞬時處理器可讀介質(zhì),該處理器可執(zhí)行程序指令在執(zhí)行時將處理器配置為執(zhí)行所述用于編碼和解碼的方法。
[0050]本領(lǐng)域技術(shù)人員根據(jù)對樣本實施例的以下描述的評述,結(jié)合附圖,將理解本公開的其他方面和特征。
[0051]在隨后的描述中,參考用于視頻譯碼的AVS標準和/或開發(fā)中的AVS2標準來描述一些示例實施例。本領(lǐng)域普通技術(shù)人員將理解:本公開不限于AVS或AVS2,而是可以適用于其他視頻編碼/解碼標準,包括:將來可能的標準、3D和多視圖譯碼標準、可擴縮視頻譯碼標準、以及可重配置視頻譯碼標準。
[0052]在隨后的描述中,當提到視頻或圖像時,術(shù)語幀、圖片、切片(slice)、分片(tile)和矩形切片組可以在某種程度上互換使用。本領(lǐng)域技術(shù)人員將意識到:在AVS標準的情況下,幀可以包含一個或多個切片。在其他視頻譯碼標準中,可以使用其他術(shù)語。還將意識到:可以逐幀來執(zhí)行特定編碼/解碼操作,一些是逐切片執(zhí)行的,一些是逐圖片執(zhí)行的,一些是逐分片執(zhí)行的,且一些是逐矩形切片組執(zhí)行的,取決于適用的圖像或視頻譯碼標準的具體要求或術(shù)語。在任何具體實施例中,適用的圖像或視頻譯碼標準可以確定以下描述的操作是否是針對幀和/或切片和/或圖片和/或分片和/或矩形切片組,視具體情況而定。因此,本領(lǐng)域普通技術(shù)人員根據(jù)本公開將理解本文描述的具體操作或過程以及對幀、切片、圖片、分片、矩形切片組的具體引用適用于幀、切片、圖片、分片、還是矩形切片組,或者對于給定實施例適用于它們中的一些或全部。如根據(jù)以下描述而變得顯而易見的,這對于變換單位、譯碼單位、譯碼單位組等也成立。
[0053]在一些場景下,可以將幀分為兩個區(qū)域,例如一個用于屏幕內(nèi)容且另一個用于自然視頻。有時,這可以被稱為分屏。類似地,在多視圖編解碼中,可以將一個視圖用于屏幕內(nèi)容且將另一個視圖用于自然視頻。備選地,比特流可以包含至少兩個子流,一個子流采用變換跳過模式或無損模式,同時另一個將不采用變換跳過模式或無損模式。在這些示例情形的任一情形中,將理解:可以在對視圖/區(qū)域/流中使用變換跳過、具有平坦量化的變換跳過、或跳過變換和量化步驟的一個視圖/區(qū)域/流進行編碼/解碼時,應(yīng)用系數(shù)重新排序,而另一個區(qū)域/視圖/流可能未對其編碼/解碼應(yīng)用系數(shù)重新排序??梢栽谑褂没虿皇褂米儞Q跳過的情況下,采用本公開中描述的創(chuàng)新。此外,如本文所使用的術(shù)語“變換系數(shù)”和“變換塊”意在指代處于編碼/解碼中特定階段的其系數(shù)和塊,其中,如果頻譜變換尚未被跳過,其系數(shù)和塊將反映對頻譜變換的應(yīng)用。從而,該術(shù)語預(yù)期包含曾應(yīng)用頻譜變換的一個特殊情況,恒等(即,什么也不做)函數(shù),而不是標準頻譜變換的情況。這是因為本文描述的創(chuàng)新不依賴于對頻譜變換的應(yīng)用。
[0054]在可擴縮視頻譯碼的情況下,下文公開的任何實施例可以應(yīng)用于基礎(chǔ)層編碼/解碼、增強層編碼/解碼、或這二者。在3D或多視圖視頻譯碼的情況下,可以將任何前述實施例應(yīng)用于以下各項之一:視圖編碼/解碼、另一視圖編碼/解碼、或這二者/全部視圖。
[0055]首先參考圖1a和3a。圖1a以框圖形式示出了用于對視頻進行編碼的傳統(tǒng)編碼器10A0圖3a示出了用于對殘余數(shù)據(jù)的塊進行編碼的對應(yīng)傳統(tǒng)方法300A的流程圖,其省略了在本文所述創(chuàng)新中未涉及的某些前置編碼步驟。
[0056]編碼器100A接收視頻源101,并最終產(chǎn)生編碼比特流199。編碼器100A可以被配置為根據(jù)多個視頻壓縮標準來工作。例如,編碼器100A可以是符合AVS或AVS2的;后者是本公開中特別關(guān)注的標準,但是本文所述創(chuàng)新也可以應(yīng)用于其他標準。
[0057]視頻源101包括幀序列,每個幀對應(yīng)于不同的時間點。其一次處理一個幀或切片。盡管以更精細的粒度級別來執(zhí)行大量的對一個幀/切片的處理;將幀/切片分為更小的塊,且以循環(huán)方式逐塊執(zhí)行處理。塊可以是譯碼單位、宏塊、或子塊。
[0058]如本領(lǐng)域中眾所周知的,幀可以是具有類型1、P、或B。譯碼模式選擇器160確定正在被編碼的當前幀具有類型1、P還是B,以及確定幀內(nèi)的具體譯碼單位(例如,宏塊、譯碼單位等)是幀間譯碼還是幀內(nèi)譯碼。
[0059]兩類“幀間譯碼”巾貞-類型P和類型B-利用了時間預(yù)測,其基于當前幀與不同時間點相對應(yīng)的之前處理的幀的差異。該類型預(yù)測(其與本公開無關(guān))利用了編碼器10A中的反饋環(huán)路。該環(huán)路開始于解量化器130和反頻譜變換135,它們(如圖5A中傳統(tǒng)解碼器500A的對應(yīng)解量化器520和反頻譜變換525)對頻譜變換110和量化器115 (下面描述)大致進行逆轉(zhuǎn),即,它們重構(gòu)類與原始殘余數(shù)據(jù)相類似(而不是一樣,這是由步驟320的有損性質(zhì)導(dǎo)致的)的殘余數(shù)據(jù)。解塊處理器145 (如解碼器500A的對應(yīng)解塊處理器540)可以執(zhí)行濾波,以移除塊邊界上的偽像和/或執(zhí)行在解碼過程期間將進行的其他平滑化處理。幀存儲器150從而存儲了 “參考”幀以供運動預(yù)測器155使用,該“參考”幀是由解碼器500A對其照原樣進行重構(gòu)和解塊的。
[0060]類型I幀(“幀內(nèi)譯碼”幀)是在不參考其他幀的情況下編碼的,且因此其不能采用時間預(yù)測。然而,其確實采用了幀內(nèi)的預(yù)測;換言之,幀的一部分是基于其與幀的另一部分的差異來編碼的。
[0061]幀內(nèi)預(yù)測(本公開中所關(guān)注的預(yù)測類型)是由空間預(yù)測器105根據(jù)圖3a的步驟310來執(zhí)行的。具體地,空間預(yù)測器105將當前塊的數(shù)據(jù)與針對當前幀的之前處理過的塊內(nèi)的附近像素的數(shù)據(jù)進行比較,并根據(jù)針對特定空間預(yù)測模式的預(yù)測算法來生成該塊的殘余數(shù)據(jù)。在AVS和AVS2標準中,存在例如33個這種模式,稍后將參考圖2a和2b來討論他們。在一些實施例中,可以將速率失真優(yōu)化用于選擇最佳模式。
[0062]然后,在圖3a的步驟320,頻譜變換110對殘余數(shù)據(jù)進行頻譜變換,且量化器115對頻譜變換的輸出進行量化。盡管圖1a將頻譜變換110和量化器115示出為編碼器100A中的不同組件,如本領(lǐng)域中所理解的,這兩個操作可以要么作為兩個單獨的數(shù)學運算來執(zhí)行,要么作為單一運算來執(zhí)行;從而,可以用實現(xiàn)了相同合并結(jié)果的單一組件來替代所示的這兩個組件。此外,在一些實施例中,可以采用變換跳過;在這種情況下,不采用頻譜變換110,且步驟320僅在空間域中對殘余數(shù)據(jù)進行量化。
[0063]向頻譜變換110輸入的殘余數(shù)據(jù)是空間域中的數(shù)據(jù);這意味著該數(shù)據(jù)對應(yīng)于(可能不是以一對一的方式)按幾何行和列排列的像素。頻譜變換110將該空間域數(shù)據(jù)轉(zhuǎn)換為變換域中的數(shù)據(jù);本文中稱為變換系數(shù)的該輸出數(shù)據(jù)包含與像素相關(guān)的頻率信息,根據(jù)該頻率信息可以重構(gòu)像素。在很多實施例中,頻譜變換I1應(yīng)用離散余弦變換(DCT)。盡管AVS和AVS2標準規(guī)定使用DCT,在視頻譯碼協(xié)議中可以使用離散正弦變換或其他變換,且因此它們預(yù)期在本公開的范圍中。取決于宏塊或譯碼單位的大小,空間變換110逐譯碼單位、逐宏塊、或逐子塊進行操作。在AVS和AVS2標準中,典型的16x16宏塊例如包含四個8x8變換塊,且對8x8塊執(zhí)行DCT過程。在一些視頻譯碼協(xié)議中,變換塊可以是4x4,意味著每個宏塊中存在十六個變換塊。在另一些其他情況下,變換塊可以是其他大小。在一些情況下,16x16宏塊可以包括非重疊的4x4和8x8變換塊的組合。
[0064]繼續(xù)參考圖1a和3a,熵編碼器125基于與要壓縮的各種符號的頻率相關(guān)的統(tǒng)計數(shù)據(jù)對符號進行無損壓縮;壓縮的符號不僅包括作為變換量化系數(shù)的直接反映的數(shù)據(jù),還包括與當前塊相關(guān)的其它數(shù)據(jù),該其它數(shù)據(jù)包括對與塊相關(guān)的參數(shù)的指示(例如,在對塊進行編碼時使用的幀內(nèi)預(yù)測模式)和/或在編碼過程中暗示了(且在解碼過程中推斷出)多個零值的意義上允許“跳過”某些零值數(shù)據(jù)的標志,稍后將對其進行解釋。
[0065]直接基于變換量化系數(shù)的數(shù)據(jù)也涉及對零值數(shù)據(jù)的這種跳過。具體地,在圖3a的步驟350,由于零值系數(shù)普遍,導(dǎo)致變換量化系數(shù)是平跑編碼的。這涉及生成平跑有序?qū)?,每個平跑有序?qū)Π?a)非零系數(shù)的量值,后接(b)沿反掃描順序在非零系數(shù)之后的連續(xù)零值系數(shù)的數(shù)目。
[0066]在步驟360,表示變換量化系數(shù)和與當前塊相關(guān)的其他數(shù)據(jù)的符號都被二進制化和熵編碼。二進制化包括將符號轉(zhuǎn)換為某種二進制形式,例如,一元記號(unary notat1n)或其某種變型。AVS和AVS2標準規(guī)定了熵編碼可以是算術(shù)譯碼,但是在其他視頻譯碼協(xié)議中,可以使用其他類型的熵譯碼(例如,可變長度譯碼)(且因此其在本公開的范圍內(nèi))。
[0067]圖2a和2b均示出了在視頻譯碼中使用的一類“有角”的三十個幀內(nèi)預(yù)測模式,以及林列出了另一類“無角”的三個幀內(nèi)預(yù)測模式,且還示出了如何將全部這些模式分類為無交集的三個類,以在圖3b的新穎方法300B中使用。每個有角幀內(nèi)預(yù)測模式由表示從正在譯碼的當前塊到在幀內(nèi)預(yù)測中使用的附近像素的空間位移的角度的箭頭來示出。箭頭的長度是無關(guān)緊要的;相對地,每個箭頭頭部被示出為到達特定圓-且對應(yīng)模式被稱為屬于對應(yīng)“區(qū)以輔助示出從正y軸開始測量的空間位移的角度,作為某個基本角度的倍數(shù)。屬于區(qū)O、特征400的模式O和I具有作為90度的倍數(shù)的角度。屬于區(qū)1、特征410的模式4、5和6具有作為45度的倍數(shù)的角度,但是不屬于區(qū)O。屬于區(qū)2、特征420的模式7到16具有作為15度的倍數(shù)的角度,但是不屬于區(qū)O或I。屬于區(qū)3、特征430的模式17到31具有作為7.5度的倍數(shù)的角度,但是不屬于區(qū)O、I或2。在圖2a和2b中僅列出了無角幀內(nèi)預(yù)測模式-DC模式(在AVS2標準中指定為模式2)、平面模式(3)、和雙線性模式(32),因為它們不體現(xiàn)“方向”,且因此不能以向量的方式來有意義地繪出;不僅出于完整性(相對于AVS2標準)的目的將它們列出,還由于它們被包括在接下來將解釋的分類方案中。
[0068]對幀內(nèi)預(yù)測模式的改進分類
[0069]關(guān)于圖2a和2b,重要的不是區(qū),而是對分類200A和200B的分別繪出。每個分類將整個幀內(nèi)預(yù)測模式O值32的聚集劃分為無交集的三個類;確定給定模式不在兩類中任何一類意味著其必須在剩余類中。在圖2a所示的分類200A中,垂直類210A包含由粗的實心箭頭示出的模式0、9、10、11、12、16、21、22、23和24 ;水平類220A包含由細的實心箭頭示出的模式1、7、8、13、14、15、17、18、27、28和29 ;以及對角類230A包含剩余模式,即由虛線箭頭示出的有角模式4、5、6、19、20、25、26、30和31,以及僅在圖2a中列出的無角模式2、3和32。在圖2b所示的分類200B中,垂直類210B包含由粗的實心箭頭示出的模式0、10、11、21、22、23和24 ;水平類220B包含由細的實心箭頭示出的模式1、7、14、17、18、27、28和29 ;以及對角類23(?包含剩余模式,即由虛線箭頭示出的有角模式4、5、6、8、9、12、13、15、16、19、20、25、26、30和31,以及無角模式2、3和32。
[0070]這些分類可以用多種方式來改進視頻譯碼。如在共同待審的申請PCT/CA2013/050020中之前公開的,這些類可以用于模式相關(guān)上下文涉及。當用于對塊編碼的幀內(nèi)預(yù)測模式在特定一類中時,其易于具有與該類對應(yīng)的系數(shù)的獨特分布。例如針對平跑對的熵譯碼,當對上下文的確定基于模式所屬的類時,該確定將是更恰當?shù)?。當該確定更恰當時,最終的譯碼將變得更有效率。圖2a的分類200A之前被公開為用于在這些獨特分布之間進行區(qū)分的方式。
[0071]現(xiàn)在已經(jīng)意識到:有可能更有效率地來劃分幀內(nèi)預(yù)測模式。分類200B的經(jīng)修訂的垂直類210B和水平類220B比分類200A的對應(yīng)類210A和220A“窄”,即經(jīng)修訂的類均包括更少的模式,跨更小的角度范圍。包括更少模式在內(nèi)的類對應(yīng)于甚至更獨特的分布。然而,本發(fā)明人還意識到:如果類過小,則將沒有充足的數(shù)據(jù)來訓(xùn)練上下文以達到穩(wěn)定狀態(tài),且譯碼性能將更差;這被稱為上下文稀釋問題。每個經(jīng)修訂的類210B和220B在分布獨特性和狀態(tài)穩(wěn)定性之間取得平衡。最終結(jié)果是使用新穎的分類200B比之前公開的分類200A取得更好的譯碼性能;這對于之前公開的模式相關(guān)上下文涉及成立,對于稍后將描述的由圖3b所示的新穎方法300B所提供的附加譯碼改進也成立。
[0072]系數(shù)的模式相關(guān)塊轉(zhuǎn)置
[0073]為了解釋相對于視頻編碼領(lǐng)域的當前狀態(tài)的該改進,現(xiàn)在來回顧關(guān)于圖1a的編碼器100A稍早討論的圖3a的傳統(tǒng)方法300A。在對視頻的逐塊編碼期間,在步驟310,根據(jù)由譯碼模式選擇器160選擇的幀內(nèi)預(yù)測模式(在未示出為方法300A的一部分的傳統(tǒng)步驟中)來生成當前塊的殘余數(shù)據(jù)。在步驟320,對殘余數(shù)據(jù)的塊進行頻譜變換和量化,以獲得量化變換塊。盡管將步驟320示出為單一步驟,本領(lǐng)域已知的是可以通過單一數(shù)學運算或通過兩個單獨運算的序列來實現(xiàn)頻譜變換和量化的最終效果。在AVS2標準中,所采用的頻譜變換是離散余弦變換(DCT),但是在視頻譯碼中可以使用其他變換(例如,離散正弦變換)(且因此,在本公開的范圍內(nèi))。在步驟350,對量化變換系數(shù)進行平跑編碼。這涉及按反鋸齒掃描順序掃描量化變換系數(shù)并生成包含(a) “平即非零系數(shù)的量值和(b) “跑即(按反鋸齒順序)在非零系數(shù)之后在下一個非零系數(shù)或CG末端(如果上一個“跑” 一直到CG的左上系數(shù))之前的連續(xù)零值系數(shù)的數(shù)目在內(nèi)的對。在步驟360,對平跑對進行二進制化(例如,使用一元譯碼或其某種變型)和熵編碼。在AVS2標準中,熵譯碼是算數(shù)譯碼,但是在視頻譯碼中可以使用其他類型的熵譯碼(例如,可變長度譯碼)(且因此,在本公開的范圍內(nèi))。
[0074]現(xiàn)在將意識到:在視頻壓縮中的幀內(nèi)預(yù)測和變換過程之后,當所使用的幀內(nèi)預(yù)測模式在垂直類中時,非零變換系數(shù)易于接近CG的頂部。類似地,當使用的幀內(nèi)預(yù)測模式是水平類時,非零變換系數(shù)易于接近CG的左側(cè)。該發(fā)現(xiàn)暗示了在水平預(yù)測之后的變換系數(shù)塊如果被轉(zhuǎn)置,將具有與在垂直預(yù)測之后的變換系數(shù)塊的類似統(tǒng)計數(shù)據(jù)。(此處該統(tǒng)計數(shù)據(jù)主要指代在CG中連續(xù)非零系數(shù)之間的零值系數(shù)的“跑”,即數(shù)目,其確定了最后一個非零CG的位置和CG中最后一個非零系數(shù)的位置)。由于轉(zhuǎn)置水平模式塊具有與未轉(zhuǎn)置垂直模式塊的系數(shù)分布相類似的系數(shù)分布,可以通過編程命令它們“共享上下文”(如下文詳細描述),來“哄騙”編碼器100B將前者視為其是后者一樣。這具有降低上下文總數(shù)的效果。降低需要存儲的上下文的數(shù)目進而降低了熵譯碼的復(fù)雜度。
[0075]在圖1b和3b中示出了該發(fā)現(xiàn)的技術(shù)應(yīng)用。圖1b以框圖形式示出了編碼器100B,其與圖1a的編碼器100A的不同之處在與:在量化器115和熵編碼器125之間插入了塊轉(zhuǎn)置120。在虛線輪廓中指示了:盡管其位置固定,不需要在所有情況下對其進行使用。事實上,對變換系數(shù)塊進行轉(zhuǎn)置的點是針對第一特定類(例如,水平類)中幀內(nèi)預(yù)測模式的轉(zhuǎn)置,且針對第二特定類(例如,垂直類)中幀內(nèi)預(yù)測模式不轉(zhuǎn)置,使得經(jīng)由第一類中模式的幀內(nèi)預(yù)測之后的變換系數(shù)塊一旦進行轉(zhuǎn)置,將具有與在經(jīng)由第二類中模式的幀內(nèi)預(yù)測之后的變換系數(shù)塊類似的統(tǒng)計數(shù)據(jù)。從而,在實際中,執(zhí)行測試(圖1b中未示出,但是在圖3b的步驟330中指示,接下來描述)以確定是否應(yīng)當調(diào)用塊轉(zhuǎn)置120的功能。
[0076]圖3b示出了如下文中詳細描述的用于對殘余塊進行編碼的新穎方法300B的流程圖。通過添加步驟330和340來將其與圖3a所示的傳統(tǒng)方法300A加以區(qū)分。在步驟330,執(zhí)行測試以確定空間預(yù)測器105要使用的幀內(nèi)預(yù)測模式(與譯碼模式選擇器160所確定的一樣)是否在預(yù)定類中。為了更清楚,該測試不僅確定模式是否在某個預(yù)定類中;這種測試將是不必要的,因為每個模式嚴格地在三個類之一中,這均是根據(jù)達成一致的編碼-解碼標準(其可被寫為僅規(guī)定了解碼協(xié)議,而編碼協(xié)議是隱式的)的可互操作性要求來“預(yù)定的”。該測試確定模式是否在預(yù)定的特定類中,該特定類是量化變換塊被轉(zhuǎn)置所針對的唯一類。如下面解釋的,水平類是作為該特定、獨特的預(yù)定類的最佳選擇。在步驟340,在特定預(yù)定類的情況下,至少一部分量化變換塊被如圖4a(針對全塊轉(zhuǎn)置)和4b (針對部分塊轉(zhuǎn)置)所示轉(zhuǎn)置。為了完成欺騙-“哄騙”編碼器100B將一種模式類的轉(zhuǎn)置塊視為好像其是另一類的未轉(zhuǎn)置塊一樣-應(yīng)當更新上下文索引;否則,解碼將比在根據(jù)更新的上下文索引來導(dǎo)出上下文的情況下低效,且將不實現(xiàn)塊變換的全部優(yōu)點。
[0077]例如,假定對于某些實施例,觸發(fā)塊轉(zhuǎn)置的特定預(yù)定類是水平類。還假定編碼器100B 一般將具有值 INTRA_PRED_VER、INTRA_PRED_H0R、或 INTRA_PRED_DC_DIAG (分別等于例如0、1和2的常數(shù))的上下文索引intraModeldx解釋為指示了用于幀內(nèi)預(yù)測的模式-且因此對于模式相關(guān)熵編碼來說-分別是垂直、水平或?qū)穷?。然后,表示對上下文索引的更新的偽代碼將是:
[0078]If intraModeldx = INTRA_PRED_H0R,
[0079]intraModeldx = INTRA_PRED_VER
[0080]盡管存在可以潛在地被預(yù)定為模式類(針對其在步驟340執(zhí)行塊轉(zhuǎn)置)的三個類,一類是最不想要的類,且另一類是最想要的類。預(yù)定類不應(yīng)當是對角類,因為對于對角類中的模式,非零系數(shù)獨特地沿一條邊分布(如其他兩類中的模式的情況一樣)?,F(xiàn)在已經(jīng)意識到:如參考圖1Oc的掃描順序1020所將描述的,因為在CG內(nèi)的系數(shù)的特定鋸齒掃描順序以及塊內(nèi)的CG的特定鋸齒掃描順序,水平類相對于垂直類作為預(yù)定類更有優(yōu)勢。
[0081]圖3c示出了在預(yù)定類是水平類的一個實施例中圖3b所示方法300中邏輯流程300C的流程圖。具體地,圖3b的步驟310被特殊化為針對幀內(nèi)譯碼模式在水平類中的情況的替代步驟310C。方法300B的測試330未在邏輯流程300C中示出,且因此無條件地執(zhí)行步驟340處的塊轉(zhuǎn)置。
[0082]現(xiàn)在參考圖4a和4b。圖4a示出了對量化變換系數(shù)的樣本8x8塊410應(yīng)用全塊轉(zhuǎn)置400A以產(chǎn)生轉(zhuǎn)置塊410T ;該轉(zhuǎn)置是傳統(tǒng)矩陣轉(zhuǎn)置,即,沿著從左上角到塊的右下角的對角線翻轉(zhuǎn)。如果用B[j,i]來表示初始塊(例如,塊410),其中,j = 0...塊高度-1且i=0...塊寬度-1,且用BT[j,i]來表示轉(zhuǎn)置塊(例如,塊410T),其中,j = 0...塊高度-1且i =0...塊寬度-1,則全塊轉(zhuǎn)置可以用以下公式表示:
[0083]BT[j,i] = B[i,j],其中,j = 0...塊高度-1 且 i = 0...塊寬度-1。
[0084]另一方面,圖4b示出了對圖4a所示的相同樣本8x8塊410應(yīng)用部分塊轉(zhuǎn)置400B。在該情況下,沿著塊410左側(cè)邊的4x4系數(shù)塊411和413單獨轉(zhuǎn)置,以產(chǎn)生轉(zhuǎn)置系數(shù)塊41IT和413T,而系數(shù)塊412和414 ;最終結(jié)果是部分轉(zhuǎn)置塊41(ΧΤ。在另一實施例中(未示出),沿著塊410的頂部邊的411和412可以單獨轉(zhuǎn)置。這兩個實施例僅是在本公開范圍內(nèi)的各種部分轉(zhuǎn)置的樣本。對于每個這種部分塊轉(zhuǎn)置,公式表示是對上述全塊轉(zhuǎn)置的公式的約束和/或改編。
[0085]現(xiàn)在參考圖5a和6a。圖5a以框圖形式示出了與傳統(tǒng)編碼器100A兼容的傳統(tǒng)解碼器500A,即能夠?qū)λ鼍幋a器生成的視頻進行解碼的解碼器。圖6a示出了用于對幀內(nèi)譯碼幀的殘余塊進行解碼的對應(yīng)傳統(tǒng)方法600A的流程圖。
[0086]解碼器500A接收由例如圖1a的編碼器100A所編碼的兼容比特流199。(本領(lǐng)域眾所周知的是:功能不同的編碼器可以產(chǎn)生可由單一解碼器來解碼的編碼比特流。)解碼器500A最終產(chǎn)生重構(gòu)視頻101A,其由于有損編碼過程是不完美的,但其是對曾向編碼器中輸入的原始視頻源101的充分復(fù)制。解碼器500A可以被配置為根據(jù)多種視頻壓縮標準來工作。例如,解碼器500A可以符合AVS或AVS2。
[0087]在步驟610,熵解碼器510 (與編碼器100A的熵編碼器125相對應(yīng)并逆轉(zhuǎn)熵編碼器125的動作)對與該塊有關(guān)的數(shù)據(jù)進行熵解碼,該與塊有關(guān)的數(shù)據(jù)包括(在圖2a和2b中示出或列出的三十三個幀內(nèi)預(yù)測模式中)用于產(chǎn)生編碼塊的幀內(nèi)預(yù)測模式。解碼器500A不包括與編碼器100A的譯碼模式選擇器160相對應(yīng)的組件,譯碼模式選擇器160具有(基于各種標準)確定必須要使用哪種譯碼模式的任務(wù)。相反,先前解碼的數(shù)據(jù)包括關(guān)于正在編碼的當前幀具有類型1、P還是B的指示以及關(guān)于幀內(nèi)的特定譯碼單位將被幀間譯碼還是幀內(nèi)譯碼。在步驟620,熵解碼器還對編碼塊進行熵解碼以產(chǎn)生經(jīng)熵解碼的殘余數(shù)據(jù)塊。
[0088]在步驟660,由解量化器520對經(jīng)熵解碼的量化變換系數(shù)塊進行解量化,以逆轉(zhuǎn)由(圖1a的)編碼器100A中的量化器115執(zhí)行的作為(圖3a的)步驟320的一部分的量化。這產(chǎn)生了經(jīng)解量化的殘余數(shù)據(jù)塊。在步驟670,反頻譜變換525對經(jīng)解量化的殘余數(shù)據(jù)塊進行操作以逆轉(zhuǎn)編碼器100A的頻譜變換110在步驟320的剩余部分期間進行的操作。
[0089]解碼器500A的特定組件的操作包括未作為方法600A的一部分示出的傳統(tǒng)步驟。空間補償器530如上所述應(yīng)用從比特流中恢復(fù)的幀內(nèi)預(yù)測模式。由運動補償器550針對I型和B型幀執(zhí)行運動補償。解塊處理器540可以執(zhí)行濾波,以移除塊邊界上的偽像和/或執(zhí)行其他平滑化(與編碼過程期間預(yù)期的解碼器500A的對應(yīng)解塊處理器145 —樣)。幀緩沖區(qū)545存儲用于后續(xù)幀內(nèi)預(yù)測和幀間預(yù)測的數(shù)據(jù)。
[0090]現(xiàn)在參考圖5b和6b。圖5b以框圖形式示出了用于對圖1b所示的編碼器100B編碼的視頻進行解碼的新穎解碼器500B。圖6b示出了用于對根據(jù)圖3b所示的方法300B來編碼的殘余塊進行解碼的方法的流程圖。由于新穎的編碼器100B包括塊轉(zhuǎn)置120,新穎的解碼器500B必須包含在編碼組件的序列中恰當定位的用于通過應(yīng)用塊轉(zhuǎn)置的逆來逆轉(zhuǎn)塊轉(zhuǎn)置的效果的組件;否則由于變換系數(shù)將與錯誤的頻率相關(guān)聯(lián),將根據(jù)混淆的變換域數(shù)據(jù)來最終重構(gòu)空間域數(shù)據(jù)。當然,塊轉(zhuǎn)置120執(zhí)行周期而操作,意味著應(yīng)用其兩次相當于應(yīng)用恒等(即,什么也不做)操作。所述另一種方式,塊轉(zhuǎn)置120使其自身的逆。從而,新穎的解碼器500B與傳統(tǒng)解碼器500A的不同之處在于:不僅作為塊轉(zhuǎn)置120的逆還與其相同的塊轉(zhuǎn)置515被插在熵解碼器510和解量化器520之間。此外,為了兼容,必須在編碼器和解碼器中并入嚴格相同類型的塊轉(zhuǎn)置(全塊轉(zhuǎn)置或部分塊轉(zhuǎn)置)。以虛線輪廓的方式來繪出塊轉(zhuǎn)置515,因為其僅在用于生成編碼塊的幀內(nèi)預(yù)測模式在特定預(yù)定類中的情況下才采用,該情況觸發(fā)了編碼器100A的塊轉(zhuǎn)置在編碼期間的操作。
[0091]類似地,新穎的解碼方法600B與傳統(tǒng)方法600A的不同之處在于:為了與新穎的編碼方法300B兼容,其必須包含步驟650,在步驟650,對量化變換塊應(yīng)用塊轉(zhuǎn)置(其也是在編碼期間應(yīng)用的塊轉(zhuǎn)置的逆);此外,為了兼容,必須在編碼和解碼期間都并入嚴格相同類型的塊轉(zhuǎn)置(全塊轉(zhuǎn)置或部分塊轉(zhuǎn)置)。
[0092]然而,步驟650僅在以下條件時才執(zhí)行:在步驟620,對當前快的編碼期間使用的幀內(nèi)預(yù)測模式是否在預(yù)定類中的確定具有肯定結(jié)果。這是因為其僅在以下情況下才有意義:(a)針對水平類中的模式進行轉(zhuǎn)置,使得系數(shù)將以與垂直類中的模式的系數(shù)相類似的方式分布,或(b)針對垂直類中的模式進行轉(zhuǎn)置,使得系數(shù)將以與水平類中的模式的系數(shù)相類似的方式分布。(在實際中,優(yōu)選選項(a),如在本文其他地方所解釋的。)如果步驟620的幀內(nèi)預(yù)測模式的測試具有否定結(jié)果,則在步驟640僅對編碼塊進行熵解碼,與圖6a的方法600A—樣。另一方面,如果測試具有肯定結(jié)果,則在步驟640'對編碼塊的熵解碼(在塊轉(zhuǎn)置步驟650之前)應(yīng)當在步驟630的上下文索引的更新之后;否則,將使用更多的上下文,且熵譯碼將變得比根據(jù)更新上下文索引來導(dǎo)出上下文的情況更復(fù)雜。嚴格按照在編碼期間的方式來執(zhí)行更新。例如,假定對于某些實施例,在編碼期間觸發(fā)塊轉(zhuǎn)置的特定預(yù)定類曾是水平類。進一步假設(shè)編碼器100B通常將具有值INTRA_PRED_VER、INTRA_PRED_H0R或1階狀_?1?0_0(:_0^^(分別等于例如0、1和2的常數(shù))的上下文索引intraModeldx解釋為指示用于幀內(nèi)預(yù)測(因此用于模式相關(guān)熵編碼)的模式分別在垂直類、水平類或?qū)穷愔?。然后,表示上下文索引的更新的偽代碼是:
[0093]如果intraModeldx = INTRA_PRED_H0R,,
[0094]intraModeldx = INTRA_PRED_VER
[0095]解量化步驟660B與方法600A的步驟660無差別地操作。不同的特征數(shù)字僅反映它具有更多樣的輸入,該輸入可能已經(jīng)或可能還未在步驟650處被轉(zhuǎn)置。
[0096]圖6c示出了在圖6b中所示的方法600B的一個實施例中的邏輯流程600C的流程圖。該實施例被限制于指定的預(yù)定類(其觸發(fā)轉(zhuǎn)置的應(yīng)用)是水平類并且用于產(chǎn)生編碼塊的幀內(nèi)預(yù)測模式在該類中的情況。該邏輯序列從步驟610C開始,步驟610C以類似于方法600B的步驟610處的方式操作;改變的特征數(shù)字反映了結(jié)果是處于水平類中的經(jīng)解碼的幀內(nèi)預(yù)測模式。在其是結(jié)果的情況下,例如根據(jù)上文的偽隨機碼無條件地更新上下文索引(未示出測試620)。如方法600B中一樣,步驟640’和650緊隨之后。解量化步驟660C與方法600B的步驟660B無差別地操作。不同的特征數(shù)字僅反映通過該邏輯路徑的輸入必然在步驟650處進行了轉(zhuǎn)置。
[0097]針對平跑編碼的改進模式相關(guān)上下文設(shè)計
[0098]在共同未決的申請PCT/CA2013/050020中,公開了如果用于對平跑對進行熵編碼的上下文是至少部分地基于變換系數(shù)在當前系數(shù)組中的位置以及幀內(nèi)預(yù)測模式所屬的類導(dǎo)出的,則編碼效率受益。為此,針對幀內(nèi)預(yù)測模式的三個類中的每一個(在本申請中參照圖2a的分類200A定義),公開了 CG中的系數(shù)位置的相應(yīng)兩部分劃分。然后,基于針對該類的劃分的兩個區(qū)域中與特定模式類別的平跑對的每一個二進制值相對應(yīng)的系數(shù)所處的那個區(qū)域來導(dǎo)出用于對該二進制值進行熵編碼的上下文。現(xiàn)在已經(jīng)認識到,可以通過三部分劃分實現(xiàn)對編碼效率的進一步提高,如下所述。根據(jù)上文已經(jīng)公開的內(nèi)容,劃分的應(yīng)用還應(yīng)當適應(yīng)任何轉(zhuǎn)置操作的存在;否則,模式相關(guān)上下文設(shè)計將不如進行調(diào)整的情況那樣有效。
[0099]首先參照圖7,圖7示出了將系數(shù)組的變換系數(shù)劃分為三個不相交的變換系數(shù)區(qū)域,以用于導(dǎo)出用于對當前CG的平跑對進行熵編碼的上下文的目的。在所示的每一種情況下,CG的大小為4個系數(shù)X4個系數(shù)。每一個劃分最適合于上文參照圖2b的分類200B所定義的三個類中的相應(yīng)類中的幀內(nèi)預(yù)測模式(但是它們也可以與圖2a的分類200A—起使用)。
[0100]劃分710由CG的三個不相交水平帶構(gòu)成:由頂行構(gòu)成的區(qū)域A,特征711 ;由中間行構(gòu)成的區(qū)域B,特征712 ;以及由底行構(gòu)成的區(qū)域C,特征713。該劃分被設(shè)計用于垂直類中的幀內(nèi)預(yù)測模式——假設(shè)未向當前塊(或者包括當前CG的部分)應(yīng)用塊轉(zhuǎn)置。如果模式在垂直類中但是當前CG受到轉(zhuǎn)置影響,則采用下文所述的劃分720。
[0101]劃分720由CG的三個不相交垂直帶構(gòu)成:由左列構(gòu)成的區(qū)域A,特征721 ;由中間列構(gòu)成的區(qū)域B,特征722 ;以及由右列構(gòu)成的區(qū)域C,特征723。該劃分被設(shè)計用于水平類中的幀內(nèi)預(yù)測模式——假設(shè)未向當前塊(或者包括當前CG的部分)應(yīng)用塊轉(zhuǎn)置。如果模式在水平類中但是當前CG受到轉(zhuǎn)置影響,則采用上文所述的劃分710。
[0102]劃分730由CG的三個不相交(大致)對角線帶構(gòu)成:由CG的左上角中的三個系數(shù)構(gòu)成的區(qū)域A,特征731 ;由CG的右下角中的六個系數(shù)構(gòu)成的區(qū)域C,特征733 ;以及由區(qū)域A與C之間的對角線帶中的剩余七個系數(shù)構(gòu)成區(qū)域B,特征732。該劃分被設(shè)計用于對角線類中的幀內(nèi)預(yù)測模式。該劃分在轉(zhuǎn)置下不變。在上文提到的任何情況下,沒有理由針對對角線類中的模式進行轉(zhuǎn)置,因此針對對角線類中的模式,關(guān)于當前CG是否受轉(zhuǎn)置影響的考慮是無實際意義的。
[0103]根據(jù)已經(jīng)關(guān)于劃分710和720所述的內(nèi)容,應(yīng)當在意料之中的是,將這些劃分中的任意一個用于導(dǎo)出上下文(該上下文用于對當前CG的平跑對進行熵編碼)的目的取決于是否采用轉(zhuǎn)置。因此,針對可能在一些情況下采用轉(zhuǎn)置的實施例(圖9a至9c),必須單獨地描述不采用轉(zhuǎn)置的用于模式相關(guān)上下文設(shè)計的方法(圖Sb和Sc)。
[0104]現(xiàn)在參照圖8a至8c,圖8a至8c均涉及當不采用轉(zhuǎn)置時將圖7的劃分710、720和730用于導(dǎo)出上下文的目的,該上下文用于對當前CG的平跑對進行熵編碼。
[0105]圖8a示出了在不使用塊轉(zhuǎn)置的情況下用于對殘余塊進行模式相關(guān)的平跑編碼的已知方法300D的流程圖;它借鑒了圖3A的方法300A,其中省略了步驟310。步驟320和350與方法300A中的完全相同。步驟360D是步驟360的特定實施例,在步驟360D中,現(xiàn)在通過至少部分地基于CG的若干區(qū)域中與CG的平跑對的每一個二進制值相對應(yīng)的系數(shù)所屬的那個區(qū)域,導(dǎo)出該二進制值的上下文,來完成對平跑對的熵編碼,其中,已經(jīng)基于用于對CG進行編碼的幀內(nèi)預(yù)測模式將該CG劃分為區(qū)域(如上所述,現(xiàn)有公開內(nèi)容規(guī)定了兩部分劃分)。
[0106]圖8b示出了詳細說明步驟360D’的流程圖,步驟360D’與圖8a中所示的方法300D的步驟360D相似,但是被調(diào)整為說明從圖7中所示的劃分中選擇三部分劃分。在步驟361,確定三個類中用于對當前CG進行編碼的幀內(nèi)預(yù)測模式所屬的那一類。根據(jù)模式是屬于對角類、垂直類還是水平類,分別將控制傳遞到步驟361A、步驟361B或步驟361C,所述步驟分別使用劃分730、劃分710或劃分720來執(zhí)行熵編碼。
[0107]圖8c示出了詳細說明表示圖8b的步驟361A、步驟361B或步驟361C(根據(jù)具體情況而定)的步驟361x的流程圖一其中,至少部分地基于在圖Sb的步驟361處選擇的劃分(分別為730、710或720)來導(dǎo)出上下文。在步驟362,確定與平跑對的當前二進制值相對應(yīng)的系數(shù)是否是DC系數(shù)(因為DC系數(shù)是整個當前塊中的左上角系數(shù),因此這可能僅在當前CG是塊的左上角CG時才發(fā)生)。如果是,則在一個特殊情況下使用上下文模型O。否則,使用三部分劃分。在步驟363,確定三個區(qū)域中與平跑對的當前二進制值相對應(yīng)的系數(shù)所屬的那個區(qū)域。根據(jù)該系數(shù)是屬于區(qū)域A、B還是C,將控制分別傳遞到步驟363A、步驟363B或步驟363C,所述步驟分別使用上下文模型1、2或3來執(zhí)行熵編碼。在一個示例性實施例中,可以通過以下偽代碼給出用于對“跑”的每一個二進制值進行熵編碼的上下文模型:
[0108]如果當前CG是左上角CG,則
[0109]ctxlnc (run) = reg1nCGIdx*3+min(2, (absSum+absLevel)/2)
[0110]否則,
[0111]ctxlnc(run) = (reg1nCGIdx-1)*3+min(2, (absSum+absLevel)/2)+12
[0112]其中,針對上下文模型i,i = 0、1、2或3, reg1nCGIdx = i ;absSum是先前以逆掃描順序編碼的非零系數(shù)的“平”之和;并且absLevel是與“平跑對”中的該“跑”相對應(yīng)的“平”?,F(xiàn)在參照圖9a至9c,其也將圖7的劃分710、720和730用于導(dǎo)出上下文的目的的方法,該上下文用于對當前CG的平跑對進行熵編碼。然而,與圖8a至Sc的方法相反,這些方法適應(yīng)采用轉(zhuǎn)置的可能情況。
[0113]圖9a示出了在產(chǎn)生編碼塊時使用的幀內(nèi)預(yù)測模式在特定預(yù)定類中的情況下使用塊轉(zhuǎn)置對殘余塊進行模式相關(guān)編碼的方法300E的流程圖。方法300E與圖3b的方法300B的不同之處在于:替換步驟360E現(xiàn)在通過至少部分地基于CG的若干區(qū)域中與平跑對的每一個二進制值相對應(yīng)的(可能轉(zhuǎn)置的)系數(shù)所屬的那個區(qū)域?qū)С鲈摱M制值的上下文來對平跑對進行熵編碼?;谟糜趯G進行編碼的幀內(nèi)預(yù)測模式以及在步驟340處是否向系數(shù)應(yīng)用轉(zhuǎn)置,各區(qū)域構(gòu)成劃分。該聯(lián)合條件的第一部分正好是圖8a的步驟360D中提及并且在圖8b的步驟360D’中詳細描述的條件。
[0114]對條件的第二部分——在步驟340處是否應(yīng)用轉(zhuǎn)置——進行更仔細的考慮。第一,如果應(yīng)用的轉(zhuǎn)置是全塊轉(zhuǎn)置,則條件相當于步驟330處的測試條件;換言之,可以用與步驟330相同的方式測試第二條件。
[0115]第二,當判斷系數(shù)的位置以確定系數(shù)處于哪個區(qū)域時,使用的是轉(zhuǎn)置后的位置。
[0116]第三,已經(jīng)應(yīng)用轉(zhuǎn)置的意義在于在該情況下必須同樣對劃分進行“轉(zhuǎn)置”。當例如幀內(nèi)預(yù)測模式在水平類中時,轉(zhuǎn)置的目的是定位轉(zhuǎn)置系數(shù),使得它們以與垂直類中的模式的分布類似的方式分布;如上所述,為了完成“哄騙”編碼器100B將轉(zhuǎn)置水平模式塊視為如同它是未轉(zhuǎn)置的垂直模式塊一樣,應(yīng)當更新上下文索引。如果如這里一樣,劃分也用于在已經(jīng)應(yīng)用轉(zhuǎn)置時導(dǎo)出水平類中的模式的上下文,則應(yīng)當進一步(通過適當代碼)哄騙編碼器100B采用(在無轉(zhuǎn)置的情況下)用于垂直類中的模式的劃分,即,劃分710。此外,這用于獲得至少部分地基于當前CG的劃分來導(dǎo)出上下文的全部益處。劃分710在其布局中是劃分720的轉(zhuǎn)置(針對水平類中的模式,沒有轉(zhuǎn)置),即使一個劃分不是通過應(yīng)用轉(zhuǎn)置根據(jù)另一個劃分來逐字地(literally)生成的。下面將參照圖9b來詳細說明劃分的該有條件交換。
[0117]第四,如果應(yīng)用的轉(zhuǎn)置僅是部分塊轉(zhuǎn)置,則僅針對曾應(yīng)用過轉(zhuǎn)置的系數(shù)進行考慮到該轉(zhuǎn)置的調(diào)節(jié)。(其對該轉(zhuǎn)置的域中的所有系數(shù)加以同等對待,甚至在該轉(zhuǎn)置下位于不變的對角線上的系數(shù))。
[0118]最后,本領(lǐng)域技術(shù)人員認識到,如果應(yīng)用的轉(zhuǎn)置僅是部分轉(zhuǎn)置,則僅當轉(zhuǎn)置應(yīng)用于CG時才對應(yīng)用于CG的劃分進行轉(zhuǎn)置。在該情況下,不完全共享上下文,但是編碼效率仍然得到提高,這是因為針對不同類的分布更加獨特。
[0119]圖9b示出了詳細說明圖8a中所示的方法中的一個步驟但是被調(diào)整為說明從圖7中所示的劃分中選擇劃分的流程圖——該流程圖與圖8b中的流程圖類似但是適應(yīng)塊轉(zhuǎn)置的任何用法。調(diào)整是在步驟365處增加針對垂直類和水平類中任意一個中的模式來確定轉(zhuǎn)置是否應(yīng)用于與正在編碼的二進制值相對應(yīng)的系數(shù)。(如上所述,針對對角線類中的模式,不觸發(fā)轉(zhuǎn)置)。如果針對水平類中的模式,答案是肯定的,則在步驟361B處使用劃分710(最初為垂直類中的模式設(shè)計的)而不是在步驟361C處使用劃分720 (最初為水平類中的模式設(shè)計的)。如果針對垂直類中的模式,答案是肯定的,則在步驟361C處使用劃分720而不是在步驟361B處使用劃分710。
[0120]該流程圖是“過強的”,其原因在于它可以針對水平類中的模式和/或針對垂直類中的模式來處理部分塊轉(zhuǎn)置或全塊轉(zhuǎn)置。實際上,將一貫針對一個特定類或另一個類(而不是有時針對一個而其他時候針對另一個)完成轉(zhuǎn)置。因此,為了對編碼算法進行實際編程,流程圖將無需太復(fù)雜。例如,如果觸發(fā)轉(zhuǎn)置的特定預(yù)定類是水平類,則測試364中的“垂直”線364B將直接(無條件地)前進至步驟361B,即使應(yīng)用的轉(zhuǎn)置是部分轉(zhuǎn)置也是如此;如果應(yīng)用的轉(zhuǎn)置是全轉(zhuǎn)置,則364中的“水平”線364C也可以直接前進至步驟36IB。
[0121]圖9c示出了詳細說明在假設(shè)特定預(yù)定類是水平類的情況下通過圖9a的步驟360E的流程圖的一個特定路徑360E’的流程圖。在步驟364C,與圖9b的“水平”線364C相對應(yīng)地,確定用于產(chǎn)生編碼塊的幀內(nèi)預(yù)測模式在水平類(其是觸發(fā)轉(zhuǎn)置的特定預(yù)定類)中。詳細說明了圖9b的步驟361A,其示出了如何在環(huán)境(即,應(yīng)用塊轉(zhuǎn)置)下如何采用最初針對垂直類中的模式設(shè)計的劃分710。這是圖Sc的一般步驟361x的特定實施例。與步驟361x相比,區(qū)域A現(xiàn)在是CG的頂行,區(qū)域B是中間兩行,區(qū)域C現(xiàn)在是底行。
[0122]現(xiàn)在參照圖10a、圖1Ob和圖1Oc以解釋如何對變換塊的“概述(overview) ”進行編碼以避免不必要地對零值變換系數(shù)進行編碼。圖1Oa示出了(在該情況下,大小為16x16)樣本塊1000被劃分為(在該情況下具有四行和四列的)系數(shù)組。在塊1000的上方和左側(cè)示出了用于根據(jù)這些列和行指示CG的二維位置的CCx-和CCy-坐標軸。此外,示出了塊內(nèi)的系數(shù)組的鋸齒組掃描順序1010。系數(shù)組100a至100p的特征數(shù)字中的字母反映從左上角CG 100a到右下角CGlOOOp的順序1010。該特定鋸齒順序以(1,0)處的CG緊隨(0,0)處的CG之后開始,但是該順序的“轉(zhuǎn)置”版本((0,1)處的CG緊隨(0,0)處的CG之后)也是可能的。雖然AVS2標準規(guī)定圖1Oa中所示的鋸齒順序,但是其他類型的順序(例如,水平(面向行)順序和垂直(面向列)順序,不論是雙向的還是單向的)也可以在視頻編碼時使用(因此落入本公開的范圍內(nèi))。
[0123]圖1Ob示出了與圖1Oa中所示的相同樣本塊1000相對應(yīng)的系數(shù)組標志塊1000F,并且示出了塊中的系數(shù)組的組掃描順序中的最后一個非零系數(shù)組的位置。每個I指示相應(yīng)的CG是“非零” CG,即,它包含至少一個非零變換系數(shù);每一個O指示相應(yīng)的CG是“O” CG,SP,它僅包含零值變換系數(shù)。根據(jù)順序1010,最后一個非零系數(shù)組(LNZCG)是由標志100Cm來標志的,標志100Cm與塊1000的CG 100m相對應(yīng);兩個相應(yīng)塊的(x,y)_位置是(最后一個CGX,最后一個CGY) = (3,I)。(本領(lǐng)域技術(shù)人員通常將塊中的最后一個非零CG稱作“最后一個”CG,這是因為它是需要編碼的最后一個CG;在解碼期間,組掃描順序中的后續(xù)CG中的所有系數(shù)被推斷為O)。在組掃描順序中在LNZCG 100m之后的CG lOOOnUOOOo和100p中,僅存在零值變換系數(shù)。通過(根據(jù)如這里的X坐標和y坐標或者作為組掃描順序中的一維位置)對LNZCG 100m的位置進行編碼,不僅無需對這些O進行編碼,而且無需對與CG 1000n、1000o和100p相對應(yīng)的零值標志進行編碼。慮到由“n/a”( “不可應(yīng)用”)記號指示的丟失數(shù)據(jù),標志塊1000F因此可以被視為“部分”塊(其仍然起重構(gòu)完整塊的作用)。
[0124]圖1Oc示出了針對圖1Oa中所示的相同樣本塊1000的一些系數(shù)級別細節(jié)。針對CG 100e,示出了該CG內(nèi)的變換系數(shù)的掃描順序1020。如同CG級別的組掃描順序一樣,系數(shù)級別的掃描順序以向右鋸齒折轉(zhuǎn)(zig)然后對角急轉(zhuǎn)(zag)開始,從左上角系數(shù)100eO前進至右下角系數(shù)1000el5。同樣如同組掃描順序一樣,雖然圖1Oc中所示的掃描順序是由AVS2標準規(guī)定的掃描順序,但是系數(shù)級別的其他掃描順序也是可能的(并且落入本公開的范圍內(nèi))。在CG 100k的上方和左側(cè)也示出了用于指示變換系數(shù)的二維位置的Cx和Cy坐標軸。針對系數(shù)組100k和1000m,示出了這些系數(shù)組的掃描順序中的相應(yīng)最后一個非零系數(shù)(LNZCs) 1000kl3 和 1000m3。針對 CG 1000k,(最后一個 PosX,最后一個 PosY) = (3,2)。針對 CG 1000m,(最后一個 PosX,最后一個 PosY) = (Ll)0
[0125]所有掃描順序是非對稱的。例如,掃描順序1020在CG轉(zhuǎn)置或CG的任何其他翻轉(zhuǎn)下不是不變的。如關(guān)于轉(zhuǎn)置塊簡要描述的,現(xiàn)在已經(jīng)認識到,由于CG內(nèi)的系數(shù)的特定鋸齒掃描順序1020以及塊中的CG的組掃描順序1010(其中每一個在對角急轉(zhuǎn)之前向右(而不是向下)鋸齒折轉(zhuǎn)),轉(zhuǎn)置水平類(與垂直類相對)中的塊幀內(nèi)預(yù)測模式是有利的。針對垂直類中的模式,LNZC通常在前兩行中,而針對水平類中的模式,LNZC通常在前兩列中。通過轉(zhuǎn)置水平模式的塊,LNZC移動至前兩行,這平均減少了要掃描的系數(shù)的數(shù)量,從而有利于編碼效率。
[0126]系數(shù)組的LNZC的(X,y)位置的模式相關(guān)編碼
[0127]現(xiàn)在已經(jīng)認識到,在視頻壓縮中的幀內(nèi)預(yù)測和變換過程之后,當CG位于變換塊的頂邊時,該CG中的LNZC趨于靠近CG的頂部。類似地,當CG位于變換塊的左側(cè)邊時,LNZC趨于靠近CG的左側(cè)。
[0128]為了利用該觀察的目的,在圖1la和Ilb中示出了圖1Oa的變換塊1000的兩個不同劃分。圖12示出了如何使用這些劃分之一。
[0129]在圖1la中,劃分1100A將塊1000的系數(shù)組劃分為四個不相交的系數(shù)組區(qū)域。這些區(qū)域是:僅由左上角CG 100a單獨構(gòu)成的區(qū)域0,特征1110A ;由塊1000的頂邊上除了左上角CG 100a之外的CG構(gòu)成的區(qū)域1,特征IlllA ;區(qū)域2,由塊1000的左側(cè)邊上除了左上角CG 100a之外的CG構(gòu)成的區(qū)域2,特征1112A ;以及由既不在塊的左側(cè)邊上也不在頂邊上的所有CG構(gòu)成的區(qū)域3,特征1113A。
[0130]另一方面,在圖1lb中,劃分1100B將塊1000的系數(shù)組劃分為三個不相交的系數(shù)組區(qū)域。這些區(qū)域是:僅由左上角CG 100a單獨構(gòu)成的區(qū)域0,特征1110B ;由塊的左側(cè)邊或頂邊上(而非同時在這二者上)的CG構(gòu)成的區(qū)域1,特征IlllB ;以及由既不在塊的左側(cè)邊上也不在頂邊上的所有CG構(gòu)成的區(qū)域2,特征1112B。
[0131]圖12示出了詳細說明使用圖1lb中所示的三部分劃分1100B的流程圖。在步驟368,確定當前CG屬于區(qū)域O、區(qū)域I和區(qū)域2中的哪一個區(qū)域。根據(jù)該區(qū)域是區(qū)域O、I還是2,分別在步驟368A處基于上下文模型O、在步驟368B處基于上下文模型1、或者在步驟368C處基于上下文模型2,對該CG中的LNZC的(x,y)位置進行編碼。在一個示例性實施例中,基于區(qū)域索引、幀內(nèi)預(yù)測模式分類和二進制值索引來確定用于對當前CG中的LNZC的(X,y)位置進行熵編碼的上下文模型,如下面的偽代碼所示:
[0132]如果當前CG屬于區(qū)域2,則:
[0133]ctxlnc (IastPosX) = min(binlndex,I);
[0134]ctxlnc (IastPosY) = min(binlndex,I);
[0135]否則,
[0136]ctxlnc (IastPosX)=
[0137]reg1nIndex*4+(intraModeldx > 0)*2+min(binlndex,1)+2 ;
[0138]ctxlnc (IastPosY)=
[0139]reg1nIndex*4+ (intraModeldx > 0) *2+min (binlndex, I)+2 ;其中,intraModeldx = 0,如果巾貞內(nèi)預(yù)測模式在垂直類中
[0140]= 1,如果幀內(nèi)預(yù)測模式在水平類中
[0141]=2,其它情況
[0142]用于對系數(shù)組中的最后一個非零系數(shù)的位置數(shù)據(jù)進行編碼
[0143]在統(tǒng)一的AVS2編碼設(shè)計中,CG中的最后一個非零系數(shù)的(x,y)位置被編碼為(X,Y),其中,原點(0,0)是CG的左上角系數(shù)位置。向坐標(X,Y)應(yīng)用一元二進制化。如果當前CG不是LNZCG,則通常當前CG的最后一個非零系數(shù)位置位于接近右下角、左下角或右上角系數(shù)位置,在該情況下,編碼(X,Y)不是有效的,這是因為兩個坐標中的至少一個將接近值3,值3是可能針對CG編碼的坐標值(O至3)中最長的,其中為了符合AVS2標準,CG始終具有大小4x4。
[0144]在圖13中非常一般地示出了對該觀測的技術(shù)應(yīng)用,在圖13中,流程圖示出了用于對正在對被編碼的當前系數(shù)組的掃描順序中的最后一個非零系數(shù)的(X,y)_位置的修改表示進行編碼的新穎方法1300。在針對符合AVS2CG(具有大小4x4)的具體實施例中,修改導(dǎo)致(可能有條件地)分別將值3和2轉(zhuǎn)換為O和I ;這通常提高了編碼效率。
[0145]該一般方法僅應(yīng)用于作為在LNZCG之前非零CG的CG。因此,方法1300中的第一步驟是在步驟1310處確定當前CG滿足這些要求。然后,在步驟1320,獲得當前CG中最后一個非零系數(shù)的(x,y)_位置(X,Y)。接下來,在步驟1340,向坐標(X,Y)應(yīng)用非恒等修改以計算修改的(x,y)_位置(X’,Y’)。修改基于以下至少一項:(a)在產(chǎn)生編碼塊時使用的幀內(nèi)預(yù)測模式以及(b)與當前系數(shù)組相鄰的至少一個系數(shù)組。分別在圖13a至13c中示出了修改基于(a)、基于(b)和基于這二者的實施例。最后,在步驟1350,使用上下文模型對修改的(x,y)_位置(X’,Y’ )進行二進制化和熵編碼。
[0146]圖13a示出了作為圖13中所示的方法1300的一個實施例的方法1300A(其基于幀內(nèi)預(yù)測模式所屬的類來修改(x.y)_位置)的流程圖,其中省略了步驟1310。圖13中未示出的步驟1330包括在圖13a中,這是因為要在該實施例中在產(chǎn)生編碼塊時使用的幀內(nèi)預(yù)測模式的確定現(xiàn)在是必不可少的。用虛線輪廓對此進行描繪,這是因為(a)它無需在步驟1320之后發(fā)生,以及(b)為了(通過空間預(yù)測器105)執(zhí)行空間預(yù)測(圖1a的編碼模式選擇器160)將始終確定幀內(nèi)預(yù)測模式,而不管該方法如何。
[0147]方法1300A的本質(zhì)是步驟1340A。在該示例性實施例中,修改的應(yīng)用取決于幀內(nèi)預(yù)測模式所屬的類。在步驟1341,確定類是否是對角類。如果是,則在步驟1342,將LNZC的真實(x,y)位置(X,Y)轉(zhuǎn)換為(3-Χ,3-Υ)。如果否,則在步驟1343,確定類是否是垂直類。如果是,則在步驟1344,將LNZC的真實(X,y)位置的(X,Y)轉(zhuǎn)換為(3-X,Y)。如果否,則在步驟1346 JfLNZC的真實(X,y)位置(X,Y)轉(zhuǎn)換為(X,3_Y);在該最后一種情況下,通過排除過程,隱含幀內(nèi)預(yù)測模式在水平類中。
[0148]可以在完全相同的三個相應(yīng)條件下通過其他測試序列來實現(xiàn)三個不同轉(zhuǎn)換是基本邏輯。如果提早測試更頻繁發(fā)生的狀況(從而減少執(zhí)行的測試的平均次數(shù)),對于一個特定的序列而言可能是有利的。因為本公開中定義的對角類最頻繁地發(fā)生,因此圖13a中所示的特定測試序列通常地受益于其首先針對對角類的測試。
[0149]圖13b示出了作為圖13中所示的方法1300的另一實施例的方法1300B(其基于當前系數(shù)組的至少一個相鄰系數(shù)組來修改(x,y)_位置)的流程圖,其中省略了步驟1310。在該示例性實施例中,在步驟1340B處應(yīng)用修改取決于與當前CG相鄰的先前處理過的CG (B卩,緊跟在當前CG右側(cè)或下方的CG)中的哪一些是O并且哪一些是非零。在步驟1347,確定是否滿足右側(cè)鄰居是O并且下側(cè)鄰居是非零。如果是,則在步驟1346,將LNZC的真實(X,y)_位置(X,Y)轉(zhuǎn)換為(X,3-Y)。如果否,則在步驟1348,確定是否滿足右側(cè)鄰居是非零并且下側(cè)鄰居是O。如果是,則在步驟1344,將LNZC的真實(x,y)_位置(X,Y)轉(zhuǎn)換為(3-X,Y)。如果否,則在步驟1349,確定右側(cè)鄰居和下側(cè)鄰居是否均為非零。如果是,則在步驟1342,將LNZC的真實(X,y)_位置(X,Y)轉(zhuǎn)換為(3_X,3_Y)。如果否,則不進行轉(zhuǎn)換,即,真實(x,y)_位置(X,Y)在被編碼之前不進行算術(shù)修改;在該情況下,通過排除過程,隱含右側(cè)鄰居和下側(cè)鄰居均為零。
[0150]可以在完全相同的三個相應(yīng)條件下通過其他測試序列實現(xiàn)三個不同轉(zhuǎn)換是基本邏輯。如果提早測試更頻繁的狀況(從而減少執(zhí)行的測試的平均次數(shù)),對于一個此類序列而言可能是有利的。
[0151]圖13c示出了圖13中所示的方法1300的又一實施例的步驟1340C的流程圖。在該示例性實施例中,(X.y)-位置的修改的應(yīng)用取決于以下至少一項:(a)與當前CG相鄰的至少一個CG以及(b)要在產(chǎn)生編碼塊時使用的幀內(nèi)預(yù)測模式的分類。在步驟1347,確定是否滿足右側(cè)鄰居是O并且下側(cè)鄰居是非零。如果是,則在步驟1346,將LNZC的真實(X,y)_位置(X,Y)轉(zhuǎn)換為(Χ,3-Υ)。如果否,則在步驟1348,確定是否滿足右側(cè)鄰居是非零并且下側(cè)鄰居是O。如果是,則在步驟1344,將LNZC的真實(x,y)_位置(X,Y)轉(zhuǎn)換為(3-Χ,Y)。如果否,則在步驟1349,確定右側(cè)鄰居和下側(cè)鄰居是否均為非零。如果是,則在步驟1342,將LNZC的真實(X,y)_位置(X,Y)轉(zhuǎn)換為(3_X,3_Y)。如果否,則在步驟1343,確定幀內(nèi)預(yù)測模式是否在垂直類中。如果是,則在步驟1344,將LNZC的真實(x,y)_位置(X,Y)轉(zhuǎn)換為(3-Χ,Y)。如果否,則在步驟1345,確定幀內(nèi)預(yù)測模式是否在水平類中。如果是,則在步驟1346,將LNZC的真實(x,y)_位置(X,Y)轉(zhuǎn)換為(X,3_Y)。如果否,則不進行轉(zhuǎn)換,即,真實U,y)_位置(X,Y)在被編碼之前不進行算術(shù)修改;在該最后一種情況下,通過排除過程,隱含右側(cè)鄰居和下側(cè)鄰居均為零并且?guī)瑑?nèi)預(yù)測模式在對角類中。
[0152]可以在完全相同的三個相應(yīng)條件下通過其他測試序列實現(xiàn)三個不同轉(zhuǎn)換是基本邏輯。如果提早測試更頻繁的狀況(從而減少執(zhí)行的測試的平均次數(shù)),對于一個此類序列而言可能是有利的。
[0153]現(xiàn)在轉(zhuǎn)向圖14,示出了說明用于對根據(jù)圖13中所示的方法1300編碼的視頻進行解碼的方法1400的流程圖。在這種編碼視頻的逐塊處理期間,在步驟1410,針對當前塊中的當前系數(shù)組,對該系數(shù)組的掃描順序中的最后一個非零系數(shù)的真實(X,y)_位置的修改的編碼表示(X,Y)進行解碼。然后,在步驟1440,向修改的表示(X,Y)應(yīng)用非恒等修改以獲得真實(x,y)_位置。與方法1300 —樣,修改基于以下至少一項:(a)在產(chǎn)生編碼塊時使用的幀內(nèi)預(yù)測模式以及(b)與當前系數(shù)組相鄰的至少一個系數(shù)組。
[0154]如圖14中所示并且如剛剛所述的方法1400通常足夠使得它可以應(yīng)用于根據(jù)分別如圖13A、13B和13C所示并且如上文詳細討論的方法1300的范圍內(nèi)的各個實施例中的任意一個實施例編碼的視頻。當然,它不能同時應(yīng)用于方法1300的范圍內(nèi)的每一個編碼實施例。為了與方法1300的任何特定實施例兼容,方法1400必須具有與方法1300的相應(yīng)步驟1340兼容的修改步驟1440的實施例。將顯而易見的是,修改步驟1440必須是步驟1340的逆。更具體地,在每一個可能的環(huán)境中-不論基于在產(chǎn)生編碼塊時使用的幀內(nèi)預(yù)測模式還是基于與當前系數(shù)組相鄰的至少-個系數(shù)組-步驟1440處的對(X,Y)的轉(zhuǎn)換必須逆轉(zhuǎn)曾在當前塊的編碼期間在步驟1340處執(zhí)行的對(X,Y)的無論哪種轉(zhuǎn)換。
[0155]因為3-(3-X) =X并且3-(3_Υ) = Y,因此可以在步驟1340處在不同條件下使用的各種轉(zhuǎn)換中的每一種——即,(Χ,Υ) — (χ,3-γ),(X, Y) — (3-Χ, Y)和(Χ,Υ) — (3_Χ,3-Υ)——是周期2操作,這意味著將其應(yīng)用兩次相當于應(yīng)用恒等(即,什么也不做)操作。換句話說,每一個轉(zhuǎn)換是其自己的逆。其最終結(jié)果是將與方法1300的特定實施例兼容的針對方法1400所需的步驟1440的變形實際上與在方法1300的該實施例中使用的步驟1340的變形相同。在這種情況下,未在單獨的圖中示出方法1400的與相應(yīng)方法1300Α、1300Β和1300C兼容的三個變形。
[0156]最后,參照圖15,圖15示出了計算設(shè)備1500的示例性實施例的簡化框圖,計算設(shè)備1500可以是多種設(shè)備中的任意一種,包括但不限于:服務(wù)器、適合編程的通用計算機、音頻/視頻編碼和回放設(shè)備、機頂盒、電視廣播設(shè)備、DVD或藍光播放器、以及可以用作編碼器、解碼器或這二者的移動設(shè)備(例如,智能電話、平板電腦、平板手機(phablet)等)。設(shè)備1500被描繪為具有兩個處理器1511和1512以控制設(shè)備的功能,但是眾所周知,計算設(shè)備可以被設(shè)計為具有單個通用處理器或具有任意數(shù)量的通用和/或?qū)S锰幚砥?。設(shè)備1500包括存儲器1520,其可以是能夠存儲處理器可執(zhí)行指令的非臨時性處理器可讀介質(zhì),所述處理器可執(zhí)行指令可以由設(shè)備1500中的一個或多個處理器(例如,處理器1511和1512)執(zhí)行。介質(zhì)可以是單一的或者可以由多個部分構(gòu)成。介質(zhì)可以具有一種或多種類型,例如,高密度盤、閃存設(shè)備、隨機存取存儲器(RAM)、只讀存儲器(ROM)、硬盤驅(qū)動器、專用集成芯片(ASIC)等。存儲器1520或其各個部分可以從設(shè)備1500中拆卸和/或可以永久性地固定在其中。存儲器1520或其各個部分的屬性可以呈現(xiàn)存儲在其中的不可改變和/或可重新編程的指令;可重新編程存儲器可以是易失性的或非易失性的。在各個實施例中,可以將指令稱為以硬件、固件和/或軟件的形式執(zhí)行。
[0157]存儲在存儲器1520中的處理器可執(zhí)行指令當由設(shè)備1500中的一個或多個處理器(例如,處理器1511和1512)執(zhí)行時可以將設(shè)備1500配置為執(zhí)行多個功能。特定的此類處理器可執(zhí)行指令組可以構(gòu)成計算機程序,也稱作“計算機應(yīng)用”或僅簡稱為“應(yīng)用”。具體地,存儲器1520可以(在處理器可讀介質(zhì)中)存儲能夠執(zhí)行根據(jù)本公開的一個或多個方法的應(yīng)用1530,在該情況下,設(shè)備1500是編碼器,例如,編碼器100B。備選地,存儲器1520可以存儲能夠執(zhí)行根據(jù)本公開的一個或多個解碼方法的解碼應(yīng)用1540,在該情況下,設(shè)備1500是解碼器,例如,解碼器500B。作為另一個備選方式,存儲器1520可以存儲編碼應(yīng)用1530和解碼應(yīng)用1540,在該情況下,設(shè)備1500既是編碼器,也是解碼器。
[0158]存儲器1520可以是用于使用視頻解碼器根據(jù)來自編碼視頻的比特流中的殘余數(shù)據(jù)的編碼塊對殘余數(shù)據(jù)的當前塊進行重構(gòu)的裝置。該裝置包括:(a)用于確定在產(chǎn)生編碼塊時使用的模式是預(yù)定類中的幀內(nèi)預(yù)測模式的裝置;(b)用于對編碼塊進行熵解碼以獲得熵解碼塊的裝置;以及(C)用于響應(yīng)于確定模式在預(yù)定類中對熵解碼塊的至少一部分進行轉(zhuǎn)置以獲得轉(zhuǎn)置塊的裝置。
[0159]備選地,存儲器1520可以是用于對設(shè)備1500上的視頻進行編碼的裝置,視頻包括劃分為塊的圖片。該裝置包括:(a)用于使用預(yù)定類中的幀內(nèi)編碼模式根據(jù)當前塊的空間預(yù)測來產(chǎn)生針對該塊的殘余數(shù)據(jù)的裝置;(b)用于對殘余數(shù)據(jù)進行頻譜變換和量化以獲得量化變換塊的裝置;(C)用于對量化變換塊的至少一部分進行轉(zhuǎn)置以獲得轉(zhuǎn)置塊的裝置;(d)用于對轉(zhuǎn)置塊的變換系數(shù)進行平跑編碼以獲得平跑對的裝置;以及(e)用于使用上下文模型對平跑對進行二進制化和熵編碼的裝置。
[0160]本領(lǐng)域普通技術(shù)人員認識到,可以在保持在本公開的范圍內(nèi)的情況下對上述示例性實施例進行各種常規(guī)調(diào)整和修改。因此,所述實施例應(yīng)當被認為是示例性的而非限制性的。
【權(quán)利要求】
1.一種用于使用視頻解碼器根據(jù)編碼視頻的比特流中的殘余數(shù)據(jù)的編碼塊來重構(gòu)殘余數(shù)據(jù)的當前塊的方法,所述方法包括: 確定在產(chǎn)生所述編碼塊時使用的模式是預(yù)定類中的幀內(nèi)預(yù)測模式; 對所述編碼塊進行熵解碼以獲得熵解碼塊;以及 響應(yīng)于確定所述模式在所述預(yù)定類中,對所述熵解碼塊的至少一部分進行轉(zhuǎn)置以獲得轉(zhuǎn)置塊。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述預(yù)定類包括水平類。
3.根據(jù)權(quán)利要求2所述的方法,其中,所述水平類包括所述AVS2視頻編碼標準的幀內(nèi)預(yù)測模式 1、7、14、17、18、27、28 和 29。
4.根據(jù)權(quán)利要求2或權(quán)利要求3所述的方法, 其中,所述當前塊由不相交的系數(shù)組構(gòu)成,每一個系數(shù)組包括排列為四行的變換系數(shù);以及 對所述編碼塊進行熵解碼包括:針對每一個系數(shù)組,基于上下文對與所述系數(shù)組相對應(yīng)的每一個二進制值進行解碼,所述上下文是至少部分地基于以下各項導(dǎo)出: 所述二進制值是否與左上角系數(shù)組中的DC變換系數(shù)相對應(yīng),或者, 所述二進制值是否與頂行中的變換系數(shù)相對應(yīng), 所述二進制值是否與中間兩行中的變換系數(shù)相對應(yīng),或者 所述二進制值是否與底行中的變換系數(shù)相對應(yīng)。
5.根據(jù)權(quán)利要求1至3中任一項所述的方法,其中,熵解碼包括:針對除了所述預(yù)定類之外的類中的模式使用上下文模型。
6.根據(jù)權(quán)利要求1至3中任一項所述的方法,其中,所述至少一個部分包括位于所述熵解碼塊的左側(cè)邊和頂邊之一上的子塊。
7.根據(jù)權(quán)利要求1至3中任一項所述的方法,其中,所述至少一個部分是正方形。
8.根據(jù)權(quán)利要求1至3中任一項所述的方法,其中,所述至少一個部分包括整個所述熵解碼塊。
9.根據(jù)權(quán)利要求1至3中任一項所述的方法,其中,確定所述模式在所述預(yù)定類中包括: 從所述比特流解碼出對所述模式的指示;以及 確定所述模式所屬的那個類。
10.根據(jù)力求要求I至3中任一項所述的方法,其中,確定所述模式在所述預(yù)定類中在對所述編碼塊進行熵解碼之前。
11.根據(jù)權(quán)利要求1至3中任一項所述的方法,還包括: 對所述轉(zhuǎn)置塊進行解量化以獲得解量化塊;以及 向解量化塊應(yīng)用反頻譜變換。
12.根據(jù)權(quán)利要求11所述的方法,其中,所述反頻譜變換是反離散余弦變換。
13.根據(jù)權(quán)利要求1至3中任一項上的方法, 其中所述當前塊由三個不相交的轉(zhuǎn)置不變區(qū)域構(gòu)成,每一個區(qū)域被劃分為系數(shù)組,每一個系數(shù)組包括變換系數(shù);以及 對所述編碼塊進行熵解碼包括:針對每一個系數(shù)組,基于上下文對所述系數(shù)組中所述系數(shù)組的系數(shù)的掃描順序中的最后一個非零系數(shù)的(X,y)_位置進行解碼,其中,所述上下文是至少部分地基于所述系數(shù)組所屬的那個區(qū)域?qū)С龅摹?br>
14.根據(jù)權(quán)利要求13所述的方法, 其中,所述系數(shù)組按行和列被排列在所述當前塊中; 所述單個區(qū)域之一由在頂行和左列二者中的系數(shù)組構(gòu)成; 所述三個區(qū)域中的另一個由在所述頂行或所述左列中而不是同時在所述頂行和所述左列中的系數(shù)組構(gòu)成;以及 所述三個區(qū)域中的剩余一個區(qū)域由既不在所述頂行中也不在所述左列中的系數(shù)組構(gòu)成。
15.一種用于根據(jù)編碼視頻的比特流中的殘余數(shù)據(jù)的編碼塊重構(gòu)殘余數(shù)據(jù)的當前塊的視頻解碼器,所述解碼器包括: 一個或多個處理器; 存儲器;以及 解碼應(yīng)用,所述解碼應(yīng)用存儲在存儲器中并且包含用于將所述一個或多個處理器配置為執(zhí)行根據(jù)權(quán)利要求1至3中任一項所述的方法的指令。
16.一種用于使用視頻編碼器對視頻進行編碼的方法,所述視頻包括劃分為塊的圖片,所述方法包括: 使用預(yù)定類中的幀內(nèi)編碼模式根據(jù)當前塊的空間預(yù)測產(chǎn)生針對所述塊的殘余數(shù)據(jù); 對所述殘余數(shù)據(jù)進行頻譜變換和量化以獲得量化變換塊; 對所述量化變換塊的至少一部分進行轉(zhuǎn)置以獲得轉(zhuǎn)置塊; 對所述轉(zhuǎn)置塊的變換系數(shù)進行平跑編碼以獲得平跑對;以及 使用上下文模型對所述平跑對進行二進制化和熵編碼。
17.根據(jù)權(quán)利要求16所述的方法,其中,所述預(yù)定類包括水平類。
18.一種用于對視頻進行編碼的視頻編碼器,所述編碼器包括: 一個或多個處理器; 存儲器;以及 編碼應(yīng)用,所述編碼應(yīng)用存儲在存儲器中并且包含用于將所述一個或多個處理器配置為執(zhí)行根據(jù)權(quán)利要求16或17所述的方法的指令。
19.一種非臨時性處理器可讀介質(zhì),存儲處理器可執(zhí)行指令,當執(zhí)行所述處理器可執(zhí)行指令時,所述處理器可執(zhí)行指令將一個或多個處理器配置為執(zhí)行根據(jù)權(quán)利要求1至3、16和17中任一項所述的方法。
【文檔編號】H04N19/13GK104469384SQ201410484188
【公開日】2015年3月25日 申請日期:2014年9月19日 優(yōu)先權(quán)日:2013年9月19日
【發(fā)明者】王競, 王小峰, 何大可, 計天穎 申請人:黑莓有限公司