首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你大爷永远是你大爷!JPEG 凭什么经久不衰?| 图文

1992 年的那个夏天,一位跟您一样的绅士在黑暗的房间里死死盯着电脑。一旁的调制解调器疯狂闪烁,竭尽全力让这张 720×575 像素的图片,一行一行慢加载。而这在近乎无尽的等待中,绅士几乎要疯狂了。

直到 JPEG 的出现解了燃眉之急!

1992 年,“联合图像专家组”创建了第一个国际图像压缩标准,它能在不明显降低图像质量的基础上,把图像压缩至原始大小的10%。

随着数码相机、扫描仪、互联网的发展,JPEG迅速成为应用最广泛的图像格式。直到32年后的今天,你大爷还是你大爷,没有任何其他图像格式能跟JPEG抗衡。

JPEG 凭什么称霸图像界30 多年?它究竟有多巧妙?

视频版

看完这个视频就知道了

信我,真的超级好看 

图文版

在互联网的古早时代,JPEG 是凭借强劲的压缩实力展露头角的。所以故事的开始,我们要从JPEG的压缩原理谈起。

而它的原理,可以说是妙蛙种子吃着妙脆角进了米奇妙妙屋,那叫一个妙。

在 1992 年以前,主要的图像格式都是无损格式。要把它们压小,首先要知道图像中的哪些信息可以偷偷舍弃掉。这就涉及到了两个心理视觉原理

先讲第一个:你可以看看这三张图片,哪两张看起来区别更大?显然是这两张。这是因为人眼对亮度的变化,要比对色彩的变化敏感得多

原因也很简单:人眼中有视锥、视杆细胞两种细胞,分别负责感受颜色和亮度。

负责感受颜色的视锥细胞大概有600~700万个,而负责感受亮度的视杆细胞则有1亿2500万个,所以人眼对亮度的变化非常敏感,但对色彩的变化就迟钝一些。

既然这样,那就压缩一些颜色信息呗~这就是JPEG压缩的第一步。

怎么压缩颜色呢?很简单,图片由一个个像素组成,每个像素包含红绿蓝三种元素,利用这个公式,我们可以把RGB模型转换成YCbCr 模型,其中Y表示亮度,Cb和Cr分别表示蓝色和红色的色度。

转换完后,就可以把蓝色、红色色度这两张图,每四小块合并成一大块,这样就把颜色信息压成了原来的1/4——反正人眼对颜色不敏感,所以也不会有太大影响。这就是 JPEG 对第一个视觉原理的应用。

而第二个视觉原理是:人眼擅长感受低频信号,却不擅长感受高频信号。

这是什么意思呢?低频信号,是这种指像素之间变化比较平缓的线条。比如整片的天空和岩石表面。而高频信号,是指这种像素之间变化比较剧烈的线条,比如复杂纹理。

比如你可能根本没发现,这张图片的左下角还藏着一只花豹。这就是因为你的眼睛对高频信号不敏感。

所以只要把图片中的高频信号删掉一些,就可以把图片再压小一点。

但问题是,怎么区分高频和低频信号呢?这里,就涉及到JPEG算法的精髓了。

让我们请出小李子当一下模特:如果我们只看其中一行像素的亮度值,那它的频率变化曲线是这样的,非常复杂

但所有复杂的事物,都可以还原为简单事物的集合。比如不管多复杂的图案,都可以用最基础的积木搭建出来。任何一条曲线,都可以还原为若干余弦波的叠加。这行像素的频率变化曲线也一样。利用这8条基础频率曲线,就可以把它给拼凑出来。

一行像素是一维的,但图片是二维的。那再把8条频率曲线竖着排一列,重叠的位置两两叠加,我们就得到了一张由64个基函数构成的“基图”。

关键就在这里,这“基图”中的这64个基函数,每个都相当于一块积木。任何一张图片的颜色和亮度图层,都可以用这些积木搭建出来。

比如我们可以把亮度图层中每8*8个像素划分成一个区块,然后用基函数去“量”这个区块,得到一个矩阵。矩阵中的每一个数字,就代表这张图需要用到多少块不同的积木。

这里的275.5,就代表它需要用275.5个第一种积木,59.5个第二种积木......

更妙的是,观察整个矩阵,你会发现左上角的数字远大于右下角,因为左上角的“积木”代表的是低频信号。而绝大多数图片中的主要信息,都是低频信号。而高频信号,比如你脸上的鼻孔、痘痘、皱纹,跟那张大脸比起来,只是一小部分而已。

为了进一步区分低频和高频信号,专家组还提供了一组量化矩阵。只要用处理好的亮度和色度图层分别除以量化矩阵,就能得到一大堆0,只剩下9个非0的数字

这意味着,其实只要用9种基础“积木”,就能把小李子搭的人模人样了。这能让我们大大减少图片的信息量。

而且量化矩阵里面的数字还可以根据需求变化。如果你想把图片压小,那最终得到的0越多,要用到的积木越少,但出现这种锯齿状的“伪影”的概率也就越大。

至于这些0,就是人眼比较麻木的高频信息,把它们编码打包,减少冗余,JPEG的压缩就大功告成了。

可以看出,JPEG的巧妙,在于它充分利用了人类视觉的特点,巧妙地用算法舍弃了你注意不到的信息,实现了出色的压缩效果。

但JPEG之所以始终是图像界的大爷,靠的不光是技术,还有当时拉胯的算力。比如在JPEG诞生的时候,就有比它更会压缩的算法,叫“卡洛南-洛伊变换”。但它所需要的计算量太大,远超出那个年代的计算机可实现的水平。所以排名第二的DCT算法才成为了最终的赢家。

而且毕竟是最早一代的图像压缩标准, 随着后续的改进,JPEG的孙子辈们在实力上也已经超越了它。比如在2000年,联合图像专家组又发布了另一种新的压缩图像标准:JPEG2000。它能在保持相同图像质量的情况下,把压缩率提高200%,甚至还支持无损压缩

但那又怎么样呢?JPEG的人脉太广,牢牢把持住了互联网。直到目前,与JPEG2000兼容的软件、浏览器还是比较少,跟我一样老,诞生于1992年的JPEG仍然是目前最普遍认可的图像文件格式,你大爷还是你大爷。

至于HEIF、WEBP等更新的图像格式,兼容性就更差了。iPhone用户用windows电脑时对HEIF最大的好奇就是“怎么才能转成JPEG”,至于WEBP......一般人下载到这个格式的图像文件,都以为自己下错了,打不开,只能转过头去截图一个JPEG。

所以,JPEG之所以始终是你大爷,固然有自身技术出色的原因,但也是因为它把握住了历史的进程。

最后,除了 JPEG 以外,还有另一种格式也很常见:JPG。那 JPEG 和 JPG 有什么区别?

它们最大的区别,就是 JPEG 有四个字母,而 JPG 有三个字母,别的就没有了。

没开玩笑。

在 Windows 95 之前,Windows 操作系统最多只支持三个字符的文件扩展名,所以 JPEG 被缩写成了 JPG,中间的 E 被省略了。而这种限制在 MAC 等类 UNIX 系统中并不存在,在 Windows 95 之后的操作系统在也不存在,所以 JPG 又可以用回大名 JPEG 了。

就是这样~

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OjD49KfPB4W8RcTwNTCEOCSw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券