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://www.163.com/dy/article/IRJ039190512JILG.html
(原链接里有视频可以看)
还没有评论,快来抢沙发!