两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

基于上下文的自適應二進制算術編碼的方法和系統(tǒng)的制作方法

文檔序號:6559178閱讀:185來源:國知局
專利名稱:基于上下文的自適應二進制算術編碼的方法和系統(tǒng)的制作方法
技術領域
本發(fā)明一般地涉及靜止圖像和視頻序列壓縮,尤其涉及一種基于上下文的自適應二進制算術編碼方法和系統(tǒng)。
背景技術
未壓縮形式的數(shù)字圖像包含了一個圖像像素或圖元的陣列。例如,在一種以四分之一通用中間格式(QCIF)著稱的常用數(shù)字圖像格式中,圖像或幀包含了排列在一個176×144像素的陣列中的25,344個像素。每個像素依次由一定數(shù)量的比特表示,它們傳送的是關于像素明亮度(亮度)和/或顏色(色度)的信息。此外還存在表示數(shù)字圖像中的亮度和/或色度的不同方案。通常使用的則是所謂的YUV顏色模型。其中亮度或Y分量表示像素亮度,并且像素顏色由U和V標記的兩個色度或色差分量來表示。此外還通常用到那些以表示光的三原色的分量為基礎的其他顏色模型,例如RGB(紅,綠,藍)顏色模型。然而,與基于原色的顏色模型相比,基于亮度/色度表示的顏色模型則更具優(yōu)勢。這些優(yōu)勢源自于人類視覺系統(tǒng)更易于感受到光亮變化而不是顏色變化的特性。而YUV顏色模型通常為色度分量(U,V)使用了一個低于亮度分量(Y)的空間分辨率,由此利用了這種特性。這樣就可以在不顯著降低所察覺圖像質量的情況下減少表示圖像色彩信息所需要的信息量。
色度分量的較低空間分辨率通常是借助于二次抽樣來實現(xiàn)的。通常,一個16×16圖像像素的塊由四個包含了亮度信息的8×8像素的塊表示,相應色度分量分別由一個8×8像素的塊來表示,其中所述塊表示一個與亮度分量中的16×16像素的塊等價的圖像區(qū)域。因此色度分量在x和y方向上由一個大小為2的因數(shù)來進行空間二次抽樣。最終得到的四個8×8像素的亮度塊以及2個在空間上與之對應的8×8像素的色度塊的組合通常稱為一個YUV宏塊,或者簡稱為宏塊。而QCIF圖像包括11×9個宏塊。如果用8位(也就是0到255這個范圍中的數(shù)字)分辨率來表示亮度塊和色度塊,那么,用于表示與每個宏塊相關聯(lián)的亮度和色度信息所需要的總比特數(shù)為6×(8×8×8)=3072比特。因此,用于表示QCIF格式圖像所需要的比特數(shù)為99×3072=304,128比特。
應該了解的是,即使是在如上所述使用一個大小為2的因數(shù)來對數(shù)字圖像的兩個色度分量進行二次抽樣的情況下,中等大小(例如174×144像素)的未壓縮圖像也會需要大量比特來供顯示所用。這意味著以未壓縮格式保存數(shù)字圖像所需要的存儲器數(shù)量將會過度。此外,舉例來說,如果經(jīng)由一個具有中等或較低可用帶寬的數(shù)據(jù)通信網(wǎng)絡來傳送靜止圖像,那么傳輸時間將會很長或者網(wǎng)絡有可能會發(fā)生阻塞。如果希望實時發(fā)送作為數(shù)字視頻序列的一系列圖像,那么帶寬需求甚至會更為嚴格。例如,以每秒30幀的速率傳送一個使用了YUV顏色模型表示并包括一系列未壓縮QCIF格式圖像的數(shù)字序列需要用到9Mb/s(百萬比特/秒)以上的帶寬。由于需要很大的存儲器容量、傳輸信道容量和硬件性能,因此,在被用于視頻記錄、傳輸和顯示時,這種高數(shù)據(jù)速率通常是不切實際的。如果要在ISDN(綜合業(yè)務數(shù)字網(wǎng))或PSTN(公共交換電話網(wǎng))這類固定線路上實時傳送視頻序列,那么可用數(shù)據(jù)傳輸帶寬通常約為64k/s。在移動可視電話中,至少有一部分傳輸是在無線電通信鏈路上進行的,那么可用帶寬有可能會低到20kb/s。這意味著必須顯著減少用于表示視頻數(shù)據(jù)的信息量,以便能在低帶寬的通信網(wǎng)絡上傳輸數(shù)字圖像或視頻序列。然而合乎需要的是,這種減少應該在不顯著降低圖像/視頻序列質量的情況下實現(xiàn)。
在過去數(shù)年中已經(jīng)針對減少表示數(shù)字圖像和視頻序列所需數(shù)據(jù)量而進行了大量的研究工作,由此開發(fā)了多種不同方案和國際標準來對數(shù)字靜止圖像和數(shù)字視頻進行壓縮。在現(xiàn)有的幾乎所有靜止圖像和視頻編碼器中,所使用的基本的圖像壓縮方法都包含了基于塊的變換編碼。通常,變換編碼是將來自一個包含像素值的圖示的圖像數(shù)據(jù)轉換成一種包含一組系數(shù)值的形式,其中每一個系數(shù)值都是所論述變換的基函數(shù)的一個加權因數(shù)(乘數(shù))。此外還可以顯示,在典型的數(shù)字圖像內(nèi)部存在相當大程度的空間冗余。事實上,這意味著圖像內(nèi)部任何像素值通常與其緊鄰的其他像素值實際是相同的,也就是說,在像素值間存在很大程度上的相關。此外進一步已知的是,在對圖像執(zhí)行某些數(shù)學變換,例如二維離散余弦變換(DCT)的時候,這種空間冗余度將會顯著降低,由此產(chǎn)生一個更為簡潔的圖像數(shù)據(jù)顯示。
在JPEG靜止圖像編碼中使用的基于塊的變換編碼例如,在根據(jù)廣泛使用的JPEG標準的基準模式所執(zhí)行的靜止圖像壓縮中,所要編碼的圖像首先分成互不重疊的方形塊陣列,其中舉例來說,每一個塊都包括一個8×8的圖像像素陣列。然后,就JPEG基準而言則是將二維離散余弦變換(DCT)獨立應用于每一個圖像塊。這樣做具有把來自像素值域的圖像數(shù)據(jù)轉換到空間頻域并產(chǎn)生一組相應系數(shù)值的效果,其中每個系數(shù)值都是一個關于二維DCT基函數(shù)的加權因數(shù)。由此產(chǎn)生的系數(shù)值經(jīng)過量化,然后使用熵編碼而以一種無損方式對其進行編碼,從而進一步減少供其顯示所需要的數(shù)據(jù)量(也就是比特數(shù))。根據(jù)JPEG基準,熵編碼器只使用了霍夫曼編碼來產(chǎn)生一個壓縮比特流,但在其他模式中也可以使用算術編碼。最終,用于描述圖像和編碼參數(shù)(例如壓縮類型、量化和編碼表、圖像大小等等)的數(shù)據(jù)被嵌入熵編碼器產(chǎn)生的比特流中。而由于JPEG標準包括四種備選編碼模式并且只對可用的量化和編碼表安插了少量約束條件,因而有必要執(zhí)行上述操作,以便能在不同平臺之間互換JPEG壓縮比特流并且在毫無歧義的情況下重建圖像。
類似膠片上所記錄的常規(guī)電影這樣的數(shù)字視頻序列包括一系列靜止圖像(通常稱之為“幀”),而運動錯覺則是通過以通常為每秒15到30幀這樣的相對較快的速率相繼顯示所述幀而產(chǎn)生的。與任何靜止圖像一樣,在一個數(shù)字視頻序列內(nèi)部,單獨幀的像素值將會顯示出相當大的空間冗余。因此,與單獨的靜止圖像一樣,數(shù)字視頻序列的幀也可以由基于塊的變換編碼來進行處理。
同樣,視頻序列相鄰幀的圖像往往是相似的,因此,在某個視頻幀與下一視頻幀之間,整體上的變化是非常小的。這意味著在典型數(shù)字視頻序列內(nèi)部存在相當大的時間冗余。例如,在一個場景中可以包括諸如背景景物之類的某些靜止元素,也可以包括某些運動區(qū)域,例如新聞廣播員面部。在序列的相鄰幀中,背景可能保持不變,而場景中的唯一運動則由新聞廣播員面部表情的變化產(chǎn)生。因此,在形成視頻序列的壓縮表示時,除了減少空間冗余的方法之外,也可以使用那些減少序列中圖像數(shù)據(jù)時間冗余的技術,由此實現(xiàn)進一步的數(shù)據(jù)壓縮。
混合視頻編碼器/解碼器現(xiàn)有技術的視頻編碼系統(tǒng)使用了一種以運動補償預測著稱的技術來減少視頻序列中的時間冗余。就這種運動補償技術而言,在數(shù)字視頻序列中,某些(通常很多)幀的圖像內(nèi)容是從序列中的一個或多個其他幀“預測”的,其中所述其他幀即為通常所說的“參考幀”。圖像內(nèi)容的預測是通過使用“運動矢量”在將要編碼的幀與一個或多個參考幀之間追蹤一個圖像中的對象或區(qū)域來實現(xiàn)的。一般來說,在視頻序列中,一個或多個參考幀可以先于將要編碼的幀或是跟隨在所述幀之后。然而,從本文的后續(xù)論述中可以明顯看出,將運動補償預測應用于視頻序列的所有幀并由此在現(xiàn)有技術的視頻編碼系統(tǒng)中使用至少兩種類型的編碼,這樣做并不適當(或者可能)。
使用運動補償預測而被壓縮的視頻序列幀通常稱為幀間編碼或P幀。光是運動補償預測則很難提供足夠清楚的視頻幀圖像內(nèi)容表示,因此通常有必要為各個幀內(nèi)編碼的幀提供一個所謂的“預測誤差”(PE)幀。如本文稍后更為詳細描述的那樣,預測誤差幀表示的是幀間編碼幀的解碼版本與編碼幀圖像內(nèi)容之間的差別。更具體地說,預測誤差幀包含了表示將要編碼的幀的像素值與基于所論述幀的預測(幀間編碼)版本而形成的對應重建像素值之間的差別。因此,預測誤差幀具有與靜止圖像相似的特征,并且可以通過應用基于塊的變換編碼來減少表示該幀所需要的數(shù)據(jù)量(比特數(shù))。
沒有使用運動補償預測壓縮的視頻序列幀被稱為幀內(nèi)(幀內(nèi))編碼或I幀。通常,幀內(nèi)編碼幀是借助了將基于塊的變換編碼應用于所要編碼幀的像素值而產(chǎn)生的。另外在可能的情況下,幀內(nèi)編碼幀的塊是從同一幀以內(nèi)的先前編碼塊中預測的。這種技術即為通常所說的幀間預測,它具有進一步減少表示幀內(nèi)-編碼幀所需要的數(shù)據(jù)量的效果。
為了更詳細地描述基于塊的變換編碼和運動補償預測的原理,現(xiàn)在將對圖1加以參考,該圖是常規(guī)混合視頻編碼器的示意圖,其中使用了幀內(nèi)與幀間編碼的組合來產(chǎn)生一個壓縮(編碼)視頻比特流。在圖2中描述了相應的解碼器并且稍后將在文中對其進行描述。
視頻編碼器300包括一個用于從相機或其他視頻源(未顯示)接收數(shù)字視頻信號的輸入端301。它還可以包括一個調(diào)整為執(zhí)行基于塊的離散余弦變換(DCT)的變換單元304,一個量化器306,一個反向量化器308,一個調(diào)整成執(zhí)行基于塊的反離散預先變換(IDCT)的逆變換單元310,組合器312和316以及一個幀存儲器320。編碼器還包括運動估計器330,運動場編碼器(motion field encoder)340以及運動補償預測器350。開關302和314則是通過控制管理器360在視頻編碼的幀內(nèi)模式與視頻編碼的幀間模式之間切換編碼器而以協(xié)同方式進行操作的。編碼器300還包括視頻復用編碼器370,它從編碼器300生成的各種類型信息中構成單獨比特流335,以便進一步傳輸?shù)竭h程接收終端,或者舉例來說,它也可以將所述比特流保存在一個大容量存儲介質中,例如計算機硬盤(沒有顯示)。
編碼器300是如下運作的。視頻源提供給輸入端301的各個未壓縮視頻幀都是以逐個宏塊的方式接收和處理的,其中最好以光柵掃描順序來對其進行處理。在開始編碼新的視頻序列時,所述序列中的第一幀是作為一個幀內(nèi)編碼幀來編碼的。接下來,除非滿足下列條件之一,否則將通過對編碼器進行編程來以幀間編碼格式編碼各幀1)判定正被編碼的當前幀與預測中使用的參考幀很不一樣,并由此產(chǎn)生了過多預測誤差信息;2)預先定義的幀內(nèi)幀的重復間隔已經(jīng)終止;或者3)從一個接收終端接收到一個反饋,該反饋表示的是一個要求以幀內(nèi)編碼格式來提供幀的請求。
條件1)的出現(xiàn)是通過監(jiān)視組合器316的輸出來檢測的。組合器316在正被編碼幀的當前宏塊與其在運動補償預測部件350中產(chǎn)生的預測之間形成一個差值。如果關于這個差值的量度(例如像素值的絕對差值總和)超出一個預定門限,那么組合器316將經(jīng)由控制線319來向控制管理器360發(fā)出通知,并且控制管理器360將經(jīng)由控制線313來操作開關302和314,以便將編碼器300切換到幀內(nèi)編碼模式。條件2)的出現(xiàn)是借助于控制管理器360中的定時器或幀計數(shù)器而以如下方式進行監(jiān)視,如果定時器終止或者幀計數(shù)器達到預定數(shù)量的幀,則控制管理器360經(jīng)由控制線313操作開關302和314,以便將編碼器切換到幀內(nèi)編碼模式。如果控制管理器360經(jīng)由控制線321而從一個接收終端接收到一個表示接收終端需要對幀內(nèi)編碼幀進行刷新的反饋信號,則觸發(fā)條件3)。例如,如果先前發(fā)送的幀在其傳送過程中因為干擾而受到嚴重破壞,進而不可能在接收機上對其進行解碼,則有可能出現(xiàn)這種情況。在這種條件下,接收解碼器發(fā)出一個要求以幀內(nèi)編碼格式來對下一幀進行編碼的請求,由此重新初始化所述編碼序列。
現(xiàn)在對幀內(nèi)編碼模式中的編碼器300的操作進行描述。在幀內(nèi)編碼模式中,控制管理器360對開關302進行操作,以便從輸入線318接收視頻輸入。視頻信號則是以逐個宏塊的方式并經(jīng)由輸入線318而從輸入端301接收的。在對其進行接收的時候,構成宏塊的亮度和色度值塊傳遞到DCT變換單元304,所述單元對每一個塊值執(zhí)行一個二維離散余弦變換,由此為各個塊產(chǎn)生一個二維DCT系數(shù)陣列。舉例來說,在前述情況中,每一個宏塊都包括4個8×8的亮度值塊以及兩個在空間上與之對應的8×8像素的色度值塊,而DCT變換部件304則為每個塊產(chǎn)生一個8×8的系數(shù)值陣列。
關于各個塊的DCT系數(shù)傳遞到量化器306,在所述量化器306中使用量化參數(shù)QP對其進行量化。關于量化參數(shù)QP的選擇是經(jīng)由控制線315并由控制管理器360來控制的。由于經(jīng)過量化的系數(shù)的數(shù)值精度低于DCT變化單元304初始生成的系數(shù)的數(shù)值精度,因此所述量化會引入一個信息損失。這樣就提供了另外一種借以減少表示視頻序列中各個圖像所需數(shù)據(jù)量的機制。然而,與實質無損的DCT變換所不同,通過量化引入的信息損失會導致圖像質量的不可逆降級。應用于DCT系數(shù)的量化程度越高,圖像質量的損失也就越大。
如圖1的線路325所示,對每一個塊來說,其經(jīng)過量化的DCT系數(shù)將從量化器306傳遞到視頻復用編碼器370。視頻復用編碼器370使用一個Z字形掃描過程來對各個塊的變換系數(shù)進行排序。這個操作是將經(jīng)過量化的變換系數(shù)的二維陣列轉換到一個一維陣列中。如圖3所示的典型的Z字形掃描大致是以空間頻率遞增的順序來對系數(shù)進行排序的。此外,所述操作往往還根據(jù)系數(shù)值來對其進行排序,以使一維陣列中位置較早的系數(shù)更有可能比陣列中位置靠后的系數(shù)具有更大絕對值。這是因為在圖像塊內(nèi)部,較低的空間頻率往往具有較高的幅度。因此,在經(jīng)過量化的變換系數(shù)的一維陣列中,末尾的那些值通常為零。
DCT變換系數(shù)的游程-等級(run-level)編碼通常,視頻復用編碼器370使用了名為等級(level)和游程(run)的兩個值來表示一維陣列中經(jīng)過量化的各個非零系數(shù)。等級是經(jīng)過量化的系數(shù)的值,而游程則是所論述系數(shù)之前的連續(xù)零值系數(shù)數(shù)目。關于給定系數(shù)的游程和等級的值經(jīng)過排序而使得等級的值是在相關的游程值之前。而與零相等的等級值則用于表示所述塊中沒有非零系數(shù)。這個大小為0的等級值稱為EOB(塊結束)符號。
熵編碼通過使用熵編碼,在視頻復用器370中進一步對游程和等級的值進行了編碼。所述熵編碼是一個無損操作,它利用的是所編碼數(shù)據(jù)集內(nèi)部符號通常具有不同出現(xiàn)概率這一事實。這樣一來,通過指派一個可變數(shù)字,可以用具有更少比特的碼字來表示更有可能出現(xiàn)的符號,而不是使用固定數(shù)量的比特來表示每個符號。因此,熵編碼通常稱為可變長度編碼(VLC)。由于某些等級和游程比其他值更有可能出現(xiàn),因此可以有效使用熵編碼技術來減少表示游程和等級的值所需要的比特數(shù)目。在這里可以使用多種不同方法來實施熵編碼。例如,游程和等級參數(shù)的熵編碼可以借助于定義所編碼數(shù)據(jù)集中各個可能符號與相應可變長度碼之間映射的查找表實施。這種查找表通常是通過對訓練資料進行統(tǒng)計分析而被定義的,其中所述訓練資料與所編碼符號包含相同符號并具有相似統(tǒng)計特性。此外還有一種名為算術編碼的替換技術,它可用于將游程和等級值轉換成可變長度碼字。例如,在對一組符號進行算術編碼時,用于對轉換系數(shù)塊進行量化的游程與等級值是作為一個浮點型的十進制數(shù)來編碼的。
一旦使用了恰當方法來對游程和等級值進行熵編碼,則視頻復用編碼器進一步將其與控制信息結合,此外還使用了一種適于所論述信息類型的可變長度編碼方法來進行熵編碼,從而形成編碼圖像信息335的單獨壓縮比特流。
宏塊的本地解碼版本也是在編碼器300中形成的。這個操作是通過將量化器306輸出的關于各個塊的量化變換系數(shù)經(jīng)由反向量化器308以及在逆變換單元310中應用一種反向DCT變換來完成的。這樣一來,重建的像素陣列是為所述宏塊中的各個塊構造的。最終得到的圖像數(shù)據(jù)輸入到組合器312。在幀內(nèi)編碼模式中對開關314進行設定,以使經(jīng)由開關314到達組合器312的輸入為零。這樣一來,組合器312執(zhí)行的操作等價于傳遞那些沒有發(fā)生變化的解碼圖像數(shù)據(jù)。
在接收到當前幀的宏塊并對宏塊執(zhí)行了單元304、306、308、310和312中的前述編碼和解碼步驟的時候,在幀存儲器320中構造幀內(nèi)編碼幀的解碼版本。在對當前幀的最后一個宏塊執(zhí)行了幀內(nèi)編碼和后續(xù)解碼之后,幀存儲器320將會包含一個完全解碼的幀,在以幀間編碼格式編碼后續(xù)接收的視頻幀的過程中,所述完全解碼的幀可以用作一個預測參考幀。
現(xiàn)在對幀間編碼模式中的編碼器300的操作進行描述。在幀間編碼模式中,控制管理器360通過操作開關302來從線路317接收其輸入,其中包含了組合器316的輸出。組合器316以宏塊方式從輸入端301中接收視頻輸入信號。在組合器316接收到構成宏塊的亮度和色度值的塊的時候,它會形成相應的預測誤差信息塊。所述預測誤差信息表示的是所論述的塊與運動補償預測單元350中產(chǎn)生的其預測值之間的差值。更具體地說,關于宏塊中各個塊的預測誤差信息包括所述值的二維陣列,其中每一個值表示的都是所編碼亮度或色度信息塊中一個像素值與依照下述過程而為所述塊形成的運動補償預測所獲取的解碼像素值之間的差值。因此,在每個宏塊都包括8×8像素的亮度值塊以及兩個在空間上與之對應的8×8像素的色度值塊的情況下,關于宏塊的預測誤差信息也包括四個8×8的亮度預測誤差值塊,以及兩個在空間上與之對應的8×8的色度預測誤差值塊。
關于宏塊中各個塊的預測誤差信息被傳遞到DCT變換單元304,所述單元對每個預測值塊執(zhí)行一個二維離散余弦變換,以便為每一個塊都產(chǎn)生一個DCT變換系數(shù)的二維陣列。因此,在關于各個宏塊的預測誤差信息包含四個8×8的亮度預測誤差值塊以及兩個在空間上與之對應的8×8的色度預測誤差值塊的情況下,DCT轉換單元304為每個預測誤差塊產(chǎn)生一個8×8的變換系數(shù)值陣列。關于各個預測誤差塊的變換系數(shù)則被傳遞到量化器306,其中使用一個量化參數(shù)QP并以一種與上文中結合幀內(nèi)模式中的編碼器操作所描述的方式相似的方式來對其進行量化。同樣,關于量化參數(shù)QP的選擇是由控制管理器360通過控制線315來進行控制的。
經(jīng)過量化的DCT系數(shù)表示的是宏塊中各個塊的預測誤差信息,如圖1中的線路325所示,這些系數(shù)從量化器306傳遞到視頻復用器370。與幀內(nèi)編碼模式一樣,視頻復用編碼器370使用了前述Z字形掃描過程(參見圖3)來對各個預測誤差塊的變換系數(shù)進行排序,然后則將每一個非零量化系數(shù)表示成一個等級和一個游程值。此外它還使用了熵編碼并以一種與上文結合幀內(nèi)編碼模式所描述的方式相似的方式來對游程和等級值進行壓縮。視頻復用編碼器370還經(jīng)由線路326從運動場編碼單元340中接收運動矢量信息,并且從控制管理器360中接收控制信息。該編碼器對運動矢量信息進行熵編碼,并且形成一個單獨的編碼圖像信息比特流335,所述比特流中包含了經(jīng)過熵編碼的運動矢量、預測誤差和控制信息。
經(jīng)過量化的DCT系數(shù)表示的是宏塊中各個塊的預測誤差信息,這些系數(shù)也是從量化器306傳遞到反向量化器308。在這里對其進行反向量化并且將最終得到的反向量化DCT系數(shù)應用于反向DCT變換單元310,其中在所述單元中對其進行DCT變換,以便產(chǎn)生局部解碼的預測誤差值塊。然后,經(jīng)過局部解碼的預測誤差值塊輸入到組合器312中。在幀間編碼模式中將對開關314進行設置,以使組合器312還接收關于運動補償單元350產(chǎn)生的宏塊中各個塊的預測像素值。組合器312將預測誤差值的每一個局部解碼塊與相應的預測像素值塊相結合,以便產(chǎn)生重建圖像塊并將其存入幀存儲器320。
由于視頻信號的宏塊是從視頻源接收并且經(jīng)過先前所述的單元304、306、308、310和312中的編碼和解碼步驟,因此幀內(nèi)編碼幀的解碼版本是在幀存儲器320中構造的。在對視頻信號的最后一個宏塊執(zhí)行了幀內(nèi)編碼和后續(xù)解碼之后,幀存儲器320包含一個完全解碼的幀,所述幀可以在用幀間編碼格式解碼后續(xù)接收的視頻幀的過程中充當一個預測參考幀。
現(xiàn)在描述的是為當前幀的一個宏塊產(chǎn)生預測。任何一個以幀間編碼格式編碼的幀都需要一個用于運動補償預測的參考幀。這意味著在對視頻序列進行編碼的過程中,無論將要編碼的第一幀是序列中的第一個幀還是其他幀,都有必要采用幀間編碼格式來對其進行編碼。而這轉而意味著當控制管理器36將視頻編碼器300切換到幀間編碼模式時,通過對先前形成的編碼幀進行解碼,由此形成的完整參考幀已經(jīng)可以在編碼器的幀存儲器320中使用。通常,參考幀是通過對幀內(nèi)編碼幀或幀間編碼幀進行局部解碼來形成的。
在為當前幀的一個宏塊生成預測的過程中,第一個步驟是由運動估計單元330執(zhí)行的。運動估計單元330經(jīng)由線路328來接收那些構成所編碼的幀的亮度和色度值塊。然后,它執(zhí)行一個塊匹配操作,以便識別參考幀中實質對應于當前宏塊的一個區(qū)域。為了執(zhí)行所述塊匹配操作,運動現(xiàn)場估計單元經(jīng)由線路327來訪問幀存儲器320中保存的參考幀數(shù)據(jù)。更具體地說,運動估計單元330是通過對表示受檢查宏塊與候選最佳像素匹配區(qū)域間像素值差別的不同數(shù)值(例如絕對差值之和)進行計算來執(zhí)行塊匹配的,其中所述最佳像素匹配區(qū)域來源于幀存儲器320中保存的參考幀。在參考幀的預定搜索范圍以內(nèi),針對所有可能偏移上的偏移而計算了一個差值,并且運動估計單元330確定了最小的計算差值。當前幀的宏塊與產(chǎn)生最小差值的參考幀的候選像素值塊之間的偏移則定義了關于所討論的宏塊的運動矢量。
一旦運動估計單元330為宏塊產(chǎn)生了運動矢量,則其將運動矢量輸出到運動場編碼單元340。所述運動場編碼單元340使用一個包含一組基函數(shù)和運動系數(shù)的運動模型來對從運動估計單元330接收的運動矢量進行近似估計。更具體地說,運動場編碼單元340將運動矢量表示為一組運動系數(shù)值,其中在將這些值與基函數(shù)相乘的時候則形成了運動矢量的一個近似值。通常,一個平移運動模型只具有兩個運動系數(shù)并且在這里使用了基函數(shù)。
運動系數(shù)從運動場編碼單元340傳遞到運動補償預測單元350。運動補償預測單元350還從幀存儲器320中接收運動估計單元330識別的像素值的最佳匹配候選區(qū)域。通過使用運動場編碼單元340產(chǎn)生的運動矢量的近似表示以及來自參考幀的像素最佳匹配候選區(qū)域的像素值,運動補償預測塊350為宏塊中的每一個塊都產(chǎn)生一個預測像素值的陣列。每一個預測像素值塊都傳遞到組合器316,在所述組合器中則將對應于當前宏塊的塊中的實際(輸入)像素值與預測像素值相減。這樣就得到了一組關于宏塊的預測誤差塊。
現(xiàn)在對圖2所示的視頻解碼器400的操作進行描述。解碼器400包括一個從編碼器300接收編碼比特流并將其解復用成其組成部分的視頻復用解碼器470,一個反向量化器410,一個反向DCT變換器420,一個運動補償預測單元440,一個幀存儲器450,一個組合器430,一個控制管理器460以及一個輸出端480。
控制管理器460對所解碼的是幀內(nèi)編碼幀或幀間編碼幀做出響應,從而對解碼器400的操作進行控制。幀內(nèi)/幀間觸發(fā)控制信號將導致解碼器在解碼模式中進行切換,其中舉例來說,所述信號是在從編碼器接收的各個壓縮視頻幀的報頭部分所提供的圖像類型信息中導出的。幀內(nèi)/幀間觸發(fā)控制信號由視頻復用解碼器470從編碼視頻比特流中提取并且經(jīng)由控制線422傳遞到控制管理器460。
幀內(nèi)編碼幀的解碼是以一個接一個的宏塊為基礎來執(zhí)行的,其中實際上每一個宏塊都是在一識別出接收視頻比特流335中與之相關的編碼信息的時候就被解碼的。視頻復用解碼器470首先從涉及所論述宏塊的可能控制信息中分離那些關于宏塊中的塊的編碼信息。而關于幀內(nèi)編碼宏塊中各個塊的編碼信息包括可變長度碼字。這些碼字表示的是用于塊中非零量化DCT系數(shù)的熵編碼的等級和游程值。視頻復用解碼器410使用一種可變長度解碼方法來對可變長度碼字進行解碼,由此恢復等級和游程值,其中所述方法與編碼器300中使用的編碼方法相對應。然后,所述解碼器為宏塊中的各個塊重建量化變換系數(shù)陣列并且將其傳遞到反向量化器410。此外還在視頻解復用器中使用了一種恰當?shù)目勺冮L度解碼方法來對涉及宏塊的任何控制信息進行解碼,并且將其傳遞到控制管理器460。特別地,與應用于變換系數(shù)的量化等級相關的信息由視頻復用解碼器470從編碼比特流中提取并且經(jīng)由控制線424提供到控制管理器460??刂乒芾砥鬓D而經(jīng)由控制線415將這個信息傳遞到反向量化器420。反向量化器410根據(jù)控制信息來為宏塊中的各個塊反向量化那些量化過的DCT系數(shù),并且將現(xiàn)在進行了反向量化的DCT系數(shù)提供給反向DCT變換器420。
反向DCT變換器420對用于宏塊中各個塊的反向量化DCT系數(shù)執(zhí)行反向DCT變換,以便形成一個包含重建像素值并經(jīng)過解碼的圖像信息塊。由于在幀內(nèi)編碼宏塊的編碼/解碼中并未使用運動補償預測,因此控制管理器460以一種防止在幀內(nèi)編碼宏塊的解碼中使用任何參考信息的方式來控制組合器430。關于宏塊中各個塊的重建像素值則傳遞到解碼器的視頻輸出端480,其中舉例來說,可以將所述值提供給一個顯示設備(沒有顯示)。此外,關于宏塊的各個塊的重建像素值還保存在幀存儲器450中。由于對幀內(nèi)編碼幀的后續(xù)宏塊進行解碼和保存,因而在幀存儲器450中逐漸匯聚出一個解碼幀,并且由此可以將所述幀充當一個參考幀,以便在與后續(xù)接收的幀間編碼幀的解碼相關聯(lián)的運動補償預測中使用。
幀間編碼幀也是以逐個宏塊的方式來解碼的,實際上,每一個幀間編碼宏塊都是在從接收比特流中識別到與之相關的編碼信息的時候就被解碼的。視頻復用解碼器470從編碼運動矢量信息和涉及所論述宏塊的可能控制信息中分離出關于幀間編碼宏塊各個塊的編碼預測誤差信息。如上所述,用于宏塊中各個塊的編碼預測誤差信息包括可變長度代碼字,它表示的是用于所述預測誤差塊的非零量化變換系數(shù)熵編碼的等級和游程值。視頻復用解碼器470使用一種可變長度解碼方法來對可變長度碼字進行解碼,由此恢復等級和游程值,其中所述方法與編碼器300中使用的編碼方法相對應。然后所述解碼器重建一個關于宏塊中各個塊的量化變換系數(shù)陣列并且將其傳遞到反向量化器410。此外,在視頻復用解碼器中也使用了一種恰當?shù)目勺冮L度編碼方法來對涉及幀間編碼宏塊的控制信息進行解碼,并且所述信息則傳遞到控制管理器460。與應用于預測誤差塊的變換系數(shù)的量化等級相關聯(lián)的信息則是從編碼比特流中提取的,并且所述信息是經(jīng)由控制線424提供到控制管理器460的。控制管理器460轉而經(jīng)由控制線415將這個信息傳遞到反向量化器420。反向量化器420根據(jù)控制信息來對這些表示宏塊中各個塊的量化DCT系數(shù)進行反向量化,并且將現(xiàn)在反向量化的DCT系數(shù)提供給反向量化器420。然后則在反向DCT變換器420中對表示各個塊的預測誤差信息的反向量化DCT系數(shù)進行反變換,以便為宏塊中的每一個塊生成一個重新建立的預測誤差值的陣列。
涉及宏塊的編碼運動矢量信息由視頻復用解碼器470從編碼視頻比特流335中提取并且是使用一種恰當?shù)目勺冮L度解碼方法而被解碼的。由此得到的解碼運動矢量經(jīng)由數(shù)據(jù)線426傳遞到運動補償預測單元440,其中所述單元使用了一個與編碼器300中編碼所述幀間編碼宏塊所用運動模型相同的運動模型來為宏塊重建一個運動矢量。重建的運動矢量與編碼器的運動估計單元330最初確定的運動矢量相似。解碼器的運動補償預測單元440則使用重建的運動矢量而在幀存儲器450保存的預測參考幀中識別重建像素區(qū)域的位置。例如,參考幀可以是一個先前解碼的幀內(nèi)編碼幀,也可以是一個先前解碼的幀間編碼幀。但不論出現(xiàn)哪種情況,重建運動矢量指示的像素區(qū)域都被用于形成一個所論述宏塊的預測。更具體地說,運動補償預測單元440通過從參考幀中識別的像素區(qū)域拷貝相應的像素值來形成一個關于宏塊中各個塊的像素值陣列。而所述預測則是從參考幀中導出的像素值塊,它從運動補償預測單元440傳遞到組合器430,在那里它與經(jīng)過解碼的預測誤差信息相結合。在實踐中,每個預測塊的像素值都被添加到反向DCT變換器420輸出的相應重建預測誤差值中。由此可以得到關于宏塊中各個塊的重建像素值陣列。重建的像素值則傳遞到解碼器的視頻輸出端480并且保存在幀存儲器450中。由于解碼和保存了幀間編碼幀的宏塊,因此在幀存儲器450中逐漸匯聚成一個解碼幀,由此所述解碼幀作為一個參考幀而在其他幀間編碼幀的運動補償預測中使用。
H.26L視頻編碼標準ITU-T建議H.26L是國際電聯(lián)開發(fā)的視頻編碼標準族中的最新標準。特別地,這個標準旨在以通常小于64kb/s的低比特率來進行視頻編碼,因此所述標準特別適合對經(jīng)由那些需要優(yōu)先考慮如何最佳使用可用帶寬的無線通信網(wǎng)或任何固定線路通信網(wǎng)所傳送的數(shù)字視頻進行編碼。ITU-T H.26L定義的視頻編碼系統(tǒng)是一個混合視頻編碼系統(tǒng),它是根據(jù)如上所述與圖1和2所述的通用視頻編碼器300和解碼器400相結合的一般原則來運作的。特別地,依照H.26L實現(xiàn)的視頻編碼系統(tǒng)使用的是將基于塊的變換編碼與運動補償預測相結合,從而減少視頻序列中的空間和時間冗余。
H.26L建議的最新版本即為通常所說的Test Model 8(TML8),在“H.26L Test Model Long Term Number 8(TML-8)draft 0”(ITU-T電信標準化部分,研究組16,視頻編碼專家小組)中對其進行了描述,這個版本的建議規(guī)定了兩種備選的熵編碼模式。在第一種(缺省)模式中使用了所謂的通用可變長度編碼(UVLC)方法來對所有語法元素進行編碼。UVLC編碼模式是一種查找表方法,其中在不考慮所論述信息類型的情況下用同一組可變長度碼字來表示視頻編碼器產(chǎn)生的所有不同類型的信息。而在所謂的“高復雜度類(profile)”中指定使用的備選熵編碼方法是一種以基于上下文的自適應二進制算術編碼(CABAC)而著稱的技術。這種方法是一種持續(xù)適應于編碼信息統(tǒng)計性質的二進制算術編碼形式,并且在現(xiàn)有技術中作為最有效的熵編碼形式中的一種而聞名(參見H.Witten、R.M.Neal與J.G.Cleary在1987年6月發(fā)表于Commun.ACM第30卷第520~540頁的“Arithmetic coding for data compression”一文)。
由于UVLC熵編碼使用了同一組可變長度碼字來表示視頻編碼器生成的所有類型的信息,因此所述碼字的統(tǒng)計性質通常并沒有最佳匹配于將要編碼的信息特征。例如,用于表示為幀內(nèi)編碼圖像塊的量化DCT系數(shù)的特定游程和等級值的出現(xiàn)頻率很可能與涉及量化參數(shù)值的控制信息中的值的出現(xiàn)情況不同。在H.26L中引入了CABAC熵編碼方法,以便克服UVLC熵編碼方法所固有的次優(yōu)特性。如本文中先前所述,算術編碼表示的是一個將要用單獨的可變長度碼(浮點數(shù))來進行編碼的符號群。與獨立編碼各個符號的熵編碼方法相比,這種方法提供了特有的優(yōu)點。具體地說,獨立編碼各個符號的熵編碼方法至少需要使用一個比特來表示各個符號。由于算術編碼表示的是具有單個碼字的符號群,因而有可能實現(xiàn)小于1比特/秒的數(shù)據(jù)壓縮速率。因此,H.26L中提供的CABAC方法還有可能提高數(shù)據(jù)壓縮。此外,由于所述方法是一種自適應方法,因此它能夠考慮到所編碼信息的統(tǒng)計特征變化,由此確保即使所編碼數(shù)據(jù)性質發(fā)生某種程度的變化,也能夠保持數(shù)據(jù)壓縮性能。
基于上下文的算術編碼如上所述,CABAC算術編碼是一種熵編碼方法,它能適應于所編碼信息的變化統(tǒng)計。這樣一來,與假設固定統(tǒng)計特性的熵編碼技術相比,所述方法能夠提供改善的壓縮效率。圖4描述的是一種示范性的基于上下文的二進制算術編碼器700。CABAC是一種二進制算術編碼方法,因此,所要編碼的具有非二進制序列的數(shù)據(jù)符號首先在二進制映射單元710中轉換成二進制值(“二進制化”)。所述二進制化處理包括將所要編碼的符號映射到一個二進制序列(bin),其中每一個二進制序列都具有一個相應的二進制序列編號并且可以賦予一個值0或1。以下在表1中給出了這種映射的一個實例。但是原則上也可以設想使用其它二進制化方案。
在CABAC方法中,每一個二進制序列都指派給一個所謂的“上下文”(基于上下文的算術編碼由此得名)。一個上下文可以視為是集中在一起并具有相似統(tǒng)計特征的二進制序列。換句話說,在這里假設對指派給上下文的每一個二進制序列來說,其包含數(shù)值1或0的概率與屬于所述上下文的其他二進制序列相似。這樣一來,用于在算術編碼器中產(chǎn)生碼字的概率估計是為每一個上下文而不是將要編碼的每個

