数据压缩是保留相同或绝大部分数据前提下减小文件大小的过程。它的原理是消除不必要的数据或以更高效的格式重新组织数据。在进行数据压缩时,你可以选择使用有损方法或无损方法。有损方法会永久性地擦除掉一些数据,而无损方法则能保证持有全部的数据。使用哪类方法取决于你要让你的文件保持多大的精准度。
本文会为你介绍6种不同的无损数据压缩算法,以及4种基于深度学习的图像/视频压缩算法。
六款无损数据压缩算法
无损压缩算法通常被用于归档或其他高保真目的。这些算法能够让你在确保文件可被完整恢复的同时减少文件大小。有很多种无损压缩算法供你选择。下面介绍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在多线程能力上的性能以及提升了处理不可压缩类型数据的表现。
四种基于深度学习的图像/视频压缩算法
除了上面介绍的静态压缩算法,还有基于深度学习的压缩算法可供选择。
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种基于深度学习的压缩算法。当然,如果这些算法都不适用于你的场景,你可以查看这篇文章来寻找适合你场景的算法。算法有很多,总有一款适合你!
如何制作一个简易的手摇发电机模型?
火狐量子版浏览器发布,快速闪电秒杀Google Chrome
信步科技SV1-H611A-B嵌入式主板优势介绍
自连“ALR Connected”新技术发布!实现低功耗远距离无线通信
NGOF云打造“一行业一网络”甚至“一场景一网络”优质专线部署结构?
基于深度学习的图像/视频压缩算法
固擎蓝牙耳机应用场景有哪些?
三星S8屏幕面板曝光,诺基亚6一分钟销量破百万
TI推出业界首款 100 V 高压侧 FET 驱动器 可驱动高电压电池
投射电容式触摸屏的结构
智能功率模块(IPM)为工业设备提供卓越保护
路由器需要升级吗
简析建筑安防系统演变和新时代解决方案
自然语言入门之ESIM
针对一字型悬臂梁RF MEMS开关的两种降低驱动电压RF MEMS开关方法
铠装热电偶
PICO音频变压器圆形封装系列规格参数介绍
为拿下欧洲5G,“华为”放大招
红外遥控系统的设计方案介绍
华为荣耀8技能太多?但这些你未必用过