0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

没有DCT,就没有JPEG/MPEG

算法与数据结构 来源:凹非寺 作者:明敏 丰色 2022-07-27 11:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

世界上最好用的压缩软件是什么?

微信。

这个段子想必很多人都听过。

一张几兆的图片,经微信一发,立马降到几百kb。

7f2adb28-0d5b-11ed-ba43-dac502259ad0.jpg

△如果是有损压缩画质会下降(右图天空有波纹)

虽说这是个吐槽,但u1s1,图片视频压缩其实是一项非常必要的技术。

比如视频通话、传输大量图片时,如果不压缩的话,要么图像完全无法传送,要么就是干等了。

所以在数字时代这几十年里,萌生出了很多相关的技术,比如JPEG、H.26X。

不过你或许不知道,这些技术往上追溯,可以从47年前说起。

有三位名不见经传的印度工程师“一意孤行”,在没申请到研究经费的情况下,利用暑假时间鼓捣出来了一项技术,后来直接成为图像视频压缩的行业标准。

它就是DCT。

全称为Discrete Cosine Transform,即离散余弦变换。

而有趣的是,DCT诞生之初时,就连作者本人都没有想到,它后来会有如此巨大的影响力。

没有DCT,就没有JPEG/MPEG

直接说DCT可能很多人不知道是什么,但JPEG大家肯定都听过。

它除了是一种常见的图片文件后缀名,其实也是一种有损压缩标准,可以把一张图片从左边这样变成右边这样:

7f412c2a-0d5b-11ed-ba43-dac502259ad0.png

ps.有损和无损的区别:无损压缩可以再100%还原图像;有损不可以,但有损压缩后的图像大小会大大减少。

DCT就是实现这个过程的一种基础技术。

它是傅立叶变换的一种,可以将图像从空域转换到频域,也就是把图像从像素矩阵变成用带有频率等信息的函数来表示。

具体变换过程,我们以一张图像中一个3x3的像素块为例:

7f549706-0d5b-11ed-ba43-dac502259ad0.png

△图源博客园博主@沉默的背影 X-Pacific

对这个像素块做DTC变换,就相当于把除了第一个像素以外,其余像素的部分信息都抽取到第一个格中。

这样,第一个格的像素值表示的就是一张图的总体样貌,称为低频信息;其余格表示的就是图像中人物或物体的细节,称为高频信息。

经DCT转换后,每个3x3的像素块都会产生1个DC(直流)系数(位于第一个格)及8个AC(交流)系数(剩余格),前者是DCT最重要的输出。

7f67966c-0d5b-11ed-ba43-dac502259ad0.png

由于大部分的图像能量会集中在低频部分,因此转换之后输出的DC系数值比较大,而输出的AC系值比较小。

利用“人眼对低频分量的图像比对高频分量的图像更敏感”这一原理,再通过量化保存下来低频分量,舍弃高频分量(将大部分AC系数值变为0)、丢掉那些对视觉效果影响不大的信息,从而达到压缩目的。

从下面这两张图像的三维投影,我们可以看到DCT变换带来的改变:

(上:原图;下:经过DCT变换后)

7f7ce92c-0d5b-11ed-ba43-dac502259ad0.png

在实际的JPEG压缩标准中,都是将一张图像分成若干个8x8的像素块(不够的用空白补齐)。

将色彩空间从RGB转为YUV之后,从左至右、从上至下对每个块进行DCT变换。

然后对每个块变换得来的系数进行量化,在这个过程中,一些重要的分量就被去除了,且无法恢复。

因此,这是一种不可逆的有损压缩技术。

接着对量化后得到的AC系数和DC系数再分别进行编码,经过哈夫曼编码后得到下面这样的一大串数字。

7f970cbc-0d5b-11ed-ba43-dac502259ad0.png

解压缩时对每个图像块做DCT反转换(IDCT),就可以重建完整图像。

具体计算过程如下:

首先将图片中每个像素的原始灰度和亮度值用8bit表示,也就是(0,255)这个范围。

