亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

使用前綴預(yù)測的位自適應(yīng)編碼方法

文檔序號:7516484閱讀:282來源:國知局
專利名稱:使用前綴預(yù)測的位自適應(yīng)編碼方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)的壓縮技術(shù),用于實(shí)現(xiàn)有效的存儲和傳輸。
背景技術(shù)
由于內(nèi)存容量和傳輸帶寬資源的有限性,在對大量數(shù)據(jù)進(jìn)行存儲和傳輸?shù)倪^程中,需要對數(shù)據(jù)進(jìn)行壓縮。經(jīng)過壓縮,數(shù)據(jù)量變少,不但節(jié)省了帶寬,而且能更加有效地利用信息通道;同樣,壓縮后的數(shù)據(jù)比未被壓縮的數(shù)據(jù)占用更小的內(nèi)存。為此,人們提出了各種不同的編碼技術(shù),例如跑長編碼、哈夫曼編碼、算術(shù)編碼和適應(yīng)性統(tǒng)計(jì)技術(shù)等等,這些技術(shù)都能以無損的形式壓縮數(shù)據(jù)。把這些無損編碼技術(shù)和其它的一些算法(例如Burrows-Wheeler transform)結(jié)合使用還能取得更好的壓縮效果。
但是,這些技術(shù)存在的不足在于跑長編碼的一種簡單形式是首先找出數(shù)據(jù)中的一個(gè)或多個(gè)出現(xiàn)頻率較高的字符串,例如單詞“the”,然后把這些高頻率詞匯用一些比其本身短很多的碼字來代表。這種方法對英文文本能達(dá)到將近4∶1的壓縮率。跑長編碼的一些較為復(fù)雜的形式也被經(jīng)常使用。跑長編碼的一個(gè)主要缺點(diǎn)是那些出現(xiàn)頻率高的數(shù)據(jù)串常常不能作為先驗(yàn)知識事先知道,于是需要建立模型即假定一些字符作為高頻率字符,并為其分配相應(yīng)的碼字。然而當(dāng)實(shí)際數(shù)據(jù)中經(jīng)常重復(fù)的字符和事先定好的模型有出入時(shí),壓縮率便不能達(dá)到預(yù)期目標(biāo)。
哈夫曼編碼及其變種算法在從摩爾斯碼到UNIX的打包/解包、壓縮/解壓縮命令的許多領(lǐng)域都有應(yīng)用。哈夫曼編碼及其變種算法包括決定字符的出現(xiàn)頻率,并為不同的頻率分配不同的碼字。頻繁出現(xiàn)的字符具有較短的碼字,而較少出現(xiàn)的字符則有較長的碼字。一般從底部最長的碼字開始,逐步向上結(jié)束于最短的碼字來產(chǎn)生二值樹結(jié)構(gòu)。雖然由下到上的方式對于建樹比較適合,但在實(shí)際讀取時(shí)還是采用由上向下的方式,例如解碼器就是從頂部根節(jié)點(diǎn)出發(fā),根據(jù)位編碼信息,按照樹的不同分支追溯下去。按照這種方法,最經(jīng)常出現(xiàn)的字符會最先被找到。哈夫曼編碼的一個(gè)缺點(diǎn)是每個(gè)字符的出現(xiàn)概率不能預(yù)先知道,于是,通常用預(yù)先建立的頻率來產(chǎn)生哈夫曼二值樹,而對于一組特定字符集合,這些頻率可能適合,也可能不適合。
算術(shù)編碼也有著廣泛的應(yīng)用。和哈夫曼編碼一樣,算術(shù)編碼也是一種基于數(shù)據(jù)概率模型的無損壓縮技術(shù)。和哈夫曼編碼不同的是,算術(shù)編碼產(chǎn)生的是一個(gè)單獨(dú)的符號而非若干獨(dú)立的碼字,數(shù)據(jù)被作為0到1之間的一個(gè)實(shí)數(shù)來進(jìn)行編碼。不湊巧的是,算術(shù)編碼也有一系列的缺點(diǎn)首先,算術(shù)編碼比其它編碼算法慢得多,當(dāng)算術(shù)編碼使用了高階預(yù)測模型時(shí),這一點(diǎn)表現(xiàn)得尤為嚴(yán)重;其次,由于算術(shù)編碼會更加真實(shí)的反映在編碼過程中使用的概率分布模型,因而不準(zhǔn)確或是不正確的概率模型會導(dǎo)致低下的壓縮效率。
一般來說,當(dāng)數(shù)據(jù)的概率較為隨機(jī)時(shí),算術(shù)編碼的壓縮效率高于哈夫曼編碼。
適應(yīng)性統(tǒng)計(jì)技術(shù)可以解決先驗(yàn)?zāi)P蛶淼哪承﹩栴}。一般來說,適應(yīng)性編碼技術(shù)提供了對從未在字符表或是前綴表中出現(xiàn)的字符的一種編碼方法。當(dāng)一個(gè)未知的字符出現(xiàn)時(shí),首先編一個(gè)“殊況”ESC碼,將其送入碼流中,然后編碼器繼續(xù)用較低階的前綴對其進(jìn)行編碼,并將增加的數(shù)據(jù)也送入碼流。最低階的預(yù)測表(通常為0階表)必須包含所有可能的字符,便于每一個(gè)可能字符都能在其中被找到,ESC碼也必須以一定的概率來編碼。然而,由于新字符的不可預(yù)知性,僅從前面的數(shù)據(jù)不可能對ESC碼的概率進(jìn)行精確的估計(jì),因此,一般具有給定前綴的ESC值概率只能按經(jīng)驗(yàn)確定,導(dǎo)致編碼效率不能達(dá)到最優(yōu)。這樣,在適應(yīng)性編碼中引進(jìn)ESC碼帶來了兩個(gè)問題。一個(gè)是ESC碼只能給出關(guān)于新字符的有限信息,新字符仍然按照較低階的前綴預(yù)測表來編碼;第二個(gè)問題是ESC碼的概率不能被精確地建模。

