2017-02-03 134 views
1

WebP技术既用于有损图像压缩技术,也用于无损图像压缩,其压缩图像比“JPEG”更多,我正在研究图像压缩技术。所以如果任何人能够为我提供清晰的WebP图像压缩算法,那对我来说就是帮助。使用WebP技术的图像压缩

+0

https://medium.com/@duhroach/how-webp-works-lossly-mode-33bd2b1d0670#.26c74n6re – saurabheights

+0

我也建议你从官方存储库下载的所有JPEG,PNG,WEBP代码。 Mozjpeg也是这样,你做这件事越早,它就会越有利。 – saurabheights

+0

谢谢你的建议@saurabheights –

回答

2

好吧,提供整个有损和无损压缩算法,包括全部细节的所有变种,在这个论坛上超出了单个答案。 Google提供免费的lossylossless比特流规范。但后者相当不完整,不准确,部分甚至是错误的。根据这个规范你将很难实现一个编解码器,而且研究一些源代码也是不可或缺的。

在这里我可以给你至少有一些关于无损格式的细节:

  • 像PNG,它使用ZIP deflate压缩算法,WebP的使用霍夫曼编码的所有图像信息,太。实际上,WebP的许多压缩增益源于巧妙地采用霍夫曼编码。许多细节显然是从DEFLATE借用的,即将代码大小限制为15位,并且用又一个霍夫曼代码编码哈夫曼字母,这与DEFLATE使用的几乎相同。
  • 通过LZ77滑动窗口压缩和一个大小为2..2048的可选颜色缓存(包括最近使用的颜色)实现了额外的压缩。编码器可以自由决定使用哪一个。两者都可以混合使用。不过,我在测试中发现,这可能会对压缩比造成不利影响。摄影图像通常使用大颜色缓存进行压缩,使用缓存时,通常最好对缓存中不存在的像素始终使用文字ARGB编码,而不是使用LZ77反向引用。
  • 尽管使用LZ77压缩与DEFLATE几乎相同,但Google的规范不是基于字节,而是基于像素。也就是说,ARGB四倍频是压缩的,而不是单独的A-R-G-B字节。此外,WebP允许反向参考长度高达4096像素,参考距离高达1048576 - 120像素,这远远超出了DEFLATE限制。另一个好处是通过对ARGB频道使用单独的霍夫曼字母来获得。
  • 与PNG类似,WebP LZ77压缩具有RLE(游程长度编码)功能,该功能是在参考长度超过参考距离时巧妙处理特殊情况的结果。在这种情况下,可用字节会一遍又一遍地被复制,直到达到指定的长度。我发现使用此功能可以为具有相同颜色的长时间运行的“人造”图像产生很好的压缩效果。然而,它与颜色缓存相冲突,这会为这些运行生成相当高效的霍夫曼代码。基于我的初步测试,颜色缓存胜过RLE功能。
  • 与PNG类似,WebP在原始ARGB数据上表现不佳。因此,在压缩开始之前,这两种格式都允许在像素数据上应用各种变换。这些变换真的很好地减少了像素流的方差,并且解决了大量的压缩比。 WebP定义了13个标准预测变换,而PNG只有4个。然而,我发现大多数预测变量的增益并不高,而且我通常使用“选择”滤波器,它选择左边的像素或以上,哪一个看起来更适合作为预测。和PNG一样,简单的过滤器通常比复杂的过滤器好。
  • 除了预测变换,WebP提供了一些其他变换,其中我只尝试过“减去绿色”,它试图通过从R和B中为每个像素减去G来去相关RGB通道。事实上,我观察到一些好处,当应用于预测后。如果之前应用,可能会对照片图像产生负面影响。
  • WebP对比特流使用5个独立的霍夫曼代码:一个用于绿色通道,LZ77长度代码和颜色缓存索引,一个用于红色通道,一个用于蓝色通道,一个用于alpha通道,另一个用于alpha通道对于LZ77距离代码。这是一个聪明的设计,因为ARGB频道中的信息可能是完全不相关的,所以将它们合并为单个字母表可能不太理想。

WebP无损提供了一个广泛的选项,可以结合和调整到最大。但在我看来,大部分组合都不值得进行测试。根据我的观察,压缩通常具有以下默认值:

  • 使用“选择”预测器。
  • 应用“减去绿色”转换。
  • 使用具有2048个插槽的颜色缓存。
  • 如果当前像素不在缓存中,请将其编码为文字。