望昕宇,腾讯后台工程师,专一图片压缩及存储系统一百年不动摇,并致力于作一名相关前沿技术的人话翻译家。算法
这两天笔者的朋友圈被Google开源JPEG编码器Guetzli刷屏,“图片大小减少35%”、“质量不变”这样的字眼刺激了咱们的肾上腺,OMG的yajunwang同窗也为咱们带来了第一手的测试资料——谷歌开源图片压缩算法Guetzli实测体验报告。框架
若是这样的神器真的如此神,那还有WebP啥事儿呢。因而咱们抱着强烈的好奇心实地考察了这个连名字都不知道怎么念的新鲜事物。工具
结论是:测试
在基于相同客观质量(以ssim为评价标准)的条件下观察主观视觉效果,Guetzli的优点是有效改善了传统JPEG在低质量条件下“振铃效应”产生的伪影;劣势是Guetzli编码出的图片在质量较低时(quality=70)有必定的“钝化效应”,对于图片中细节精细的部分,Guetzli丢掉了较多的信息。优化
一样基于相同客观质量条件下(并不以填的quality参数为标准,为何不以它为标准参见“原理解析”小节)图片大小与传统jpg相比并没有明显优点。400300组Guetzli大概比传统jpg的编码结果减少了19%,800600组Guetzli和传统jpg基本持平,1920*1080组Guetzli反而大出了10%。google
延时方面,Guetzli编码器对于主流的非高清图规格(如400300, 800600)的处理延时在秒级或10+秒级,业务主流jpg压缩工具对于相同规格的处理延时均在50ms之内编码
Guetzli基于一样来源于google的图片视觉差别评价工具Butteraugli。Butteraugli的评价体系基于三个传统方法没有考虑的原则:翻译
人眼对强黄色光附近蓝光变化是不敏感的,所以黄光区域附近的蓝光能够用更少的bit来编码code
人眼对蓝光有着较低的空间分辨率,视网膜中用于分辨高清细节的区域没有蓝色光的受体,故高频区域的蓝色光部分能够用更粗的粒度编码。视频
将图像中的噪声区域分辨出来进行粗粒度的编码。
基于这三点,Guetzli主要从两方面下手来进行:
对全局量化表进行微调,这一步和咱们调整质量参数本质上是同样的
对DCT系数的高频部分进行有选择的丢弃。
第二步就比较tricky了。一般在咱们使用例如libjpeg等工具压缩jpg图片时下降质量参数本质上就是在量化步骤按照必定规则丢弃高频信息,最终反映在jpg的quality中。Guetzli至关于绕开了制定好的量化规则下降了质量并且不告诉用户,让用户觉得仍然保持了质量(怎么感受google也有了一点流氓气质呢,2333)。因此在后续测试中咱们发现,**在相同ssim条件下,传统jpg的质量参数能够比Guetzli编码出来的jpg低大约20个点。**缘由主要就在这里。
Guetzli总的处理流程是尝试多种量化表及DCT系数两个方面的可能性,而后分别将尝试的结果放到Butteraugli评测工具中评分,最后选择一张它认为最好的结果返回给用户。因此它的处理时延特别长。用verbose参数打开Guetzli的log能够发现,平均一张图大概它将尝试接近30次的迭代。
分别选取400300, 800600, 19201080三种分辨率的jpg格式图片各10张(原本还选取了40323024的iPhone照片分辨率图片作测试,可是因为时间有限,这部分待后续进行)。三种分辨率的图片在选取的过程当中综合考虑主色调的不一样、明暗灰度的不一样、场景的不一样(人工合成的图片仍是天然风景照)以考察该编码是否尽量多的适用于不一样场景。
该编码器有quality参数能够指定,注释掉对于quality必须大于84部分的代码以后能够设置0-100任意值,通过第一轮初步测试发现,quality<70
如下的时候其实编码出的图片已经没有变化(为何还须要进一步研究),故实际选取 quality 70, 75, 80, 85, 90为测试对象。从编码时延、同psnr(ssim)指标下图片size的对比以及视觉效果还有内存消耗四个方面进行评估。
C1机型:Intel Xeon CPU E3-1230 V2 3.30GHz
测试工具:ImageMagick、Guetzli编码器、evalvid视频质量评价工具集
检测方法是首先分别用ImageMagick和Guetzli分别用40-90的quality参数进行从新解码和编码,而后对每一个质量的结果图与原图分别解码成yuv源数据格式,最后用evalvid视频质量评测工具集中的psnr工具进行ssim评测,框架图可表示为:
当咱们设定了以ssim1=ssim2为标准时候反过来再观察两种编码工具各自设定的quality值。通过统计发现,传统jpg的质量比Guetzli的质量平均大约小21。举个例子也就是说,传统jpg的50质量和Guetzli编码器的70质量在客观质量评价体系当中是等价的。
同ssim下图片大小对比:
Guetzli编码器本质上弱化了quality参数在编码流程中的做用,能够比喻为jpg编码界的“小米”,其效果相似于增强版的七牛图片“瘦身”功能。
所以对于图片细节要求不高且对图片质量不甚了解的用户或者当面对一个业务由于须要节省流量同时又不但愿图片质量受太大影响而对质量参数选择困难时,Guetzli是一个不错的入门选择。从流程方面看,屡次的迭代以及新的评价工具的加入是延时过长的主要缘由,也许利用GPU并行化会是一个不错的优化方向。
相关推荐:
谷歌开源图片压缩算法Guetzli实测体验报告 图片流量节省大杀器:基于CDN的sharpP自适应图片技术实践 【腾讯云的1001种玩法】 Laravel 整合万向优图图片管理能力,打造高效图片处理服务