由于大多数值都会分布在128左右,所以会将这些值都减去128,这样会有更多值为0,有利于压缩,这时候范围变成(-128,127)。

7fa970fa-0d5b-11ed-ba43-dac502259ad0.png

然后再用DCT变换公式进行变换,二维的用这个:

7fbd7c6c-0d5b-11ed-ba43-dac502259ad0.png

变换完后进行根据量化表进行量化,将大部分系数变为0,完成压缩。

7fccd7fc-0d5b-11ed-ba43-dac502259ad0.png

ps.量化表是根据人眼对量化误差的视觉阈值来确定的,有固定的一张表。

后面就是前面说的一系列编码过程了。

1974年1月,这项技术首次被发表在IEEE Transactions on Computers上面。

自此,图像和视频压缩领域的行业标准就诞生了。

1998年世界首个视频压缩标准H.261、1992年的JPEG和MPEG、2010年的WebP、2013年的HEIF、2018年谷歌亚马逊等公司联合创建的AV1……等压缩标准都是基于这项技术,且一直沿用至今。

40多年都名不见经传的发明者

DCT的作者有3位,分别是Nasir Ahmed(纳西尔·艾哈迈德)、K.R. Rao(K.R.拉奥)和T. Natarajan(T.纳塔拉詹)。

纳西尔是新墨西哥大学电气与计算机工程系名誉教授。

他1940年出生于印度班加罗尔,1966年在新墨西哥大学获得博士学位。

1966-1968年,他在霍尼韦尔公司担任首席工程师,1968-1983年在堪萨斯州立大学担任教授。

1983-2001年,他回到新墨西哥大学担任电气与计算机工程系首席教授。在此期间,他先后担任过系主任、研究生院院长等职位。

今年,纳西尔已经有82岁高龄。

另一位主要作者是K.R.拉奥。

他同样是一位美籍印度裔学者。

1960年,他在佛罗里达大学获得核工程专业博士学位。1966年,又在新墨西哥大学获得电气与计算机工程专业博士学位。

之后50年,他一直在得克萨斯州阿灵顿分校工作,担任电气工程系教授。

与此同时,他还是IEEE Fellow。

2021年1月15日,拉奥教授挥别人世,享年89岁。

T.纳塔拉詹当时是纳西尔带的博士生,如今在互联网上已经检索不到太多他的相关信息。

可以说相比于大名鼎鼎的DCT,几位发明者称得上是“名不见经传”了。

实际上,40多年来,DCT发明的幕后故事一直鲜有人关注。

甚至连纳西尔的儿子都表示,“从来没想过父亲带来的影响有如此之大”。

而将纳西尔从幕后推至台前的,还多亏了一部美剧中的一波致敬。

2020年,《我们的生活》中有一段剧情是纳西尔以视频通话的方式,讲述了自己和妻子相爱的故事。

片方表示,设计这一桥段的初衷,就是希望更多人意识到,当下我们能够通过互联网快速发送图片视频,都与纳西尔的工作离不开关系。

剧情播出后,不少媒体将DCT定义为“改变世界的算法”,也称纳西尔这位名不见经传的工程师,终于从幕后推到了台前。

不过,纳西尔在自己的回忆视频里表示,当初真的没想到DCT会带来如此大的影响。

我也无法预测技术发展的速度,对于FaceTime这些应用的出现,我感到非常惊讶。

要知道,DCT最初可能差一点就被扼杀在了摇篮里。

1972年,当时已经对DCT初有构思的纳西尔向美国国家科学基金会(NSF)递交了一份申请,希望NSF能为他研究DCT提供资金支持。

不过令纳西尔惊讶的是,这个申请直接被毙掉了,评审人给出的意见是“它太简单了”。

但好在纳西尔并没有放弃,他始终觉得这个idea很有新意。

唯一令他有所顾虑的是,他可能是只能利用假期来完成DCT的相关工作了,而且这期间可能没有任何收入。

所以,纳西尔回家和妻子说:

