科普:你对图像格式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,称为“联合摄影专家组”,中文译名为“联合摄影专家组”,成立于1986年。1992年,该组织发布了“JPEG标准”,这是一个用于图像压缩的标准。
按照JPEG标准压缩的图片文件称为“JPEG文件”。这些文件的扩展名通常是JPG、JPEG、JPE、JIF和JIF。在这些文件格式中,JPG是使用最广泛的。
如果这里的JPEG指的是联合图像专家组,那么JPEG和JPG就是制定压缩标准的机构和由该机构制定的压缩标准压缩的新格式图片之间的关系;
如果JPEG指的是JPEG压缩标准,那么JPEG和JPG就是图像压缩标准和由该标准压缩的图片格式之间的关系。
如果JPEG指的是图片文件的后缀,那么JPEG和JPG的关系就是JPEG标准压缩的两种不同格式的图片。
三、色彩空间转换
要压缩一张图片,首先要知道图片中包含哪些内容。分解图片内容时,第一步是变换色彩空间。
所谓的颜色空间是指描述图像颜色的一组数值。比较常见的色彩空间是RGB和CMYK。
RGB,也就是用三组值来表示红、绿、蓝,红、绿、蓝经过不同的比例会呈现出不同的颜色。一般来说,RGB颜色模型用于显示屏的显示。
CMYK,也就是用四组数值来表示青色、品红、黄色和黑色,青色、品红、黄色和黑色经过不同程度的混合后会呈现出不同的颜色。通常使用CMYK的颜色模型进行打印。
在JPEG图像压缩过程中,如何用数值表示图像内容?实际上,JPEG在YCbCr模式下量化图像的颜色,而不是RGB模式或CMYK模式,其中Y代表亮度,Cb代表色度(蓝色),Cr代表色度(红色)。那么问题来了,为什么JPEG在压缩图像时不使用RGB和CMYK颜色模型,而是使用YCbCr,这似乎是一个很棒的模式?这还得从人眼的工作机制说起。
我们的眼睛之所以能感知图像,是因为它包含锥体细胞和杆状细胞,其中锥体细胞具有感知颜色的能力,而杆状细胞具有感知亮度的能力。一般我们的眼睛中杆状细胞相对较多,所以人眼对亮度的敏感度高于对颜色的敏感度。就像关灯的时候,你可以在黑暗中逐渐看清周围的东西,但你可能对周围事物的颜色没有那么敏感。
JPEG利用人眼的这一特性,在压缩图像时将亮度和颜色分开处理。
因为人眼对亮度敏感,所以JPEG对亮度变化不大,但人眼对颜色不敏感(科学研究表明,人眼可以分辨1000万种左右的不同颜色,与计算机相比并不那么准确),所以JPEG在人眼开始感知到颜色不对之前就对颜色进行了压缩,所以即使图像的一些细节丢失,人眼也不容易捕捉到。
JPEG压缩图像时的色彩空间转换是指将RGB转换成YCbCr。
四、缩减取样
在YCbCr模型中,Cb和Cr通道包含的信息量远远小于y通道,人眼对颜色的敏感度有限。因此,JPEG压缩算法主要对Cb和Cr通道中的数据进行下采样,采样比可以是4,333,604: 4(无下采样)、4,333,602: 2(水平方向2的倍数采样)、4,333,660。
五、离散余弦变换(DCT)
一般我们认为一个8*8像素网格中的像素往往非常相似,所以走到这一步的时候,JPEG会将图像一个接一个地分割成8*8像素块。
一个8*8像素的块,图片来自维基百科
每个像素块都用离散余弦变换编码。法国数学家傅立叶告诉我们,几乎所有的周期函数都可以用一系列“和弦”来表示,也就是说,我们可以通过添加一系列不同的余弦值和权重来重构我们的原始图像。最后,每8*8像素块将通过特定函数生成一个新的8*8数字矩阵。
一个8*8的数字矩阵,图片来自维基百科
六、量化
这里事情还没完,离散余弦变换得到的数字不能直接压缩,需要重新处理,这就是量化。
量化过程实际上是对DTC系数的优化过程。在一个8*8像素的区域,当每个像素之间的差异很大时,它的弦频率就很高,我们称之为高频区。相反,在一个8*8像素的区域,每个像素之间的差异非常小,所以它的弦频率非常低,我们称之为低频区域。离散余弦变换算法把它放在哪里了
越靠近左上频率越低,越靠近右下频率越高。
人眼识别高频区域(范围小,复杂度高)的能力较差,而识别低频区域(范围大,复杂度低)的能力较好。因此,JPEG根据人眼的这一特性,对高频区域进行了极大的简化和压缩。其实量化的过程就是把频率场中的每个分量除以一个特定的常数,然后把计算结果四舍五入取一个整数。JPEG将通过算法传递高频区域的分量,从而
图片来源:维基百科
可以看出,这个矩阵中有很多连续的零,非常有利于压缩。
七、熵编码
最后,最后一步是压缩。仔细观察刚刚得到的最终矩阵,可以看到连续零的个数从左上角到右下角急剧上升。在这种情况下,应该使用熵编码技术对数据进行编码。
JPEG从左上角开始,以之字形来回穿梭,直到通过矩阵中的所有数字,到达右下角。
之字形穿梭扫描的路径,图片来自维基百科
此时的编码是这样的:
当剩余的数字都是0,编码过早结束时,连续的0部分可以用霍夫曼编码表示为“EOB”,最后,这串编码变成这样:
现在,我们有了JPEG编码。通过一系列的处理,我们可以看到图像中的信息被压缩和简化。这是将原始图像压缩为JPEG的大致过程。
八、图片质量
生成JPG图像文件时,通常需要设置图像质量参数。该参数的值越大,图像质量越高,图像文件量越大。相反,该值越小,图像质量越低,图像文件体积越小。这里有三张图片:
图片一
图片2
图片3
第一张图片的质量参数为100,第二张图片的质量参数为60,第三张图片的质量参数为20。很容易看出第一张图的细节比较丰富,第二张图的画面似乎有些噪点。在第三章中,可以直接看到大型马赛克。
九、代码示例
既然已经了解了JPEG算法的工作原理,如果想进一步学习,GitHub中有这样一个代码示例,它的功能是JPEG压缩。感兴趣的同学可以点击这里查看和学习。
以上是JPG和JPEG图像格式相关知识的讲解。相信大家对JPG图像格式有了更深的理解。JPG是一种有损压缩图像格式,尺寸相对较小,打开速度较快,但画面相对不那么清晰。您可以根据自己的需要选择图像格式。
版权声明:科普:你对图像格式JPG和JPEG了解多少?是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。