常用的無損壓縮演算法有:1、LZ77演算法,該演算法是許多其他無損壓縮演算法的基礎;2、LZR演算法,是旨在提升LZ77的演算法;3、LZSS演算法,該演算法目標是成為LZ77的線性時間替換演算法;4、DEFLATE演算法;5、LZMA演算法等等。
資料壓縮是保留相同或絕大部分資料前提下減少檔案大小的過程。它的原理是消除不必要的數據或以更有效率的格式重新組織數據。在進行資料壓縮時,你可以選擇使用有損方法或無損方法。有損方法會永久性地擦除一些數據,而無損方法則能保證持有全部的數據。使用哪一類方法取決於你要讓你的文件保持多大的精確度。
本文會為你介紹6種不同的無損資料壓縮演算法,以及4種基於深度學習的影像/視訊壓縮演算法。
6款無損資料壓縮演算法
無損壓縮演算法通常被用於歸檔或其他高保真目的。這些演算法能夠讓你在確保檔案可被完整恢復的同時減少檔案大小。有很多種無損壓縮演算法供你選擇。以下介紹6種常用的演算法:
1. LZ77
LZ77演算法發佈於1977年。作為許多其他無損壓縮演算法的基礎,它使用了「滑動視窗」的概念。在這個概念中,LZ77管理了一個字典。這個字典使用三元組的方式:
偏移(Offset):短語起始處於檔案開頭之間的距離
行程長度(Run length):組成短語的字元數
偏離字元:表示新短語的標記符,匹配結束後,前向緩衝區中的第一個符號
當檔案被解析時,字典會被即時更新以反映最新的壓縮資料和大小。舉個例子,如果一個檔案包含字串"abbadabba",那麼被壓縮到字典中的項就是"abb(0,1,'d')(0,3,'a')"。你可以看下表的拆解過程:
這個例子中,被壓縮後的資料並不比初始資料小多少。但一般情況下,當檔案很長時,這種壓縮效果就會顯現出來。
2. LZR
LZR由Michael Rodeh於1981年提出,它是在LZ77的基礎上發展而來。這個演算法目標是成為LZ77的一個線性時間替換演算法,但編碼後Udell指標可能指向檔案的任意偏移量,意味著需要耗費可觀的內存,因此表現不如LZ77。
3. LZSS
LZSS,全名為Lempel-Ziv-Storer-Szymanski,於1982年提出。它也是旨在提升LZ77的演算法。它引入了一個方法能夠檢測是否真的減少了檔案大小。如果未能起到壓縮效果,就保持原來的輸入格式。 LZSS也移除了偏離字元的使用,只使用對。這個壓縮演算法廣泛用於歸檔格式,如RAR以及網路資料的壓縮。
4. DEFLATE
DEFLATE演算法於1993年提出。作者是Phil Katz。該演算法結合了LZ77或LZSS預處理器與霍夫曼編碼。霍夫曼編碼是1952年提出的訴法。它是一種熵編碼,主要基於字元出現頻度分配編碼。
5. LZMA
LZMA演算法,全名為Lempel-Ziv Markov chain Algorithm(LZMA),於1998年提出,是LZ77的改良版,旨在實現.7z格式的7- ZIp檔案歸檔。它使用鍊式壓縮方法,在位元而非位元組層級上應用修改後的LZ77演算法。此壓縮演算法的輸出稍後會被算數編碼處理以便後續進一步壓縮。根據具體的實現不同,可能會引入其他的壓縮步驟。
6. LZMA2
LZMA2演算法於2009年提出,是LZMA的改良版。它提升了LZMA在多執行緒能力上的效能以及提升了處理不可壓縮型別資料的表現。
4種基於深度學習的圖像/視訊壓縮演算法
除了上面介紹的靜態壓縮演算法,還有基於深度學習的壓縮演算法可供選擇。
1. 基於多層感知機的壓縮演算法
多層感知機(Multi-Layer Perceptron,MLP)技術使用多層神經元來獲取、處理以及輸出資料。它能夠被應用到資料降維任務和資料壓縮。首個基於MLP的演算法於1988年被提出,目前已被應用到:
二進位編碼-標準的雙符號編碼
量化-限制從連續集到離散集的輸入
特定領域內的轉換-像素級的資料變更
MLP演算法利用分解神經網路上一步的輸出來確定最佳的二進位碼組合。後面,使用預測技術來優化這個方法。預測技術能夠透過反向傳播基於相鄰數據來提升數據準確度。
2. DeepCoder -- 基於視訊壓縮的深度神經網路
DeepCoder是一個基於卷積神經網路(CNN)的框架,它是傳統視訊壓縮技術的替代品。此模型為預測訊號和殘留訊號使用單獨的CNN。它使用標量量化技術和一個傳統的文件壓縮演算法——霍夫曼編碼——將編碼特徵映射到一個二進位流。一般認為,此模型的性能要優於著名的H.264/AVC視訊編碼規格。
3. 基於CNN的壓縮演算法
CNN是分層的神經網絡,通常用於影像辨識和特徵檢測。當應用到壓縮時,這些神經網路使用卷積操作來計算相鄰像素點之間的相關性。 CNN展示出了比基於MLP演算法更好的壓縮結果,提升了超解析度下的效能以及減少了偽影。另外,基於CNN的壓縮也提升了JPEG影像的品質,因為它減少了峰值訊號雜訊比(PSNR)和結構相似性(SSIM)。基於CNN的壓縮透過使用熵估計法也實現了HEVC的性能。
4. 基於生成式對抗網路(GAN)的壓縮演算法
GAN屬於神經網路的一種,它使用兩個神經網路彼此競爭的方式來產生更精確的分析和預測。最早基於GAN的壓縮演算法於2017年被提出。這些演算法的檔案壓縮比例是其他常見方法(如JPEG、WebP等)的2.5倍。你可以使用基於GAN的方法透過並行化處理來實現即時壓縮。主要的原理是基於最相關的特徵來壓縮圖片。當解碼的時候,演算法基於這些特徵來重建影像。和基於CNN演算法相比,基於GAN的壓縮演算法透過消除對抗損失能夠產生更高品質的影像。
總結
壓縮演算法能夠幫助你最佳化檔案大小。不同的演算法有不同的結果。本文簡述了6種靜態的無損壓縮演算法以及4種基於深度學習的壓縮演算法。當然,如果這些演算法都不適用於你的場景,你可以查看這篇文章來尋找適合你場景的演算法。演算法很多,總有一款適合你!
以上是常用的無損壓縮演算法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!