資料壓縮簡史 (轉)
算起來,資料的起源要比的起源早得多,有興趣的讀者可以翻閱一下任何一本成語辭典,查查諸如“二桃三士”、“蕭規曹隨”之類的短語涵蓋了多少資訊內容。:-)
認真一點:資料壓縮技術在計算機技術的萌芽時期就已經被提上了議事日程,有關資訊如何被高效和傳遞的話題不斷被軍事科學家、數學家、電子學家討論來、討論去。終於,隨著資訊理論的產生和發展,資料壓縮也由熱門話題演變成了真正的技術。
通用無損資料壓縮
科學家在研究中發現,大多數資訊的表達都存在著一定的冗餘度,透過採用一定的模型和編碼方法,可以降低這種冗餘度。貝爾實驗室的 Claude Shannon 和 MIT 的 R.M.Fano 幾乎同時提出了最早的對符號進行有效編碼從而實現資料壓縮的 Shannon-Fano 編碼方法。
D.A.Huffman 於 1952 年第一次發表了他的論文“最小冗餘度程式碼的構造方法”(A Method for the Construction of Minimum Redundancy Codes)。從此,資料壓縮開始在商業中實現並被應用在許多技術領域。 上一個不太為現代人熟知的壓縮程式 COMPACT 就是 Huffman 0 階自適應編碼的具體實現。80 年代初,Huffman 編碼又在 CP/M 和 D系統中實現,其代表程式叫 SQ。在資料壓縮領域,Huffman 的這一論文事實上開創了資料壓縮技術一個值得回憶的時代,60 年代、70 年代乃至 80 年代的早期,資料壓縮領域幾乎一直被 Huffman 編碼及其分支所壟斷。如果不是後面將要提到的那兩個以色列人,也許我們今天還要在 Huffman 編碼的 0 和 1 的組合中流連忘返。
讓我們沿著 Huffman 的軌跡再向後跳躍幾年,80 年代,數學家們不滿足於 Huffman 編碼中的某些致命弱點,他們從新的角度入手,遵循 Huffman 編碼的主導思想,設計出另一種更為精確,更能接近資訊理論中“熵”極限的編碼方法——算術編碼。憑藉算術編碼的精妙設計和卓越表現,人們終於可以向著資料壓縮的極限前進了。可以證明,算術編碼得到的壓縮效果可以最大地減小資訊的冗餘度,用最少量的符號精確表達原始資訊內容。當然,算術編碼同時也給程式設計師和計算機帶來了新的挑戰:要實現和執行算術編碼,需要更為艱苦的勞動和更加的計算機系統。也就是說,在同樣的計算機系統上,算術編碼雖然可以得到最好的壓縮效果,但卻要消耗也許幾十倍的計算時間。這就是為什麼算術編碼不能在我們日常使用的壓縮工具中實現的主要原因。
那麼,能不能既在壓縮效果上超越 Huffman,又不增加程式對系統資源和時間的需求呢?我們必須感謝下面將要介紹的兩個以色列人。
直到 1977 年,資料壓縮的研究工作主要集中於熵、字元和單詞頻率以及統計模型等方面,研究者們一直在絞盡腦汁為使用 Huffman 編碼的程式找出更快、更好的改進方法。1977 年以後,一切都改變了。
1977 年,以色列人 Jacob Ziv 和 Abraham Lempel 發表了論文“順序資料壓縮的一個通用演算法”(A Universal Alogrithem for Sequential Data Compression)。
1978 年,他們發表了該論文的續篇“透過可變比率編碼的獨立序列的壓縮”(Compression of Individual Sequences via Variable-Rate Coding)。
所有的一切都改變了,在這兩篇論文中提出的兩個壓縮技術被稱為 LZ77 和 LZ78 (不知為什麼,作者名字的首字母被倒置了)。簡單地說,這兩種壓縮方法的思路完全不同於從 Shannon 到 Huffman 到算術壓縮的傳統思路,倒是和本章開頭所舉的成語辭典的例子頗為相似,因此,人們將基於這一思路的編碼方法稱作“字典”式編碼。字典式編碼不但在壓縮效果上大大超過了 Huffman,而且,對於好的實現,其壓縮和解壓縮的速度也異常驚人。
1984 年,Terry Welch 發表了名為“高資料壓縮技術”(A Technique for High-Performance Data Compression)的論文,描述了他在 Sperry Research Center(現在是 Unisys 的一部分)的研究成果。他實現了 LZ78 演算法的一個變種 —— LZW。LZW 繼承了 LZ77 和 LZ78 壓縮效果好、速度快的優點,而且在演算法描述上更容易被人們接受(有的研究者認為是由於 Welch 的論文比 Ziv 和 Lempel 的更容易理解),實現也比較簡單。不久,UNIX 上出現了使用 LZW 演算法的 Compress 程式,該程式效能優良,並有高水平的文件,很快成為了 UNIX 世界的壓縮程式標準。緊隨其後的是 MS-DOS 環境下的 ARC 程式( System Enhancement Associates, 1985 ),還有象 PKWare、PKARC 等仿製品。LZ78 和 LZW 一時間統治了 UNIX 和 DOS 兩大平臺。
80 年代中期以後,人們對 LZ77 進行了改進,隨之誕生了一批我們今天還在大量使用的壓縮程式。Haruyasu Yoshizaki(Yoshi) 的 LHarc 和 Robert Jung 的 ARJ 是其中兩個著名的例子。LZ77 得以和 LZ78、LZW 一起壟斷當今的通用資料壓縮領域。
目前,基於字典方式的壓縮已經有了一個被廣泛認可的標準,從古老的 PKZ到現在的 ,特別是隨著 Inte 上傳輸的流行,格式成為了事實上的標準,沒有哪一種通用的檔案壓縮、歸檔系統敢於不支援 ZIP 格式。
多資訊的壓縮
今天的程式設計師們和設計師們往往樂此不疲地為計算機更換更大的,增加更多的,其主要目的是為了存放和處理越來越多的、影像和影片資料。對聲音、影像、影片等多媒體資訊的壓縮有兩條思路,要麼採用成熟的通用資料壓縮技術進行壓縮,要麼根據媒體資訊的特性設計新的壓縮方法。事實上,人們在兩條道路上都作了卓有成效的探索。
還記得 GIF 格式嗎?GIF 可以把原始圖形檔案以非常小資料量儲存,可以在同一個檔案中儲存多幅影像從而實現動畫效果。知道 GIF 中的影像使用什麼方法壓縮的嗎?LZW! 原來如此啊。GIF 大概是使用通用壓縮技術壓縮影像資訊的最成功的例子,當然,GIF 檔案中除了經過 LZW 壓縮的畫素資訊以外,還儲存有影像的各種屬性資訊以及影像所使用的調色盤資訊等。GIF 精確地保留了原始影像的每一個畫素資訊,是無損影像壓縮的代表。
根據媒體特性量身定製的壓縮方法中,行程編碼(RLE: Run-Length Encoding)是最為簡單、最容易被想到的一種。大多數計算機中產生的影像(和現實世界的影像例如照片不同)都具有著大面積重複的顏色塊,為什麼非要用無數個完全相同的顏色值來表示某塊影像呢?我們完全可以用一個顏色值加一個重複次數來表示這一塊影像,冗餘度由此減小了,這就是 RLE 方法的基本思路。顯然,它不適於用來壓縮照片、聲音等很少連續重複資訊的資料。RLE 方法最有代表性的實現有 PCX 和 Targa 圖形格式。
如果分別考察的話,只有黑白兩種顏色的二值影像以及只有 256 級灰度變化的影像具有一些獨特的地方,可以被壓縮演算法加以利用。我們知道,傳真影像是一種典型的二值影像。國際電報電話諮詢委員會( CCITT )為此建立了一系列的壓縮標準,專門用於壓縮傳遞二值影像(可以是無損的或有損的)。對於灰度影像,除了著名的 JPEG 標準以外,後文將要介紹的一種叫 FELICS 的演算法可以實現效果非常好的無失真壓縮。
70 年代末 80 年代初,人們逐漸意識到,對到多數灰度或是彩色影像乃至聲音檔案,沒有必要忠實地保留其所有資訊,在允許一定的精度損失的情況下,可以實現更為有效的壓縮方法。到 80 年代末,許多人已經在這一領域取得了不小的收穫,設計出了一批在壓縮效果上讓人驚訝不已的聲音和影像壓縮演算法。在此基礎上,國際標準化組織( ISO )和 CCITT 聯合組成了兩個委員會。委員會的名字我們大概都已經非常熟悉了:靜態影像聯合專家小組( JPEG )和動態影像聯合專家小組( MPEG )。JPEG 的壓縮目標是靜止影像(灰度的和彩色的),MPEG 的目標則是聲音和影片。但他們的基本思路是完全一樣的,即保留媒體資訊中最有規律、最能體現資訊主要特徵的資料,而略去其他不重要的資料。他們都取得了令人讚歎的成就。
你剛看完 嗎?那麼你剛剛享用過他們為我們帶來的樂趣了。知道普通 VCD 每一幀有多少彩色畫素嗎?知道每秒鐘多少幀嗎?知道的話,算一算一部 100 分鐘的電影不壓縮的話需要多少空間。每張光碟的容量是 640M,那麼,不壓縮的電影需要多少張光碟來存放呢?你該知道 JPEG 或是 MPEG 的厲害了吧。
最後,必須簡單地提到與影像壓縮領域相關的電子出版印刷領域中的一種叫做 PostScript 的東西。PostScript是作為電子印刷業的標準頁面描述語言被設計出來的,它起源於 1976 年的 Evans & Sutherland 計算機公司,當時的名字是 Design System。1978 年,John Warnock 和 Martin Newel 將其演變為 JAM 語言。1982 年,John Warnock 和 Chuck Geschke 建立了著名的 Adobe System 公司,並第三次設計和實現了這個語言,並將其稱為 PostScript。
PostScript 的主要思路是儲存和傳輸預先定義的命令來“畫”出影像,而不是儲存和傳輸影像的每一個畫素,這特別適用於在鐳射印表機上的輸出。採用類似“從(10, 10)到(100, 100)畫一條紅色直線”或是“在(50,50)以 40 為半徑畫一個藍色的圓”之類的命令儲存影像顯然比直接儲存每個畫素節省了不少地方。所以,從壓縮技術的角度來看,PostScript 也可以算是壓縮方法的一種。根據類似的原理, 中的 WMF 格式、HP 的 HPGL 語言、AutoCAD 中使用的 DXF 格式等等,都可以對某種特定的影像進行有效的壓縮。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-958767/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 無損資料壓縮演算法的歷史演算法
- oracle 靜態歷史資料的壓縮分離Oracle
- 資料壓縮的歷史、原理及常用演算法演算法
- Delphi資料壓縮處理(1) (轉)
- Delphi資料壓縮處理(2) (轉)
- Oracle資料壓縮Oracle
- 簡單的zip壓縮和解壓縮
- Oracle壓縮黑科技(二)—壓縮資料的修改Oracle
- Teradata資料壓縮
- 時間序列資料壓縮演算法簡述演算法
- 資料夾不壓縮怎麼加密設定密碼 不壓縮加密最簡單辦法加密密碼
- linux壓縮(解壓縮)命令詳解-轉Linux
- 利用Java實現zip壓縮/解壓縮 (轉)Java
- Linux下壓縮,解壓縮RAR包(轉)Linux
- 解包 bzip2 壓縮的壓縮文件(轉)
- linux 下壓縮與解壓資料夾Linux
- Java實現壓縮資料夾Java
- 資料庫壓縮技術探索資料庫
- 利用 canvas 實現資料壓縮Canvas
- 怎麼把資料夾壓縮成壓縮包發給微信好友
- 11g 資料庫rman壓縮備份壓縮率測試資料庫
- IBM收購實時資料壓縮廠商Storwize(轉)IBM
- VB環境下壓縮資料流播放技術(1) (轉)
- VB環境下壓縮資料流播放技術(2) (轉)
- 給Tomcat,Apache配置gzip壓縮(HTTP壓縮)功能 (轉)TomcatApacheHTTP
- Linux下常用壓縮格式的壓縮與解壓方法---轉載Linux
- 影片壓縮技術簡介
- 0910 – iPaste 搞定資料壓縮AST
- 序列化資料傳輸壓縮
- Windows的壓縮資料夾(zip/cab)Windows
- 在ASP中壓縮ACCESS資料庫資料庫
- oracle 靜態資料壓縮分離Oracle
- Hadoop(十九)MapReduce OutputFormat 資料壓縮HadoopORM
- 超級簡單的資料壓縮演算法—LZW演算法演算法
- java 壓縮(解壓)檔案或者資料夾工具類Java
- 壓縮資料以節省空間和提高速度(轉)
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- unix和linux下常用壓縮格式的壓縮與解壓方法(轉)Linux