表1可能的二進制序列定義的。每個上下文都是依照一個“上下文模型”定義的,并且所述上下文是基于將要編碼的數(shù)據(jù)符號(由此為二進制序列)的統(tǒng)計特征信息而被預先建立的。通常,如果將0的出現(xiàn)概率與1的出現(xiàn)概率之間的差值增至最大,則會提高二進制算術編碼器所能實現(xiàn)的數(shù)據(jù)壓縮比率。同樣,基于上下文的算術編碼性能還取決于上下文模型的選擇。通常,這意味著應該選擇那些能使指派給每個上下文的二進制序列的0和1的出現(xiàn)概率間的差值達到最大的上下文模型。
在圖4所述的示范性的基于上下文的算術編碼器中,一旦在二進制映射單元710二進制化所要編碼的符號,則在上下文指派單元720中將其指派給一個相應的上下文。然后則將指派給相應二進制序列(也就是1或0)的值傳遞到算術編碼器730。隨后,算術編碼器730的編碼引擎750使用一個指派了二進制序列的上下文的概率估計來對二進制序列的數(shù)值進行編碼。在這里,作為算術編碼器實現(xiàn)的數(shù)據(jù)壓縮比的性能依賴于概率估計的精度。從原則上講,所述估計可以是固定或自適應的。如果使用固定概率估計,則關于上下文的概率估計將被指派給預定值并且在編碼處理中保持不變。固定概率估計通常是通過對與所要編碼的實際資料具有相似統(tǒng)計特征的訓練資料進行分析而被預先得到的。如果使用了自適應概率估計,則使用固定值來為各個上下文初始化概率估計,并且根據(jù)那些至此為止經(jīng)過編碼的數(shù)據(jù)(二進制序列)的實際統(tǒng)計特征而在整個編碼處理中更新所述概率。執(zhí)行自適應編碼估計通常會更好,因為它們可以適應所要編碼的資料。
圖4所示的示范性的基于上下文的算術編碼器使用了自適應概率估計并且包括一個對經(jīng)過更新的概率估計進行計算的概率估計單元740。每一個上下文的概率估計則是通過記錄指派給各個上下文的各個二進制序列中1和0的出現(xiàn)次數(shù)來更新的。例如,對指派給任意上下文k的二進制序列來說,如果為其指派了m次值0并且為其指派了n次值1,那么,對上下文k中的1來說,其概率估計是n/(n(m+1)),對于0來說,其概率估計則是(m+1)/(n(m+1))。
圖5描述的是與結合圖4所描述的編碼器相對應的基于上下文的算術解碼器800。在輸入端810,基于上下文的算術解碼器接收一個表示經(jīng)過算術編碼的數(shù)據(jù)符號的比特流。一開始,根據(jù)先前接收的解碼符號,在上下文指派單元850中計算一個上下文并且更新二進制序列值的概率估計。在這里,上下文指派單元850執(zhí)行的上下文指派與概率估計單元830執(zhí)行的關于概率估計的計算都是使用與編碼器相同的方法來完成的。然后,接收到的比特饋送到算術編碼器820的算術編碼引擎840中,在那里使用計算得到的上下文以及二進制序列值的當前概率估計來將其轉換成解碼的二進制序列值。在二進制序列-數(shù)值映射單元860中,經(jīng)過解碼的二進制序列映射到游程和等級的值。
在H.26L中使用的CABAC方法現(xiàn)在將對ITU-T建議H.26L中選定用于高復雜度類的CABAC算術編碼方法的細節(jié)進行詳細描述。根據(jù)H.26L TML 8,游程和等級值的上下文依賴于所編碼的塊類型以及二進制化的等級或游程值的二進制序列數(shù)目。不同的塊類型是依照對系數(shù)值進行排序的掃描方式(單/雙)、成分類型(亮度/色度,AC/DC)或是編碼模式(幀間/幀內(nèi))來定義的。然而,對指定類型來說,上下文只依賴于二進制序列數(shù)目。更具體地說,依照H.26L TML 8,在這里為等級編碼定義了四個上下文。第一個上下文用于第一個二進制序列,第二個上下文用于第二個二進制序列,第三個上下文用于那些表示等級幅度的剩余二進制序列。剩余上下文則用于等級的符號。此外還使用了相似的方法來將游程值指派給上下文。對游程來說,存在三個上下文,第一個上下文用于第一個二進制序列,第二個上下文用于第二個二進制序列,第三個上下文則用于所有剩余的二進制序列。由于游程值始終等于或大于零,因此對附加上下文而言,沒有必要為其表示符號信息。這樣一來,對一個給定類型的塊來說,針對變換系數(shù)的二進制序列(等級和游程編碼)所進行的將二進制序列指派給上下文的處理可以如下概括If(bin_nr>MAX_BIN_VAL)bin_nr=MAX_BIN_VAL; (1)endcontext=bin_nr其中bin_nr是二進制序列數(shù)目,context是上下文編號。根據(jù)H.26L TML 8,MAX_BIN_VAL的值設定為3,但是原則上也可以使用不同的MAX_BIN_VAL來作為替換。
游程-等級對是如下編碼的首先根據(jù)塊/系數(shù)類型來對游程和等級進行分類,其中所述類型包括掃描模式、系數(shù)類型(DC/AC)以及編碼模式(幀間/幀內(nèi)或16×16幀內(nèi))。然后通過將等級和游程映射到一個二進制序列來對其進行二進制化,并且根據(jù)每一個二進制序列的編號來將其指派給一個上下文。
圖6a~6d通過參考示范性的4×4量化DCT系數(shù)陣列而對這個處理進行了詳細描述。此外它還描述了用于追蹤量化DCT系數(shù)的游程和等級值的統(tǒng)計特性的方法,從而論證了CABAC方法的自適應特征。在這里,首先對經(jīng)過量化的DCT系數(shù)值的二維陣列進行Z字形掃描,以便產(chǎn)生一個圖6a所示的值的一維陣列。然后將一維陣列中的非零系數(shù)值作為游程和等級值對來加以表示。如先前所述,每一個等級值都表示一個非零的量化DCT系數(shù)值,而相關的游程則對應于所論述系數(shù)之前的零值系數(shù)的數(shù)目。在圖6b中給出了來源于示范性的量化DCT系數(shù)陣列的游程-等級對。在各個對中,等級值處于游程值之前并且將等于零的等級值用作一個塊結束符號,以便指示所述塊中沒有非零系數(shù)值。
接著,每一個游程和等級值都轉換成一個二進制值。根據(jù)H.26LTML 8,用于轉換量化DCT變換系數(shù)值的游程和等級的二進制化方案與上文中圖1所示方案相同。圖6c顯示的是將表1給出的二進制化方案應用于示范性陣列中的游程和等級值的結果。此外,圖6c還顯示了依照H.26L而將二進制序列指派給上下文。如上所述,其中僅僅使用了三個上下文來描述游程和等級值的大小。第一個上下文對應于二進制序列1,第二個上下文對應于二進制序列2,而第三個上下文則包括了所有剩余的二進制序列。在圖6c中,上下文是通過粗體橫線來描繪的。通過檢查圖6c可以看出,大多數(shù)等級值都映射到指派給上下文3的二進制序列,而大多數(shù)游程值則映射到指派給上下文1的二進制序列。
每一個經(jīng)過指派的上下文的概率估計是在編碼了二進制序列之后才更新的。而游程和等級的概率估計則是獨立更新的。如先前所述,給定上下文的概率估計表示的是指派給所論述的上下文的二進制序列的統(tǒng)計特征。更具體地說,所述概率估計描述的是指派給上下文的二進制序列中包含0或1的概率。圖6d以一種示范方式描述了為游程和等級更新概率估計的方法。該圖中描述的是在二進制化那些代表圖6a所示的4×4量化DCT系數(shù)塊的游程和等級,并且將其指派給上下文,進而在算術編碼器中編碼的前后,在指派到指定游程或等級的上下文的二進制序列中包含0或1的概率。圖6d采用了表格形式,其中記錄了在指派給各個上下文的二進制序列中的1和0的出現(xiàn)情況。因此,一個指定上下文的概率估計是如下給出的0的概率=0的數(shù)目/(0的數(shù)目+1的數(shù)目)1的概率=1的數(shù)目/(0的數(shù)目+1的數(shù)目)在這個圖中,假設圖6a所示的量化DCT系數(shù)的4×4塊是最早處理的塊。這意味著在表中沒有記錄1和0的先前出現(xiàn)情況。為了克服這個問題,在這里假設在處理所述塊之前,每一個上下文都具有相等的包含1或0的概率。而這種假設是通過在記錄0和1的出現(xiàn)情況的列中輸入相同的值來表示的。在圖6d中,1被用于初始化概率估計。作為選擇,也可以使用一個來源于訓練數(shù)據(jù)分析的概率估計來為各個上下文初始化概率估計。然后則在二進制化關于量化DCT變換系數(shù)的游程和等級值并將其指派給上下文的時候對各個上下文的二進制序列中出現(xiàn)的1和0的數(shù)目進行計數(shù),由此更新概率估計。圖6d的右手列顯示了在處理過圖6a所示的4×4量化DCT塊之后的情況。
盡管與UVLC熵編碼方法相比,在ITU-T建議H.26L TML 8的高復雜度類中采用的CABAC算術編碼方法在數(shù)據(jù)壓縮方面提供了改進,但是就編碼效率來說,所述方法仍不是最佳的。因此,本發(fā)明的一個目的是提供一種能夠進一步提高編碼效率的基于上下文的算術編碼方法和系統(tǒng)。