發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的不足和缺陷,提出一種高倍的無損壓縮技術(shù),使其不再具有前面所述技術(shù)的各種缺點(diǎn),降低在自適應(yīng)性編碼算法中ESC碼概率模型的不精確性對編碼帶來的影響,從而有效壓縮數(shù)據(jù)。
實(shí)現(xiàn)上述目的的技術(shù)方案是一種使用前綴預(yù)測的位自適應(yīng)編碼方法,包括如下步驟a、對字符串里的字符進(jìn)行排序,每一字符用二進(jìn)制表示。
b、每一個(gè)相關(guān)字符都包含在具有一個(gè)上下文的字符集合里,上下文中包含一個(gè)前綴。
c、前綴和一個(gè)字符集合對應(yīng),對字符串的前綴進(jìn)行判定,并對可能跟在該前綴后的所有字符的概率進(jìn)行預(yù)測,為此前綴產(chǎn)生一個(gè)預(yù)測表。一般情況下,前綴包含一個(gè)或兩個(gè)元素。雖然前綴的尺寸可以變化,但其階數(shù)最好小于或等于3以便控制數(shù)據(jù)量;d、基于預(yù)測表,產(chǎn)生一棵對應(yīng)的二值樹結(jié)構(gòu),這種樹是為了使預(yù)測表中的字符盡可能的不均衡。
e、確定從根節(jié)點(diǎn)到每一字符的路徑,樹中每個(gè)分支都被指定了一個(gè)概率。
f、利用從根節(jié)點(diǎn)到相關(guān)字符的葉子節(jié)點(diǎn)的一條最短路徑上所有分支指定的概率來編碼或解碼一個(gè)字符。
二值樹結(jié)構(gòu)的建立步驟包括1.從根節(jié)點(diǎn)開始,每一個(gè)節(jié)點(diǎn)都選擇一個(gè)區(qū)別位。區(qū)別位的選擇應(yīng)使按此區(qū)別位產(chǎn)生的0組中的已知字符(不包含ESC)的概率總和與1組的已知字符(不包含ESC)的概率總和的差異應(yīng)達(dá)到最大。若某個(gè)位在一個(gè)父節(jié)點(diǎn)中已經(jīng)用作過區(qū)別位,它就不能在后面的節(jié)點(diǎn)中被再次使用。如果某個(gè)區(qū)別位產(chǎn)生的0組或1組中只包含一個(gè)未知字符,那么該位的處理將被推遲,直至所有剩余位也進(jìn)入了相同的情況。如果一個(gè)節(jié)點(diǎn)只包含單個(gè)已知字符,那么將選擇區(qū)別位使得包含這個(gè)已知字符的字符組中的所有字符(包含已知及未知字符)的概率和達(dá)到最大。如果一個(gè)節(jié)點(diǎn)不包含已知字符,選擇的區(qū)別位應(yīng)使1組和0組中的未知字符的差異最大。。
2.所有的字符(包括未知字符)都以在第一步中選擇的區(qū)別位為基礎(chǔ),在每一個(gè)節(jié)點(diǎn)被分成0組和1組。分組是按區(qū)別位上的值來進(jìn)行的,結(jié)束于葉子節(jié)點(diǎn),每一個(gè)葉子節(jié)點(diǎn)都包含一個(gè)單獨(dú)的字符。
上述的后繼節(jié)點(diǎn)、根節(jié)點(diǎn)以及葉子節(jié)點(diǎn)都包含在節(jié)點(diǎn)集合中,單個(gè)字符都包含在字符集合中。
分支操作取決于字符的二進(jìn)制表示中單個(gè)數(shù)位的值,也就是區(qū)別位的值。如果一個(gè)字符的當(dāng)前數(shù)位為0,那么這個(gè)字符進(jìn)入“0組”;如果一個(gè)字符的當(dāng)前數(shù)位是1,則此字符進(jìn)入“1組”。舉個(gè)例子,如果對一個(gè)用3位b2b1b0來表示的字符集用b1來做分區(qū),那么無論X是0還是1,所有具有X0X形式的字符(如101,000)都被歸入0組;而所有具有X1X形式的字符(如110,011)都被歸入1組。
對于一個(gè)用M個(gè)數(shù)位(M-bits)來表示的字符集來說,這種二值樹具有M層,每一層對應(yīng)于字符的一個(gè)數(shù)位(bit)。
樹結(jié)構(gòu)中為每一個(gè)分支指定概率,這個(gè)概率對應(yīng)于字符集合中包含的字符的概率。和具有未知概率、不精確概率和人工指定概率的字符相比,那些具有已知概率的字符具有更高的優(yōu)先級。
為樹中的每一個(gè)分支指定概率的方法每一個(gè)節(jié)點(diǎn)的分支概率都被表示為一對浮點(diǎn)數(shù)或是有理數(shù),每個(gè)節(jié)點(diǎn)的左支和右支被同時(shí)賦值,且左支和右支的概率和應(yīng)為1。首先使用已知的概率,以便將已知的概率和未知概率、不精確概率或人工指定概率清楚的分開,其中,概率已知的字符的概率用預(yù)測表來表示;而剩余的字符子集即具有未知概率、不精確概率或人工指定的概率的字符的概率總和用ESC值表示。
賦值操作分為兩步首先,對0組和1組的已知字符分別求概率和,這兩個(gè)和用Zp和Op表示,若其中一個(gè)為0,或兩個(gè)全為0,Zp和Op須重新用0組和1組中的所有(已知和未知)字符的概率相加算得。最后,左支的概率是Zp/(Zp+Op);右支的概率是Zp/(Zp+Op)。
這種浮點(diǎn)數(shù)對或有理數(shù)對之間的差異與選用其它的數(shù)位產(chǎn)生的分支所得的差異相比是最大的。
所述節(jié)點(diǎn)集合包括根節(jié)點(diǎn)、后繼節(jié)點(diǎn)和終止的葉子節(jié)點(diǎn)。其中,終止葉子是和一個(gè)字符的概率相聯(lián)系的,此概率可能來自于先驗(yàn)知識,也可能來自于之前的統(tǒng)計(jì)數(shù)據(jù),也可能未知,但通過公式將其進(jìn)行模型化。
通過對字符串進(jìn)行編碼后,來壓縮或解壓縮數(shù)據(jù)。
所述排序步驟可以包括或不包括進(jìn)行一個(gè)或多個(gè)下列操作一個(gè)巴羅斯一維勒(Burrows-Wheeler)變換和前移(Move-to-front)變換。
所述編碼是標(biāo)準(zhǔn)算術(shù)編碼。
預(yù)測表包括產(chǎn)生一個(gè)或多個(gè)下列表零階表、一階表、二階表和三階表。
指定概率可以是概率已知的字符的概率,也可是概率未知、不準(zhǔn)確或是人工指定的字符的概率,但概率已知的字符具有較高優(yōu)先級而首先被選用。
采用上述技術(shù)方案,本發(fā)明有益的技術(shù)效果在于傳統(tǒng)壓縮技術(shù)難以對那些沒有在概率表中出現(xiàn)的字符進(jìn)行有效壓縮,而本發(fā)明能對這些字符進(jìn)行有效的估值和編碼。例如,在哈夫曼編碼中,這些從未出現(xiàn)過的字符或ESC值的頻率可能相當(dāng)高,從而需要一個(gè)短碼(相應(yīng)的,需要加長其余已知字符的碼長)。正常情況下,一個(gè)字符通過在對應(yīng)的二值樹中從根追溯到葉子來編碼。傳統(tǒng)的方法都是在一個(gè)步驟里編完一個(gè)字符,本發(fā)明方法則是在若干步驟中完成這一過程,其中每一個(gè)步驟都對應(yīng)二值樹中的一層。等效來看,每個(gè)字符是逐位編碼的。這種按位分解的方法具有兩個(gè)優(yōu)點(diǎn)第一是當(dāng)還不太確定當(dāng)前字符的時(shí)候,推遲了ESC碼的使用;第二是一個(gè)從未出現(xiàn)過的字符可在追溯ESC值的過程中找到,從而不需要使用低階前綴對這個(gè)字符再次編碼。無論通過何種路徑,二值樹都將終止于某一個(gè)字符,故編碼路徑能夠遍歷所有的字符。采用本發(fā)明技術(shù)能相當(dāng)理想的壓縮數(shù)據(jù),以實(shí)現(xiàn)有效的存儲和傳輸。經(jīng)過壓縮,數(shù)據(jù)量變少,不但節(jié)省了帶寬,而且能更加有效的利用信息通道;同樣,壓縮后的數(shù)據(jù)比未被壓縮的數(shù)據(jù)占用更小的內(nèi)存。
下面結(jié)合附圖,通過實(shí)施例對本發(fā)明作進(jìn)一步詳細(xì)的說明。


