文章目录

  • 20191026
  • 20220414 更新,更系统去了解里面的编码压缩流程
    • 科普:关于图像格式JPG和JPEG你知多少?
    • 一、前言
    • 二、JPEG和JPG的关系
    • 三、色彩空间转换
    • 缩减取样
    • 离散余弦变换(DCT: Discrete Cosine Transform)
    • 量化
    • 熵编码
    • 图片质量
    • 代码示例
    • 写在最后

20191026

参考文章1:普及一下关于图像格式JPG和JPEG区别

参考文章2:opencv图像处理:JPG、PNG及BMP的区别?

参考文章3:输入层为4通道的png图像,有相关的要求吗?

参考文章4:.jpg & .jpeg 区别

20220414 更新,更系统去了解里面的编码压缩流程

参考文章:IT之家学院:文件格式系列科普之.JPEG/.JPG

科普:关于图像格式JPG和JPEG你知多少?

关于图像格式JPG和JPEG你知多少?大家在浏览网页时,总能看到各种各样的精美图片,将这些图片下载下来后,有可能是JPG格式,也可能是JPEG格式,当然还有其它PNG、GIF等格式,相对于PNG等格式来说,JPG格式的体积相对较小,这也是JPG格式受欢迎的原因。相信很多伙伴都不晓得JPG和JPEG格式有何关系吧?为了不让大家总是云里雾里的,今天小编将给大家科普下JPG和JPEG的相关知识。

一、前言

JPG格式的图片体积相对较小,是因为它采用了一系列的压缩算法,压缩图片弊端就是和原始的图片相比,它牺牲掉了一些画面细节,这些丢失的细节或许可被人的肉眼看出,或许以人的肉眼难以发现,对于这种通过牺牲画面的精细程度来达到缩小体积的目的的压缩算法,我们称之为“有损压缩”或者“破坏性压缩”,今天,IT之家就和大家聊聊JPEG图片压缩的基本原理。

二、JPEG和JPG的关系

很多读者可能会有这样的疑惑,JPEG和JPG看起来如此相像,它们到底是不是同一种图片格式?JPEG和JPG之间的关系到底是怎样的?在回答这个问题之前,我们首先要了解,JPEG的来头。

JPEG/JPG,全称为“Joint Photographic Experts Group”,翻译成中文,则是“联合图像专家小组”,这是一个成立于1986年的组织,1992年,该组织发布了“JPEG标准”,这是一种针对图像的压缩而制定的标准。

使用JPEG标准压缩的图片文件,被称为“JPEG文件”,这种文件的扩展名通常是JPG、JPEG、JPE、JFIF以及JIF,在这些文件格式中,以JPG的使用最为广泛。

如果这里JPEG指的是联合图像专家小组,那JPEG与JPG则是制定压缩标准的组织采用该组织制定的压缩标准压缩成的图片的一种的格式的关系;

如果JPEG指的是JPEG压缩标准,那JPEG与JPG则是一种图像的压缩标准采用该标准压缩成的图片的一种格式的关系;

如果JPEG指的是一张图片文件的后缀名,那JPEG与JPG的关系则是采用JPEG标准压缩的图片的两种不同的格式(数据内容相同,只是后缀不同?)

三、色彩空间转换

要压缩图片,首先要知道这个图片中都包含了些什么内容,在对图片的内容进行分解时,第一步就要进行色彩空间转换。

所谓的色彩空间,指的是描述图像的颜色的一组数值,比较常见的色彩空间有RGB、CMYK。


RGB,即是分别用三组数值,来表示红、绿、蓝,而红、绿、蓝三种颜色经过不同程度的配比,就会显示出不同的颜色。通常RGB的色彩模型用于显示屏的显示。

CMYK,即是分别用四组数值,来表示青色、品红、黄色和黑色,而青色、品红、黄色和黑色四种颜色经过不同程度的配比,就会显示出不同的颜色。通常CMYK的色彩模型用于印刷

在JPEG压缩图像过程中,是怎么用数值来表示图像内容的呢?事实上,JPEG量化图像的颜色时并非采用RGB模式,也非CMYK模式,而是YCbCr模式,其中,Y表示的是亮度,Cb表示的是彩度(蓝),Cr表示的是彩度(红)。那么问题来了,为什么JPEG在压缩图像时,不采用RGB和CMYK的色彩模型,而偏偏采用YCbCr这种看似奇葩的模式呢?这还要从人眼的工作机制谈起。

我们的眼睛之所以能感知图像,是因为人眼内含有视锥细胞和视杆细胞,其中,视锥细胞具有感知颜色的能力,而视杆细胞具有感知亮度的能力,通常,我们的眼睛中,视杆细胞数量相对较多,所以人眼对亮度的敏感程度要高于对色彩的敏感程度。就像你熄灯时,你可以在暗光下渐渐地看清周围的事物,而对周围事物的颜色,你可能就不那么敏感了。

JPEG正是利用了人眼的这一特性,在压缩图像时,将亮度和颜色分开处理。


