数据压缩 需求来源:
1,初期电脑,存储设备价格高,导致大家使用的存储空间小。
2,数据在互联网的传输,开始时互联网带宽小。
3,减少数据获取时间。例如MRI。获取少量像素,即可恢复完整图像。
数据压缩的思想
减少重复的数据,从而减小文件尺寸。
数据压缩起源于 40 年代由 Claude Shannon 首创的信息论,而且其基本原理,信息究竟能被压缩到多小。
压缩的核心是算法 (压缩 = 算法 + 编码)
压缩算法的里程碑式算法
1977年Abraham Lempel 和 Jacob Ziv发表了他们独创性的LZ77算法,第一个使用字典来压缩数据的算法。特别的,LZ77使用了一个叫做slidingwindow的动态字典。1778年,这对搭档发表了同样使用字典的LZ78算法。
不同的数据,适用于不同的压缩算法
But different kinds of data will have different compressibility: already compressed files will not compress much if at all. MPEG and AVI files are usually compressed so they will benefit little from 7zip.
数据压缩在linux内核中的应用
linux内核,也使用压缩。boot程序,解压linux内核后到内存后,再跳转到linux内核代码。
数据压缩 - 分为有损压缩,和无损压缩
无损压缩可以分成三个layer,预处理,建模,和编码
预处理层主要是delta filter和各种ad-hoc的预处理器
建模层包括几个大类,lz系列(lz77,lzw,lzma,lzo,deflate的前半段),ppm系列(ppmd,ppmz),cm(上下文建模,神经网络驱动的paq系列etc)系列,还有个特殊的bwt(BWT(Burrows-Wheeler transform,伯罗斯 – 惠勒变换))
编码层常用的有huffman,算术/区间编码,rle,ans
Lempel-Ziv(LZ)压缩方法是最流行的无损存储算法之一。DEFLATE是 LZ 的一个变体
gzip(也称zip或zlib)所使用的算法是开源、无专利的LZ77 (Lempel - Ziv 1977)算法的变体。
- 去掉重复数据(LZ 算法)
- 熵压缩(哈夫曼编码、算术编码)
有损方法
- 降低精度(截断或降采样)
- 图像 / 视频压缩
- 音频压缩
音频压缩
图像压缩
在很长一段时间内,莱娜图是用来测试图像压缩算法的标准测试图。
视频压缩
参考书:
数据压缩入门 Understanding Compression:Data Compression for Modern Developers
压缩算法:https://blog.csdn.net/kimylrong/article/details/39405981