Google开源的可将JPEG文件缩小35%的算法名为Guetzli。其技术详解如下:
1. 色彩空间转换:
该算法首先进行色彩空间转换,将图像从RGB模式转换成YCbCr模式。这是因为人眼对亮度的变化远敏感于色度变化,将亮度和色度分离开后,便于后续针对不同的部分进行不同程度的处理。在这个转换过程中,由于转换前后都是整数,不可避免会产生舍入误差,但这种误差在一定范围内是可接受的。
2. 基于视觉模型的量化处理:
Guetzli利用一种新的视觉模型(被称为Butteraugli)来确定应该保留和丢弃哪些颜色和细节。该模型基于人类的视觉处理系统,与传统的JPEG压缩算法相比,它能够以更全面和细致的方式完成色彩感知和视觉遮蔽的模拟。在量化过程中,不是简单地寻找最小的误差,而是试图找到一个平衡点,使得压缩后的图像在人的视觉系统中看起来与原图无异。量化时使用自定义的量化表,根据视觉模型对不同频率的系数进行更精确的量化操作,相较于传统方法能更有效地减少数据量,同时最大程度地保留视觉上重要的信息。
3. 优化编码策略:
在编码过程中,Guetzli采用了时间复杂度较高的优化策略,花费更多的时间来寻找最佳的压缩方案。虽然这会导致编码时间增加,但能够在质量和文件大小之间取得更好的平衡,最终生成更小尺寸且视觉质量相近的JPEG图片。
4. 无损压缩的改进:
在完成量化等有损压缩步骤后,Guetzli还会进行无损压缩。这一步骤主要是采用哈夫曼编码等技术对数据进行进一步的压缩处理,减少冗余信息,以达到更小的文件尺寸。
不过,Guetzli算法的一个主要缺点是编码速度较慢,与现有的一些快速JPEG编码器相比,它需要花费更多的时间来处理图像。但对于对图片质量和文件大小有较高要求,且对编码时间不太敏感的场景,Guetzli仍然是一个非常有效的工具。