三个印度人改变压缩算法 一意孤行 没它就没有JPEG

世界上最好用的压缩软件是什么?
微信 。
这个段子想必很多人都听过 。
一张几兆的图片 , 经微信一发 , 立马降到几百kb 。
三个印度人改变压缩算法 一意孤行 没它就没有JPEG
文章图片

文章图片

△如果是有损压缩画质会下降(右图天空有波纹)
虽说这是个吐槽 , 但u1s1 , 图片视频压缩其实是一项非常必要的技术 。
比如视频通话、传输大量图片时 , 如果不压缩的话 , 要么图像完全无法传送 , 要么就是干等了 。
所以在数字时代这几十年里 , 萌生出了很多相关的技术 , 比如JPEG、H.26X 。
不过你或许不知道 , 这些技术往上追溯 , 可以从47年前说起 。
有三位名不见经传的印度工程师“一意孤行” , 在没申请到研究经费的情况下 , 利用暑假时间鼓捣出来了一项技术 , 后来直接成为图像视频压缩的行业标准 。
它就是DCT 。
全称为DiscreteCosineTransform , 即离散余弦变换 。
而有趣的是 , DCT诞生之初时 , 就连作者本人都没有想到 , 它后来会有如此巨大的影响力 。
没有DCT , 就没有JPEG/MPEG
直接说DCT可能很多人不知道是什么 , 但JPEG大家肯定都听过 。
它除了是一种常见的图片文件后缀名 , 其实也是一种有损压缩标准 , 可以把一张图片从左边这样变成右边这样:
三个印度人改变压缩算法 一意孤行 没它就没有JPEG
文章图片

文章图片

ps.有损和无损的区别:无损压缩可以再100%还原图像;有损不可以 , 但有损压缩后的图像大小会大大减少 。
DCT就是实现这个过程的一种基础技术 。
它是傅立叶变换的一种 , 可以将图像从空域转换到频域 , 也就是把图像从像素矩阵变成用带有频率等信息的函数来表示 。
具体变换过程 , 我们以一张图像中一个3x3的像素块为例:
三个印度人改变压缩算法 一意孤行 没它就没有JPEG
文章图片

文章图片

△图源博客园博主@沉默的背影X-Pacific
对这个像素块做DTC变换 , 就相当于把除了第一个像素以外 , 其余像素的部分信息都抽取到第一个格中 。
这样 , 第一个格的像素值表示的就是一张图的总体样貌 , 称为低频信息;其余格表示的就是图像中人物或物体的细节 , 称为高频信息 。
经DCT转换后 , 每个3x3的像素块都会产生1个DC(直流)系数(位于第一个格)及8个AC(交流)系数(剩余格) , 前者是DCT最重要的输出 。
三个印度人改变压缩算法 一意孤行 没它就没有JPEG
文章图片

文章图片

由于大部分的图像能量会集中在低频部分 , 因此转换之后输出的DC系数值比较大 , 而输出的AC系值比较小 。
利用“人眼对低频分量的图像比对高频分量的图像更敏感”这一原理 , 再通过量化保存下来低频分量 , 舍弃高频分量(将大部分AC系数值变为0)、丢掉那些对视觉效果影响不大的信息 , 从而达到压缩目的 。
从下面这两张图像的三维投影 , 我们可以看到DCT变换带来的改变:
(上:原图;下:经过DCT变换后)
三个印度人改变压缩算法 一意孤行 没它就没有JPEG
文章图片

文章图片

在实际的JPEG压缩标准中 , 都是将一张图像分成若干个8x8的像素块(不够的用空白补齐) 。
将色彩空间从RGB转为YUV之后 , 从左至右、从上至下对每个块进行DCT变换 。