我有直觉,这事儿值得做下去。只不过我们需要计划好如何度过一个没有薪水的暑假。

妻子没有任何犹豫就支持了他。

于是,在1973年的夏天,DCT的研究工作正式开始了。

参与到这项研究的,还有纳西尔的好友拉奥和博士生纳塔拉詹。

拉奥也是支持纳西尔研究DCT的重要人物之一。

在纳西尔的申请被毙掉后,他第一时间把自己的想法告诉了好友拉奥。

拉奥给出了这样的回复:

你要立即把这些结果以短文的形式发表。

这就是“How I Came Up with the Discrete Cosine Transform”诞生的始末。

802235da-0d5b-11ed-ba43-dac502259ad0.png

后来,这篇文章几乎称得上是图片视频压缩领域的必读之文。

之后的故事,也就是我们所熟知的了。

1974年,《Discrete Cosine Transform》在IEEE Transactions on Computers上发表。

截至目前,这篇文章的被引次数已经达到5878次。

纳西尔曾在采访中表示,自己人生中最大的礼物,就是人们对DCT的认可。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像
    +关注

    关注

    2

    文章

    1097

    浏览量

    42548
  • JPEG
    +关注

    关注

    0

    文章

    66

    浏览量

    30920
  • DCT
    DCT
    +关注

    关注

    1

    文章

    56

    浏览量

    20774