發(fā)明內(nèi)容
本發(fā)明基于這樣一種認識,那就是在使用基于上下文的算術編碼來對指定數(shù)據(jù)符號進行編碼的時候,通過使用那些對指派了其他數(shù)據(jù)符號的上下文加以考慮的上下文模型,可以在編碼效率方面得到提高。特別地,通過參考H.26L TML 8的高復雜度類中使用的CABAC方法,本發(fā)明的發(fā)明人已經(jīng)確定,在游程與關聯(lián)于DCT變換系數(shù)的等級之間存在某些聯(lián)系。此外發(fā)明人還確定了可以使用這些關系來構造改進的上下文模型,其中所述模型能在將CABAC方法應用于游程和等級值的時候使之以經(jīng)過提高的編碼效率來運作。特別地,發(fā)明人已經(jīng)確定,連續(xù)等級值將會顯示出極大相似性。更具體地說,在指定的變換系數(shù)塊內(nèi)部,所編碼系數(shù)的等級實質上通常具有類似于先前編碼系數(shù)等級的幅度。此外發(fā)明人還確定了等級與游程值之間的一個反比關系。特別地,越大的等級值越有可能在較小的游程值之前。反過來一樣是成立的,也就是說,較小的等級值很可能是在較大的游程之后。因此,本發(fā)明提出為DCT變化系數(shù)的編碼創(chuàng)建新的上下文模型,其中所述模型顧及了等級與游程值之間的這些關系。
在為了執(zhí)行基于上下文的編碼器而設計的第一個上下文模型中,對指派給一個二進制化的系數(shù)等級值的二進制序列來說,其上下文依賴于先前編碼的系數(shù)等級。在為了執(zhí)行基于上下文的解碼器而設計的第二個上下文模型中,對指派給二進制化的系數(shù)等級值的二進制序列來說,其上下文依賴于先前解碼的系數(shù)等級。在為了實施基于上下文的解碼器或是基于上下文的算術解碼器而設計的第三個上下文模型中,對指派給二進制化的系數(shù)游程值的二進制序列來說,其上下文依賴于先前解碼的系數(shù)等級值。
發(fā)明人還進一步確定,在與不同圖像塊相關聯(lián)的變換系數(shù)值之間存在某種相似性。這些相似性在相互靠近的圖像塊間會變得更大,并且在相互緊鄰的圖像塊之間往往最強。更具體地說,用于表示特定圖像塊的非零變換系數(shù)值的數(shù)量Nc往往與接近或鄰接所論述圖像塊中的非零變換系數(shù)值的數(shù)目是相同的。因此,本發(fā)明還引入了這樣一個概念,那就是為變換編碼的圖像塊提供一個非零變換系數(shù)數(shù)目的指示并且使用熵編碼來對這個值進行編碼。此外,如果將基于上下文的算術編碼用于對Nc值進行編碼,那么發(fā)明人已經(jīng)確定,較為有利的是通過對指派給用于至少一個其他變換編碼圖像塊的上下文加以考慮而將塊的Nc值指派給一個上下文。這樣一來,在相互靠近的圖像塊之間,Nc值間的相似性可以利用這個基于上下文的算術編碼過程。根據(jù)I TU-T建議H.26L TML 8,并沒有對圖像塊中非零變換系數(shù)的數(shù)目進行編碼。作為替換并且如先前所示,在這里提供了一個塊結束(EOB)指示。EOB指示表示已經(jīng)對相應于非零系數(shù)的最后一個游程-等級對進行了編碼。發(fā)明人確定,與當前在H.26L TML 8中所用的提供EOB指示的方法相比,這里提出的方法將會導致編碼效率上的提高,其中在本發(fā)明中提供了一個塊中非零系數(shù)數(shù)目的明確指示,并且使用了基于上下文的算術編碼來對其進行編碼。
盡管本發(fā)明背后的動機及其基本概念是在視頻編碼/解碼中給出的,尤其是就H.26L TML 8給出的,但是應該理解,本發(fā)明也可以適用于其他視頻編碼系統(tǒng)和靜止圖像編碼。從原則上講,本發(fā)明可以應用于任何一個使用了基于塊的變換編碼與基于上下文的算術編碼的圖像編碼系統(tǒng)。
根據(jù)本發(fā)明的第一個方面,提供了一種圖像編碼方法,其中將圖像分成具有多個像素的多個塊,每一個像素具有一個像素值,并且對所述像素值塊執(zhí)行一個變換編碼操作,以便產(chǎn)生相應的變換系數(shù)值塊。在一個給定掃描順序中掃描所述變換系數(shù)值塊,以便產(chǎn)生一個經(jīng)過掃描的系數(shù)值陣列,并且使用多個數(shù)字對來表示經(jīng)過掃描的陣列中的系數(shù)值,所述數(shù)字對具有一個第一數(shù)字和一個第二數(shù)字。將第一數(shù)字和第二數(shù)字指派給表示所述數(shù)字對的多個上下文中的一個。根據(jù)本發(fā)明的第一個方面,一個數(shù)字對的第一值是基于另一個數(shù)字對中的第一數(shù)字而被指派給一個上下文的。
優(yōu)選地,基于一個數(shù)字對中的第一數(shù)字而將另一個數(shù)字對中的第一數(shù)字指派給一個上下文的步驟顧及指派了其他數(shù)字對中的第一數(shù)字的上下文。
較為有利的是,數(shù)字對中的第一數(shù)字表示的是一個非零系數(shù)值。優(yōu)選地,數(shù)字對的第一數(shù)字與非零系數(shù)值的大小是相等的。
優(yōu)選地,數(shù)字對中的第二數(shù)字表示的是在非零系數(shù)值之前的多個連續(xù)零系數(shù)值。
優(yōu)選地,所述上下文是一個基于上下文的算術編碼器的上下文。
更為優(yōu)選的是,所述上下文是基于上下文的二進制運算編碼器的上下文。
較為有利的是,第一和第二數(shù)字映射到一組二進制序列,其中每一個二進制序列都具有一個相關聯(lián)的二進制序列編號,并且每一個二進制序列都能采用第一值或第二值中的一個。
優(yōu)選地,每個第一和第二數(shù)字都映射到所述一組二進制序列中的一個,而將數(shù)字映射到所述一組二進制序列中給定的一個則是通過將二進制序列的值指派給第一值來指示的。
優(yōu)選地,第一值是1并且第二值是0。
優(yōu)選地,每一組二進制序列都被指派給一個上下文。
非常有利的是,在對指派了其他數(shù)字對中第一數(shù)字的上下文加以考慮的情況下,基于另一個數(shù)字對中的第一數(shù)字而將一個數(shù)字對中的第一數(shù)字指派給一個上下文的步驟是通過檢查所述其他數(shù)字對的第一數(shù)字所映射的二進制序列的二進制序列編號來執(zhí)行的。
較為有利的是,所述方法還包括保持一個用于描述各個上下文的統(tǒng)計特性的概率估計。
優(yōu)選地,對各個上下文來說,所述概率估計表示的是具有指派給上下文的預定值的數(shù)字的統(tǒng)計似然性。
優(yōu)選地,對各個上下文來說,所述概率估計是通過記錄指派給所論述上下文的二進制序列中的第一值和第二值的出現(xiàn)情況來保持的。
根據(jù)本發(fā)明的第二個方面,提供了一種圖像編碼方法,其中將圖像分成具有多個像素的多個塊,每一個像素都具有一個像素值,并且對所述像素值塊執(zhí)行一個變換編碼操作,以便產(chǎn)生相應的變換系數(shù)值塊。在一種給定掃描順序中掃描變換系數(shù)值塊,以便產(chǎn)生一個經(jīng)過掃描的系數(shù)值陣列,并且使用多個數(shù)字對來表示經(jīng)過掃描的陣列中的系數(shù)值,其中所述數(shù)字對具有一個第一數(shù)字和一個第二數(shù)字。將第一數(shù)字和第二數(shù)字指派給表示所述數(shù)字對的多個上下文中的一個。根據(jù)本發(fā)明的第二個方面,數(shù)字對的第二數(shù)字是基于數(shù)字對中的第一數(shù)字而被指派給一個上下文的。
優(yōu)選地,基于一個數(shù)字對中的第一數(shù)字而將另一個數(shù)字對中的第一數(shù)字指派給一個上下文的步驟對指派了其他數(shù)字對中第一數(shù)字的上下文加以考慮。
較為有利的是,數(shù)字對中的第一數(shù)字表示的是一個非零系數(shù)值。優(yōu)選地,數(shù)字對的第一數(shù)字與非零系數(shù)值的大小是相等的。
優(yōu)選地,數(shù)字對中的第二數(shù)字表示的是在非零系數(shù)值之前的多個連續(xù)零系數(shù)值。
優(yōu)選地,所述上下文是一個基于上下文的算術編碼器的上下文。
更為優(yōu)選的是,所述上下文是基于上下文的二進制運算編碼器的上下文。
較為有利的是,第一和第二數(shù)字映射到一組二進制序列,其中每一個二進制序列都具有一個相關聯(lián)的二進制序列編號,并且每一個二進制序列都能采用第一值或第二值中的一個。
優(yōu)選地,每個第一和第二數(shù)字都映射到所述一組二進制序列中的一個,而將數(shù)字映射到所述一組二進制序列中給定的一個則是通過將二進制序列的值指派給第一值來指示的。
優(yōu)選地,第一值是1并且第二值是0。
優(yōu)選地,每一組二進制序列都被指派給一個上下文。
非常有利的是,在對指派了其中一個數(shù)字對的第二數(shù)字的上下文加以考慮的情況下,基于數(shù)字對中第一數(shù)字而將數(shù)字對中第二數(shù)字指派給一個上下文的步驟是通過檢查第二數(shù)字所映射的二進制序列的二進制序列編號來執(zhí)行的。
較為有利的是,所述方法還包括保持一個用于描述各個上下文的統(tǒng)計特性的概率估計。
優(yōu)選地,對各個上下文來說,所述概率估計表示的是具有指派給上下文的預定值的數(shù)字的統(tǒng)計似然性。
優(yōu)選地,對各個上下文來說,所述概率估計是通過記錄指派給所論述上下文的二進制序列中的第一值和第二值的出現(xiàn)情況來保持的。
優(yōu)選地,根據(jù)本發(fā)明第一和第二方面的方法全都適用于變換系數(shù)值塊。
根據(jù)本發(fā)明的第三個方面,提供了一種編碼器,包括用于將圖像分為具有多個像素的多個塊的裝置,其中每一個像素都具有一個像素值,此外還包括用于對像素值塊執(zhí)行一個變換編碼操作,以便產(chǎn)生一個相應的變換系數(shù)值塊的裝置。所述編碼器還包括用于以一個給定掃描順序來掃描變換系數(shù)值塊,以便產(chǎn)生經(jīng)過掃描的系數(shù)值陣列的裝置,用于表示多個數(shù)字對所代表的經(jīng)過掃描的陣列中的系數(shù)值的裝置,所述數(shù)字對具有一個第一數(shù)字和一個第二數(shù)字,以及用于將第一數(shù)字和第二數(shù)字指派給表示數(shù)字對的多個上下文之一的裝置。根據(jù)本發(fā)明的第三個方面,所述編碼器包括用于根據(jù)另一個數(shù)字對的第一數(shù)字而將數(shù)字對的第一數(shù)字指派給一個上下文的裝置。
根據(jù)本發(fā)明的第四個方面,提供了一種編碼器,包括用于將圖像分成具有多個像素的多個塊的裝置,其中每一個像素都具有一個像素值,此外還包括對像素值塊執(zhí)行一個變換編碼操作,以便產(chǎn)生相應的變換系數(shù)值塊的裝置。所述編碼器還包括用于以一個給定掃描順序掃描變換系數(shù)值塊,以便產(chǎn)生經(jīng)過掃描的系數(shù)值陣列的裝置,用于表示多個數(shù)字對所代表的經(jīng)過掃描的陣列中的系數(shù)值的裝置,其中所述數(shù)字對具有一個第一數(shù)字和一個第二數(shù)字,以及用于將第一數(shù)字和第二數(shù)字指派給表示數(shù)字對的多個上下文之一的裝置。根據(jù)本發(fā)明的第四個方面,所述編碼器包括用于根據(jù)數(shù)字對中的第一數(shù)字而將數(shù)字對的第二數(shù)字指派給一個上下文的裝置。
根據(jù)本發(fā)明的第五個方面,提供了一種圖像編碼方法,其中將圖像分成具有多個像素的多個塊,每一個像素都具有一個像素值,并且對像素值塊執(zhí)行一個變換編碼操作,以便產(chǎn)生相應的變換系數(shù)值塊。根據(jù)本發(fā)明的第五個方面,所述方法包括如下步驟提供一個表示變換系數(shù)值塊中非零系數(shù)值數(shù)目的數(shù)字,以及將這個數(shù)字指派給一個表示所述數(shù)字的上下文。
非常有利的是,將表示變換系數(shù)值塊中非零變換系數(shù)值數(shù)目的數(shù)字指派給一個上下文的步驟對指派了另一個數(shù)字的上下文加以考慮,其中所述另一個數(shù)字表示的是另一個變換系數(shù)塊中的非零系數(shù)值數(shù)目。
非常有利的是,變換值塊是在給定掃描順序中掃描的,由此產(chǎn)生了一個經(jīng)過掃描的系數(shù)值陣列,并且在所述經(jīng)過掃描的陣列中,系數(shù)值是由多個數(shù)字對來表示的,其中所述數(shù)字對具有一個第一數(shù)字和一個第二數(shù)字。
較為有利的是,數(shù)字對中的第一數(shù)字表示的是一個非零系數(shù)值。
優(yōu)選地,數(shù)字對的第一數(shù)字與非零系數(shù)值的大小是相等的。
更為優(yōu)選的是,數(shù)字對的第一數(shù)字與非零系數(shù)值減1的大小是相等的。
優(yōu)選地,數(shù)字對中的第二數(shù)字表示的是在非零系數(shù)值之前的多個連續(xù)零系數(shù)值。
優(yōu)選地,在這里沒有提供一個指示處于經(jīng)過掃描的系數(shù)值陣列中的最后一個非零系數(shù)值的塊結束指示。
優(yōu)選地,根據(jù)本發(fā)明第一、第二和第五方面的方法每一個都適用于變換系數(shù)值塊。
根據(jù)本發(fā)明的第六個方面,提供了一種編碼器,其中包括用于將圖像分成具有多個像素的多個塊的裝置,其中每一個像素都具有一個像素值,此外還包括用于對像素值塊執(zhí)行一個變換編碼操作,以便產(chǎn)生相應的變換系數(shù)值塊的裝置。所述編碼器包括提供一個用于指示變換系數(shù)值塊中非零系數(shù)值數(shù)目的數(shù)字的裝置,以及用于將所述數(shù)字指派給一個表示所述數(shù)字的上下文的裝置。
非常有利的是,所述編碼器還包括用于在對指派了另一個數(shù)字的上下文加以考慮的情況下指派所述指示變換系數(shù)值塊中非零變換系數(shù)值數(shù)目的數(shù)字的裝置,其中所述另一個數(shù)字指示的是另一個變換系數(shù)塊中非零變換系數(shù)的數(shù)目。
根據(jù)本發(fā)明的第七個方面,提供了一種計算機程序,其中包括用于將圖像分成具有多個像素值的多個塊的代碼,其中每一個像素值都具有一個像素值,此外還包括用于對像素值塊執(zhí)行一個變換編碼操作,以便產(chǎn)生相應的變換系數(shù)值塊的代碼。所述計算機程序還包括用于以給定掃描順序掃描變換系數(shù)值塊,以便產(chǎn)生經(jīng)過掃描的系數(shù)值陣列的代碼,用于使用多個數(shù)字來表示經(jīng)過掃描的陣列中的系數(shù)值的代碼,其中所述數(shù)字對具有一個第一數(shù)字和一個第二數(shù)字,以及用于將第一數(shù)字和第二數(shù)字指派給表示數(shù)字對的多個上下文之一的代碼。根據(jù)本發(fā)明的第七個方面,所述計算機程序還包括用于根據(jù)另一個數(shù)字對中的第一數(shù)字而將其中一個數(shù)字對的第一數(shù)字指派給一個上下文的代碼。
較為有利的是,數(shù)字對中的第一數(shù)字表示的是一個非零系數(shù)值。
優(yōu)選地,數(shù)字對的第一數(shù)字與非零系數(shù)值的大小是相等的。
優(yōu)選地,數(shù)字對中的第二數(shù)字表示的是在非零系數(shù)值之前的多個連續(xù)零系數(shù)值。
根據(jù)本發(fā)明的第八個方面,提供了一種計算機程序,其中包括用于將圖像分成具有多個像素值的多個塊的代碼,其中每一個像素值都具有一個像素值,此外還包括用于對像素值塊執(zhí)行一個變換編碼操作,以便產(chǎn)生相應的變換系數(shù)值塊的代碼。所述計算機程序還包括用于以給定掃描順序來掃描變換系數(shù)值塊,以便產(chǎn)生經(jīng)過掃描的系數(shù)值陣列的代碼,用于使用多個數(shù)字來表示經(jīng)過掃描的陣列中的系數(shù)值的代碼,其中所述數(shù)字對具有一個第一數(shù)字和一個第二數(shù)字,以及用于將第一數(shù)字和第二數(shù)字指派給表示所述數(shù)字對的多個上下文之一的代碼。根據(jù)本發(fā)明的第八個方面,所述計算機程序還包括用于根據(jù)數(shù)字對中第一數(shù)字來把所述數(shù)字對的第二數(shù)字指派給一個上下文的代碼。
較為有利的是,數(shù)字對中的第一數(shù)字表示一個非零系數(shù)值。
優(yōu)選地,數(shù)字對的第一數(shù)字與非零系數(shù)值的大小是相等的。
優(yōu)選地,數(shù)字對中的第二數(shù)字表示的是非零系數(shù)值之前的多個連續(xù)零系數(shù)值。
根據(jù)本發(fā)明的第九個方面,提供了一種計算機程序,其中包括用于將圖像分成具有多個像素值的多個塊的代碼,其中每一個像素值都具有一個像素值,此外還包括用于對像素值塊執(zhí)行一個變換編碼操作,以便產(chǎn)生相應的變換系數(shù)值塊的代碼。根據(jù)本發(fā)明的第九個方面,所述計算機程序還包括用于提供表示變換系數(shù)值塊中非零系數(shù)值數(shù)目的數(shù)字的代碼,此外還包括用于將這個數(shù)字指派給一個表示所述數(shù)字的上下文的代碼。
非常有利的是,所述計算機程序還包括用于在對指派了另一個數(shù)字的上下文加以考慮的情況下,將指示變換系數(shù)值塊中非零變換系數(shù)值數(shù)目的數(shù)字指派一個上下文的代碼,其中所述另一個數(shù)字指示的是另一個變換系數(shù)塊中的非零系數(shù)值的數(shù)目。
根據(jù)本發(fā)明的第十個方面,提供了一種依照本發(fā)明第七、第八和第九方面的計算機程序。
根據(jù)本發(fā)明的第十一個方面,提供了一種基于上下文的算術編碼方法,其中數(shù)據(jù)符號陣列是用一個碼字來表示的。所述陣列中的數(shù)據(jù)符號是包含了一個第一數(shù)字和一個第二數(shù)字的數(shù)字對。所述數(shù)字對中的第一數(shù)字指派給一個從表示第一數(shù)字的多個上下文中選出的上下文,數(shù)字對中的第二數(shù)字則指派給一個從表示第二數(shù)字的多個上下文中選出的上下文。根據(jù)本發(fā)明的第十一個方面,數(shù)字對的第一數(shù)字是基于數(shù)字對中另一個數(shù)字對的第一數(shù)字而被指派給上下文的。
根據(jù)本發(fā)明的第十二個方面,提供了一種基于上下文的算術解碼方法,其中數(shù)據(jù)符號陣列是從一個表示陣列的碼字中解碼的。所述陣列中的數(shù)據(jù)符號是包含了一個第一數(shù)字和一個第二數(shù)字的數(shù)字對。所述數(shù)字對的第一數(shù)字指派給一個從代表第一數(shù)字的多個上下文中選出的上下文,而數(shù)字對的第二數(shù)字則指派給一個從代表第二數(shù)字的多個上下文中選出的上下文。根據(jù)本發(fā)明的第十二個方面,數(shù)字對的第一數(shù)字是基于數(shù)字對中的另一個數(shù)字對的第一數(shù)字而被指派給上下文的。
根據(jù)本發(fā)明的第十三個方面,提供了一種基于上下文的算術編碼方法,其中數(shù)據(jù)符號陣列是用一個碼字來表示的。所述陣列中的數(shù)據(jù)符號是包括一個第一數(shù)字和一個第二數(shù)字的數(shù)字對。所述數(shù)字對的第一數(shù)字指派給一個從表示第一數(shù)字的多個上下文中選出的一個上下文,所述數(shù)字對的第二數(shù)字則指派給一個從表示第二數(shù)字的多個上下文中選出的上下文。根據(jù)本發(fā)明的第十三個方面,數(shù)字對的第二數(shù)字是基于數(shù)字對中的第一數(shù)字而被指派給一個上下文的。
根據(jù)本發(fā)明的第十四個方面,提供了一種基于上下文的算術解碼方法,其中數(shù)據(jù)符號陣列是從一個表示陣列的碼字中解碼的。所述陣列中的數(shù)據(jù)符號是包括一個第一數(shù)字和一個第二數(shù)字的數(shù)字對。所述數(shù)字對的第一數(shù)字指派給一個從表示第一數(shù)字的多個上下文中選出的上下文,所述數(shù)字對的第二數(shù)字則指派給一個從表示第二數(shù)字的多個上下文中選出的上下文。根據(jù)本發(fā)明的第十四個方面,數(shù)字對的第二數(shù)字是基于數(shù)字對中的第一個數(shù)字而被指派給一個上下文的。
根據(jù)本發(fā)明的第十五個方面,提供了一種基于上下文的算術編碼方法,其中數(shù)據(jù)符號陣列是用一個碼字來表示的,此外還提供了表示陣列中非零數(shù)據(jù)符號數(shù)目的數(shù)字并且將其指派給一個表示所述數(shù)字的上下文。
根據(jù)本發(fā)明的第十六個方面,提供了一種基于上下文的算術編碼器,其中包括用于使用碼字來表示一個數(shù)據(jù)符號陣列的裝置。所述陣列中的數(shù)據(jù)符號是包括第一數(shù)字和第二數(shù)字的數(shù)字對,所述編碼器還包括用于將數(shù)字對的第一數(shù)字指派給一個從代表第一數(shù)字的多個上下文中選出的一個上下文的裝置,以及將數(shù)字對的第二數(shù)字指派給一個從代表第二數(shù)字的多個上下文中選出的上下文的裝置。根據(jù)本發(fā)明的第十六個方面,所述編碼器包括根據(jù)所述數(shù)字對中一個數(shù)字對的第一數(shù)字而將另一個數(shù)字對的第一數(shù)字指派給一個上下文的裝置。
根據(jù)本發(fā)明的第十七個方面,提供了一種基于上下文的算術解碼器,其中包括用于從表示數(shù)據(jù)符號陣列的碼字中解碼出數(shù)據(jù)符號陣列的裝置。所述陣列中的數(shù)據(jù)符號是包括第一數(shù)字和第二數(shù)字的數(shù)字對,所述解碼器還包括用于將數(shù)字對的第一數(shù)字指派給從代表第一數(shù)字的多個上下文中選出的一個上下文的裝置,以及將數(shù)字對的第二數(shù)字指派給一個從代表第二數(shù)字的多個上下文中選出的上下文的裝置。根據(jù)本發(fā)明的第十七個方面,所述解碼器包括根據(jù)所述數(shù)字對中一個數(shù)字對的第一數(shù)字而將另一個數(shù)字對的第一數(shù)字指派給一個上下文的裝置。
根據(jù)本發(fā)明的第十八個方面,提供了一種基于上下文的算術編碼器,其中包括使用碼字來表示一個數(shù)據(jù)符號陣列的裝置。所述陣列中的數(shù)據(jù)符號是包括第一數(shù)字和第二數(shù)字的數(shù)字對,所述編碼器還包括用于將數(shù)字對的第一數(shù)字指派給從代表第一數(shù)字的多個上下文中選出的一個上下文的裝置,以及將數(shù)字對的第二數(shù)字指派給一個從代表第二數(shù)字的多個上下文中選出的上下文的裝置。根據(jù)本發(fā)明的第十八個方面,所述編碼器包括用于根據(jù)數(shù)字對中第一數(shù)字而將數(shù)字對的第二數(shù)字指派給一個上下文的裝置。
根據(jù)本發(fā)明的第十九個方面,提供了一種基于上下文的算術解碼器,其中包括用于從表示數(shù)據(jù)符號陣列的碼字中解碼出所述陣列的裝置。所述陣列中的數(shù)據(jù)符號是包括第一數(shù)字和第二數(shù)字的數(shù)字對,所述解碼器還包括用于將數(shù)字對的第一數(shù)字指派給一個從代表第一數(shù)字的多個上下文中選出的上下文的裝置,以及將數(shù)字對的第二數(shù)字指派給一個從代表第二數(shù)字的多個上下文中選出的上下文的裝置。根據(jù)本發(fā)明的第十九個方面,所述解碼器包括用于根據(jù)數(shù)字對中第一數(shù)字而將數(shù)字對的第二數(shù)字指派給一個上下文的裝置。
根據(jù)本發(fā)明的第二十個方面,提供了一種基于上下文的編碼器,其中包括使用一個碼字來表示一個數(shù)據(jù)符號陣列的裝置,此外還包括提供一個表示陣列中非零數(shù)據(jù)符號數(shù)目的數(shù)字的裝置,以及將所述數(shù)字指派給一個表示所述數(shù)字的上下文的裝置。
通過結合圖7a到12來閱讀本說明書,本發(fā)明將會變得清楚。


