欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于信源高階熵的數(shù)據(jù)壓縮方法

文檔序號(hào):7901021閱讀:263來(lái)源:國(guó)知局
專利名稱:基于信源高階熵的數(shù)據(jù)壓縮方法
技術(shù)領(lǐng)域
本發(fā)明涉及信息技術(shù)領(lǐng)域中數(shù)據(jù)的無(wú)損壓縮和解壓縮技術(shù),具體地涉及基于信源熵編碼的數(shù)據(jù)壓縮和解壓縮技術(shù)。
Huffman編碼是可變字長(zhǎng)編碼的一種。Huffman于1952年提出一種編碼方法,該方法完全依據(jù)字符出現(xiàn)概率來(lái)構(gòu)造非前綴碼的平均長(zhǎng)度最短的碼字,有時(shí)稱之為最佳編碼。產(chǎn)生Huffman編碼需要對(duì)原始數(shù)據(jù)掃描兩遍。第一遍掃描要精確地統(tǒng)計(jì)出原始數(shù)據(jù)中,每個(gè)待編碼字符出現(xiàn)的頻率,第二遍是建立Huffman樹并進(jìn)行編碼。Huffman編碼的前身,是由Claude·E·Shannon和R·M·Fano兩人提出的Shannon-Fano編碼。編碼前要求編碼字符的出現(xiàn)概率已經(jīng)統(tǒng)計(jì)出來(lái)。Shannon-Fano編碼的核心仍然是構(gòu)造二叉樹,構(gòu)造的步驟如下1)將待編碼字符按其出現(xiàn)頻率從大到小排序。
2)將序列分成上下兩部分,使得上部頻率總和盡可能接近下部頻率總和。
3)把第二步中劃分出的上部作為二叉樹的左子樹,記0,下部作為二叉樹的右子樹,記1。
4)分別對(duì)左右子樹重復(fù)2、3兩步,直到所有的符號(hào)都成為二叉樹的樹葉為止。
Huffman算法和Shannon-Fano算法都是基于信源一階熵的壓縮算法。根據(jù)Shannon的信息熵理論,利用信源的高階熵可以進(jìn)一步提高壓縮效率。舉個(gè)典型的例子來(lái)說(shuō)明。在英語(yǔ)文本文件中,字符‘u’的出現(xiàn)頻率是很低的,在Huffman算法或Shannon-Fano算法中,要給‘u’分配一個(gè)較長(zhǎng)的編碼。而根據(jù)英語(yǔ)語(yǔ)言的特點(diǎn),在字符‘q’之后,字符‘u’出現(xiàn)的概率是很高的。因此,在前一字符為‘q’的情況下,給字符‘u’分配的編碼長(zhǎng)度就可以很短,甚至只需一位(bit)即可。由此可見,基于信源的高階熵可以有效提高壓縮效率。
關(guān)于信源熵階的定義,按照Shannon的定義,信源的一階熵為H=-Σi=1mpilog2pi]]>bits/character (1)其中m為信源的個(gè)數(shù),pi為第i個(gè)信源的出現(xiàn)概率。信源的二階熵為H=-Σi=1mpiΣj=1mPj|ilog2Pj|i]]>bits/character (2)其中m為信源的個(gè)數(shù),Pj|i為當(dāng)前信源為j,前一信源為i的條件概率。信源的三階熵為H=-Σi=1mpiΣj=1mPj|iΣk=1mPk|j,ilog2Pk|j,i]]>bits/character (3)其中m為信源的個(gè)數(shù),Pk|j,i為當(dāng)前信源為k,前一信源為j,再前一信源為i的條件概率。
本發(fā)明是基于信源高階熵的數(shù)據(jù)壓縮方法,在產(chǎn)生非前綴編碼和解碼時(shí),不需要建立二叉樹,根據(jù)信源的Pj|i或Pk|j,i,即當(dāng)前信源為j,再前一信源為i,或當(dāng)前信源為k,前一信源為j,再前一信源為i的條件概率進(jìn)行數(shù)據(jù)壓縮。
根據(jù)所有前一信源相同,再前一信源也相同(基于3階熵時(shí))的所有信源的出現(xiàn)頻率,降序排列后按一定的規(guī)則分為左右子塊,根據(jù)當(dāng)前信源在數(shù)組中的位置決定其編碼,若位于左子塊則編碼為‘0’,位于右子塊則編碼為‘1,,繼續(xù)劃分當(dāng)前信源所在的子塊,直到該塊信源的個(gè)數(shù)只有一個(gè)時(shí)為止。其中右子塊中信源的個(gè)數(shù)總為2i個(gè),i=0,1,2,3,4,5,6,7(當(dāng)信源總數(shù)為256個(gè)時(shí))。
劃分左右子塊的規(guī)則是在劃分左子塊時(shí),將子塊開頭部分的2i個(gè)(i從0開始)信源出現(xiàn)頻率之和,與第2i+1個(gè)信源之后的所有信源出現(xiàn)頻率之和進(jìn)行比較,若前者大于后者,則前者為右子塊,其余為左子塊,否則,將i值加1后再比較;若劃分的是右子塊,直接按信源的個(gè)數(shù),平分為左右子塊,頻率大的部分為右子塊,頻率小的部分為左子塊。
同樣的,解壓縮時(shí)也不需要建立二叉樹。先根據(jù)劃分規(guī)則,劃分出左右子塊,然后取出1位(bit)壓縮編碼,若取出的是‘1’,則再劃分右子塊;若是‘0’,則再劃分左子塊,直到該塊的信源個(gè)數(shù)為1時(shí),該信源即為解壓得出的信源。
具體實(shí)施例方式
下面結(jié)合附圖以三階熵為例對(duì)本發(fā)明作進(jìn)一步描述首先,設(shè)定信源是由一個(gè)字節(jié)的字符構(gòu)成,其代碼為從0到255,共有256個(gè)。定義兩個(gè)256*256*256的數(shù)組,一個(gè)用來(lái)存放前一信源為j,再前一信源為i的當(dāng)前各信源的出現(xiàn)次數(shù),用Count[i][j][256]來(lái)表示,初始值全部置為0;另一個(gè)用來(lái)存放前一信源為j,再前一信源為i的當(dāng)前各信源依出現(xiàn)次數(shù)排序后相對(duì)應(yīng)的信源字符,用Char[i][j][256]來(lái)表示。舉例說(shuō)明在前一信源為j,再前一信源為i的前提條件下,當(dāng)前信源‘1‘的出現(xiàn)次數(shù)為20,在256個(gè)信源字符中按降序排列后位于第五位,則Count[i][j][4]=20,Char[i][j][4]=1。Char[i][j][256]的初始值與該信源的值相等,即第0位為0,第1位為1,以此類推,最后一位為255。每次建立當(dāng)前信源的編碼時(shí),依據(jù)的就是這Count[i][j][256],參與編碼的信源個(gè)數(shù)為256個(gè)。對(duì)當(dāng)前信源字符k來(lái)說(shuō),其出現(xiàn)概率為Pk|j,i,對(duì)應(yīng)于該信源的三階熵。壓縮前,直接輸出第一個(gè)信源的字符和第二個(gè)信源的字符。然后,每壓縮一個(gè)字符后,就循環(huán)更新前一字符和再前一字符,即將前一字符作為再前一字符,當(dāng)前字符變作前一字符,讀入的新字符為當(dāng)前字符。
其次,建立當(dāng)前信源k的編碼時(shí),并不需要建立整棵二叉樹。先根據(jù)數(shù)組Char[i][j][256]來(lái)確定當(dāng)前信源k在數(shù)組中的位置,用Position表示。該位置也是當(dāng)前信源k在Count[i][j][256]中按降序排列后的位置。然后根據(jù)數(shù)組Count[i][j][256],用下面的方法來(lái)將數(shù)組分為左右兩塊??偟姆謮K原則,是使右子塊信源的個(gè)數(shù)為2i(i=0~7)個(gè),有利于快速分出左右子塊。若第1位的出現(xiàn)頻率大于第3到第256位的出現(xiàn)頻率之和,則第1位為右子塊,其余為左子塊;否則,若第1和第2位出現(xiàn)頻率之和大于第5位至第256位出現(xiàn)頻率之和,則右子塊為第1位和第2位,其余為左子塊;否則,若第1至4位出現(xiàn)頻率之和大于第9至256位出現(xiàn)頻率之和,則右子塊為第1至4位,其余為左子塊;否則,若第1至8位出現(xiàn)頻率之和大于第17至256位出現(xiàn)頻率之和,則右子塊為第1至8位,其余為左子塊,如此比較下去,直到某個(gè)i值符合條件為止。右子塊個(gè)數(shù)為2i(右子塊最大個(gè)數(shù)為128個(gè)),其余為左子塊。分出左右子塊后,根據(jù)Position值的大小,確定當(dāng)前信源k是屬于右子塊還是屬于左子塊。若屬于左子塊,則編碼為‘0’。再將左子塊按上述的方法分出左右子塊,然后用Position的值進(jìn)行判斷,直到左子塊只剩下一個(gè)信源。若屬于右子塊,則編碼為‘1’。若右子塊元素的個(gè)數(shù)大于1,則將右子塊按信源個(gè)數(shù)平分為二,出現(xiàn)頻率大的為右子塊,出現(xiàn)頻率小的為左子塊,再根據(jù)Position的值,確定信源k是屬于左子塊還是右子塊,左子塊則編碼為‘0’,右子塊則編碼為‘1’。這樣,不用建立整棵二叉樹,也不用通過(guò)搜索二叉樹來(lái)確定信源的編碼,只需根據(jù)信源的出現(xiàn)頻率就能直接得到信源的編碼。
接下來(lái),將信源k的出現(xiàn)頻數(shù)增一,再將Count[i][j][256]排成降序,更新前一信源代碼和再前一信源代碼,讀入新的信源代碼為當(dāng)前代碼?;氐缴弦徊?,直到所有輸入的信源編碼完成。
下面再說(shuō)明編碼的解碼方法。首先,按壓縮編碼時(shí)的方法初始化數(shù)組Count[256][256][256]和Char[256][256][256],讀入第一個(gè)字符FirstChar和第二個(gè)字符SecondChar。從第三個(gè)字符起,是信源壓縮后的編碼。然后,按照壓縮過(guò)程的方法那樣,將前一信源為SecondChar,再前一信源為FirstChar的256個(gè)信源,即Char[FirstChar][SecondChar][256],按出現(xiàn)的頻數(shù)分成左右子塊。取出壓縮編碼的第1位(bit),若該位為1,則說(shuō)明待解壓信源位于右子塊;若該位為0,則說(shuō)明待解壓信源位于左子塊;只要所在子塊的信源個(gè)數(shù)大于1,則按分塊規(guī)則,再分為左右子塊,壓縮編碼左移一位,取出其第一位,按上述相同的方法判斷待解碼信源位于左子塊還是右子塊。就這樣分解下去,直到左子塊或右子塊的信源個(gè)數(shù)為1時(shí),則該信源即為解壓縮得出的原始信源。
本方法可以基于信源的二階熵或三階熵進(jìn)行數(shù)據(jù)壓縮。基于信源高階熵的壓縮方法,不適宜采用靜態(tài)的方法。一方面是因?yàn)椴捎渺o態(tài)編碼的方法,要對(duì)待壓縮數(shù)據(jù)掃描兩遍,且不能用于實(shí)時(shí)數(shù)據(jù)的壓縮;另一方面是因?yàn)橐A舸罅康念^文件信息(各信源及其編碼),降低了壓縮編碼效率。因此,只能采用自適應(yīng)的壓縮方法。
為了與已有的壓縮方法進(jìn)行比較,根據(jù)本方法分別基于信源的二階熵和三階熵編寫出程序(LCL),與Huffman算法程序、LZW算法程序一起,對(duì)Windows98第二版操作系統(tǒng)內(nèi)的幾種不同格式的文件進(jìn)行壓縮,試驗(yàn)結(jié)果如下表所示。用到的Huffman算法程序和LZW算法程序,均是從Internet上下載來(lái)的,作者分別是Fredrik Qvarfort和Mark R.Nelson
表1壓縮效果比較