由于人眼对亮度很敏感,所以JPEG不会对亮度做太多改变,而人眼对颜色不甚敏感(科学研究表明,人眼大概可以区分出1000万种不同的颜色,这种感知能力相比于电脑,就没那么精确了),所以在人眼开始察觉色彩不对了之前,JPEG对颜色进行压缩处理,这样就算图像损失了部分细节,人眼也不太容易捕捉得到。

JPEG在压缩图像时所进行的色彩空间转换,指的就是将RGB转换为YCbCr。

(疑问:通常图像采集设备采集的原始图像数据格式类型是什么?YUV444吗,还是YUV420?)

缩减取样

在YCbCr模型中,Cb通道和Cr通道中所包含的信息量远远少于Y通道中包含的信息量,同时,人眼对色彩的敏感程度有限,因此,JPEG的压缩算法主要对Cb和Cr通道中的数据进行缩减取样,取样的比例可以是4:4:4(无缩减取样)、4:2:2(在水平方向2的倍数中取样)和4:2:0(在水平方向和垂直方向的2的倍数中取样),其中,以4:2:0最为常见。

YUV各种缩减采样类型,可参考:RGB与YUV转换以及存储格式

离散余弦变换(DCT: Discrete Cosine Transform)

通常我们认为,在88像素的一块方格里,它里面的像素往往非常相似,因此,当进行到这一步时,JPEG会将图像分为一个又一个的88的像素块。

▲一个8*8的像素块,图片来自维基百科

每一个像素块都利用离散余弦变换来编码,法国数学家傅里叶告诉我们,几乎所有的周期函数,都可以用一系列的“弦波”来表示,也就是说,靠着带权重的一系列不同余弦值的相加,就可以重构出我们的原图。最后,每个88的像素块都会通过特定的函数,来生成一个新的88的数字矩阵。


▲一个8*8的数字矩阵,图片来自维基百科

量化

事情到这里还没算完,通过离散余弦变换所得到的数字可不能被直接压缩,他们还需要再处理一下,这就是量化。

量化的过程,实际上就是对DTC系数的一个优化过程,在一个88像素的区域中,每个像素点间的差异都很大时,它的弦波频率就很高,我们称之为高频区,相反地,一个88像素的区域中,每个像素点间的差异很小,那它的弦波频率就很低,我们称之为低频区,刚刚的DCT算法已经把哪里频率高、哪里频率低给整理出来了。

▲越接近左上,频率越低,越接近右下,频率越高。

人眼对高频区(小范围、高复杂度)的辨识能力较差,而对低频区(大范围、低复杂度)的辨识能力较好,因此JPEG就根据人眼的这一特征将高频区进行大幅的简化和压缩,量化的过程,实际上就是把频率领域上的每个成分,除以一个特定的常数,然后将计算结果四舍五入,取一个整数,JPEG会将高频区的成分通过算法,使其接近于0,然后四舍五入,取该成分的值为0,最后,我们大概会得到这样一个矩阵:


▲图片来源:维基百科

可以看到,这个矩阵中有很多连续的0,这就对压缩非常有利了。

熵编码

终于到了最后一步了,那就是压缩,仔细观察刚刚得到的最终的矩阵,可以看到,从左上角到右下角,连续的0的数量急剧上升,这种情况就要用熵编码技术,对数据进行编码。

JPEG从左上角开始,以Z字形来回穿梭,直至经历了矩阵中的所有数字,到达右下角。

▲Z字形穿梭扫描的路径,图片来自维基百科

此时的编码就变成了这样:


当剩下的数字都是0,且过早结束的编码,可以将连续的0的部分采用霍夫曼编码表示为“EOB”,最后,这串编码就成了这个样子:


现在,我们就得到了JPEG的编码了。通过一系列的处理,可以看到,图像中的信息达到了压缩和简化的目的。这就是一幅原始图像被压缩为JPEG的大概过程。

图片质量

(由什么决定,由量化的数据块大小决定的吗?数据块越小,图像质量越高?)

在生成一张JPG图像文件时,你通常需要设置图像质量参数,这个参数的数值越大,图像的质量也就越高,同时图片文件的体积也就越大,相反地,数值越小,图像的质量就越低,同时图片文件的体积越小,下面是三张图片:


▲图片一

▲图片二

▲图片三

第一张图片的质量参数是100,第二张图片的质量参数是60,第三张图片的质量参数是20,很容易可以看出,第一张图片的细节较为丰富,第二张图片的画面中好像稍微有一些噪点,第三章图片的直接可以看到大块的马赛克了。

代码示例

现在你已经了解了JPEG算法的工作原理,如果你想更进一步地学习,那么在GitHub中有这样一个代码示例,其作用就是进行JPEG压缩,感兴趣的同学可以点击这里查看和研究。

https://github.com/richgel999/jpeg-compressor

写在最后