原文标题:三个印度人改变压缩算法,一意孤行整个暑假,却因“太简单”申不到经费

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    UPS电源没有输出是什么原因?排查这五点轻松解决

    正在办公或生产时,设备突然断电,而旁边的 UPS电源 指示灯却亮着报警——这种情况相信不少用户都遇到过。明明有电输入,为什么 UPS不间断电源 却没有输出?是设备坏了,还是哪里出了问题?面对突发故障
    的头像 发表于 05-23 09:56 129次阅读
    UPS电源<b class='flag-5'>没有</b>输出是什么原因?排查这五点轻松解决

    没有网络没有光纤,开关量信号怎么传?

    达泰DTD130H系列单向开关量信号无线传输器,为工业场景中自动化设备的开关量采集与远程控制需求设计。采用全数字无线加密传输技术,可以直接接入仪表信号、接近开关、限位开关、传感器、PLC、DCS等设备。其无线可靠传输距离可达10公里,支持点对点、一点对多点等多种组网方式,无需布线即可替代传统信号线。设备具备低能耗运行特性,免编程配置,仅需接入信号线即可完成快速部署,尤其适用于分散区域或难以布线的工业环境。
    的头像 发表于 05-16 16:33 512次阅读
    <b class='flag-5'>没有</b>网络<b class='flag-5'>没有</b>光纤,开关量信号怎么传?

    差分信号真的没有参考地吗?原理、误区及实测要点全解析

    完全正确,也不是绝对错误。 很多人对差分信号的参考地认知模糊,甚至在实际操作中因误解踩坑。 今天就用通俗的逻辑、实用的知识点,帮大家彻底理清:差分信号到底有没有参考地?哪些场景下必须用地?实际电路调试和测量时又
    的头像 发表于 04-24 09:22 519次阅读
    差分信号真的<b class='flag-5'>没有</b>参考地吗?原理、误区及实测要点全解析

    探秘ADV212:高性能JPEG2000视频编解码器

    探秘ADV212:高性能JPEG2000视频编解码器 在当今数字化的时代,视频和图像的处理需求日益增长,高效的编解码技术显得尤为重要。ADV212作为一款先进的JPEG2000视频编解码器,为视频
    的头像 发表于 04-18 15:35 712次阅读

    没有日本公司,如何完成 METI 备案

    很多出口日本的企业都会遇到同一个现实问题:产品已经完成 PSE 认证,但公司在中国或其他国家,并没有日本法人,这种情况下还能做 METI 备案吗? 结论先给出:可以完成,但不能自行备案,必须通过日本责任主体。
    的头像 发表于 02-10 11:58 388次阅读
    <b class='flag-5'>没有</b>日本公司,如何完成 METI 备案

    【瑞萨RA8D1 LWIP/LVGL评测】基于LVGL的JPEG网络流播放

    uint8_t *buf; uint32_t size; uint32_t index; } jpeg_data_t; #define JPEG_W240 #define JPEG
    发表于 02-01 22:15

    光纤收发器有没有正反?一文讲清配对使用要点,广州邮科专业解答!

    在工业通信、安防监控、智能楼宇等项目部署中, 光纤收发器 作为光电转换的核心设备,被广泛应用。但很多新手工程师或集成商常会疑惑:“ 光纤收发器 有没有正反? ”“能不能随便配对使用?”今天,我们
    的头像 发表于 01-15 10:40 497次阅读
    光纤收发器有<b class='flag-5'>没有</b>正反?一文讲清配对使用要点,广州邮科专业解答!

    为什么c语言没有输出?

    我在写c语言程序的时候,经常在程序编译的时候没有输出,经总结,发现有以下原因: 1、scanf里没有加 。 2、逻辑问题,可能没有输入,才没有输出。 3、输入scanf(\"%d
    发表于 01-05 06:40

    没有地图,纯视觉自动驾驶就只能摸瞎吗?

    [首发于智驾最前沿微信公众号]最近在一篇讨论高精度地图的文章中,有位小伙伴提到一个非常有趣的观点“如果人在陌生的目的地,只依托纯视觉(眼睛)去辨别道路,若没有导航,就只能摸瞎”。对于纯视觉自动驾驶
    的头像 发表于 11-27 17:22 1698次阅读
    <b class='flag-5'>没有</b>地图,纯视觉自动驾驶就只能摸瞎吗?

    与晶振并联的1M电阻是什么用?为何有的有用,有的没有用?应该如何选择?

    在实际的产品设计时,针对晶振部分的电路,你会发现会有下面2种电路,图1电路中,没有1M的电阻;图2电路中,晶振会并联一个1M的电阻。对于晶振电路您可以会产生下面的疑问:1M电阻具体是什么作用呢
    的头像 发表于 11-21 15:37 3788次阅读
    与晶振并联的1M电阻是什么用?为何有的有用,有的<b class='flag-5'>没有</b>用?应该如何选择?

    如何使用 FatFs 显示 SD 卡中的 JPEG 文件?

    使用 FatFs 显示 SD 卡中的 JPEG 文件
    发表于 09-04 06:20

    在 Buildroot 中启用 JPEG格式支持,但它有警告消息:“错误的管道:没有元素 Jpegparse”,怎么解决?

    在 Buildroot 中启用 JPEG格式支持,但它有警告消息:“错误的管道:没有元素 Jpegparse”
    发表于 09-03 06:41

    K230 RTOS Only SDK使用c语言开发,如何将摄像头存图转为jpeg

    问题1:参考src/rtsmart/mpp/userapps/sample目录下的案例,实现了摄像头存图,但是存图格式没有jpeg,网上搜到的是针对python的。当前自己做的测试程序也是在
    发表于 07-31 06:34

    没有掉电保护的SSD为什么不适合工业级场景?

    在电力、工业自动化、轨道交通等领域,数据安全容不得半点马虎。然而很多人并不知道,普通SSD在突发断电时面临着巨大的风险:DRAM缓存中的数据可能还未写入NAND闪存,就因掉电而彻底丢失。那么,没有
    的头像 发表于 07-16 10:54 872次阅读
    <b class='flag-5'>没有</b>掉电保护的SSD为什么不适合工业级场景?

    KSC DCT系列轻触开关的主要优势和应用领域

    双电路技术是指在一个轻触开关(单刀双掷,SPDT)内部产生两个独立输出信号的功能。请参见下面的SPDT电路。KSC DCT轻触开关有一个共用引脚、一个常关(NC)引脚和一个常开(NO)引脚。如果用户
    的头像 发表于 06-26 14:35 1336次阅读
    KSC <b class='flag-5'>DCT</b>系列轻触开关的主要优势和应用领域