1 壓縮編碼示例假設(shè)當(dāng)前信源為字符A,在FirstChar和SecondChar為某一確定值的情況下,出現(xiàn)的次數(shù)為12次,在按出現(xiàn)次數(shù)排列的數(shù)組中位于第17位。其它信源出現(xiàn)的次數(shù)分別為55,51,47,45,41,38,37,35,34,31,29,27,24,22,18,16,12,11,9,7,6,6,4,3,3,2,2,1,1,1。第1步分左右子塊。因?yàn)?55)不大于Σi=330Ci=512,]]>其中Ci為各信源的出現(xiàn)次數(shù),(55+51)也不大于Σi=530Ci=420,]]>(55+51+47+45)=198也不大于 而(55+51+47+45+41+38+37+35)=319,大于Σi=1730Ci=68,]]>故右子塊由前8個(gè)信源組成,左子塊由后面的22個(gè)信源組成。右子塊編碼字1,左子塊編碼字0。如

圖1所示。第二步由于當(dāng)前信源位于第17位,屬于左子塊,下一步只需再分左子塊即可。由于(34)不大于Σi=1130Ci=204,]]>(34+31)也不大于Σi=1330Ci=148,]]>而(34+31+29+27)=121,大于Σi=1730Ci=68,]]>故再將左子塊分為新的左子塊和右子塊。右子塊由第9,10,11,12信源組成,由第13至30信源組成左子塊。如圖2所示。第三步當(dāng)前信源屬于新的左子塊,再分左子塊。由于(24)不大于Σi=1530Ci=102,]]>(24+22)=46也不大于Σi=1730Ci=68,]]>而(24+22+18+16)=80,大于Σi=2130Ci=29,]]>故新的右子塊由第13至16信源組成,新的左子塊由第17至30信源組成。如圖3所示。第四步當(dāng)前信源屬于新的左子塊,再分左子塊。由于(12)不大于Σi=1930Ci=45,]]>(12+11)也不大于Σi=2130Ci=29,]]>而(12+11+9+7)=39,大于Σi=2530Ci=10,]]>故新的右子塊由第17至20信源組成,新的左子塊由第21至30信源組成。如圖4所示。第五步當(dāng)前信源屬于新的右子塊,再分右子塊。對(duì)于右子塊,只需要將右子塊按信源的個(gè)數(shù)平分即可。故新的右子塊由第17,18信源組成,左子塊由第19,20信源組成。如圖5所示。第六步當(dāng)前信源屬于新的右子塊,再分右子塊。新的右子塊由第17信源組成,左子塊由第18信源組成。由于右子塊的信源個(gè)數(shù)只有1個(gè),故編碼過(guò)程至此結(jié)束。如圖6所示。
從樹的根往下編碼,右子樹編1,左子樹編0,故可得當(dāng)前信源的編碼為000111。2 編碼解壓縮示例以上例來(lái)說(shuō)明編碼的解碼過(guò)程。同上例的第一步,先求出左右子塊,右子塊由第1至8信源組成,其余信源為左子塊?,F(xiàn)取出編碼的第1位,是‘0’,說(shuō)明待解壓縮信源位于左子塊;再按上例第二步,將左子塊再分為新的左子塊和右子塊。取出編碼的第1位,又是‘0’,說(shuō)明待解壓縮信源仍位于左子塊。再按上例第三步,將左子塊再分為新的左子塊和右子塊。取出編碼的第1位,又是‘0’,說(shuō)明待解壓縮信源仍位于左子塊。再按上例第四步,將左子塊再分為新的左子塊和右子塊。取出編碼的第1位,是‘1’,說(shuō)明待解壓縮信源位于右子塊,此時(shí)右子塊只有第17至20信源。再按上例第五步,將右子塊再分為新的左子塊和右子塊。取出編碼的第1位,是‘1’,說(shuō)明待解壓縮信源仍位于右子塊,此時(shí)右子塊只有第17和18信源。再按上例第六步,將右子塊再分為新的左子塊和右子塊。取出編碼的第1位,是‘1’,說(shuō)明待解壓縮信源位于右子塊,此時(shí)右子塊只有第17信源,故解壓縮得到的編碼為第17信源,輸出該信源,這樣,就完成了一個(gè)信源的解碼。
權(quán)利要求
1.一種基于信源高階熵的數(shù)據(jù)壓縮方法,其特征是指根據(jù)信源的Pj|i或Pk|j,i,即當(dāng)前信源為j,再前一信源為i,或當(dāng)前信源為k,前一信源為j,再前一信源為i的條件概率進(jìn)行數(shù)據(jù)壓縮。
2.如權(quán)利要求1所述的數(shù)據(jù)壓縮方法,其特征是指根據(jù)所有前一信源相同,再前一信源也相同(基于3階熵時(shí))的所有信源的出現(xiàn)頻率,降序排列后按一定的規(guī)則分為左右子塊,根據(jù)當(dāng)前信源在數(shù)組中的位置決定其編碼,若位于左子塊則編碼為‘0’,位于右子塊則編碼為‘1’,繼續(xù)劃分當(dāng)前信源所在的子塊,直到該塊信源的個(gè)數(shù)只有一個(gè)時(shí)為止。
3.如權(quán)利要求2所述的數(shù)據(jù)壓縮方法,其特征是將信源數(shù)組分為左右子塊,其中右子塊中信源的個(gè)數(shù)總為2i個(gè),i=0,1,2,3,4,5,6,7(當(dāng)信源總數(shù)為256個(gè)時(shí))。
4.如權(quán)利要求2所述的數(shù)據(jù)壓縮方法,其特征為劃分左右子塊的規(guī)則是若劃分左子塊時(shí),將子塊開頭部分的2i個(gè)信源出現(xiàn)頻率之和(i從0開始),與第2i+1個(gè)信源之后的所有信源出現(xiàn)頻率之和進(jìn)行比較,若前者大于后者,則前者為右子塊,其余為左子塊,否則,將i值加1后再比較;若劃分的是右子塊時(shí),直接按信源的個(gè)數(shù),平分為左右子塊,頻率大的部分為右子塊,頻率小的部分為左子塊。
5.如權(quán)利要求1中所述的數(shù)據(jù)壓縮方法,其特征為解壓縮編碼時(shí)不需要建立二叉樹,先根據(jù)劃分規(guī)則,劃分出左右子塊,然后取出1位(bit)壓縮編碼,若取出的是‘1’,則再劃分右子塊;若是‘0’,則再劃分左子塊,直到該塊的信源個(gè)數(shù)為1時(shí),該信源即為解壓得出的信源。
6.一種由執(zhí)行如權(quán)利要求1的方法的控制器組成的數(shù)據(jù)壓縮器。
7.一種用于數(shù)據(jù)壓縮器的計(jì)算機(jī)程序產(chǎn)品,這個(gè)計(jì)算機(jī)程序產(chǎn)品包含一套執(zhí)行如權(quán)利要求1的方法的指令。
全文摘要
本發(fā)明涉及信息技術(shù)領(lǐng)域中的數(shù)據(jù)無(wú)損壓縮和解壓縮技術(shù)?,F(xiàn)有的基于信源熵編碼的無(wú)損壓縮和解壓縮方法,都是基于信源的一階熵來(lái)壓縮數(shù)據(jù);基于非前綴碼的熵編碼方法,都要先根據(jù)信源的出現(xiàn)頻率建立一棵二叉樹,然后通過(guò)從根到葉子的搜索來(lái)建立信源的編碼。本發(fā)明是基于信源的高階(2階或3階)熵,能較大地提高數(shù)據(jù)的壓縮比;是自適應(yīng)算法,不需要事先知道各信源的出現(xiàn)頻率;是直接根據(jù)信源的出現(xiàn)頻率建立非前綴編碼,不需要建立二叉樹,適用于所有數(shù)字化文件的壓縮和解壓縮,也可作為圖像、聲音等信息有損壓縮方法中的熵編碼算法,還可用于各種實(shí)時(shí)流媒體信息的壓縮和解壓縮。
文檔編號(hào)H04N7/50GK1447603SQ0311442
公開日2003年10月8日 申請(qǐng)日期2003年1月10日 優(yōu)先權(quán)日2003年1月10日
發(fā)明者李春林 申請(qǐng)人:李春林
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
资兴市| 江西省| 滁州市| 许昌市| 富锦市| 肥东县| 太仆寺旗| 长阳| 两当县| 上虞市| 鹤壁市| 静海县| 阿鲁科尔沁旗| 南昌县| 介休市| 南部县| 阆中市| 北川| 栾川县| 合作市| 霍邱县| 闽侯县| 珠海市| 龙口市| 堆龙德庆县| 桃园县| 天峻县| 象山县| 湘潭县| 沐川县| 安吉县| 四川省| 武冈市| 荣成市| 盈江县| 苍山县| 绥宁县| 贵州省| 罗城| 江门市| 建昌县|