圖1是一個對使用了基于塊的變換編碼以及運動補償預測的示范性視頻編碼器結構進行描述的框圖。
圖2是與圖1編碼器相對應的示范性視頻解碼器的框圖。
圖3是一個顯示示范性的Z字形掃描的圖示。
圖4是顯示現(xiàn)有技術中基于上下文的算術編碼方案的編碼器的框圖。
圖5是顯示現(xiàn)有技術中基于上下文的算術編碼方案的解碼器的框圖。
圖6a是顯示以Z字形方式掃描的量化DCT系數(shù)值的示范性二維陣列的圖示。
圖6b是一個顯示那些由圖6a的陣列導出的等級和游程值的表格。
圖6c是顯示表1的二進制化方案應用于圖6b的等級和游程的值所導致的二進制化的等級和游程值的表格。
圖6d是一個顯示了用以從游程和等級中更新概率估計的方法的表格。
圖7a是一個顯示了根據(jù)等級值而將上下文指派給二進制序列的方法的表格。
圖7b是一個顯示了根據(jù)本發(fā)明第一實施例而將上下文指派給等級值的方法的表格。
圖8a是一個顯示了基于游程值而將上下文指派給二進制序列的方法的表格。
圖8b是一個顯示了根據(jù)本發(fā)明第二實施例而將上下文指派給游程值的方法的表格。
圖9是一個描述了依照本發(fā)明的基于上下文的算術編碼方案的編碼器的框圖。
圖10是一個依照本發(fā)明的解碼器的框圖。
圖11是一個描述了根據(jù)本發(fā)明優(yōu)選實施例的圖像編碼方法的流程圖。
圖12是一個描述了根據(jù)本發(fā)明另一個實施例的圖像編碼方法的流程圖。
具體實施例方式
現(xiàn)在將對本發(fā)明的實施例進行詳細論述。如上所述,本發(fā)明提供了多種相關機制,通過該機制可以對基于上下文的算術編碼器的編碼效率(數(shù)據(jù)壓縮)加以改進。這種改進是通過使用那些對指派了其他數(shù)據(jù)符號的上下文加以考慮的上下文模型來實現(xiàn)的。
在下文第1.1節(jié)詳細描述了本發(fā)明的第一實施例,該實施例涉及一種基于上下文的二進制算術編碼器,所述編碼器適于在例如ITU-T建議H.26L定義的圖像編碼系統(tǒng)中使用。在這個實施例中,通過對圖像像素的變換編碼塊的量化編碼系數(shù)進行游程-等級編碼而產(chǎn)生的等級值是在考慮到了歸屬同一個塊的另一個變換系數(shù)等級的情況下指派給上下文的。
在第1.2節(jié)詳細描述了本發(fā)明的第二實施例,該實施例也涉及一種用于圖像編碼系統(tǒng)的基于上下文的二進制算術編碼器,其中所述系統(tǒng)可以是例如ITU-T建議H.26L中定義的圖像編碼系統(tǒng)。在第二實施例中,通過對圖像像素的變換編碼塊的量化的DCT變換系數(shù)進行游程-等級編碼而產(chǎn)生的游程值是在考慮到了游程值所屬的游程-等級對的等級值的情況下指派給上下文的。
在第1.3節(jié)描述了本發(fā)明第三實施例,該實施例同樣涉及一種用于圖像編碼系統(tǒng)的基于上下文的算術編碼器,其中所述系統(tǒng)可以是例如ITU-T建議H.26L中定義的圖像編碼系統(tǒng)。根據(jù)第三實施例,變換編碼圖像塊的非零變換系數(shù)的數(shù)目Nc被確定,并且在考慮到指派給用于至少一個其他變換編碼圖像塊的Nc值的上下文的情況下,將其指派給一個上下文。
本發(fā)明的優(yōu)選實施例組合了上述這三個實施例的功能。
如本文先前所述,ITU-T建議H.26L TML 8的高復雜度類使用了一種以CABAC著稱的基于上下文的算術編碼形式。在一個根據(jù)H.26L實施的視頻編碼器中,CABAC方法被用于對由編碼器產(chǎn)生的各種不同類型的信息進行編碼,其中包括圖像像素變換編碼塊所產(chǎn)生的變換系數(shù)(幀內(nèi)編碼模式)或是預測誤差(幀間編碼模式)。通過對圖像像素塊進行變換編碼產(chǎn)生的變換系數(shù)的二維陣列根據(jù)一種特定的掃描模式來掃描從而產(chǎn)生一維陣列。這兩種掃描模式是在H.26L中定義的。第一種模式稱為“單掃描模式”,另一種模式則稱為“雙掃描模式”。不管使用哪一種掃描模式,掃描變換系數(shù)都會將系數(shù)值的二維陣列轉換成一個以預定方式來對系數(shù)進行排序的一維陣列。在所述一維陣列中,有序的變換系數(shù)值被轉換成游程和等級值。在經(jīng)過排序的一維陣列中,最后一個條目是一個依照H.26L TML 8的塊結束符號,該條目采取的是一個與零相等的等級值的形式。由此表明在有序陣列中,最后一個非零系數(shù)值已經(jīng)轉換成一個游程-等級對。
游程和等級值是通過將其映射到一系列二進制序列而被轉換成二進制數(shù)字的(二進制化),其中可以為每一個二進制數(shù)字都可被賦予值0或1(參見表1)。然后,經(jīng)過二進制化的游程和等級值指派給上下文,也就是一個為游程和等級定義的單獨的上下文集合。根據(jù)H.26LTML 8,對一個給定的塊類型來說,為等級定義的上下文集合只依賴于指派了等級的二進制序列的編號。更具體地說,根據(jù)H.26L TML 8而為等級編碼定義了四個上下文。第一個上下文用于第一個二進制序列,第二個上下文是用于第二個二進制序列,第三個上下文用于剩下的表示等級幅度的二進制序列。剩余上下文則用于等級的符號。就游程來說,存在三個上下文,其中第一個上下文用于第一個二進制序列,第二個上下文用于第二二進制序列,第三個上下文則用于剩余的所有二進制序列。由于游程值總是等于或大于零,因此不需要使用一個附加上下文來表示符號信息。
1.1用于等級的上下文模型根據(jù)本發(fā)明的第一實施例,在將一個二進制化的等級值指派給一個上下文時,除了考慮等級自身映射到的二進制序列之外,還要考慮到先前游程-等級對中的等級值。在這個方面,術語“先前游程-等級對”意味著所述游程-等級對與有序系數(shù)值的一維陣列中的先前系數(shù)相對應。以下的偽代碼給出了一個用于將上下文指派給游程-等級對的等級值的示范性過程,其中考慮到了等級本身映射到的二進制序列以及先前游程-等級對中的等級值If(bin_nr>MAX_BIN_LEVEL);bin_nr=MAX_BIN_LEVEL;endif(prev_level>MAX_LEVEL) (2)prev_level=MAX_LEVEL;endcontext=(bin_nr-1)*MAX_LEVEL+prev_level在表達式(2)中,prev_level是先前游程-等級對的等級值的大小。在每個塊的開端,prev_level都會被初始化為零。在雙掃描模式中,在每個掃描開端初始化prev_level,即每塊兩次。參數(shù)MAX_BIN_LEVEL提供了一種用于對由等級值映射到的二進制序列編號影響上下文指派的方式加以控制的手段。更具體地說,以一種與依照H.26L TML 8進行的當前上下文指派相似的方式,MAX_BIN_LEVEL有效定義了一個所有大于或等于MAX_BIN_LEVEL的二進制序列編號被指派到的上下文。以一種相似的方式,參數(shù)MAX_LEVEL提供了一種對先前游程-等級對中的等級值影響上下文指派的方式加以控制的手段。圖7a和圖7b描述了根據(jù)本發(fā)明第一實施例并通過應用表達式(2)的偽代碼而將上下文指派給等級值的方法,其中MAX_BIN_LEVEL=3并且MAX_LEVEL=5。原則上可以使用MAX_BIN_LEVEL與MAX_LEVEL的任何組合來定義一組適于所要編碼的等級值統(tǒng)計特征的上下文。
1.2用于游程的上下文模型根據(jù)本發(fā)明的第二實施例,在這里使用了一種與第1.1節(jié)所描述的方法相類似的方法來將游程值指派給上下文。更具體地說,在將一個二進制化的游程值指派給一個上下文的時候,除了考慮游程本身映射到的二進制序列之外,還要對游程值歸屬的游程-等級對的等級加以考慮。下文中的偽代碼給出了一個用于將上下文指派給游程-等級對中的游程值的示范性過程,在這個過程中顧及了游程本身映射到的二進制序列以及所述游程值所歸屬的游程-等級對的等級值If(bin_nr>MAX_BIN_RUN);bin_nr=MAX_BIN_RUN;
endif(level>MAX_RUNL) (3)level=MAX_RUNL;endcontext=(bin_nr-1)*MAX_RUNL+level在表達式(3)中,level是游程-等級對中的等級值的大小。參數(shù)MAX_BIN_RUN提供了一個對游程值映射到的二進制序列編號影響上下文指派的方式加以控制的手段。更具體地說,以一種與依照H.26LTML 8進行的當前上下文指派相類似的方式,MAX_BIN_RUN有效定義了一個指派了大于或等于MAX_BIN_RUN的所有二進制序列編號的上下文。以一種相似的方式,參數(shù)MAX_RUNL提供了一種對游程-等級對中的等級值影響上下文指派的方式進行控制的手段。圖8a和圖8b描述了依照本發(fā)明第二實施例并通過應用表達式(3)的偽代碼而將上下文指派給等級值的方法,其中MAX_BIN_RUN=3并且MAX_RUNL=4。原則上可以使用MAX_BIN_RUN與MAX_RUNL的任何組合來定義一組適于所要編碼的游程值統(tǒng)計特征的上下文。
1.3用于非零系數(shù)數(shù)目的上下文特別地,本發(fā)明的第三實施例尤其涉及到將變換系數(shù)值的有序陣列轉換成游程和等級值的方法,以及用信號通知那些與量化變化系數(shù)值的陣列相對應的游程-等級對數(shù)目的方法。更具體地說,在對一個圖像像素塊或是預測誤差值進行變換編碼,從而形成一個變換系數(shù)值的二維陣列并且對每一個系數(shù)值進行量化之后,陣列中的非零量化系數(shù)值數(shù)目將被確定。一個稱為Nc的值將被指派給所述數(shù)字并被用于明確地用信號通知陣列中非零系數(shù)值的數(shù)目。因此,依照本發(fā)明的這個實施例,在這里不再需要一個諸如與零相等的等級值這樣的EOB符號。
經(jīng)過量化的變換系數(shù)進一步根據(jù)預定掃描順序而被掃描,以便產(chǎn)生一個有序的一維陣列??商鎿Q地,也可以在對量化系數(shù)值進行排序之后再確定Nc。然后,有序陣列中的每一個非零量化系數(shù)都轉換成游程-等級對。根據(jù)本發(fā)明的這個實施例,游程-等級對的等級值表示的是經(jīng)過量化的系數(shù)減1得到的值的大小,游程值則與所論述系數(shù)之前的連續(xù)零值量化系數(shù)的數(shù)目相對應。由于不再將與零相等的等級值用作塊結束指示符,因此為所述等級值賦予了量化系數(shù)減1所得到的值的大小。由此可以節(jié)省用于表示等級信息所需要的數(shù)據(jù)量(例如比特數(shù)目)。
然后,與Nc值一樣,在這里使用了熵編碼來對等級和游程值進行編碼。在使用了諸如在H.26L TML 8中實現(xiàn)的CABAC技術之類的基于上下文的算術編碼方法的情況下,如上所述,可以根據(jù)本發(fā)明的第一和/或第二實施例來對游程和等級值進行編碼??商鎿Q地,也可以將任何其他適當?shù)纳舷挛哪P陀糜谟纬毯偷燃壷怠4送膺€可以為Nc定義一個單獨的上下文模型。根據(jù)本發(fā)明的這個實施例,首先將表示給定塊中非零量化變換系數(shù)數(shù)目的Nc值映射到一系列的二進制序列來對對其進行二進制化,其中每一個二進制序列都具有一個相應的二進制序列編號。然后則基于Nc所映射到的二進制序列編號以及指派了一個Nc值的至少一個其他圖像塊或宏塊的Nc來確定用于所述Nc的上下文。以下的偽代碼給出了用于將一個上下文指派給一個Nc值的示范性過程,在這個過程中考慮到了Nc本身映射到的二進制序列以及先前的Nc值If(bin_nr>MAX_BIN_Nc);bin_nr=MAX_BIN_Nc;endif(prev_nc>MAX_Nc) (4)prev_nc=MAX_Nc;endcontext=(bin_nr-1)*MAX_nc+prev_nc在表達式(4)中,prev_nc即為先前的Nc值。
在從編碼器將經(jīng)過編碼的給定量化變換系數(shù)塊的等級和游程值發(fā)送到一個解碼器的時候,經(jīng)過熵編碼的Nc值是在對游程和等級值進行編碼之前發(fā)送的。在解碼器上對所述Nc值進行解碼,其后則跟隨著與所論述塊的量化變換系數(shù)值相對應的游程-等級對。當對等級值進行解碼時,為了補償在編碼器中所作的相應減法,將會把數(shù)值+1加到各個等級大小中。
為了展示使用圖像編碼方法而在編碼效率上的改進,根據(jù)本發(fā)明,平均比特率差值是通過使用關于QP=28、24、20、16的結果來計算的。表2顯示了與TML 8相比較的百分比形式的比特率減少,其中MAX_LEVEL=5并且MAX_RUN=4。所有幀都是在CABAC模式中作為I幀來編碼的。如表2所示,比特率的減少范圍是從0.95到4.74%。當QP值很小的時候,所述改進將會更為顯著。
在表2中,出現(xiàn)在表格第一行的名稱是在Gisle Bjontegaard的“Recommended Simulation Conditions for H.26L”(VCG-M75,ITU-T Video Coding Experts Group,Austin,Texas,USA,2-4April,2001)中使用的畫面。