圖1是使用前綴預(yù)測編碼系統(tǒng)的一個(gè)方框圖;圖2A和圖2B都是圖表,分別表示各階前綴預(yù)測表的概率分布情況;圖3中是一棵二值樹,表示一個(gè)前綴字符串的概率分布;圖4是一個(gè)使用前綴預(yù)測編碼的數(shù)據(jù)壓縮方法的流程圖。
具體實(shí)施例方式
下面按照優(yōu)化的操作步驟和數(shù)據(jù)結(jié)構(gòu)對本發(fā)明的具體實(shí)施方式
進(jìn)行描述。本發(fā)明技術(shù)可使用通用處理器或是程序控制下的特殊用途處理器來實(shí)現(xiàn),也可使用符合此處描述的操作步驟和數(shù)據(jù)結(jié)構(gòu)的電路來實(shí)現(xiàn)。本節(jié)給出的操作步驟和數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)即時(shí)可用,不需要進(jìn)一步的實(shí)驗(yàn)或研究。
系統(tǒng)組成如圖1所示,是具有前綴預(yù)測編碼系統(tǒng)的一個(gè)方框圖,這個(gè)使用前綴預(yù)測的編碼系統(tǒng)(本發(fā)明用100來統(tǒng)稱)包括一個(gè)運(yùn)算設(shè)備110。運(yùn)算設(shè)備110中包含一個(gè)核心處理單元115、內(nèi)存器120,以及一對耦合設(shè)備輸入/輸出單元125和使用者接口130。內(nèi)存器120包括存儲大量信息的各種設(shè)備,如磁碟、磁帶、光盤等等各種存儲介質(zhì)。和內(nèi)存器一樣,這里的“運(yùn)算設(shè)備”也是最廣義的一個(gè)說法,它包括具有可編程處理器以及普通的計(jì)算機(jī)在內(nèi)的各種設(shè)備,如PC機(jī)、掌上電腦、個(gè)人數(shù)字助理等等。內(nèi)存器120包括計(jì)算機(jī)程序140,它包含一個(gè)完成如下四種過程的指令集145(1)排列數(shù)據(jù),(2)BurrowsWheeler變換,(3)前綴預(yù)測編碼,(4)算術(shù)編碼。正常情況下,120也包含一組數(shù)據(jù)150,它是計(jì)算機(jī)程序140的操作對象。
圖2A和圖2B表示的是各階前綴情況下,其后數(shù)據(jù)元素的概率分布表。為說明方便起見,一組8個(gè)字符的集合{A,B,C,D,E,F(xiàn),G,H}被作為字符的全集。
根據(jù)數(shù)據(jù)150的類別,系統(tǒng)100會產(chǎn)生一個(gè)一階表210,或是一個(gè)二階表230,或是一個(gè)零階表250,或是以上所有表。這些表的例子都在圖2A和圖2B中,表中的字符以及數(shù)據(jù)只是例子而已,不具限制性。在另外一些情況下,也可以產(chǎn)生其它階數(shù)的前綴表如三階表。
一階預(yù)測表210包含一組一個(gè)或多個(gè)前綴字符215,一組一個(gè)或多個(gè)跟在215后的可能字符220,以及一組概率值225。前綴字符215位于字符串的最前端。集合220既包含真正的字符也包含ESC值221。概率值225則反映某一個(gè)字符220跟在前綴字符215后的概率。在一階表210中,每一個(gè)前綴字符215都被限制成一個(gè)字符長度。
ESC是一個(gè)碼字,它代表所有在當(dāng)前表中沒有找到的字符的集合。這些沒有出現(xiàn)在表中的字符稱為“未知字符”,與此對應(yīng),那些在預(yù)測表中能找到的稱為“已知字符”??偟膩碚f,ESC值的概率由整個(gè)未知字符集合決定,單個(gè)的未知字符不能起決定性的作用。在下面的討論中,ESC將被進(jìn)一步分解成二值樹中的字符,在這樣的情況下,ESC的概率分布將反映每一個(gè)未知字符的概率分布。表210中例子假設(shè)ESC的概率均勻地分?jǐn)傇诿總€(gè)未知字符上。
二階預(yù)測表230包含一個(gè)或多個(gè)前綴字符235的集合,一個(gè)或多個(gè)跟在235后面的可能字符的集合240以及概率值245。前綴字符235位于字符串的最前端。240字符集合中既包含已知字符也包含ESC值241。ESC是一個(gè)表示在當(dāng)前二階表中的沒有出現(xiàn)過的字符集合的值。概率值245表示某一個(gè)字符240跟在當(dāng)前前綴255后面的概率。在二階表210中,每一個(gè)前綴字符215的長度為兩個(gè)字符。
零階預(yù)測表250包括前綴字符集合255,它是一個(gè)空集,還包括一組一個(gè)或多個(gè)跟在255后的字符集合260以及概率值265。通常,零階預(yù)測表運(yùn)用于無前綴預(yù)測編碼。字符集合260是字符全集,但不包含ESC值,因?yàn)榱汶A表中只包含所有可能字符。概率值265反映某個(gè)字符260的出現(xiàn)概率情況,這時(shí),沒有前綴的限制。
圖3是一棵數(shù)據(jù)樹,它表示在前綴為A的情況下,一個(gè)字符的位編碼流程。圖中顯示的字符和數(shù)值只是例子而已,不具限制性。這棵樹是基于圖2中一階表210使用的數(shù)值和字符建立起來的,針對的數(shù)據(jù)是具有前綴215“A“的字符串。而且,字符集合{A,B,C,D,E,F(xiàn),G,H}是用二進(jìn)制b2b1b0的形式來表示,并分別取下表中的值

