压缩算法——谷歌Webp

WebP适用场景

WebP是一种现代的图像格式,为网络上的图像提供优异的无损和有损压缩。使用WebP,网站管理员和网络开发人员可以创建更小,更丰富的图像,使网络更快。

WebP无损图像的大小比PNG 小26%。WebP有损图像比同等SSIM质量指数下的可比JPEG图像 小25-34%。WebP lossyimages are 25-34% smaller than comparable JPEG images at equivalent SSIMquality index.

在Google,我们一直在探索如何加快网页加载速度。一种方式是通过使web图像更小。图像在大多数网页上占据高达 60%-65%的字节,页面大小是总绘制时间的主要因素。页面大小对移动设备尤其重要,其中较小的图像可节省带宽和电池寿命。

WebP是由Google开发的一种新的图像格式,支持Chrome,Opera和Android,经过优化,可以在网络上实现更快,更小的图像。与同等视觉质量的PNG和JPEG图像相比,WebP图像的大小要小30%左右。此外,WebP图像格式还具有与其他格式的功能奇偶校验。它支持:

  • 有损压缩:有损压缩基于 VP8关键帧编码。VP8是由On2Technologies作为VP6和VP7格式的后续产品创建的视频压缩格式。
  • 无损压缩:无损压缩格式由WebP团队开发。
  • 透明度: 8位Alpha通道对于图形图像非常有用。Alpha通道可与有损RGB一起使用,这是目前无法与任何其他格式一起使用的功能。
  • 动画:它支持真彩色动画图像。
  • 元数据:它可能有EXIF和XMP元数据(例如摄像机使用)。
  • 颜色配置文件:它可能有一个嵌入的ICC配置文件。

由于更好的压缩图像和支持所有这些功能,WebP可以很好地替代大多数图像格式:PNG,JPEG或GIF。

 

WebP如何工作

有损WebP压缩使用预测编码来编码图像,VP8视频编解码器使用相同的方法来压缩视频中的关键帧。预测编码使用相邻像素块中的值来预测块中的值,然后仅对差异进行编码。 

什么是 WebP?

WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45%的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28%的文件大小。

PNG 转 WebP 的压缩率要高于 PNG 原图压缩率,同样支持有损与无损压缩

转换后的 WebP 体积大幅减少,图片质量也得到保障(同时肉眼几乎无法看出差异)

转换后的 WebP 支持 Alpha 透明和 24-bit 颜色数,不存在 PNG8 色彩不够丰富和在浏览器中可能会出现毛边的问题

WebP 的优势体现在它具有更优的图像数据压缩算法,能带来更小的图片体积,而且拥有肉眼识别无差异的图像质量;同时具备了无损和有损的压缩模式、Alpha 透明以及动画的特性,在 JPEG 和 PNG 上的转化效果都非常优秀、稳定和统一。

WebP始于视频。WebP的诞生有些巧合。谷歌最初开发一种称作WebM的视频格式,这种格式是基于其VP8视频解码器。

但Facebook发现,用户不仅在网站中浏览好友的照片,而且下载照片,然后通过电子邮件分享照片,有的用户甚至还打印照片。部分Facebook用户就发现,自己常用的应用无法打开.webp格式文件。Facebook不得不再次提供JPEG文件,谷歌迅速作出回应,让桌面版Chrome成为WebP文件的默认浏览器。

WebP还会增加服务器的负担。相较编码JPEG文件,编码同样质量的WebP文件需要占用更多的计算资源。

Webp CompressionTechniques

有损WebP基于VP8视频编码中的预测编码方法来压缩图像数据,其基本步骤类似于JPEG压缩,主要包含格式转换、分割子块、预测编码、FDCT、量化、Z排列、熵编码,流程如下图所示,红色代表与JPEG不同的部分。


编码原理图

1) 格式转换

若压缩前图像数据为RGB格式,则需先进行格式转换成YUV格式,Y表示亮度分量,UV表示色度分量。之所以转换成YUV格式是因为人类视觉对亮度远比色度敏感,所以可通过适当减少色度数据的存储来节省数据占用的空间,但却不会对视觉效果造成太大影响,如可每两个或四个相邻的像素点才保存一对UV值。

2) 分割宏块

接下来将数据分割成一个个8x8或16x16的宏块。

3)  预测编码

预测编码与VP8帧内预测相同。VP8的帧内预测基本上是从H.264标准照搬过来的:子块(subblock)预测模式基本上和H.264的i4×4模式完全一致;并且,整块预测模式和i16×16模式一致。色度的预测模式从经验上说也和H.264一样。H.264 High profile中定义的i8×8模式没有出现在VP8中。另一个区别在于H.264的平面预测模式在VP8中被替换成了TM_PRED,这是一个非常含糊的近似模拟。就特定的预测模式而言,VP8和H.264有细微的差别,但是他们都和H.264有着一样的名字。

VP8帧内预测模式与三种类型的宏块一起使用:

4x4 luma

16x16 luma

8x8色度

宏块里每个4x4的子块都有一个预测模型。(又名过滤)。在PNG里过滤用得非常多,它对每一行都做同样的事,而WebP过滤的是每一块。它是这样处理的,在一个块周围定义两组像素:有一行在它上面为A,在它左边那一列为L。