这篇文章的目标受众是普通读者,出于浅显易懂的原则,这篇文章没有对数学算法进行深入讨论,也没有对数学定义进行严格阐述,如果你是相关领域的从业人员或者相关专业的高校学生,那么这篇文章可能不适合你。

在撰写这篇文章时,笔者参考了维基百科和相关技术博客中的一些知识,若文中有定义错误或者事实错误,还请不吝赐教。

jpg图片与jpeg图片格式的区别(没有区别,.jpg只是扩展名.jpeg的缩写)JPEG图像压缩(YUV4:2:0 缩减采样、缩减取样)(离散余弦变换 DCT算法)(量化)(熵编码)(霍夫曼哈夫曼)相关推荐

  1. jpg图片与jpeg图片格式的区别(没有区别,.jpg只是扩展名.jpeg的缩写)

    参考文章1:普及一下关于图像格式JPG和JPEG区别 参考文章2:opencv图像处理:JPG.PNG及BMP的区别? 参考文章3:输入层为4通道的png图像,有相关的要求吗? 参考文章4:.jpg ...

  2. raw linux是什么格式的文件怎么打开,raw文件扩展名,raw文件怎么打开?

    .raw 文件类型1:Raw Audio Data 文件说明:Uncompressed PCM (pulse code modulation) signed audio data file; cont ...

  3. 【图像处理】jpeg图片格式详解

    jpeg图片格式详解 1. JPEG文件简介 JPEG的全称是JointPhotographicExpertsGroup(联合图像专家小组),它是一种常用的图像存储格式, jpg/jpeg是24位的图 ...

  4. 第十三节:HttpHander扩展及应用(自定义扩展名、图片防盗链)

    一. 自定义扩展名 1. 前言 凡是实现了IHttpHandler接口的类均为Handler类,HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...

  5. Microsoft Office Open XML 格式和文件扩展名

    从 2007 Microsoft Office system 开始, Microsoft Office 使用基于 XML 的文件格式 (如 .docx..xlsx 和 .pptx). 这些格式和文件名 ...

  6. 我们常用的图片格式到底有什么区别?

    今天在整理图片工具类的时候,翻看了一下Android关于图片部分压缩格式的源码.里面枚举了3种图片压缩格式:JPEG,PNG, WEBP; JPEG   这种是我们最常见的类型之一,当然,这种格式你可 ...

  7. gif、bmp、jpg、jpeg图片有什么区别

    图片格式:光栅图片 BMP:Windows 位图 Windows 位图可以用任何颜色深度(从黑白到 24 位颜色)存储单个光栅图像.Windows 位图文件格式与其他 Microsoft Window ...

  8. JPEG图片格式简单分析

    JPEG文件格式简单分析 作者:小爽 摘要: 这篇文章大体上介绍了JPEG文件的结构信息以及它的压缩算法和编码方式.使读者能够对JPEG文件格式有大体上的了解.为读者进一步进行学习JPEG文件压缩做好 ...

  9. Ubuntu 把 webp 格式图片转换成 jpeg/png 格式

    据统计,目前互联网上传输的数据有65%都是图片,为了减少数据量.加速网络传输.谷歌(google)于2010年推出的新一代图片格式 -- WebP 格式. WebP 格式是一种旨在加快图片加载速度的图 ...

最新文章

  1. OpenCV | OpenCV 图片换底色
  2. Qt设置应用程序图标
  3. 跨链Cosmos(6)ABCI 原理
  4. python使用python-barcode生成任意长度字符串的条形码(一维码)详细教程
  5. 各厂商服务器ESXI最高版本适配情况
  6. js 防止重复提交方案
  7. Ubuntu wxWidgets
  8. mysql ----DML(掌握)
  9. 【EIP】以太坊路线图
  10. 数据结构课程设计——学生成绩管理系统
  11. 华硕FX50JK4200安装Win8.1后如何禁用触摸板
  12. Pr:用 Au 协作处理音频
  13. Linux 的7种文件类型及各颜色代表含义
  14. 【RCV】接收单号丢失处理
  15. python追加写_python覆盖写入,追加写入的实例
  16. Civil 3d 交叉口标注
  17. 机器学习中是如何处理误差的
  18. 基于 Paraview 扩展与实现——(1)
  19. excel文件打开密码和工作表保护如何解除
  20. 计算机英语教案模板,英语教案模板范文

热门文章

  1. 一堂AI课 华为云为大凉山小学播下科技的“种子”
  2. 最强建筑师工具 GRAPHISOFT ARCHICAD 22 Build 5009 启用教学
  3. 程序员向喜欢的女生写的告白的程序
  4. MTK6795环境搭建与编译
  5. python利用反向切片来反转字符串
  6. HDFS、Ceph、GFS、GPFS、Swift、Lustre
  7. win10下mysql服务无法启动
  8. 新能源汽车电力电子测试解决方案
  9. Games104现代游戏引擎入门-lecture16游戏引擎的Gameplay玩法系统基础_AI Basic
  10. Swin Transformer, SwinIR, SwinFIR