上述字符集和其取值只是例子,不具限制性。當(dāng)然,當(dāng)字符采用其它的值時(shí)會產(chǎn)生不同的樹。
如圖3所示,數(shù)據(jù)樹300是一個(gè)二值樹,它的讀取方法是自頂向下。樹中,根節(jié)點(diǎn)305包含字符全集(即在給定環(huán)境下的所有可能字符);分叉節(jié)點(diǎn)(如310、320、330、340、350或360)包含字符子集;終止節(jié)點(diǎn)也稱為葉子節(jié)點(diǎn),每一個(gè)葉子節(jié)點(diǎn)都代表一個(gè)不同的字符。節(jié)點(diǎn)的左向分支稱為0組,右向分支稱為1組。0組和(區(qū)別位)位值取0的分支相關(guān)聯(lián),同理,1組和位值取1的分支相聯(lián)系。每一個(gè)分支都和一個(gè)浮點(diǎn)數(shù)關(guān)聯(lián),它代表向下連接的節(jié)點(diǎn)中所有字符的概率,此節(jié)點(diǎn)可能是屬于0組也可能屬于1組。
圖3中的二值數(shù)據(jù)樹300通過3個(gè)步驟建立1.從根節(jié)點(diǎn)開始,每一個(gè)節(jié)點(diǎn)都選擇一個(gè)區(qū)別位;2.所有的字符(包括未知字符)都以在第一步中選擇的區(qū)別位為基礎(chǔ),在每一個(gè)節(jié)點(diǎn)被分成0組和1組。分組是按區(qū)別位上的值來進(jìn)行的,結(jié)束于葉子節(jié)點(diǎn)。在葉子節(jié)點(diǎn)上,一個(gè)單獨(dú)的字符被編碼;3.樹中每個(gè)分支都被指定了一個(gè)概率。
在每個(gè)節(jié)點(diǎn)選擇的區(qū)別位應(yīng)滿足下述要求即按此區(qū)別位產(chǎn)生的0組中的已知字符(不包含ESC)的概率總和與1組的已知字符(不包含ESC)的概率總和的差異應(yīng)達(dá)到最大。這個(gè)區(qū)別位必須是字符的二值表示中的各位當(dāng)中的一個(gè)。例如,在當(dāng)前的例子中,區(qū)別位必須為b2,b1,,或b0。若某個(gè)位在一個(gè)父節(jié)點(diǎn)中已經(jīng)用作過區(qū)別位,它就不能在后面的節(jié)點(diǎn)中被再次使用。如果某個(gè)區(qū)別位產(chǎn)生的0組或1組中只包含一個(gè)未知字符,那么該位的處理將被推遲,直至所有剩余位也進(jìn)入了相同的情況。如果一個(gè)節(jié)點(diǎn)只包含單個(gè)已知字符,那么將選擇區(qū)別位使得包含這個(gè)已知字符的字符組中的所有字符(包含已知及未知字符)的概率和達(dá)到最大。如果一個(gè)節(jié)點(diǎn)不包含已知字符,選擇的區(qū)別位應(yīng)使1組和0組中的未知字符的差異最大。
位于一個(gè)節(jié)點(diǎn)上的各個(gè)字符將繼續(xù)向下分解,分往0分支還是分往1分支主要是基于選擇的區(qū)別位上的位值。若區(qū)別位上的字符為0則并入0組,若為1則進(jìn)入1組。對一個(gè)給定的節(jié)點(diǎn),已知字符對區(qū)別位的選擇起著重要作用。然而,一旦區(qū)別位選定,此節(jié)點(diǎn)上的所有字符(包括已知和未知字符)都用同樣的分支操作方法一起分支。
分支操作結(jié)束后,來到建立二值樹的最后一步,即為樹中的每一個(gè)分支指定概率值。每個(gè)節(jié)點(diǎn)的左支和右支被同時(shí)賦值,且左支和右支的概率和應(yīng)為1。賦值操作分為兩步首先,對0組和1組的已知字符分別求概率和,這兩個(gè)和用Zp和Op表示,若其中一個(gè)為0,或兩個(gè)全為0,Zp和Op須重新用0組和1組中的所有(已知和未知)字符的概率相加算得。最后,左支的概率是Zp/(Zp+Op);右支的概率是Zp/(Zp+Op)。
二值數(shù)據(jù)樹300根據(jù)表210中的數(shù)據(jù)和概率建造而成。如圖3所示,根節(jié)點(diǎn)305包括字符全集(此例中為{A、B、C、D、E、F、G、H}),其中,A、B、C和D是已知字符,E、F、G和H是未知字符,這個(gè)字符集合基于b2位分為0組和1組節(jié)點(diǎn)310即0組包括A、B、C和E,因?yàn)檫@些字符的b2位是0。節(jié)點(diǎn)320即1組則包括D、F、G和H,因?yàn)樗鼈兊腷2位是1。選擇b2位作為區(qū)別位的原因是0組中的已知字符(A,B,C)的概率和Zp是0.9,1組中的已知字符D的概率和Op是0.07。這是所能得到的最大差異結(jié)果?,F(xiàn)在來看看,選擇其它bit位會出現(xiàn)什么情況若選擇b1會產(chǎn)生0.65(0組的A,E,F(xiàn),G)和0.32(1組的C,E,G,H),而選擇b0會產(chǎn)生0.87(0組的A,E,D,F(xiàn))和0.10(1組的C,E,G,H),可見選擇b2最符合要求。沿樹繼續(xù)向下產(chǎn)生分支,節(jié)點(diǎn)310由b0做區(qū)別位,節(jié)點(diǎn)320由b1或b0做區(qū)別位,這是因?yàn)樗鼈儺a(chǎn)生的樹具有相同的概率值。b1位產(chǎn)生一個(gè)0組,只包含未知字符(F和G),而b0位產(chǎn)生一個(gè)1組,也只包含未知字符(G和H)為避免二義性,選擇具有較高位置(即左側(cè))的bit位作為區(qū)別位。
下面將詳細(xì)描述如何給二值樹300的各個(gè)分支賦概率值。根節(jié)點(diǎn)305的0組分支是節(jié)點(diǎn)310,310包括已知字符A、B和C;305的1組分支是節(jié)點(diǎn)320,320中的唯一已知節(jié)點(diǎn)是D。這些節(jié)點(diǎn)的概率值都列于表210中。0組分支節(jié)點(diǎn)310的已知節(jié)點(diǎn)概率和Zp是0.65+0.15+0.1(A、B、C的概率分別是0.65、0.15和0.1);1組分支節(jié)點(diǎn)320的已知節(jié)點(diǎn)的概率和Op為0.07,其唯一的已知字符D的概率是0.07。因此,節(jié)點(diǎn)305的左支的概率是Zp/(Zp+Op)=0.9278,右支的概率是Op/(Zp+Op)=0.0722。
節(jié)點(diǎn)360是節(jié)點(diǎn)320的1組分支。當(dāng)節(jié)點(diǎn)360在b0位繼續(xù)分解時(shí),產(chǎn)生了一個(gè)只包含單個(gè)未知字符H的1組分支,因此,在計(jì)算概率和時(shí),既要使用未知字符,也要使用已知字符。在這種情況下,Zp=0.07和Op=0.0075,得到左支的概率是0.9032,右支的概率是0.0968。其余節(jié)點(diǎn)可以按同樣步驟推導(dǎo)出來。
在一個(gè)給定的前綴的情況下,對字符X進(jìn)行編碼可以分3步來做1.在給定前綴的預(yù)測表基礎(chǔ)上建立二值樹;
2.確定從根節(jié)點(diǎn)到字符X的路徑;3.對此路徑上的每一個(gè)概率進(jìn)行編碼。
例如,在圖3中,字符D使用3個(gè)概率0.0722、0.8378和0.9032進(jìn)行編碼,而字符E則使用概率0.9278、0.1111和0.0698來編碼。每一個(gè)概率值都使用標(biāo)準(zhǔn)算術(shù)編碼來編。
使用方法圖4是表示使用前綴預(yù)測編碼的數(shù)據(jù)壓縮方法的一個(gè)流程圖,下面將逐步解釋其功能。
方法400在系統(tǒng)100上運(yùn)行。雖然方法400是按順序方式進(jìn)行描述的,實(shí)際上它的幾個(gè)步驟可以作為獨(dú)立的單元進(jìn)行聯(lián)合操作或是并行操作。
在流程點(diǎn)405,系統(tǒng)100已經(jīng)為開始一個(gè)使用前綴預(yù)測編碼的數(shù)據(jù)壓縮流程作好準(zhǔn)備。
接下來410模塊給出了一個(gè)命令去壓縮指定數(shù)據(jù)(字符串)150。正常情況下,這個(gè)命令既可以由用戶手動操作發(fā)出,也可以自動執(zhí)行。
415模塊中,計(jì)算程序140執(zhí)行了一組指令用來重新排列數(shù)據(jù)150。例如,把一組二維數(shù)據(jù)重新排列成一維。
420模塊中,計(jì)算程序140執(zhí)行了一組指令,使用一個(gè)Burrows-Wheeler變換和一個(gè)Move-to-front變換改變了數(shù)據(jù)150的順序。對數(shù)據(jù)做順序上的變動改變了概率分布,并使輸入值由一個(gè)位置索引代替。
模塊425把經(jīng)過變化的數(shù)據(jù)150存儲在內(nèi)存中。
模塊430,計(jì)算程序140為數(shù)據(jù)150中的每一個(gè)字符產(chǎn)生預(yù)測概率表,這些表是基于字符前綴的條件表。在另外的一些情況下,概率表以經(jīng)驗(yàn)概率值為基礎(chǔ)生成的。
模塊435中,計(jì)算程序140產(chǎn)生了一個(gè)二值樹結(jié)構(gòu),使圖3中表示的每一對0-1分支組里的已知字符(不包含未知字符)概率和的差異性達(dá)到最大。每一個(gè)字符都由一條唯一的路徑表示,連接根和字符。這條路徑包含分支,每個(gè)分支都被指定了一個(gè)概率值。編碼一個(gè)字符等價(jià)于編碼這條從根到字符的路徑上的所有概率值。
440模塊中,計(jì)算程序140遍歷需要編碼的字符前綴對應(yīng)的二值樹結(jié)構(gòu),并對從根到字符這條路徑上的所有概率進(jìn)行編碼。正常情況下,概率值使用算術(shù)編碼方法編碼。隨著不同字符串和不同前綴的讀入,這一過程可能會重復(fù)多次,直至整個(gè)數(shù)據(jù)集合編碼完畢。
必須指出,在這里僅對本發(fā)明技術(shù)的基本算法進(jìn)行了描述,實(shí)際上無論是從概念、范圍的角度,還是從創(chuàng)造的精神來看,仍存在許多的可供發(fā)揮的地方,從而得到不同的衍生算法,對于那些精于圖象壓縮技術(shù)又熟讀本文的人來說,這件事輕而易舉。
權(quán)利要求
1.一種使用前綴預(yù)測的位自適應(yīng)編碼方法,其特征在于,包括如下步驟a、對字符串里的字符進(jìn)行排序,每一字符用二進(jìn)制表示;b、每一個(gè)相關(guān)字符都包含在具有一個(gè)上下文的字符集合里,上下文中包含一個(gè)前綴;c、前綴和一個(gè)字符集合對應(yīng),對字符串的前綴進(jìn)行判定,并對可能跟在該前綴后的所有字符的概率進(jìn)行預(yù)測,為此前綴產(chǎn)生一個(gè)預(yù)測表;d、基于預(yù)測表,產(chǎn)生一棵對應(yīng)的使預(yù)測表中的字符盡可能不均衡的二值樹結(jié)構(gòu),結(jié)束于葉子節(jié)點(diǎn),每一個(gè)葉子節(jié)點(diǎn)都包含一個(gè)單獨(dú)的字符;e、確定從根節(jié)點(diǎn)到每一字符的路徑,樹中每個(gè)分支都被指定了一個(gè)概率;f、利用從根節(jié)點(diǎn)到相關(guān)字符的葉子節(jié)點(diǎn)的一條最短路徑上所有分支指定的概率來編碼或解碼一個(gè)字符。
2.根據(jù)權(quán)利要求1所述使用前綴預(yù)測的位自適應(yīng)編碼方法,其特征在,于二值樹結(jié)構(gòu)的建立步驟包括a、從根節(jié)點(diǎn)開始,每一個(gè)節(jié)點(diǎn)都選擇一個(gè)區(qū)別位,此區(qū)別位是單個(gè)的數(shù)位;b、所有的字符都以在步驟a中選擇的區(qū)別位為基礎(chǔ),在每一個(gè)節(jié)點(diǎn)被分成0組和1組,分組是按區(qū)別位上的值來進(jìn)行,結(jié)束于葉子節(jié)點(diǎn),每一個(gè)葉子節(jié)點(diǎn)都包含一個(gè)單獨(dú)的字符,后繼節(jié)點(diǎn)、根節(jié)點(diǎn)以及葉子節(jié)點(diǎn)都包含在節(jié)點(diǎn)集合中,單個(gè)字符都包含在字符集合中;c、區(qū)別位的選擇應(yīng)使按此區(qū)別位產(chǎn)生的0組中的已知字符的概率總和與1組的已知字符的概率總和的差異應(yīng)達(dá)到最大;d、若某個(gè)位在一個(gè)父節(jié)點(diǎn)中已經(jīng)用作過區(qū)別位,它就不能在后面的節(jié)點(diǎn)中被再次使用,如果一個(gè)節(jié)點(diǎn)只包含單個(gè)已知字符,那么將選擇區(qū)別位使得包含這個(gè)已知字符的字符組中的所有字符的概率和達(dá)到最大,如果一個(gè)節(jié)點(diǎn)不包含已知字符,選擇的區(qū)別位應(yīng)使1組和0組中的未知字符的差異最大。
3.根據(jù)權(quán)利要求1所述使用前綴預(yù)測的位自適應(yīng)編碼方法,其特征在于樹結(jié)構(gòu)中為每一個(gè)分支指定概率對應(yīng)于字符集合中包含的字符的概率;概率已知的字符的概率用預(yù)測表來表示;剩余的字符子集即具有未知概率、不精確概率或人工指定的概率的字符的概率總和用ESC值表示;和具有未知概率、不精確概率和人工指定概率的字符相比,那些具有已知概率的字符具有更高的優(yōu)先級。
4.根據(jù)權(quán)利要求1所述使用前綴預(yù)測的位自適應(yīng)編碼方法,其特征在于,為樹中的每一個(gè)分支指定概率的方法包括每一個(gè)節(jié)點(diǎn)的分支概率都被表示為一對浮點(diǎn)數(shù)或是有理數(shù),每個(gè)節(jié)點(diǎn)的左支和右支被同時(shí)賦值,且左支和右支的概率和應(yīng)為1。
5.根據(jù)權(quán)利要求4所述使用前綴預(yù)測的位自適應(yīng)編碼方法,其特征在于,賦值操作分為兩步首先,對0組和1組的已知字符分別求概率和,這兩個(gè)和用Zp和Op表示,若其中一個(gè)為0,或兩個(gè)全為0,Zp和Op須重新用0組和1組中的所有字符的概率相加算得左支概率Zp/(Zp+Op)和右支概率Zp/(Zp+Op)。
6.根據(jù)權(quán)利要求1所述使用前綴預(yù)測的位自適應(yīng)編碼方法,其特征在于,預(yù)測表包括產(chǎn)生一個(gè)或多個(gè)下列表零階表、一階表、二階表和三階表。
7.根據(jù)權(quán)利要求1所述使用前綴預(yù)測的位自適應(yīng)編碼方法,其特征在于,所述排序步驟可以包括或不包括進(jìn)行一個(gè)或多個(gè)下列操作一個(gè)巴羅斯—維勒(Burrows-Wheeler)變換和前移(Move-to-front)變換。
8.根據(jù)權(quán)利要求1所述使用前綴預(yù)測的位自適應(yīng)編碼方法,其特征在于,所述編碼是標(biāo)準(zhǔn)算術(shù)編碼。
9.根據(jù)權(quán)利要求1所述使用前綴預(yù)測的位自適應(yīng)編碼方法,其特征在于,通過對字符串進(jìn)行編碼后,用來壓縮或解壓縮數(shù)據(jù)。
10.根據(jù)權(quán)利要求1所述使用前綴預(yù)測的位自適應(yīng)編碼方法,其特征在于,終止葉子是和一個(gè)字符的概率相聯(lián)系的,此概率可能來自于先驗(yàn)知識,也可能來自于之前的統(tǒng)計(jì)數(shù)據(jù),也可能未知,但通過公式將其進(jìn)行模型化。
全文摘要
本發(fā)明涉及一種使用前綴預(yù)測的位自適應(yīng)編碼方法,首先對數(shù)據(jù)串的前綴進(jìn)行估算,并按照表格形式來預(yù)測所有字符的概率,各個(gè)字符按照其是否在表中來領(lǐng)取“已知”和“未知”的標(biāo)簽,在單個(gè)數(shù)位值的基礎(chǔ)上將節(jié)點(diǎn)分為0組和1組,從而產(chǎn)生一棵二值樹。接下來選擇一個(gè)區(qū)別位使得0組和1組中的已知字符的概率差異達(dá)到最大,若0組或1組中有一個(gè)不包含已知字符,則必須做特殊處理,然后,在已知字符和未知字符的概率基礎(chǔ)上,為每一個(gè)分支指定概率值,最后,編碼或解碼一個(gè)字符都變得非常簡單,從根節(jié)點(diǎn)到包含單個(gè)字符的葉子節(jié)點(diǎn)之間找到一條最短路徑,對這條路徑上的分支概率直接使用算術(shù)編碼或解碼即可,采用本發(fā)明能有效壓縮數(shù)據(jù)。
文檔編號H03M7/40GK1369970SQ0210455
公開日2002年9月18日 申請日期2002年2月8日 優(yōu)先權(quán)日2001年2月9日
發(fā)明者胡笑平 申請人:胡笑平
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1