專利名稱:快速聯(lián)合圖像專家組霍夫曼編碼和解碼方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及用于各種不同應(yīng)用的圖像壓縮,特別是涉及結(jié)合一種以壓縮(packed)格式存儲離散余弦變換(DCT)分組的結(jié)構(gòu),根據(jù)JPEG(聯(lián)合圖像專家組)標(biāo)準(zhǔn)進(jìn)行霍夫曼熵編解碼。
背景技術(shù):
圖像和圖形包含非常大量的數(shù)據(jù),如果數(shù)字化這些數(shù)據(jù)以便傳輸或由數(shù)字?jǐn)?shù)據(jù)處理器處理,則要有好的保真度就經(jīng)常需要數(shù)百萬個(gè)字節(jié)表示該圖像或圖形的各個(gè)像素。圖像壓縮的目的在于用較少的數(shù)據(jù)表示圖像,以節(jié)省存儲成本或傳輸時(shí)間和費(fèi)用。通過近似原始圖像而不是通過精確再現(xiàn)可以實(shí)現(xiàn)最有效的壓縮。Pennebaker和Mitchell在″JPEG靜止圖象數(shù)據(jù)壓縮標(biāo)準(zhǔn)″中詳細(xì)討論了JPEG標(biāo)準(zhǔn),并由VanNostrand Reinhold于1993年出版,這里將其作為參考,該JPEG標(biāo)準(zhǔn)允許圖象在各種應(yīng)用之間互換并開發(fā)了在多媒體應(yīng)用中提供數(shù)字連續(xù)色調(diào)的彩色圖像的能力。
JPEG主要涉及具有兩維空間的圖像,包含灰度級或彩色信息,不具有時(shí)間的相關(guān)性,這是與MPEG(活動圖像專家組)標(biāo)準(zhǔn)的區(qū)別之處。JPEG壓縮可以降低一個(gè)數(shù)量級的存儲需求并改進(jìn)此過程中的系統(tǒng)響應(yīng)時(shí)間。JPEG標(biāo)準(zhǔn)的主要目的在于為給定的數(shù)據(jù)量提供最大的圖像保真度和/或可用傳輸或處理時(shí)間,并容納任意程度的數(shù)據(jù)壓縮。經(jīng)常是這種情況,即數(shù)據(jù)被壓縮到二十分之一或更多(傳輸或處理時(shí)間降低相當(dāng)?shù)谋壤?而不會產(chǎn)生一般觀眾能夠察覺的人為痕跡。
JPEG的的基本構(gòu)件之一是離散余弦變換(DCT)。此變換的一個(gè)重要方面是它產(chǎn)生非相關(guān)系數(shù)。解相關(guān)系數(shù)對于壓縮很重要,因?yàn)榭梢元?dú)立地對待每個(gè)系數(shù)而不喪失壓縮效率。DCT的另一個(gè)重要方面是能夠利用視覺加權(quán)的量化值來量化DCT系數(shù)。因?yàn)槿祟惖囊曈X系統(tǒng)將一圖像分解成一組波形,每個(gè)波形具有一特定的空間頻率,所以視覺系統(tǒng)的反應(yīng)非常依賴空間頻率,因此可以從眼睛能夠看到的圖像結(jié)構(gòu)中除去不能感知的圖像結(jié)構(gòu)。因此DCT提供對此分解的良好近似,以允許截去或省略不會顯著影響觀眾對圖象保真度的感覺的數(shù)據(jù)。
根據(jù)JPEG標(biāo)準(zhǔn),原始的單色圖像首先被以任意的分辨率分解成8×8陣列六十四象素的分組,該分辨率假設(shè)足夠高而不會產(chǎn)生看得見的圖形失真。(通過將每個(gè)分量單獨(dú)分解成8×8象素分組來壓縮彩色圖像。)這些技術(shù)和硬件是熟知的,它們可以非常迅速地對此量化圖象數(shù)據(jù)執(zhí)行DCT,生成六十四個(gè)DCT系數(shù)。許多圖像的DCT系數(shù)多數(shù)是零(在任何情況下都不會對該圖像作出貢獻(xiàn))或接近零,當(dāng)相應(yīng)于眼睛相對感覺遲鈍的空間頻率時(shí),它們可以被忽略或省略。因?yàn)槿祟惖难劬芨吆秃艿偷目臻g頻率不是很敏感,作為JPEG標(biāo)準(zhǔn)的一部分,在許多實(shí)例中以所謂的Z字型模式提供DCT系數(shù),Z字型模式大致相應(yīng)于空間頻率的總和沿水平和垂直方向增加,這樣趨向于將對應(yīng)不很重要的空間頻率的DCT系數(shù)歸到DCT系數(shù)數(shù)據(jù)流的最后,允許它們作為一組來進(jìn)行有效地壓縮。
雖然上述的離散余弦變換和編碼可以為實(shí)際遇到的多數(shù)圖像提供顯著的數(shù)據(jù)壓縮,但不能保證數(shù)據(jù)量的真正降低,而且壓縮程度不是最佳的,特別是因?yàn)楸硎久總€(gè)DCT系數(shù)的同等精度要求傳送相同數(shù)目的位(雖然JPEG標(biāo)準(zhǔn)允許DCT值通過在一表中編碼的范圍而量化)。即,DCT編碼形成的壓縮收益大部分體現(xiàn)在增加了處理零和接近零值的DCT系數(shù)的效率,雖然某些壓縮也通過降低精度的量化來實(shí)現(xiàn)。相應(yīng)地,JPEG標(biāo)準(zhǔn)提供被稱為熵編碼的第二階段壓縮和編碼。
熵編碼的概念通常類似于熱力學(xué)中更為熟悉的熵的概念,在熱力學(xué)中,熵量化一物理系統(tǒng)中的″無序″量。在信息論領(lǐng)域中,在任意大小和與任何給定量的信息或符號的意義無關(guān)的數(shù)據(jù)集合環(huán)境中,熵是用來對任何給定量信息(例如符號)的內(nèi)容的可預(yù)測性的度量。此概念對一給定的字母符號的可實(shí)現(xiàn)壓縮量提供可以實(shí)現(xiàn)的下限,更主要的是導(dǎo)致這樣一種壓縮方案,即前提是相對較多可預(yù)測的數(shù)據(jù)或符號比相對較少可預(yù)測的數(shù)據(jù)或符號包含更少的信息,相反的,相對較少可預(yù)測的數(shù)據(jù)或符號比相對較多可預(yù)測的數(shù)據(jù)或符號包含更多的信息。因此,假設(shè)一種用于此目的的適當(dāng)?shù)拇a,通過對較多可預(yù)測的(即在此數(shù)據(jù)體中更常見并包含較少的信息)符號或值分配較少的位可以實(shí)現(xiàn)最佳的有效壓縮,雖然要為相對罕見的符號或數(shù)值預(yù)留較長的碼。
實(shí)際上,霍夫曼編碼和算術(shù)編碼適合于熵編碼,并且二者都為JPEG標(biāo)準(zhǔn)所采納。JPEG標(biāo)準(zhǔn)的操作區(qū)別在于雖然兩種編碼技術(shù)都要求相應(yīng)于這些碼的數(shù)值表,但是算術(shù)編碼提供了缺省表,但霍夫曼編碼沒有。但是,如果不過分的折衷圖象保真度來降低計(jì)算常規(guī)霍夫曼表的計(jì)算開銷,某些特定的霍夫曼表經(jīng)常不加選擇地被使用,雖然在JPEG標(biāo)準(zhǔn)下可以自由地指定這些表以便在重建時(shí)獲得最大的編碼效率和圖像保真度,其中許多是缺省的性質(zhì)。
應(yīng)當(dāng)理解的是雖然如果編碼或調(diào)節(jié)表合理地適合于該圖像,熵編碼,特別是利用霍夫曼編碼的熵編碼保證了非常主要的數(shù)據(jù)壓縮的程度,但編碼自身計(jì)算量非常大,因?yàn)樗腔诮y(tǒng)計(jì)的,并且需要關(guān)于大量的圖像值或表示圖像的值,例如DCT系數(shù)的統(tǒng)計(jì)信息的集合。相反,使用體現(xiàn)不表示正被編碼的圖像的概率的表可能會導(dǎo)致擴(kuò)展而不是壓縮,如果被編碼的圖像需要編碼從中形成這些表的圖象中相對罕見的許多值,即使這種情況很少遇見。
為此某些霍夫曼表實(shí)際上已經(jīng)成為標(biāo)準(zhǔn)使用,即使不會實(shí)現(xiàn)所使用壓縮程度的最佳壓縮和/或最佳保真度。相反,霍夫曼編碼的壓縮效率通常可以顯著增加并且可以通過相應(yīng)于感興趣圖像的定制霍夫曼表在給定數(shù)據(jù)位數(shù)內(nèi)最佳的保持圖像保真度,但是這只能用大的編碼計(jì)算負(fù)荷來實(shí)現(xiàn)。
當(dāng)所編碼的任何特定值的發(fā)生比例超過50%時(shí),由于將霍夫曼碼指定給各個(gè)編碼值技術(shù)的多級性質(zhì)和至少一個(gè)位必須用于表示最經(jīng)常出現(xiàn)和最可預(yù)測的數(shù)值的事實(shí),即使包含在其中的信息可以理想地調(diào)整得更少,也會遇到霍夫曼編碼特性的另一種效率低下。例如,單個(gè)值的發(fā)生比例上升到75%,霍夫曼編碼的效率下降86%。實(shí)際上,絕大多數(shù)DCT系數(shù)是(或量化成)零,因此在霍夫曼編碼DCT系數(shù)或DCT系數(shù)差值中會時(shí)常遇到大量的效率低下。對于AC系數(shù),JPEG委員會通過將零值系數(shù)游程集合在一起,而且不編碼單獨(dú)為零值的系數(shù)來解決這個(gè)問題。因此一霍夫曼符號出現(xiàn)超過一半時(shí)間的可能性可以極大地被降低。
霍夫曼解碼還需要大量的計(jì)算負(fù)荷,因?yàn)閴嚎s效率主要從可變長度碼中得出,可變長度碼需要另外的處理來檢測各個(gè)數(shù)值或符號的結(jié)束點(diǎn)。另外,通過使用編碼表可以實(shí)現(xiàn)此處理,編碼表必須與熵編碼圖象數(shù)據(jù)一起傳送而且可以隨著每個(gè)圖象而改變。由于霍夫曼碼長度可變以根據(jù)數(shù)據(jù)的可預(yù)測性或包含在特定符號或值的數(shù)據(jù)量來分配位數(shù)的事實(shí),導(dǎo)致訪問表中數(shù)據(jù)的復(fù)雜性尖銳化。為了增加響應(yīng)速率,已經(jīng)執(zhí)行了霍夫曼表中能被用于解碼的查詢表。因此,每一碼字必須經(jīng)常訪問至少兩個(gè)字節(jié)的表數(shù)據(jù)。
而且,因?yàn)樵试S十六位的霍夫曼碼長度,現(xiàn)有技術(shù)的解碼方法將訪問具有用于符號值的216個(gè)入口和用于碼長的216個(gè)入口的霍夫曼表。每次霍夫曼表被指定或改變時(shí),必須計(jì)算這些入口。直到四個(gè)DC和四個(gè)AC表被用于解碼和交織基線的四個(gè)分量圖像。對于具有小的芯片超高速緩沖存儲器或RAM的硬件來說,這種大表將會降低性能,因?yàn)槊總€(gè)超高速緩沖存儲器的失配(miss)或RAM(隨機(jī)采取存儲)訪問都需要額外的處理周期。
發(fā)明內(nèi)容
因此本發(fā)明的目的在于提供一種霍夫曼編碼和解碼技術(shù),它可以用少得多的時(shí)間和簡化的處理資源和硬件來實(shí)現(xiàn)。
本發(fā)明的另一個(gè)目的在于提供一種霍夫曼編碼和解碼技術(shù),它通過使用壓縮的中間數(shù)據(jù)格式來增強(qiáng)。
為了實(shí)現(xiàn)本發(fā)明的這些和其它目的,提供一種霍夫曼編碼符號的方法,該方法包括步驟對于表中第一次出現(xiàn)的給定長度的碼定義一籽數(shù)值(Seed value),存儲一碼字的長度,當(dāng)所述數(shù)目和所述碼字的位數(shù)小于或等于預(yù)定位數(shù)時(shí)以第一種格式存儲該長度和碼字,當(dāng)該數(shù)目和圖象數(shù)據(jù)包括大于預(yù)定位數(shù)的多個(gè)位數(shù)時(shí)以第二種格式存儲籽數(shù)的標(biāo)引、位移(offset)和碼字。
根據(jù)本發(fā)明的另一個(gè)方面,提供一種霍夫曼解碼壓縮數(shù)據(jù)的方法,該方法包括步驟用多個(gè)測試標(biāo)準(zhǔn)的每一個(gè)測試一數(shù)據(jù)流的位來確定一個(gè)有效霍夫曼碼的長度,將相應(yīng)于該長度的多個(gè)位移的其中一個(gè)與該有效霍夫曼碼相組合而形成一標(biāo)引,和利用該標(biāo)引訪問霍夫曼表中的一個(gè)符號值。
從下面參照附圖對本發(fā)明優(yōu)選實(shí)施例的詳細(xì)描述將更好的理解前述和其它的目的、狀況和優(yōu)點(diǎn),其中圖1是根據(jù)JPEG標(biāo)準(zhǔn)的說明霍夫曼表規(guī)范語法的圖,圖1A描述AC DCT系數(shù)或DC DCT系數(shù)差值的霍夫曼編碼,圖2描述根據(jù)JPEG標(biāo)準(zhǔn)示范性的說明霍夫曼表規(guī)范和熵編碼圖象數(shù)據(jù),圖3和4分別是適于亮度和色度DC DCT系數(shù)差值的典型的霍夫曼碼表,圖5和5A是可用于實(shí)現(xiàn)本發(fā)明的另一個(gè)硬件實(shí)施例的示意表示圖,圖6是可用于實(shí)現(xiàn)本發(fā)明的硬件實(shí)施例的一些其它細(xì)節(jié)的示意表示圖,圖7是根據(jù)本發(fā)明計(jì)算比較值和霍夫曼表指針數(shù)據(jù)的優(yōu)選形式的流程圖,圖8是表示本發(fā)明解碼包括霍夫曼編碼R/S值的壓縮數(shù)據(jù)的方法的流程圖,圖9A、9B和9C是描述圖8過程的優(yōu)選特征的流程圖,圖10說明可以迅速執(zhí)行霍夫曼編碼的壓縮的中間數(shù)據(jù)格式,圖11是根據(jù)本發(fā)明編碼器的方框圖,圖12說明編碼器表的初始值,和圖13說明圖11一個(gè)部分的優(yōu)選實(shí)現(xiàn)方式。
具體實(shí)施例方式
現(xiàn)在參照附圖,特別是參照圖1,圖1表示了根據(jù)JPEG標(biāo)準(zhǔn)的霍夫曼表的規(guī)范語法,該語法包含在上述參考的Pennebaker等的出版物的第393頁上。示出的語法稱為用于定義一個(gè)或多個(gè)霍夫曼編碼表的標(biāo)記段,此后這些霍夫曼編碼表用于執(zhí)行霍夫曼熵編碼或解碼。不論何時(shí)要改變新的參數(shù)或表值都使用相同的語法。標(biāo)記段總是包含整數(shù)個(gè)字節(jié)(有時(shí)通過在該段的最后增加給定的邏輯值位而實(shí)現(xiàn)),用于碼分組的幀開始(SOF)和掃描開始(SOS)的標(biāo)記段通常稱為首部。
根據(jù)JPEG標(biāo)準(zhǔn)的標(biāo)記段,如圖1所示總是以兩個(gè)字節(jié)代碼開始,首先是字節(jié)對齊的十六進(jìn)制″FF″字節(jié),隨后是規(guī)定該標(biāo)記功能的非零字節(jié),例如″FFDB″表示″定義量化表″(DQT)或″FFC4″表示″定義霍夫曼表″(DHT)。具體到用于″定義霍夫曼表″函數(shù),后面的兩個(gè)字節(jié)規(guī)定參數(shù)字段的長度,在標(biāo)記段中記為Lh。下一個(gè)字節(jié)的前四位中的一位Tc規(guī)定緊接著下一個(gè)表的類型為DC或AC(″0″或″1″),之后的四位Th規(guī)定該表的名稱。每個(gè)DC和AC表可以允許直到四個(gè)表,標(biāo)記段可用于定義或重新定義其中任意或所有的表。
接下來的十六個(gè)字節(jié)規(guī)定每個(gè)位長的碼數(shù),Li,它將包含在下一個(gè)表中以對應(yīng)于JPEG標(biāo)準(zhǔn)所允許的最大位長(否則就是任意的)。作為一種符號約定,一位碼的數(shù)目是L1,十六位碼的數(shù)目是L16。不會表示所有的位長,特別是如果圖像精度是八位,在量化生成至多十一位系數(shù)之后,所有圖象數(shù)據(jù)中未表示的碼長將編碼為十六進(jìn)制的″00″。下面的字節(jié)V1,1到V16,L16是對應(yīng)于每個(gè)霍夫曼編碼的實(shí)際值,順序是各自出現(xiàn)的頻率/概率(包括提供一個(gè)以上給定長度碼的情況)。
如前所述,諸如霍夫曼編碼之類的熵編碼對出現(xiàn)頻率或概率越大的數(shù)值分配的位越少,并且許多DCT系數(shù)是零。因此,JPEG標(biāo)準(zhǔn)提供八個(gè)霍夫曼編碼表,每個(gè)表具有256個(gè)入口(并確??偸嵌x了特殊霍夫曼碼與特殊DCT系數(shù)之間的變換)。為了加快該過程,查詢表也可以提供到霍夫曼表Vi,j字段的標(biāo)引,這可以減少查找一特定Vi,j值的操作次數(shù),但需要額外的存儲資源并為開發(fā)更多的表入口產(chǎn)生額外的計(jì)算負(fù)荷,如上面所提到的。
現(xiàn)在將結(jié)合圖2示范性的霍夫曼表解釋標(biāo)記段語法的應(yīng)用。簡言之,應(yīng)當(dāng)理解壓縮過程中的量化和離散余弦變換(DCT)的結(jié)果是光柵掃描順序的一系列DCT系數(shù)。通過以Z字型順序訪問和進(jìn)一步壓縮(和包括熵編碼的其他變換處理的加強(qiáng))零值系數(shù),零值的系數(shù)被大致分組,正如在上面所引入的和同時(shí)提交的相關(guān)申請所公開的,根據(jù)游程和尺寸(R/S)數(shù)據(jù)壓縮數(shù)據(jù)來得到進(jìn)一步的壓縮。游程(run)是AC DCT系數(shù)的連續(xù)零值串的長度,尺寸是說明一非零DCT系數(shù)所必需的位數(shù)。游程或R值編碼為字節(jié)中較高有效位的四位,尺寸或S值表示同一R/S字節(jié)中較低有效位的四位。
可以看出DC DCT系數(shù)差和AC DCT系數(shù)值并沒有被R/S值所完全規(guī)定。但是,根據(jù)JPEG標(biāo)準(zhǔn)只編碼R/S值并將正AC DCT系數(shù)或DC DCT差值的實(shí)際位和根據(jù)如圖1A所示用于負(fù)AC DCT系數(shù)和DC DCT系數(shù)差值的適當(dāng)規(guī)則改變的位級聯(lián)或附加到每個(gè)碼,足以包含所有的原始DCT系數(shù)信息,同時(shí)提供非??捎^的數(shù)據(jù)壓縮,這將在下面討論,同時(shí)所有的細(xì)節(jié)都符合JPEG標(biāo)準(zhǔn)。
為了清楚,圖2表示成右邊對齊的十六列,因此兩個(gè)字節(jié)的標(biāo)記段伸到左邊。每個(gè)字節(jié)由表示其兩個(gè)單獨(dú)的四位的兩個(gè)十六進(jìn)制編碼的數(shù)字表示。
圖2的第一個(gè)標(biāo)記是表示圖像開始(SOI)的“FFD8”。第二個(gè)標(biāo)記是“FFDB”,表示量化表的規(guī)定。應(yīng)當(dāng)理解,量化的DCT系數(shù)值不需要表示固定尺寸值的一個(gè)范圍,但是每個(gè)值可以表示尺寸不同于其他值的一個(gè)值的范圍。此表是以對理解本發(fā)明并不重要的方式從分析原始圖像的角度得出的,并將隨后在重建圖像期間用于“解量化”DCT系數(shù)。
第三個(gè)標(biāo)記是“FFC4”,表示規(guī)定一個(gè)或多個(gè)霍夫曼表的標(biāo)記段的開始。下面的兩個(gè)字節(jié)“01A2”是418的十六進(jìn)制碼,它是下一個(gè)表示掃描開始(SOS)的標(biāo)記“FFDA”之前的字節(jié)數(shù),其中在分量數(shù)目的開始規(guī)定參數(shù)列表的長度(例如R、G或B,灰度、亮度/色度等,之后是示意表示成“...”的壓縮數(shù)據(jù))。
下一個(gè)字節(jié)包含兩個(gè)四位,表示成Tc和Th并將該表定義為DC表0,因?yàn)閮蓚€(gè)四位都是零。因?yàn)檫@些都是DC表并且每個(gè)分組只提供一個(gè)DC DCT系數(shù),所以沒有游程長度并且每個(gè)字節(jié)的前四位是零,同時(shí)后四位規(guī)定每個(gè)尺寸的多余字節(jié)數(shù)(它是緊鄰壓縮數(shù)據(jù)流的多余字節(jié)數(shù))。特定的碼數(shù)對應(yīng)于圖3所示的霍夫曼碼,只有12個(gè),包括3位長的5個(gè)碼。這12個(gè)值在后面12個(gè)字節(jié)中規(guī)定以結(jié)束DC表0。
此處,只用了29個(gè)字節(jié)(1個(gè)用于Tc、Th,16個(gè)用于Li,12個(gè)用于Vi,j),這比緊鄰該標(biāo)記之后規(guī)定的參數(shù)長度的418個(gè)字節(jié)少得多。因此下一個(gè)字節(jié),在這種情況下即AC表0的兩個(gè)四位定義在該標(biāo)記段規(guī)定的第二霍夫曼表的類別和名稱,因?yàn)門c和Th值分別是1和0。接下來的16個(gè)字節(jié)是Li值,表示每個(gè)長度的碼數(shù),再接下來的字節(jié)是Vi,j符號值,數(shù)目等于在Li字節(jié)枚舉的碼的總和,最大值是64,Vi,j符號值用于為完成AC表0出現(xiàn)頻率下降順序的對應(yīng)霍夫曼碼。
418的其余部分包括兩個(gè)表,DC表1和AC表1,以上述相同的格式描述和編碼。DC表1的霍夫曼碼在圖4用表格示出。
比較圖3和圖4,可以看出霍夫曼碼的多個(gè)特點(diǎn)。首先,如上所述,霍夫曼碼長度可變,“類別”是位數(shù)或包含在上面討論的和上述所結(jié)合的申請中的R/S字節(jié)中的尺寸或S值,并在例如圖2的霍夫曼表中紀(jì)錄為Vi,j值。第二,不允許位全部為“1”值的碼。第三,允許給定長度的多個(gè)碼,這些碼的數(shù)目將小于該長度的碼表示的值的數(shù)目。第四,對理解本發(fā)明最為重要的一點(diǎn)是,JPEG霍夫曼碼被構(gòu)成表示多級可被識別的值。在不允許任何碼與長度更長的其他碼的前綴相同的特點(diǎn)中,此約束或特性得以強(qiáng)調(diào)。
從前述的內(nèi)容中可以回顧到霍夫曼表的結(jié)構(gòu)允許特殊的霍夫曼碼和分別分配給它用來重建的R/S值的對應(yīng)關(guān)系。但是,正如上面所提到的,這種重建既復(fù)雜又耗時(shí),而且使用查詢表來標(biāo)引霍夫曼表更普遍。由于霍夫曼碼的長度可變和還必須識別對應(yīng)一有效霍夫曼碼的連續(xù)位數(shù)(16或更少)的事實(shí),此過程變得復(fù)雜。
識別一有效霍夫曼碼和標(biāo)引到霍夫曼表中的已知方法是在壓縮數(shù)據(jù)中取16個(gè)(相鄰)連續(xù)位,和查詢(在有216入口的表中)該碼中的位數(shù),在另一個(gè)表(相似尺寸)中,查詢相應(yīng)于該碼的R/S值。但是,這對存儲空間而言是非常浪費(fèi)的,同時(shí)引起大量的存儲器負(fù)荷。例如,如果該碼是一位碼(在所檢查的16個(gè)位的開始),則每個(gè)表的一半對于位數(shù)會是“1”,并且對于該符號是同一個(gè)R/S值字節(jié)。其他已知的方法利用多個(gè)表并需要相應(yīng)的更多次數(shù)的查詢操作。
本發(fā)明利用了霍夫曼碼的特點(diǎn),即每個(gè)碼都可以看成用于任何給定的二進(jìn)制位數(shù)的數(shù)值,并且可以計(jì)算對于給定的位數(shù)來說太大的數(shù)值。如果n位的壓縮數(shù)據(jù)邏輯上大于或等于該最大值(此后為max(n),其中n是位數(shù)),則另外一個(gè)位必須被檢查并與max(n+1)進(jìn)行比較。本發(fā)明還利用了一個(gè)事實(shí),即就硬件結(jié)構(gòu)來說,必須并行執(zhí)行這些測試,因?yàn)樗械臏y試都必須通過(例如,對于一有效霍夫曼碼來說邏輯值太大)直到認(rèn)為是正確的位數(shù),對更多的位數(shù)進(jìn)行的其余測試都將失敗。
例如,如圖5所示,可以利用16個(gè)比較器并行執(zhí)行該測試(圖5表示成表達(dá)式C
≥max(n)),每個(gè)比較器有一到十六個(gè)輸入連接到諸如筒形移位器之類的C-寄存器的連續(xù)各級。這些比較器應(yīng)當(dāng)是數(shù)字的并構(gòu)成邏輯門陣列。
也就是說,第一次測試比較C-寄存器中當(dāng)前最高有效位(MSB(C
))與一位值max(1)。如果沒有一位碼,max(1)=0。如果有一位碼(這個(gè)碼必須是“0”,因?yàn)槿?”碼是不允許的),max(1)=1。對于有幾個(gè)碼的第一個(gè)Ln來說,將是一個(gè)非零的max(n),因?yàn)闃?gòu)造成max(n)的max(n)值是n位的第一個(gè)碼,它是一個(gè)更長碼字的前綴(例如,max(2)=“10”,它是圖3的類別5的前綴)。
圖5A表示另一個(gè)實(shí)施例,其中越來越多的壓縮數(shù)據(jù)位與max(n)值進(jìn)行比較。n的值是確定成比較失敗的第一個(gè)值(生成0)。
圖6示出了與C-寄存器的n個(gè)最高有效位相級聯(lián)的作為算術(shù)邏輯單元(ALU)的一個(gè)輸入的先行零。另一個(gè)輸入是預(yù)先計(jì)算的偏移(n)。在加法運(yùn)算后,低階的結(jié)果是到查詢表(LUT)/霍夫曼表的標(biāo)引(用于AC編碼的8個(gè)位中用于DC差值的四個(gè)位),它包含通過規(guī)定的霍夫曼表(DHT)的標(biāo)記段的Vi,j符號值。該表的輸出是R/S字節(jié)。
圖7表示用于構(gòu)造max(n)值的流程圖。該方法還按照圖2的DHT標(biāo)記段的規(guī)定將位移構(gòu)造成R/S字節(jié),其中offset(0)是R/S列第一字節(jié)的標(biāo)引(例如0)或到該列表的指針。從步驟71初始化max(n)和offset(n)開始,在步驟72中將i、max(0)和offset(0)設(shè)置成0,i被遞增,并且位移被設(shè)置成最后的位移減max(i-1)。max(i)的值作為Li+max(i-1)計(jì)算。因此直到Li非零,offset(n)和max(n)將保持為零。因此圖5或5A的前面的比較C
因?yàn)榍懊嬉晃换蚨辔坏倪壿?數(shù)值總是大于或等于零而總是通過,直到遇到非零的Li(表示至少存在該長度的一個(gè)碼)為止。當(dāng)遇到非零(即“1”)的Li時(shí),將它加到零將max(i)設(shè)置成第一碼,即更大碼的前綴,如步驟73所示。此過程在i<16時(shí)重復(fù),以便為所有的Ln產(chǎn)生所有可能的max(n)。因此,例如,如果有5個(gè)3位碼(即0,1、2、3和4),max(3)將設(shè)置成5,而且值5(二進(jìn)制“101”)是一個(gè)可能的更長碼的一部分,盡管如果沒有更多碼的話,這個(gè)碼不一定必須使用。因此max(i)指向i位的第一個(gè)碼,這個(gè)碼太大(即,這個(gè)碼的值大于i位的最大碼)。如果L(i+1)不為空(即,有一個(gè)碼大出1位)則這個(gè)碼值是兩倍的max(i)。i+1碼在2*max(i)開始,隨后被編號,并且max(i+1)是該序列之后的下一個(gè)數(shù)(即,2*max(i)+L(i+1))。如果L(i+1)=0,則max(i+1)等于2*max(i),并且在下一個(gè)非零Li之前可能有多個(gè)這樣的加倍。
更概括的說,根據(jù)Li,max(i)和offset(i)如下進(jìn)行計(jì)算(i=0(max(0)=0(offset(0)=0(i=1(max(1)=Li+2*0(offset(1)=0-0=0(i=2(max(2)=L2+2*L1(offset(2)=0-L1offset(i)用于確定對應(yīng)于該碼的解碼值位于R/S值的列表的什么位置。即,如果i位的霍夫曼碼加到offset(i),得到的結(jié)果值將是在可以找到相應(yīng)R/S字節(jié)的霍夫曼表中的地址。在本發(fā)明的上下文中提供了幾個(gè)非常重要的優(yōu)點(diǎn)。具體來說,多個(gè)查詢表的功能,每個(gè)具有216個(gè)入口的查詢表將被限制為16個(gè)入口的max(n)和offset(n)值表替換,并且可以非??焖俚挠?jì)算和高效存儲。因?yàn)榇吮硎菃我坏牟⑶液苄。虼丝梢苑浅Q杆俚臋z索其中的數(shù)據(jù)以提供進(jìn)入霍夫曼表的直接索引,來得到用于計(jì)算DCT系數(shù)和系數(shù)差值數(shù)據(jù)的R/S數(shù)據(jù),這些數(shù)據(jù)與霍夫曼碼一起包含在JPEG標(biāo)準(zhǔn)語法的數(shù)據(jù)流中(這可以用于其他的處理技術(shù)和其他類型的數(shù)據(jù))。
概括的說,壓縮數(shù)據(jù)的解碼在圖8中說明,它的優(yōu)選特征將在下面結(jié)合圖9討論。當(dāng)該過程在步驟81開始時(shí),被解碼的AC系數(shù)的數(shù)目k初始化為零,隨后進(jìn)入處理每個(gè)非零AC系數(shù)的循環(huán)。16位的壓縮碼串裝載到C-寄存器(例如圖5或5A),通過并行或順序比較而確定一有效霍夫曼碼的位數(shù)n,如上述和步驟83所述。一旦知道n,相應(yīng)的offset(n)也就知道了,計(jì)算(例如圖6)到霍夫曼表地址的指針,c
+offset(n),通過將R/S值向右移四位從霍夫曼表中的R/S字節(jié)提取S值,如步驟84所示。被壓縮數(shù)據(jù)然后(向左)移n個(gè)位(相應(yīng)于霍夫曼碼的長度)以提供該數(shù)據(jù)流中的AC系數(shù)值,如步驟85所述。
為了以圖10所示的格式表示該數(shù)據(jù),通過使R/S值的位與十六進(jìn)制0F字節(jié)相“與”可以從R/S值中去掉R,R/S字節(jié)被存儲,并且S個(gè)多余位存儲成兩個(gè)另外的字節(jié),壓縮數(shù)據(jù)左移S個(gè)位,以便在C-寄存器的開始呈現(xiàn)下一個(gè)霍夫曼碼,如步驟86所示。然后將k值遞增R+1來解碼下一個(gè)非零AC系數(shù)。為了完成壓縮的數(shù)據(jù)格式,在步驟88測試R/S值,如果為零,則標(biāo)明并存儲分組結(jié)束(EOB)和長度字節(jié),如步驟90所示,如果不為零,則在步驟89測試k的增加值,如果等于63,即一個(gè)分組中AC系數(shù)的最大值,則存儲為零值的R/S值來表示已經(jīng)存儲了EOB和長度字節(jié)。如果k小于63,則該過程循環(huán)到步驟83來進(jìn)一步處理AC系數(shù)。
圖8過程的理想特性在圖9中示出,本發(fā)明的此項(xiàng)特性根據(jù)例如圖5或5A的硬件結(jié)構(gòu),將max(n)值壓縮成5個(gè)xC_max<0…4>32位字,然后在寄存器中存儲和操作,以避免需要訪問多個(gè)存儲器來得到用于比較的值。
max(n)值被緊密壓縮成下面的字xC_max<0>max(1),max(2),max(3),max(4),max(5),max(6),max(7),0000=32位;
xC_max<1>=max(8),max(9),max(10),00000=32位;xC_max<2>=max(11),max(12),max(10),000000000=32位;xC_max<3>=max(13),max(14),00000=32位;和xC_max<4>=max(15),max(16),0=32位。
這些值在執(zhí)行圖8的步驟83中如圖9所示進(jìn)行操作。具體來說,為了確定霍夫曼碼中的位數(shù)n,n值初始化為1,并且寄存器或變量(Comp)裝到壓縮數(shù)據(jù)的下面32位。Comp與xC_max<0>最高有效位進(jìn)行邏輯比較。如果它邏輯大于或等于該位,則該霍夫曼碼不是1位,n遞增到2。比較順序?qū)⑾乱粋€(gè)max(n)值移到寄存器的最高有效位,并且將另一個(gè)位與comp值比較,對于每一次訪問遞增n。當(dāng)比較結(jié)果Comp不再大于或等于該位時(shí),則找到位數(shù)并且完成比較順序。一些RISC(精簡指令系統(tǒng)計(jì)算機(jī))結(jié)構(gòu)有一個(gè)拷貝到寄存器,屏蔽和移位指令的周期,假設(shè)n,comp和xC_max值在寄存器中,則需要三個(gè)周期確定n是否需要更大,和不需要存儲訪問。因此,比較測試操作可以非常快的執(zhí)行,特別是因?yàn)檩^短的霍夫曼碼比較長的碼出現(xiàn)的更頻繁。
因此,由上述根據(jù)本發(fā)明的解碼器和解碼過程的說明,可以看出在根據(jù)JPEG標(biāo)準(zhǔn)重建壓縮的圖像數(shù)據(jù)中,能顯著增加速度和響應(yīng),基于同樣的理由,大量降低了數(shù)據(jù)處理硬件和/或軟件要求。在結(jié)合上述引用的同時(shí)提交的申請中所公開的壓縮數(shù)據(jù)格式的編碼處理中也提供了顯著的優(yōu)點(diǎn)。其中公開的中間數(shù)據(jù)格式在圖10中示出。
圖11表示將壓縮的DCT分組編碼成熵編碼數(shù)據(jù)的流程圖。首先在步驟1001中編碼DC系數(shù),然后進(jìn)入循環(huán)1002。每執(zhí)行一次循環(huán)就在步驟1003中編碼R/S字節(jié),根據(jù)S值在步驟1004中編碼額外的位,并在步驟1005中存儲兩者。如果在步驟中1006發(fā)現(xiàn)EOB碼,則該過程出現(xiàn)分支(對于當(dāng)前方框),在步驟1007中測試k以確定k是否等于63。如果是,則過程結(jié)束,因?yàn)閗=63表示可以提供的最大數(shù)目的值和不需要單獨(dú)編碼的EOB符號。如果k小于63,則在步驟1008中編碼EOB和在步驟1009中存儲以結(jié)束此過程。應(yīng)當(dāng)注意每個(gè)入口已經(jīng)大致處于霍夫曼編碼數(shù)據(jù)所需的形式,該過程可以用最快的速度輪流進(jìn)行每個(gè)R/S和額外位對的編碼直至達(dá)到EOB標(biāo)記。
在編碼過程中,R/S字節(jié)必須轉(zhuǎn)換成霍夫曼碼。圖10的壓縮數(shù)據(jù)格式特別有利于收集統(tǒng)計(jì)數(shù)據(jù),由此霍夫曼碼分配給R/S值。即,一次通過數(shù)據(jù)分組將允許對每個(gè)R/S值的出現(xiàn)次數(shù)和分配要傳送的霍夫曼碼和Li值的賦值計(jì)數(shù)。在第二次通過該數(shù)據(jù)之前,所用的實(shí)際R/S值匯集用于傳輸,因?yàn)閂i,j符號值作為圖1格式的一部分傳輸。因?yàn)槊總€(gè)霍夫曼碼長度內(nèi)的類別,n可以任意指定,而不是存儲max(n),定義seed(n)值用于長度n的第一霍夫曼碼,它在數(shù)值上等于2*max(n-1)。
圖12是初始化H_code、H_offset和H_seed表的流程圖。開始的籽數(shù)(即,對于給定數(shù)目的位數(shù)值最小的第一碼字)初始化為零。該碼字中的位數(shù)(即,碼字的長度)初始化為零。
之后,只要i小于16,i就遞增1,籽數(shù)加倍并存儲在H_seed(i)中。該碼設(shè)置為籽數(shù),然后籽數(shù)加上多個(gè)i位碼,并且j初始化為0。
只要j小于碼數(shù)Li,R/S設(shè)置成定義霍夫曼表(DHT)標(biāo)記段的下一個(gè)Vi,j符號值。如果該碼中的位數(shù)小于6,位數(shù)和該碼壓縮成H_code(RS),這個(gè)字節(jié)中的3個(gè)最高有效位設(shè)置成該碼中的位數(shù),低階的5個(gè)位設(shè)置成該碼。如果i大于5,則H_code(RS)設(shè)置成位數(shù)。然后H_offset(RS)設(shè)置成j,因?yàn)檫@是i位碼的第j+1個(gè)碼。對于兩個(gè)路徑,j和碼都遞增。
對于軟件實(shí)現(xiàn),H_seed表入口可能作為至少16個(gè)位的整數(shù)來實(shí)現(xiàn),因?yàn)樽铋L的籽數(shù)是16位。對于硬件,第n個(gè)入口僅需要是n個(gè)位,因?yàn)樗莕位碼的籽數(shù)。為了簡化圖12,H_seed表初始化為17個(gè)入口(0-16)。圖13所示的流程圖只可以使用第6到第16個(gè)入口。另外,硬件實(shí)施例可以利用此優(yōu)點(diǎn)來減少可裝載寄存器的數(shù)目。
每個(gè)DC和AC霍夫曼表都需要一組H_seed、H_code和H_offset表。幸運(yùn)的是,對于這些基線的實(shí)現(xiàn)方式,DC H_code和H_offset表只需要12個(gè)入口,因?yàn)镽=O和S的最大值是11。對于更通常的實(shí)現(xiàn)方式,S的最大值是16,使得這些表有最多17個(gè)入口。
為了簡單,H_code和H_offset表每個(gè)可能具有256個(gè)入口,因?yàn)榭梢允褂么蠖鄶?shù)的R/S字節(jié)。這些表中的入口最多是一個(gè)字節(jié)。因此,不需要16位的碼字入口加上更多的位來標(biāo)明碼字中的位數(shù),一個(gè)小H_seed表用于更長的碼字,而且只需要多余的一個(gè)字節(jié)計(jì)算該尺寸的最終碼字。所有的短碼(即,小于5位)都包含在H_code字節(jié)中。因?yàn)樵筋l繁的符號具有越短的碼,對存儲器的單個(gè)字節(jié)訪問對包含最通常的編碼符號所需的所有內(nèi)容。
圖13提供圖11的方框1003中的編碼R/S的其他細(xì)節(jié)。臨時(shí)的變量或寄存器tem設(shè)置成H_code(RS)的內(nèi)容。n值設(shè)置成該字節(jié)的3個(gè)最高有效位。如果n是零,則n設(shè)置成tem并且通過H_seed(n)與H_offset(RS)相加產(chǎn)生該碼。否則,碼設(shè)置成tem的低5位。壓縮數(shù)據(jù)左移n位,并且該碼放入該n個(gè)低階位。Comp如像連續(xù)的筒形移位器一樣處理,并且輸出32位字的過程為本領(lǐng)域技術(shù)人員所熟知。
在現(xiàn)有技術(shù)中,n和直到16位的位模式被存儲直到256個(gè)R/S符號。但根據(jù)本發(fā)明,當(dāng)n和該碼字存儲于總共8個(gè)位或更少時(shí),它們存儲在一個(gè)字節(jié)中。這允許大幅度的縮短霍夫曼表并且特別有利,因?yàn)橛龅降拇蠖鄶?shù)碼都短到適用于該格式。由該字節(jié)的3個(gè)MSB位置的非零值表示使用此格式。
對于所有的更長位模式,僅一個(gè)長度指示被存儲為S,高階四位設(shè)置成0000以表示不同的格式。對于這些更長的碼,長度用作對籽數(shù)的標(biāo)引(即,一特定位長的第一碼值)。然后從查詢表中可以確定響應(yīng)的位移(這適合一個(gè)字節(jié),因?yàn)樽畲笪灰茷?55),該位移加上籽數(shù)來生成碼值。在編碼和存儲R/S值之后,編碼額外的S位,最好通過移位使圖10中間數(shù)據(jù)格式的每個(gè)AC系數(shù)值的兩個(gè)字節(jié)長度可變。
從上面可以看出本發(fā)明使編碼的數(shù)據(jù)處理效率提高,極大的提高了計(jì)算和標(biāo)引霍夫曼表的表存儲效率。這些優(yōu)點(diǎn)是以完全符合JPEG標(biāo)準(zhǔn)的方式產(chǎn)生的,并應(yīng)用于霍夫曼編碼的所有應(yīng)用。
雖然本發(fā)明是從JPEG標(biāo)準(zhǔn)的單個(gè)優(yōu)選實(shí)施例描述的,但本領(lǐng)域技術(shù)人員可以理解本發(fā)明可以在所附權(quán)利要求書的精神和范圍內(nèi)進(jìn)行改進(jìn)來實(shí)現(xiàn)。例如這些快速編碼和解碼方法應(yīng)用于從碼長為上升順序的碼數(shù)構(gòu)造的任何霍夫曼表。另外,本領(lǐng)域技術(shù)人員可以從上面本發(fā)明的描述中將上述的技術(shù)用于以下降順序構(gòu)造的霍夫曼表。
權(quán)利要求
1.一種霍夫曼編碼符號的方法,包括步驟為表中的給定長度的碼第一次出現(xiàn)定義籽數(shù)值;存儲碼字的長度;當(dāng)所述長度和所述碼字的位數(shù)小于或等于預(yù)定位數(shù)時(shí)以第一種格式存儲所述長度和所述碼字;和當(dāng)所述長度和所述碼字包括大于所述預(yù)定位數(shù)的位數(shù)時(shí)以第二種格式存儲到所述籽數(shù)的標(biāo)引、位移和所述碼字。
2.如權(quán)利要求1所述的方法,其特征在于所述符號是JPEG(聯(lián)合圖像專家組)R/S字節(jié)。
3.如權(quán)利要求1所述的方法,其特征在于所述碼字表示壓縮圖像數(shù)據(jù)。
4.如權(quán)利要求3所述的方法,其特征在于所述壓縮圖像數(shù)據(jù)是JPEG壓縮圖像數(shù)據(jù)。
5.一種霍夫曼解碼壓縮數(shù)據(jù)的方法,包括步驟用多個(gè)測試標(biāo)準(zhǔn)的每一個(gè)測試數(shù)據(jù)流的位,確定一有效霍夫曼碼的長度;組合對應(yīng)于所述長度的多個(gè)位移的一個(gè)與所述有效霍夫曼碼來形成標(biāo)引;和用所述標(biāo)引訪問霍夫曼表中的符號值。
6.如權(quán)利要求5所述的方法,進(jìn)一步包括步驟計(jì)算所述測試標(biāo)準(zhǔn)和所述多個(gè)霍夫曼表數(shù)據(jù)的位移。
7.如權(quán)利要求5所述的方法,其特征在于所述壓縮數(shù)據(jù)是壓縮圖像數(shù)據(jù)。
8.如權(quán)利要求7所述的方法,其特征在于所述壓縮圖像數(shù)據(jù)是JPEG壓縮圖像數(shù)據(jù)。
全文摘要
通過利用依賴碼長的兩個(gè)不同的表格式來簡化霍夫曼編碼,特別是簡化壓縮數(shù)據(jù)格式的霍夫曼編碼?;舴蚵硪灿纱藴p小了尺寸。通過測試壓縮的數(shù)據(jù)流中的有效霍夫曼碼的長度和利用對應(yīng)于一個(gè)測試標(biāo)準(zhǔn)的位移提供霍夫曼表符號值的直接標(biāo)引來減少解碼的執(zhí)行次數(shù),同時(shí)極大的減小用于此目的的查詢表的尺寸。
文檔編號H04N1/419GK1359196SQ0114362
公開日2002年7月17日 申請日期2001年12月14日 優(yōu)先權(quán)日2000年12月15日
發(fā)明者瓊·L·米切爾, 阿爾伯特·N·卡齊斯, 尼爾·M·利德 申請人:國際商業(yè)機(jī)器公司