表2現(xiàn)在參考圖9,根據(jù)本發(fā)明,發(fā)送端的編碼器10包括一個用于保存先前等級和游程的單元16。如圖9所示,用于給定塊的游程-等級對102被提供到映射單元12,所述映射單元12將所述對映射到一系列的二進制序列,每一個二進制序列都具有值0或1。在表示游程-等級對的序列中,二進制序列的位置稱為二進制序列編號。二進制序列編號由信號104表示?;谛盘?04和單元16提供的先前編碼的等級值108,指派單元14將一個上下文指派給一個二進制序列編號。信號106表示的上下文被提供到一個自適應算術編碼器20。而1的出現(xiàn)概率與0的出現(xiàn)概率則是通過一個概率估計單元22來估計的?;谒龈怕使烙?20,算術編碼單元24對二進制序列進行編碼。反饋信號124則從編碼器24提供到概率估計模塊22,從而更新概率估計。經(jīng)過編碼的信息轉變成一個比特流122。以便傳遞到一個解碼器或者保存在一個存儲設備中以供稍后使用。
優(yōu)選地,編碼器10還包括一個能在將游程-等級對提供給算術編碼器20之前將塊中非零系數(shù)數(shù)目Nc提供給算術編碼器20的單元18,因此還對Nc進行編碼并且將其包含在比特流122中。所述Nc則是由信號110來表示的。在使用Nc的情況下,沒有必要向解碼器發(fā)送一個塊結束(EOB)符號。在現(xiàn)有技術中,大小為0的等級值將被用于EOB符號。更具體地說,Nc是在變換和量化之后才被發(fā)現(xiàn)的并且是使用熵編碼來對其進行編碼的。需要指出的是,在非零系數(shù)數(shù)目已知的情況下,不再有必要使用0等級值來用信號通知塊結束。因此,通過將量化系數(shù)值減1,可以對等級值進行修改。
如圖10所示,在接收端使用解碼器50來接收編碼器10提供的比特流122。接收到的比特流表示的是經(jīng)過算術編碼的數(shù)據(jù)符號,它是由參考數(shù)字202來表示的。一開始,根據(jù)先前解碼的符號,在上下文指派單元66中計算一個上下文,并且在概率估計單元62中更新二進制序列值的概率估計。更新概率估計所依據(jù)的先前解碼符號由參考數(shù)字205示。上下文指派塊66中執(zhí)行的上下文指派以及概率估計塊62執(zhí)行的概率估計計算與編碼器10中執(zhí)行的相類似。然后,接收到的比特202被饋送到算術編碼器60的算術解碼引擎64,在那里使用計算得到的上下文以及二進制序列值204的當前概率估計來將其轉換成經(jīng)過解碼的二進制序列值206。在塊68中,經(jīng)過解碼的二進制序列208被映射到游程和等級值。如果在編碼器10中對塊中非零系數(shù)數(shù)目Nc進行編碼并且在接收到的比特流202中提供了所述數(shù)目,則將信號214提供給二進制序列-數(shù)值映射模塊68,由此通過將等級值加1來恢復經(jīng)過量化的系數(shù)。
圖11是描述根據(jù)本發(fā)明優(yōu)選實施例的圖像編碼方法的流程圖。如圖所示,方法500始于編碼器接收一個圖像的步驟510。在步驟520,將接收到的圖像分成多個塊。在步驟530對每一個塊進行掃描,并且在步驟540獲取塊中經(jīng)過量化的系數(shù)的等級和游程。與現(xiàn)有技術的編碼方案相比,在步驟550,本發(fā)明還在上下文的指派過程中使用了先前等級。特別地,如第1.1節(jié)所述,將上下文指派到代表量化系數(shù)等級值的二進制序列的處理對先前編碼的等級值加以考慮。同樣,如1.2節(jié)所述,將上下文指派到代表量化系數(shù)游程值的二進制序列的處理也考慮到了等級值。已指派的上下文傳送到一個算術編碼器,以便在步驟560中進行編碼。另外,如第1.3節(jié)所述,Nc或非零量化系數(shù)的數(shù)目是在步驟530中掃描了所述塊的過程之中或是之后才得到確定的,并且在將Nc與上下文提供到一個解碼器之前在步驟560中對Nc進行編碼。
可替換地,如圖11所示,在指派上下文時并未考慮到先前編碼的等級或游程,在這種情況下,通過將指示Nc的信號傳遞到接收端,可以改進所述圖像編碼方法。如圖12所示,Nc是在步驟542中獲取和提供的,而不是為了在步驟550中指派上下文而在步驟540中獲取先前編碼的等級和游程。為了在步驟560中執(zhí)行編碼,Nc是在步驟550中指派上下文之前發(fā)送到算術編碼器的。借助于發(fā)送Nc,在這里不再有必要將EOB符號發(fā)送到解碼器。
盡管在這里針對本發(fā)明的優(yōu)選實施例而對其進行了描述,但是本領域技術人員將會理解,在不脫離本發(fā)明范圍的情況下,可以對其進行形式和細節(jié)方面的前述和多種其他改變、省略和背離。
權利要求
1.一種圖像編碼方法,其中,圖像被分成多個具有多個像素的塊,每一個像素都具有一個像素值,并且對像素塊執(zhí)行變換編碼操作以便產(chǎn)生相應的變換系數(shù)值塊,所述方法的特征在于提供指示變換系數(shù)值塊中的非零系數(shù)值的數(shù)目的數(shù)字;以及將所述數(shù)字指派給一個表示所述數(shù)字的上下文。
2.根據(jù)權利要求1的方法,其特征在于在考慮到另一個數(shù)字所指派到的上下文的情況下,將指示所述變換系數(shù)值塊中的非零系數(shù)值數(shù)目的數(shù)字指派給一個上下文,其中所述另一個數(shù)字指示另一個變換系數(shù)塊中非零系數(shù)值的數(shù)目。
3.根據(jù)權利要求1的方法,其特征在于以一種給定的掃描順序掃描所述變換系數(shù)值塊,以便產(chǎn)生一個掃描的系數(shù)值陣列,以及通過多個具有第一數(shù)字和第二數(shù)字的數(shù)字對來表示掃描的陣列中的系數(shù)值。
4.根據(jù)權利要求3的方法,其特征在于所述第一數(shù)字指示非零系數(shù)值;以及所述第二數(shù)字指示所述非零系數(shù)值之前的連續(xù)零系數(shù)值的數(shù)目。
5.根據(jù)權利要求3或4的方法,其特征在于第一數(shù)字與非零系數(shù)值減1的大小相等。
6.一種編碼器,包括用于將圖像分成多個具有多個像素的塊的裝置,其中每一個像素都具有一個像素值,并且還包括用于對像素塊執(zhí)行變換編碼操作以便產(chǎn)生相應的變換系數(shù)值塊的裝置,其特征在于,所述編碼器包括用于提供一個指示變換系數(shù)值塊中的非零系數(shù)值數(shù)目的數(shù)字的裝置;以及用于將所述數(shù)字指派給一個表示所述數(shù)字的上下文的裝置。
7.根據(jù)權利要求6的編碼器,其特征在于所述用于把指示所述變換系數(shù)值塊中的非零變換系數(shù)值數(shù)目的數(shù)字指派給一個上下文的裝置被安排為對另一個這樣的數(shù)字所指派到的上下文加以考慮,其中所述另一個這樣的數(shù)字指示另一個變換系數(shù)塊中的非零變換系數(shù)值數(shù)目。
8.根據(jù)權利要求6或7的編碼器,其特征在于它還包括用于以給定掃描順序掃描變換系數(shù)值塊以便產(chǎn)生一個掃描的系數(shù)值陣列的裝置,以及用于借助多個具有第一數(shù)字和第二數(shù)字的數(shù)字對來表示掃描的陣列中的系數(shù)值的裝置。
9.根據(jù)權利要求8的方法,其特征在于所述第一數(shù)字指示非零系數(shù)值;以及所述第二數(shù)字指示所述非零系數(shù)值之前的連續(xù)零系數(shù)值的數(shù)目。
10.一種基于上下文的算術編碼方法,其中數(shù)據(jù)符號陣列是用碼字來表示的,其特征在于提供一個指示所述陣列中非零數(shù)據(jù)符號數(shù)目的數(shù)字,以及將所述數(shù)字指派給一個表示所述數(shù)字的上下文。
11.一種基于上下文的算術編碼器,包括使用碼字來表示數(shù)據(jù)符號陣列的裝置,其特征在于所述編碼器包括用于提供一個指示所述陣列中非零數(shù)據(jù)符號數(shù)目的數(shù)字的裝置,以及用于將所述數(shù)字指派給一個表示該數(shù)字的上下文的裝置。
全文摘要
一種圖像編碼方法,其中圖像被分成了具有多個像素的塊。對像素塊執(zhí)行變換編碼操作以便產(chǎn)生相應的變換系數(shù)值塊,其中對所述變換系數(shù)值塊進行掃描,以便產(chǎn)生一個經(jīng)過掃描的系數(shù)值陣列,所述陣列由具有第一和第二數(shù)字的多個數(shù)字對表示。第一和第二數(shù)字指派到了表示所述數(shù)字對的多個上下文(14)之一。在這里,根據(jù)一個數(shù)字對的第一數(shù)字而將另一個數(shù)字對的第一數(shù)字指派給一個上下文??商鎿Q地,一個數(shù)字對中的第二數(shù)字是基于數(shù)字對(16)中的第一數(shù)字而被指派給一個上下文的。此外還確定了一個指示變換系數(shù)值塊中非零系數(shù)值數(shù)目的數(shù)字,并且將其指派給一個上下文。
文檔編號G06T9/00GK1874509SQ200610088710
公開日2006年12月6日 申請日期2002年9月12日 優(yōu)先權日2001年9月14日
發(fā)明者M·卡策維茨, R·庫爾切倫 申請人:諾基亞有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
将乐县| 鄂托克旗| 和龙市| 离岛区| 宜良县| 石林| 金堂县| 鄄城县| 江西省| 交口县| 开远市| 辉县市| 定州市| 蒲城县| 彭山县| 泗洪县| 专栏| 霞浦县| 普兰店市| 台南县| 湖南省| 屯留县| 钦州市| 徐汇区| 泽库县| 平和县| 云南省| 柳林县| 合水县| 木兰县| 临桂县| 洛浦县| 揭阳市| 泸西县| 长阳| 乌兰浩特市| 乳山市| 襄樊市| 惠州市| 江陵县| 益阳市|