利用A和L,编码器会将它们放在一个4x4的测试像素块填满,并确定哪一个生成了最接近原始块的值。这些用不同方法填满的块叫做"预测块"。

这些宏块共享四个常见的帧内预测模式:


H_PRED(水平预测)。用左列L的副本填充块的每一列。

V_PRED(垂直预测)。用上面行A的副本填充块的每一行。

DC_PRED(DC预测)。使用A上方行中的像素的平均值和L左边的列填充块,使用单个值。

TM_PRED(TrueMotion预测)。一种从On2Technologies开发的压缩技术获得其名称的模式。除了行A和列L之外,TM_PRED使用块上方和左侧的像素P. A中的像素之间的水平差(从P开始)使用从L到L的像素来传播,以开始每一行。

对于4×4亮度块,存在类似于V_PRED和H_PRED的六个额外帧内模式,但对应于在不同方向上预测像素。

如上所述,TM_PRED模式对于VP8是唯一的。下图使用示例4x4像素块来说明TM_PRED模式的工作原理:

 

其中C,A s和L s表示来自先前编码块的重建像素值,并且X 00至X 33表示当前块的预测值。TM_PRED使用以下等式来计算X ij:

X ij = L i + A j-C(i,j = 0,1,2,3)

虽然上述示例使用4x4块,但是8x8和16x16块的TM_PRED模式以相同的方式工作。

TM_PRED是VP8中更频繁使用的帧内预测模式之一,并且对于公共视频序列,其通常被帧内编码的所有块的20%至45%使用。总体上,与其它帧内预测模式一起,TM_PRED帮助VP8实现非常好的压缩效率,特别是对于只能使用帧内模式(关键帧本身不能参考先前编码的帧)的关键帧。

4) FDCT

FDCT(Forward Discrete Cosine Transform,正向离散余弦变换)是将一组空间域的像素点转变成频域中的系数,对每个宏块执行FDCT,使得变换后数据的低频部分分布在数据块的左上方,高频部分集中在右下方,其中左上角第一个系数称为直流系数,其他均为交流系数。

5) 量化

量化是压缩中损失数据的主要步骤,它主要原理是把经过DCT变换后的宏块中每个数值除以量化表中对应的系数并取整。其中量化表中高频部分对应的系数比低频部分系数要大得 多,则在经过量化后,高频部分的频率系数被大大衰减甚至许多被清零,而低频部分的频率系数则较好地被保留。由于人眼对低频部分更敏感,所以经过量化后再还原成图像对视觉效果影响较小,但数据得到有效的压缩。量化的最终目的是减少低频部分非零系数的幅值并增加高频部分零值系数的数量。

6) Z排列

为更便于后续的编码,需在编码前对数据块进行重新的排列,使得低频部分的数据排在前面,高频部分的数据排在后面,以增加数组中连续零值的数量,所以采用一种Z字型的排列方式。

7) DPCM

可用DPCM(DifferentialPulse Code Modulation,差分脉冲编码调制)对直流系数进行编码。由于直流系数的数值较大,且相邻数据块的直流系数相差不大,所以可使用DPCM对相邻数据块间量化后的直流系数差值进行编码,从而提高压缩比。 

8) 行程编码

行程编码是一种根据相同数据重复多次的情况简化表示的算法,例如1111222222333按照行程编码表示为(1,4)(2,6)(3,3)。由于量化后的交流系数中包含较多连续零值系数,因此可用行程编码对它们进行编码来有效压缩数据长度。

9) 熵编码

熵编码是一种无损数据压缩编码方式,WebP中采用布尔算术编码作为熵编码方式。和其它熵编码方法不同的地方在于,其他的熵编码方法通常是把输入的消息分割为符号,然后对每个符号进行编码,而算术编码是直接把整个输入的消息编码为一个数,一个满足(0.0 ≤ n < 1.0)的小数n。消息越长,编码表示它的间隔就越小,表示这一间隔所需的二进制位就越多。

 

其他:

1.    自适应块量化

为了提高图像的质量,将图像分割成具有明显相似特征的区域。对于这些段中的每一个,独立地调整压缩参数(量化步长,滤波强度等)。这通过将位重新分配到它们最有用的位置来产生有效的压缩。VP8允许最多四个段(VP8比特流的限制)。

2.    环路滤波用于消除由来自块变换的DCT系数的量化引入的块效应

 

为什么WebP(有损)比JPEG更好

预测编码是WebP胜过JPEG的主要原因。块自适应量化也有很大的区别。过滤有助于中/低位速率。与霍夫曼编码相比,布尔算术编码提供5%-10%的压缩增益。

 

无损WebP

WebP无损编码基于使用几种不同技术变换图像。然后,对变换参数和变换后的图像数据执行熵编码。应用于图像的变换包括像素的空间预测,颜色空间变换,使用局部出现的调色板,将多个像素打包到一个像素中,以及α替换。对于熵编码,我们使用LZ77-Huffman编码的变体,其使用距离值和紧凑稀疏值的2D编码。

WebP 格式:WebP容器规范_WebP _ Google开发人员.htm

参考Link:

https://developers.google.com/speed/webp/docs/compression

https://zhuanlan.zhihu.com/p/23648251

http://www.jianshu.com/p/555859783f63 webp的工作原理

http://blog.csdn.net/zhangcanyan/article/details/51842211

http://www.tuicool.com/articles/FFZ73y

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值