專(zhuān)利名稱:游長(zhǎng)縮減的二元序列壓縮編碼方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種游長(zhǎng)縮減ニ元序列壓縮編碼方法,屬于數(shù)據(jù)無(wú)損壓縮技術(shù)領(lǐng)域。
背景技術(shù):
現(xiàn)今的電子信息技術(shù)領(lǐng)域中,大部分信息是以數(shù)字化的方式表示的。數(shù)字化多媒體信息尤其是數(shù)字視頻、音頻信號(hào)的數(shù)據(jù)量特別龐大,給存儲(chǔ)和傳輸帶來(lái)很多問(wèn)題,如果不對(duì)數(shù)據(jù)進(jìn)行有效的壓縮就難以得到實(shí)際的應(yīng)用。因此,數(shù)據(jù)壓縮技術(shù)成為當(dāng)今數(shù)字通信、廣播和多媒體中的一項(xiàng)關(guān)鍵技木。ニ值圖像、文字頁(yè)面、工程圖紙和電路圖等經(jīng)逐行提取元素后均為ー種ニ元序列,將ニ元序列中的ニ元分別取為O元和I元,ニ元序列中的連續(xù)的O元和連續(xù)的I元組成的一段分別稱為ー個(gè)O游程或I游程,O游程長(zhǎng)度稱為O游長(zhǎng),I游程長(zhǎng)度稱為I游長(zhǎng)。傳統(tǒng) 的ニ元序列的壓縮方法一般采用ー維游程編碼,一維游程編碼的基本原理是利用變長(zhǎng)編碼方法分別對(duì)ニ元序列中的全體O游程和全體I游程無(wú)論長(zhǎng)短均重新進(jìn)行編碼,對(duì)較短游程重新編碼后往往導(dǎo)致新的編碼位數(shù)超過(guò)較短游程長(zhǎng)度,導(dǎo)致數(shù)據(jù)量的膨脹,降低了總體的編碼壓縮效能。例如,國(guó)際傳真標(biāo)準(zhǔn)CCITT.4(G3)利用Huffman編碼對(duì)游程進(jìn)行編碼,其壓縮效能較低。本發(fā)明提出ー種具有選擇性的游長(zhǎng)縮減的ニ元序列壓縮編碼方法,該方法根據(jù)ニ元序列中O游程和I游程的分布狀況,分別選取最佳臨界O游長(zhǎng)和最佳臨界I游長(zhǎng),對(duì)ニ元序列中游長(zhǎng)大于等于最佳臨界O游長(zhǎng)的全體O游程,采用其游長(zhǎng)縮減后的長(zhǎng)度與游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的一位碼元重新進(jìn)行編碼,對(duì)ニ元序列中的全體I游程按相同方法處理,實(shí)現(xiàn)較長(zhǎng)游程的壓縮編碼。對(duì)游長(zhǎng)小于最佳臨界O游長(zhǎng)的全體O游程和游長(zhǎng)小于最佳臨界I游長(zhǎng)的全體I游程用其原始編碼表示,不重新編碼,避免了因?qū)^短的O游程和較短的I游程重新編碼后所導(dǎo)致的位數(shù)増加。解碼時(shí)只需對(duì)游長(zhǎng)大于等于最佳臨界O游長(zhǎng)和最佳臨界I游長(zhǎng)的O游程和I游程,通過(guò)游長(zhǎng)縮減后的游長(zhǎng)與縮減前后轉(zhuǎn)換關(guān)系碼元,即可復(fù)原原始O游程與I游程的長(zhǎng)度。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)存在的問(wèn)題提出一種游長(zhǎng)縮減的ニ元序列壓縮編碼方法,該方法算法簡(jiǎn)單,易于實(shí)現(xiàn),壓縮效能高于傳統(tǒng)的ー維游程編碼方法。本發(fā)明提出的游長(zhǎng)縮減的ニ元序列壓縮編碼方法,包括以下步驟
(1)、將ニ元序列中的ニ元分別用數(shù)值“O”和“I”表示,ニ元序列轉(zhuǎn)換為O和I組成的ニ值碼序列;
(2)、計(jì)算步驟(I)所述的ニ值碼序列中全體O游程和全體I游程的游程長(zhǎng)度,用游程長(zhǎng)度值依次取代ニ元序列中全體游程后,生成游長(zhǎng)序列,其中,O游程對(duì)應(yīng)的游程長(zhǎng)度為O游長(zhǎng),I游程對(duì)應(yīng)的游程長(zhǎng)度為I游長(zhǎng);
(3)、分別計(jì)算步驟(2)所述游長(zhǎng)序列中全體O游程和全體I游程的游程長(zhǎng)度算木平均值,分別選取游長(zhǎng)序列中O游長(zhǎng)與I游長(zhǎng)的最大臨界游長(zhǎng);
(4)、對(duì)步驟(2)中所述的游長(zhǎng)序列按每組1024個(gè)游長(zhǎng)單元進(jìn)行分組,得到游長(zhǎng)序列的各個(gè)游長(zhǎng)子序列,分組后每個(gè)游長(zhǎng)子序列的單元個(gè)數(shù)均為1024,最后ー個(gè)子序列的單元個(gè)數(shù)為
N=1024+(M%1024)(I)
其中,N為最后一個(gè)游長(zhǎng)子序列的單元個(gè)數(shù),M為游長(zhǎng)序列總的單元個(gè)數(shù),符號(hào)“ %”表示求余;
(5)、分別計(jì)算步驟(4)所述游長(zhǎng)子序列中的全體O游長(zhǎng)和全體I游長(zhǎng)在臨界游長(zhǎng)取值為1,2,…,η時(shí)的編碼位數(shù),η為最大臨界游長(zhǎng),確定最佳臨界O游長(zhǎng)和最佳臨界I游長(zhǎng),具體如下
(5-1)、分別確定游長(zhǎng)子序列中全體O游長(zhǎng)和全體I游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù),其中I < P < η,具體如下
(5-1-1)、確定游長(zhǎng)子序列中全體O游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù)選取游長(zhǎng)子序列中游長(zhǎng)大于等于P的全體O游長(zhǎng),對(duì)選取后的各O游長(zhǎng)值加上P后整除2,得到O游長(zhǎng)縮減后新的O游長(zhǎng),余數(shù)為O或1,余數(shù)表示O游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的一位碼元,新的O游長(zhǎng)值加I為原O游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù),將上述選取后的全體O游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù)相加,其和記為Stl,并將Stl與游長(zhǎng)子序列中全體O游長(zhǎng)小于P的O游長(zhǎng)值相加,得到游長(zhǎng)子序列中全體O游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù);(5-1-2)、確定游長(zhǎng)子序列中全體I游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù)選取游長(zhǎng)子序列中游長(zhǎng)大于等于P的全體I游長(zhǎng),對(duì)選取后的各I游長(zhǎng)值加上P后整除2,得到I游長(zhǎng)縮減后新的I游長(zhǎng),余數(shù)為O或1,余數(shù)表示I游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的一位碼元,新的I游長(zhǎng)值加I為原I游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù),將上述選取后的全體I游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù)相加,其和記為S1,并將S1與游長(zhǎng)子序列中全體I游長(zhǎng)小于P的I游長(zhǎng)值相加,得到游長(zhǎng)子序列中全體I游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù);(5-2)、分別確定游長(zhǎng)子序列中O游長(zhǎng)與I游長(zhǎng)的最佳臨界游長(zhǎng),具體如下
選取游長(zhǎng)子序列中全體O游長(zhǎng)在其對(duì)應(yīng)的各臨界游長(zhǎng)中編碼位數(shù)最小值,該最小值對(duì)應(yīng)的臨界游長(zhǎng)為最佳臨界O游長(zhǎng);選取游長(zhǎng)子序列中全體I游長(zhǎng)在其對(duì)應(yīng)的各臨界游長(zhǎng)中編碼位數(shù)最小值,該最小值對(duì)應(yīng)的臨界游長(zhǎng)為最佳臨界I游長(zhǎng);
(6)、按步驟(5-2)所述的最佳臨界O游長(zhǎng)和最佳臨界I游長(zhǎng),對(duì)步驟(4)所述的各個(gè)游長(zhǎng)子序列利用步驟(5)所述方法進(jìn)行縮減,生成游長(zhǎng)縮減后的游長(zhǎng)子序列及其游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的ニ值碼表,具體如下
(6-1)、選取游長(zhǎng)子序列中游長(zhǎng)大于等于最佳臨界O游長(zhǎng)的全體O游長(zhǎng),對(duì)選取后的各O游長(zhǎng)加上最佳臨界O游長(zhǎng)后整除2,得到游長(zhǎng)縮減后新的O游長(zhǎng),余數(shù)為O或1,余數(shù)表示O游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的一位碼元,O游長(zhǎng)縮減后的長(zhǎng)度值所對(duì)應(yīng)的一串O元與轉(zhuǎn)換關(guān)系碼元為O游長(zhǎng)的壓縮編碼,小于最佳臨界O游長(zhǎng)的全體O游長(zhǎng)不重新編碼;
(6-2)、選取游長(zhǎng)子序列中游長(zhǎng)大于等于最佳臨界I游長(zhǎng)的全體I游長(zhǎng),對(duì)選取后的各I游長(zhǎng)加上最佳臨界I游長(zhǎng)后整除2,得到游長(zhǎng)縮減后新的I游長(zhǎng),余數(shù)為O或1,余數(shù)表示O游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的一位碼元,I游長(zhǎng)縮減后的長(zhǎng)度值所對(duì)應(yīng)的一串I元與轉(zhuǎn)換關(guān)系碼元為I游長(zhǎng)的壓縮編碼;小于最佳臨界I游長(zhǎng)的全體I游長(zhǎng)不重新編碼;(6-3)、將縮減前后轉(zhuǎn)換關(guān)系碼元按O游長(zhǎng)和I游長(zhǎng)交替的方式依次擺放,生成游長(zhǎng)子序列縮減如后轉(zhuǎn)換關(guān)系 值碼表;
(7)、構(gòu)造游長(zhǎng)子序列經(jīng)縮減后的游長(zhǎng)子序列長(zhǎng)度編碼表,依次拼接各游長(zhǎng)子序列長(zhǎng)度編碼表,生成步驟(2)所述游長(zhǎng)序列的長(zhǎng)度編碼表,具體如下
對(duì)步驟(6)所述的游長(zhǎng)縮減后的游長(zhǎng)子序列,按O和I交替的方式的依次擺放其所對(duì)應(yīng)的ー串O元和一串I元,生成游長(zhǎng)子序列縮減后的ニ值碼子序列,將ニ值碼子序列加上2個(gè)前綴,前綴為游長(zhǎng)子序列中全體O游長(zhǎng)和全體I游長(zhǎng)是否可縮減的狀態(tài)標(biāo)記,以及O游長(zhǎng)和I游長(zhǎng)的最佳臨界游長(zhǎng),其中,壓縮狀態(tài)標(biāo)記用O或I表示,O表示不可縮減,所對(duì)應(yīng)的游長(zhǎng)子序列中的全體O游長(zhǎng)或全體I游長(zhǎng)經(jīng)縮減后的編碼位數(shù)大于原游長(zhǎng)子序列中全體O游 長(zhǎng)或全體I游長(zhǎng)的編碼位數(shù),則不可重新編碼,第一個(gè)前綴為O,第二個(gè)前綴為“空”,“空”表明無(wú)需在此前綴處填入數(shù)據(jù);壓縮狀態(tài)標(biāo)記I表示可縮減,第一個(gè)前綴為I,第二個(gè)前綴為最佳臨界游長(zhǎng)。,將置入前綴后的ニ值碼子序列稱為游長(zhǎng)子序列的長(zhǎng)度編碼表,依次將游長(zhǎng)子序列的長(zhǎng)度編碼表拼接起來(lái),生成步驟(2 )所述游長(zhǎng)序列的長(zhǎng)度編碼表;
(8)、依次拼接步驟(6-1)所述的游長(zhǎng)子序列游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系ニ值碼表,生成游長(zhǎng)序列轉(zhuǎn)換關(guān)系編碼表;
(9)、合并步驟(7)所述游長(zhǎng)序列的長(zhǎng)度編碼表及步驟(8)所述的游長(zhǎng)序列轉(zhuǎn)換關(guān)系編碼表,生成步驟(I)所述ニ值碼序列的壓縮編碼表。上述步驟(3)所述的分別選取游長(zhǎng)序列中O游長(zhǎng)與I游長(zhǎng)的最大臨界游長(zhǎng)n,其具體如下當(dāng)游程算木平均值小于16吋,則確定最大臨界游長(zhǎng)n=8 ;當(dāng)游程算木平均值大于等于16時(shí),則確定最大臨界游長(zhǎng)n=16。上述步驟(6)中所述的對(duì)步驟(4)所述的各個(gè)游長(zhǎng)子序列利用步驟(5)所述方法進(jìn)行縮減,縮減次數(shù)不限于一次,最大縮減的次數(shù)的確定,具體如下
如果游長(zhǎng)算木平均值小于I. 5,則確定最大縮減次數(shù)為2 ;
如果游長(zhǎng)算木平均值大于等于I. 5,小于2,則確定最大縮減次數(shù)為4 ;
如果游長(zhǎng)算木平均值大于等于2,小于16,則確定最大縮減次數(shù)為8 ;
如果游長(zhǎng)算木平均值大于等于16,則確定最大縮減次數(shù)為16。本發(fā)明的游長(zhǎng)縮減的ニ元序列壓縮編碼方法的解碼方式為游長(zhǎng)縮減的反過(guò)程,換言之,ニ元序列經(jīng)本發(fā)明方法壓縮處理后,可生成一個(gè)壓縮文件,通過(guò)對(duì)壓縮文件的解碼,即可復(fù)原原始文件,例如,游長(zhǎng)子序列中O游長(zhǎng)的最佳臨界O游長(zhǎng)為3,設(shè)101為該游長(zhǎng)子序列中的ー個(gè)O游長(zhǎng)值,則O游長(zhǎng)101經(jīng)游長(zhǎng)縮減后的游長(zhǎng)為
round ((101+3)/2) =52轉(zhuǎn)換關(guān)系碼元為O
其中,round表示取整函數(shù),101在原始的ニ值碼序列中用連續(xù)的101個(gè)O表示,占用101位存儲(chǔ)空間,經(jīng)縮減后,其游長(zhǎng)值為52,加上I位轉(zhuǎn)換關(guān)系碼元,共計(jì)53位,比原始的101位節(jié)省了 48位。游長(zhǎng)復(fù)原過(guò)程為 2X52+0-3=101
以上步驟(I)- (9)為ニ元序列經(jīng)一次游長(zhǎng)縮減后生成壓縮編碼的過(guò)程,在實(shí)際應(yīng)用中,可通過(guò)游長(zhǎng)多次縮減來(lái)實(shí)現(xiàn)更高的壓縮比。 本發(fā)明提出的游長(zhǎng)縮減的ニ元序列壓縮編碼方法具有的優(yōu)點(diǎn)是該方法可針對(duì)游長(zhǎng)子序列中游長(zhǎng)的分布狀況,對(duì)較長(zhǎng)游長(zhǎng)進(jìn)行壓縮編碼,對(duì)較短游長(zhǎng)不進(jìn)行縮減,能夠避免因?qū)^短游長(zhǎng)重新編碼后所導(dǎo)致的編碼位數(shù)増加,提高編解碼效率,算法簡(jiǎn)單,易于實(shí)現(xiàn),壓縮效能高于傳統(tǒng)的一維游程方法。
圖I是本發(fā)明的游長(zhǎng)縮減的ニ元序列壓縮編碼方法流程 圖2是本發(fā)明的游長(zhǎng)多次縮減的ニ元序列壓縮編碼方法流程 圖3是采用本發(fā)明的游長(zhǎng)縮減的ニ元序列壓縮編碼方法按壓縮比為10. 92壓縮后的ニ值圖像;
圖4是采用本發(fā)明的游長(zhǎng)縮減的ニ元序列壓縮編碼方法按壓縮比為13. 85壓縮后的ニ值圖像。
具體實(shí)施例方式本發(fā)明是一種游長(zhǎng)縮減的ニ元序列的壓縮編碼方法,其具體的應(yīng)用對(duì)象為數(shù)字圖像、ニ值圖像、文字頁(yè)面、工程圖紙和電路圖等文件,上述文件經(jīng)逐行提取元素后生成ー種ニ元序列,將ニ元取值規(guī)定為O和1,其中,對(duì)256級(jí)灰度數(shù)字圖像按位平面分解后,可得8個(gè)ニ元取值為O和I的ニ值圖像文件,對(duì)24位彩色圖像,將3個(gè)顏色值按位平面分解后,可得24個(gè)ニ元取值為O和I的ニ值圖像文件。對(duì)由上述文件轉(zhuǎn)換后的ニ元序列經(jīng)本發(fā)明方法壓縮處理后,可生成一個(gè)壓縮文件,通過(guò)對(duì)壓縮文件的解碼,即可復(fù)原原始文件。本發(fā)明提出的一種游長(zhǎng)縮減的ニ元序列壓縮編碼方法,如圖I所示,該方法中可對(duì)ニ元序列中的游長(zhǎng)進(jìn)行多次縮減,直至達(dá)到最佳的壓縮效果,如圖2所示,首先將待壓縮文件轉(zhuǎn)換為由O和I組成的ニ值碼序列,再將該ニ值碼序列轉(zhuǎn)換為游長(zhǎng)序列,通過(guò)游長(zhǎng)序列中O游長(zhǎng)與I游長(zhǎng)的算木平均值獲取O游長(zhǎng)與I游長(zhǎng)的最大縮減次數(shù),最大縮減次數(shù)的確定,具體如下
如果游長(zhǎng)算木平均值小于I. 5,則確定最大縮減次數(shù)為2 ;
如果游長(zhǎng)算木平均值大于等于I. 5,小于2,則確定最大縮減次數(shù)為4 ;
如果游長(zhǎng)算木平均值大于等于2,小于16,則確定最大縮減次數(shù)為8 ;
如果游長(zhǎng)算木平均值大于等于16,則確定最大縮減次數(shù)為16。將游長(zhǎng)序列按步驟(4)所述進(jìn)行分組處理,生成游長(zhǎng)子序列,對(duì)各游長(zhǎng)子序列中O游長(zhǎng)和I游長(zhǎng)按O游長(zhǎng)最大縮減次數(shù)和I游長(zhǎng)最大縮減次數(shù)分別進(jìn)行多次縮減,毎次縮減時(shí)均選擇I次最佳臨界O游長(zhǎng)和最佳臨界I游長(zhǎng),按最佳臨界O游長(zhǎng)和最佳臨界I游,分別對(duì)游長(zhǎng)子序列中的全體O游長(zhǎng)和全體I游長(zhǎng)進(jìn)行游長(zhǎng)縮減,將多次縮減后的游長(zhǎng)子序列按游長(zhǎng)屬性,即O游長(zhǎng)或I游長(zhǎng),轉(zhuǎn)換為游長(zhǎng)子序列的ニ值碼序列,加上前綴,生成游長(zhǎng)子序列長(zhǎng)度編碼表,將游長(zhǎng)子序列長(zhǎng)度編碼表依次合并,生成游長(zhǎng)序列長(zhǎng)度編碼表,合并游長(zhǎng)序列長(zhǎng)度編碼表與游長(zhǎng)多次縮減過(guò)程中生成的轉(zhuǎn)換關(guān)系編碼表,生成原始ニ值碼序列的壓縮編碼文件,實(shí)現(xiàn)對(duì)ニ元序列的無(wú)損壓縮。上述方法中對(duì)游長(zhǎng)序列的分解是以每組1024個(gè)單元來(lái)進(jìn)行分組的,如果游長(zhǎng)序列總的游長(zhǎng)單元個(gè)數(shù)少于或等于1024,則不進(jìn)行分組,這種情形通常會(huì)出現(xiàn)在尺寸較小的ニ值圖像中,如果游長(zhǎng)序列總得游長(zhǎng)單元個(gè)數(shù)大于1024,且不是1024的整數(shù)倍,則游長(zhǎng)序列分組后的最后ー組游長(zhǎng)子序列的單元個(gè)數(shù)為下述公式給出
N=1024+(M%1024)
其中,N為最后一個(gè)游長(zhǎng)子序列的單元個(gè)數(shù),M為游長(zhǎng)序列總的單元個(gè)數(shù),符號(hào)“ %”表示求余。上述方法中對(duì)游長(zhǎng)子序列中O游長(zhǎng)與I游長(zhǎng)分別按O游長(zhǎng)與I游長(zhǎng)最大縮減次數(shù)進(jìn)行多次縮減,在具體實(shí)施中,如果游長(zhǎng)子序列中O游長(zhǎng)經(jīng)k+Ι次縮減后的編碼位數(shù)大于第k次縮減后的O游長(zhǎng)編碼位數(shù),其中k+Ι小于等于O游長(zhǎng)最大縮減次數(shù),則游長(zhǎng)子序列中O游長(zhǎng)只進(jìn)行k次游長(zhǎng)縮減,縮減次數(shù)記為k,對(duì)I游長(zhǎng)也按相同方式處理。上述方法中游長(zhǎng)子序列長(zhǎng)度編碼表由兩部分內(nèi)容組成,一是碼表的前綴,前綴由壓縮狀態(tài)標(biāo)記、游長(zhǎng)縮減次數(shù)、各次游長(zhǎng)縮減的最佳臨界游長(zhǎng)等三段碼元組成;ニ是游長(zhǎng)子序列經(jīng)多次縮減后,新的游長(zhǎng)子序列所對(duì)應(yīng)的ニ值碼子序列。如果將游長(zhǎng)子序列的順序下標(biāo)記為0,I, 2,…,游長(zhǎng)子序列中的各游長(zhǎng)單兀按其順序下標(biāo)分別稱為偶游長(zhǎng)或奇游長(zhǎng),如果游長(zhǎng)序列中第一個(gè)游長(zhǎng)單元為I游長(zhǎng),則全體游長(zhǎng)子序列中第一個(gè)游長(zhǎng)単元均為I游長(zhǎng),游長(zhǎng)子序列中全體I游長(zhǎng)為偶游長(zhǎng)。參照表1,游長(zhǎng)子序列長(zhǎng)度編碼表中第一段碼元Sign。和Signe為游長(zhǎng)子序列中偶游長(zhǎng)和奇游長(zhǎng)的壓縮狀態(tài)標(biāo)記,游長(zhǎng)子序列長(zhǎng)度編碼表中第二段碼元S。和Se為偶游長(zhǎng)與奇游長(zhǎng)的縮減次數(shù),如果子序列中偶游長(zhǎng)最大縮減次數(shù)小于16,則S。的位數(shù)為3位,否則S。的位數(shù)為4位,Se的位數(shù)按相同方式確定,游長(zhǎng)子序列長(zhǎng)度編碼表中第三段碼元0l,O2,…為游長(zhǎng)子序列中偶游長(zhǎng)經(jīng)S。次縮減后的各次偶游長(zhǎng)最佳臨界游長(zhǎng),e1; e2,…為游長(zhǎng)子序列中奇游長(zhǎng)經(jīng)Se次縮減后的各次奇游長(zhǎng)最佳臨界游長(zhǎng),如果游長(zhǎng)子序列中偶游長(zhǎng)最大縮減次數(shù)小于16,則O1, 02,···的位數(shù)為3位,否則O1, 02,…的位數(shù)為4位,ei,e2,…的位數(shù)按相同方式確定,游長(zhǎng)子序列長(zhǎng)度編碼表中第四段碼元為游長(zhǎng)子序列經(jīng)多次縮減后新的游長(zhǎng)子序列所對(duì)應(yīng)的ニ值碼序列。如果游長(zhǎng)子序列長(zhǎng)度編碼表中第一段碼元sign。=。,signe=l,則游長(zhǎng)子序列長(zhǎng)度編碼表中第二段碼元為Se,第三段碼元為ei,e2,…;如果游長(zhǎng)子序列長(zhǎng)度編碼表中第一段碼元signal,Signe=O,則游長(zhǎng)子序列長(zhǎng)度編碼表中第二段碼元為S。,第三段碼元為O1, O2, ,如果游長(zhǎng)子序列長(zhǎng)度編碼表中第一段碼元sign。=。,signe=0,則游長(zhǎng)子序列長(zhǎng)度編碼表中第二段與第三段碼元均為空,見(jiàn)表I。表I游長(zhǎng)子序列長(zhǎng)度編碼表
權(quán)利要求
1. 一種游長(zhǎng)縮減的二元序列壓縮編碼方法,其特征在于,所述方法是在計(jì)算機(jī)中依次 按一下步驟實(shí)現(xiàn)的步驟(1 ),將二元序列中的二元分別用數(shù)值“0”和“ 1”表示,二元序列轉(zhuǎn)換為0和1組 成的二值碼序列;步驟(2),計(jì)算步驟(1)所述的二值碼序列中全體0游程和全體1游程的游程長(zhǎng)度,用 游程長(zhǎng)度值依次取代二元序列中全體游程后,生成游長(zhǎng)序列,其中,0游程對(duì)應(yīng)的游程長(zhǎng)度 為0游長(zhǎng),1游程對(duì)應(yīng)的游程長(zhǎng)度為1游長(zhǎng);步驟(3),分別計(jì)算步驟(2)所述游長(zhǎng)序列中全體0游程和全體1游程的游程長(zhǎng)度算術(shù) 平均值,分別選取游長(zhǎng)序列中0游長(zhǎng)與1游長(zhǎng)的最大臨界游長(zhǎng)n ;步驟(4),對(duì)步驟(2)中所述的游長(zhǎng)序列按每組1024個(gè)游長(zhǎng)單元進(jìn)行分組,得到游長(zhǎng)序 列的各個(gè)游長(zhǎng)子序列,分組后每個(gè)游長(zhǎng)子序列的單元個(gè)數(shù)均為1024,最后一個(gè)子序列的單 元個(gè)數(shù)為N=1024+(M%1024)(1)其中,N為最后一個(gè)游長(zhǎng)子序列的單元個(gè)數(shù),M為游長(zhǎng)序列總的單元個(gè)數(shù),符號(hào)“%”表 示求余;步驟(5),分別計(jì)算步驟(4)所述游長(zhǎng)子序列中的全體0游長(zhǎng)和全體1游長(zhǎng)在臨界游長(zhǎng) 取值為1,2,…,n時(shí)的編碼位數(shù),n為最大臨界游長(zhǎng),確定最佳臨界0游長(zhǎng)和最佳臨界1游 長(zhǎng),具體如下步驟(5-1)、分別確定游長(zhǎng)子序列中全體0游長(zhǎng)和全體1游長(zhǎng)在臨界游長(zhǎng)為p時(shí)的編碼 位數(shù),其中1 ≤ p ≤n,具體如下步驟(5-1-1)、確定游長(zhǎng)子序列中全體0游長(zhǎng)在臨界游長(zhǎng)為p時(shí)的編碼位數(shù) 選取游長(zhǎng)子序列中游長(zhǎng)大于等于P的全體0游長(zhǎng),對(duì)選取后的各0游長(zhǎng)值加上p后整 除2,得到0游長(zhǎng)縮減后新的0游長(zhǎng),余數(shù)為0或1,余數(shù)表示0游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的 一位碼元,新的0游長(zhǎng)值加1為原0游長(zhǎng)在臨界游長(zhǎng)為p時(shí)的編碼位數(shù),將上述選取后的全 體0游長(zhǎng)在臨界游長(zhǎng)為p時(shí)的編碼位數(shù)相加,其和記為、并將\與游長(zhǎng)子序列中全體0游 長(zhǎng)小于P的0游長(zhǎng)值相加,得到游長(zhǎng)子序列中全體0游長(zhǎng)在臨界游長(zhǎng)為p時(shí)的編碼位數(shù); 步驟(5-1-2)、確定游長(zhǎng)子序列中全體1游長(zhǎng)在臨界游長(zhǎng)為p時(shí)的編碼位數(shù) 選取游長(zhǎng)子序列中游長(zhǎng)大于等于P的全體1游長(zhǎng),對(duì)選取后的各1游長(zhǎng)值加上P后整 除2,得到1游長(zhǎng)縮減后新的1游長(zhǎng),余數(shù)為0或1,余數(shù)表示1游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的 一位碼元,新的1游長(zhǎng)值加1為原1游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù),將上述選取后的全 體1游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù)相加,其和記為Si,并將Si與游長(zhǎng)子序列中全體1游 長(zhǎng)小于P的1游長(zhǎng)值相加,得到游長(zhǎng)子序列中全體1游長(zhǎng)在臨界游長(zhǎng)為P時(shí)的編碼位數(shù); 步驟(5-2)、分別確定游長(zhǎng)子序列中0游長(zhǎng)與1游長(zhǎng)的最佳臨界游長(zhǎng),具體如下選取游長(zhǎng)子序列中全體0游長(zhǎng)在其對(duì)應(yīng)的各臨界游長(zhǎng)中編碼位數(shù)最小值,該最小值對(duì) 應(yīng)的臨界游長(zhǎng)為最佳臨界0游長(zhǎng);選取游長(zhǎng)子序列中全體1游長(zhǎng)在其對(duì)應(yīng)的各臨界游長(zhǎng)中 編碼位數(shù)最小值,該最小值對(duì)應(yīng)的臨界游長(zhǎng)為最佳臨界1游長(zhǎng);步驟(6)、按步驟(5-2)所述的最佳臨界0游長(zhǎng)和最佳臨界1游長(zhǎng),對(duì)步驟(4)所述的 各個(gè)游長(zhǎng)子序列利用步驟(5)所述方法進(jìn)行縮減,生成游長(zhǎng)縮減后的游長(zhǎng)子序列及其游長(zhǎng) 縮減前后的轉(zhuǎn)換關(guān)系的二值碼表,具體如下步驟(6-1)、選取游長(zhǎng)子序列中游長(zhǎng)大于等于最佳臨界0游長(zhǎng)的全體0游長(zhǎng),對(duì)選取后 的各0游長(zhǎng)加上最佳臨界0游長(zhǎng)后整除2,得到游長(zhǎng)縮減后新的0游長(zhǎng),余數(shù)為0或1,余數(shù) 表示0游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的一位碼元,0游長(zhǎng)縮減后的長(zhǎng)度值所對(duì)應(yīng)的一串0元與轉(zhuǎn) 換關(guān)系碼元為0游長(zhǎng)的壓縮編碼,小于最佳臨界0游長(zhǎng)的全體0游長(zhǎng)不重新編碼;步驟(6-2)、選取游長(zhǎng)子序列中游長(zhǎng)大于等于最佳臨界1游長(zhǎng)的全體1游長(zhǎng),對(duì)選取后 的各1游長(zhǎng)加上最佳臨界1游長(zhǎng)后整除2,得到游長(zhǎng)縮減后新的1游長(zhǎng),余數(shù)為0或1,余數(shù) 表示0游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的一位碼元,1游長(zhǎng)縮減后的長(zhǎng)度值所對(duì)應(yīng)的一串1元與轉(zhuǎn) 換關(guān)系碼元為1游長(zhǎng)的壓縮編碼;小于最佳臨界1游長(zhǎng)的全體1游長(zhǎng)不重新編碼;步驟(6-3)、將縮減前后轉(zhuǎn)換關(guān)系碼元按0游長(zhǎng)和1游長(zhǎng)交替的方式依次擺放,生成游 長(zhǎng)子序列縮減前后轉(zhuǎn)換關(guān)系二值碼表;步驟(7),構(gòu)造游長(zhǎng)子序列經(jīng)縮減后的游長(zhǎng)子序列長(zhǎng)度編碼表,依次拼接各游長(zhǎng)子序列 長(zhǎng)度編碼表,生成步驟(2)所述游長(zhǎng)序列的長(zhǎng)度編碼表,具體如下對(duì)步驟(6)所述的游長(zhǎng)縮減后的游長(zhǎng)子序列,按0和1交替的方式的依次擺放其所對(duì) 應(yīng)的一串0元和一串1元,生成游長(zhǎng)子序列縮減后的二值碼子序列,將二值碼子序列加上2 個(gè)前綴,前綴為游長(zhǎng)子序列中全體0游長(zhǎng)和全體1游長(zhǎng)是否可縮減的狀態(tài)標(biāo)記,以及0游長(zhǎng) 和1游長(zhǎng)的最佳臨界游長(zhǎng),其中,壓縮狀態(tài)標(biāo)記用0或1表示,0表示不可縮減,所對(duì)應(yīng)的游 長(zhǎng)子序列中的全體0游長(zhǎng)或全體1游長(zhǎng)經(jīng)縮減后的編碼位數(shù)大于原游長(zhǎng)子序列中全體0游 長(zhǎng)或全體1游長(zhǎng)的編碼位數(shù),則不可重新編碼,第一個(gè)前綴為0,第二個(gè)前綴為“空”,“空”表 明無(wú)需在此前綴處填入數(shù)據(jù);壓縮狀態(tài)標(biāo)記1表示可縮減,第一個(gè)前綴為1,第二個(gè)前綴為 最佳臨界游長(zhǎng);將置入前綴后的二值碼子序列稱為游長(zhǎng)子序列的長(zhǎng)度編碼表,依次將游長(zhǎng)子序列的長(zhǎng) 度編碼表拼接起來(lái),生成步驟(2)所述游長(zhǎng)序列的長(zhǎng)度編碼表;步驟(8),依次拼接步驟(6-1)所述的游長(zhǎng)子序列游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系二值碼子 序列,生成游長(zhǎng)轉(zhuǎn)換關(guān)系編碼表;步驟(9),合并步驟(7)所述游長(zhǎng)序列的長(zhǎng)度編碼表及步驟(8)所述的游長(zhǎng)序列轉(zhuǎn)換關(guān) 系編碼表,生成步驟1 (1)所述二值碼序列的壓縮編碼表。
2.根據(jù)權(quán)利要求1所述的游長(zhǎng)縮減的二元序列壓縮編碼方法,其特征在于,上述步驟 (3)所述的分別選取游長(zhǎng)序列中0游長(zhǎng)與1游長(zhǎng)的最大臨界游長(zhǎng)n,具體如下當(dāng)游程算術(shù)平均值小于16時(shí),則確定最大臨界游長(zhǎng)n=8 ;當(dāng)游程算術(shù)平均值大于等于16時(shí),則確定最大臨界游長(zhǎng)n=16。
3.根據(jù)權(quán)利要求1所述的游長(zhǎng)縮減的二元序列壓縮編碼方法,其特征在于上述步驟 (6)中所述的對(duì)步驟(4)所述的各個(gè)游長(zhǎng)子序列利用步驟(5)所述方法進(jìn)行縮減,縮減次數(shù) 不限于一次,最大縮減的次數(shù)的確定,具體如下如果游長(zhǎng)算術(shù)平均值小于1. 5,則確定最大縮減次數(shù)為2 ;如果游長(zhǎng)算術(shù)平均值大于等于1. 5,小于2,則確定最大縮減次數(shù)為4 ;如果游長(zhǎng)算術(shù)平均值大于等于2,小于16,則確定最大縮減次數(shù)為8 ;如果游長(zhǎng)算術(shù)平均值大于等于16,則確定最大縮減次數(shù)為16。
全文摘要
本發(fā)明公開(kāi)了一種游長(zhǎng)縮減的二元序列壓縮編碼方法,它包括首先將待壓縮文件轉(zhuǎn)換為由0和1組成的二值碼序列;再將該二值碼序列轉(zhuǎn)換為游長(zhǎng)序列,計(jì)算游長(zhǎng)序列中0游長(zhǎng)與1游長(zhǎng)的算術(shù)平均值;獲取0游長(zhǎng)與1游長(zhǎng)的最大縮減次數(shù);生成游長(zhǎng)縮減后的游長(zhǎng)子序列及其游長(zhǎng)縮減前后的轉(zhuǎn)換關(guān)系的二值碼表;構(gòu)造游長(zhǎng)子序列經(jīng)縮減后的游長(zhǎng)子序列長(zhǎng)度編碼表,依次拼接各游長(zhǎng)子序列長(zhǎng)度編碼表,生成游長(zhǎng)序列的長(zhǎng)度編碼表;生成游長(zhǎng)轉(zhuǎn)換關(guān)系編碼表;分別在長(zhǎng)度編碼表和游長(zhǎng)序列轉(zhuǎn)換關(guān)系編碼表的首部加入文件頭數(shù)據(jù),生成二值碼序列的壓縮編碼表。該方法能夠避免對(duì)較短游長(zhǎng)重新編碼,導(dǎo)致的編碼位數(shù)增加,提高編解碼效率,算法簡(jiǎn)單,易于實(shí)現(xiàn)。
文檔編號(hào)H04N1/41GK102651795SQ20121014836
公開(kāi)日2012年8月29日 申請(qǐng)日期2012年5月15日 優(yōu)先權(quán)日2012年5月15日
發(fā)明者劉萬(wàn), 孫瑞鵬, 宋奧, 朱繼, 饒珺, 高健 申請(qǐng)人:上海大學(xué)