JPEG

圖片失真壓縮標準方法・檔案格式

JPEG或称JPG,是一种针对照片影像而广泛使用的有损压缩标准方法,由联合图像专家小组(英语:Joint Photographic Experts Group)开发。此团队创立于1986年,1992年发布了JPEG的标准而在1994年获得了ISO 10918-1的认定。JPEG与视频音频压缩标准的MPEGMoving Picture Experts Group)很容易混淆,但两者是不同的组织及标准。

JPEG
由左至右,压缩率越来越高的照片。
扩展名
.JPEG, .jpg, .jpe
.jfif, .jfi, .jif(容器)
互联网媒体类型
image/JPEG
类型代码英语Type codeJPEG
统一类型标识public.JPEG
开发者联合图像专家小组英语Joint Photographic Experts Group
首次发布1992年9月18日,​32年前​(1992-09-18
格式类型破坏性图像格式
网站www.jpeg.org

JPEG本身只有描述如何将一个影像转换为字节的数据流(streaming),但并没有说明这些字节如何在任何特定的存储媒体上受封存起来。JPEG的压缩方式通常是有损压缩,即在压缩过程中图像的质量会遭受到可见的破坏,有一种以JPEG为基础的标准Lossless JPEG是采用无损的压缩方式,但Lossless JPEG并没有受到广泛的支持。

一个由C-Cube Microsystems等公司所建立的额外标准,称为JFIFJPEG File Interchange FormatJPEG文件交换格式,联合图像专家小组文件交换格式)详细说明如何从一个JPEG流,产出一个适合于电脑存储和传输(像是在互联网上)的文件。在普遍的用法,当有人称呼一个"JPEG文件",一般而言他是意指一个JFIF文件,或有时候是一个Exif JPEG文件。然而,也有其他以JPEG为基础的文件格式,像是JNG

使用JPEG格式压缩的图片文件一般也称为JPEG Files,最普遍使用的扩展名格式为.jpg,其他常用的扩展名还包括.JPEG.jpe.jfif以及.jifJPEG格式的资料也能受嵌进其他类型的文件格式中,像是TIFF类型的文件格式。

JPEG/JFIF万维网上最普遍的用来存储和传输照片的格式。它并适合于线条绘图drawing)和其他文字或图标iconic)的图形,因为它的压缩方法用在这些类型的图形上,得到的结果并不好(PNGGIF通常是用来存储这类的图形;GIF每个像素只有8位元,并不很适合于存储彩色照片,PNG可以无损地存储照片,但是文件太大的缺点让它不太适合在网络上传输)。

对于JFIFMIME媒体类型是image/JPEG(定义于RFC 1341)。

JPEG编/解码器示例

编码

JPEG标准中许多选项很少使用,大多数图像软件在创建JPEG文件时使用更简单的JFIF格式。当应用到一个拥有每个像素24位(24 bits per pixel,红、蓝、绿各有八位元)的输入时,这边只有针对更多普遍编码方法之一的简洁描述。这个特定的选择是一种失真资料压缩方法。

色彩空间转换

首先,影像由RGB(红绿蓝)转换为一种称为YUV的不同色彩空间。这与模拟PAL制式彩色电视传输所使用的色彩空间相似,但是更类似于MAC电视传输系统运作的方式。但不是模拟NTSC,模拟NTSC使用的是YIQ色彩空间。

YUV分量可以由PAL制系统中归一化(经过伽马校正)的R',G',B'经过下面的计算得到:

  • Y=0.299R'+0.587G'+0.114B'
  • U=-0.147R'-0.289G'+0.436B'
  • V=0.615R'-0.515G'-0.100B'

这种编码系统非常有用,因为人眼对亮度差异的敏感度高于色彩变化。在此前提下可以设计更加高效压缩图像的编码器(encoder)。

缩减取样(Downsampling)

经过RGB到YUV颜色空间的转换后,开始进行缩减采样来减少U和V的成分(称为"缩减取样"或"色度抽样"(chroma subsampling)。在JPEG上这种缩减取样的比例可以是4:4:4(无缩减取样),4:2:2(在水平方向2的倍数中取一个),以及最普遍的4:2:0(在水平和垂直方向2的倍数中取一个)。对于压缩过程的剩余部分,Y、U、和V都是以非常类似的方式来个别地处理。

离散余弦变换(Discrete cosine transform)

 
以8-位元灰阶所显示的8x8子影像

下一步,将影像中的每个成分(Y, U, V)生成三个区域,每一个区域再划分成如瓷砖般排列的一个个的8×8子区域,每一子区域使用二维的离散余弦变换(DCT)转换到频率空间。

如果有一个如这样的8×8的8-位元(0~255)子区域:

 

接着推移128,使其范围变为 -128~127,得到结果为

 

且接着使用离散余弦变换,和舍位取最接近的整数,得到结果为

 

左上角之相当大的数值称为DC系数(直流系数);其他63个值称为AC系数(交流系数)。下面将对所有8×8表格中的DC系数使用差分编码,对AC系数使用行程编码[1]

量化(Quantization)

人类眼睛在一个相对大范围区域,辨别亮度上细微差异是相当的好,但是在一个高频率亮度变动之确切强度的分辨上,却不是如此地好。这个事实让我们能在高频率成分上极佳地降低资讯的数量。简单地把频率领域上每个成分,除以一个对于该成分的常量就可完成,且接着舍位取最接近的整数。这是整个过程中的主要失真运算。以这个结果而言,经常会把很多更高频率的成分舍位成为接近0,且剩下很多会变成小的正或负数。

一个普遍的量化矩阵是:

 

使用这个量化矩阵与前面所得到的DCT系数矩阵逐项相除,得到结果为:

 

举个例子,使用−415(DC系数)且舍位得到最接近的整数

 

熵编码技术(entropy coding)

 
Z字体扫描矩阵的顺序

熵编码是无损资料压缩的一个特别形式。它牵涉到将影像成分以Z字体(zigzag)排列,把相似频率组群在一起(矩阵中往左上方向是越低频率之系数,往右下较方向是较高频率之系数),插入长度编码的零,且接着对剩下的使用霍夫曼编码。 JPEG标准也允许(但是并不要求)在数学上优于霍夫曼编码的算术编码之使用。然而,这个特色几乎很少获使用,因为它被专利所涵盖,且它相较于霍夫曼编码在编码和解码上会更慢。使用算术编码一般会让文件更小约5%。

对于前者量化的系数所作的Z字体序列会是:

−26,
−3, 0,
−3, −2, −6,
2, −4, 1, −3,
1, 1, 5, 1, 2,
−1, 1, −1, 2, 0, 0,
0, 0, 0, −1, −1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0,
0, 0,
0

当剩下的所有系数都是零,对于过早结束的序列,JPEG有一个特别的霍夫曼编码用词。使用这个特殊的编码用词,EOB,该序列变为

−26,
−3, 0,
−3, −2, −6,
2, −4, 1 −3,
1, 1, 5, 1, 2,
−1, 1, −1, 2, 0, 0,
0, 0, 0, −1, −1, EOB

压缩比率与不自然痕迹(artifact)

 
有损压缩导致的人为现象(上)与原图(下),200%放大

按:artifact在这个领域又解释为赝像、非自然信号、人为现象。

在量化阶段时,依照除数的不同,会使结果的压缩比率可能有很多变化。10:1通常可得到无法使用肉眼分辨与原图差异的影像。100:1压缩通常是可行的,但与原图相较,会看出明显的不自然痕迹。压缩的适当等级是依据要压缩那一种影像而定。

使用万维网的人,可能熟悉这种出现在JPEG数码图像,已知压缩人为现象的不规则现象。这是由于JPEG算法的量化步骤所造成的结果。这种现象在脸部照片中的眼睛四周特别明显。他们可以借由选择压缩的较低水平(使用较低的压缩率)来减少这种现象;他们可能借由使用无损文件格式来存储一个影像来消除这种现象,然而针对照片影像,这样通常会使文件大小增加。

解码

解码来显示影像,包含反向作以上所有的过程

取DCT系数矩阵(在把DC系数差异加回去之后)

 

且以前面的量化矩阵乘以它,得到

 

左上角的部分与原本DCT系数矩阵非常接近地相似。使用反向DCT得到一个有数值的影像(仍然受移位128)

注意原来(上)与解压缩影像(下)的些微差异,在角落处可以轻易地看出来
 

且对每一个项目加上128

 

这是解压缩的子影像,且可以用来与原本子影像相比(也可以看右方的影像),借由取两者之间的差异(原本—解压缩)得到误差值。

 

每个像素大约是5的平均绝对误差,也就是说, 。误差在左下角显而易见,左下方的像素变得比它邻近右方的像素还更暗。

用法

JPEG在色调及颜色平滑变化的照片或是写实绘画(painting)上可以达到它最佳的效果。在这种情况下,它通常比完全无损方法作得更好,仍然可以产生非常好看的影像(事实上它会比其他一般的方法像是GIF产生更高质量的影像,因为GIF对于线条绘画(drawing)和图标的图形是无损,但针对全彩影像则需要极困难的量化)。

照片

JPEG压缩的不自然现象可以很好地调和到细微非均匀材质的照片中,因此允许得到更高的压缩率。

低质量(10%),文件大小为1.7 KB。
中等质量(50%),文件大小为5.7 KB。
最高质量(100%),文件大小为36 KB。

附注:以上的影像并不是IEEE/CCIR/EBU测试影像,且压缩编码器的设置并没有指明或是可以得到。

中等质量的照片只有六分之一的存储空间,但是几乎没有明显的细节损失或是看得到的人为效果。然而,一旦超过一个某整的压缩限度,压缩的影像逐渐地显现出可以看得到的瑕疵。参考比率失真理论rate distortion theory)的文章有针对这种限度效果的数学上之解释。

医学影像:少见的JPEG 12位支持模式

有很多医学的影像系统可以建立和处理12位JPEG影像。12位JPEG格式已经是JPEG规格的一部分,但是非常少商业软件程序(或网页浏览器)支持这种不常使用的JPEG格式。

其他有损压缩的编码格式

更新的失真方法,尤其是小波压缩(wavelet compression),在这些情况下甚至能作得更好。然而,JPEG是一种建立得相当好的标准,拥有很多可使用的软件,包含自由软件,因此到2005年它持续获大量使用。很多小波算法受到专利保护,要在很多软件项目中自由地使用他们是困难或是不可能的。

JPEG委员会现在也已经建立其自有的小波基础标准-JPEG 2000,希望最终能取代原来的JPEG标准。

潜在的专利争议

在2002年Forgent Networks主张他拥有且将会履行在JPEG技术上的专利权,起因于一个在1986年已经归档的专利(美国专利第4,698,672号)。这个公告已经引起一阵大骚动,令人想起Unisys试图主张对于GIF影像压缩标准的权利。

JPEG委员会审慎调查这个在2002年所主张的专利,且发现他们因为前案而无效作废[2]。其他的也已推断Forgent并无拥有涵盖JPEG的专利[3]。尽管如此,在2002年和2004年之间,Forgent借由把他们的专利授权给某些30家公司,而获得大约9千万美元。在2004年4月,Forgent控告31家其他公司来强求更多的授权支付。同年的七月,21家较大的电脑公司组成的协会提出反控告,包含使该专利无效的目标。然而,到2005年7月的时候,这场官司仍然持续中。

JPEG委员会在他的明确目标中有一项,是他们的标准在不支付授权金之下是可以受实现的,且他们已从超过20个大型组织中,得到适当的授权权利给他们即将到来的JPEG 2000标准。

专利案结束

经过数年的纠缠,于2006年11月,JPEG专利持有者Forgent Networks终于与30家PC厂商结束了侵权官司,代价是PC厂商向Forgent赔款800万美元,而不是Forgent期望的1亿美元。

在与PC厂商大打官司之前,Forgent已经与60多家公司和解,获得的专利费用总额高达1.1亿美元。包括雅虎在内的45家PC厂商拒绝就4698672号专利问题和解,而是选择了对簿公堂,不过其中15家在此之前已经与Forgent和解。

虽然还是赔了款,但PC厂商们并没有输掉官司;虽然没能得到自己想要的大笔美金,Forgent也没有彻底失败。在非盈利性组织美国公共专利基金会(PPF)的协助下,他们设法获得了美国专利和商标局(USPTO)的认可,对Forgent专利的有效性在2月和6月两次重新进行了鉴定,最终法庭限制了Forgent专利的应用范围。而从另一方面看,Forgent的专利也得到了一定的维护,这要比被彻底推翻好得多,Forgent也表示对结果感到很满意。

Forgent CEO Richard Snyder称:“在'672专利的有效期内,我们已经获得了1.1亿多美元。很快,Forgent还会再次有所行动。我们的精力现在已经转移到'746专利上,并等待2007年5月的陪审团裁决,同时我们还会继续促进(分公司)NetSimplicity的软件业务。”[4]

无损耗旋转(lossless JPEG rotation)

虽然任何对JPEG图像的处理都有可能导致因为解压后再压缩而引起的损耗,然而,对于简单的旋转动作,数学上是可以有办法使图像得以旋转而无损图像本身的资料。也就是说,有一种方法可以在无需把图像解压后才可以旋转。这是因为JPEG的文件格式本身是以一个个模块为单位来压缩,所以,只需要把模块重排,再对每个模块旋转,就可以达至无损耗的旋转。

用户在操作上加以注意。例如:在Adobe Photoshop里,用户若要作无损耗旋转前,必须在加载图像之后立刻用“Save As...”功能存储一个备份。然后当图像旋转过后,由于Photoshop已掌握了图像的基本资料,所以在存储时得以使用原来的设置。若没有作事先存储,Photoshop就会把旋转后的图像重新计算各项参数,并重新对图像进行压缩处理。这样就会造成资料的损耗。

压缩标准

JPEG是由国际标准组织(ISO)国际电话电报咨询委员会(CCITT)为静态图像所建立的第一个国际数码图像压缩标准,也是至今一直在使用的、应用最广的图像压缩标准。JPEG由于可以提供有损压缩,因此压缩比可以达到其他传统压缩算法无法比拟的程度。

JPEG的压缩模式有以下几种:

  •  顺序式编码(Sequential Encoding)
 一次将图像由左到右、由上到下顺序处理。
  •  递增式编码(Progressive Encoding)
 当图像传输的时间较长时,可将图像分数次处理,以从模糊到清晰的方式来传送图像(效果类似GIF在网络上的传输)。
  •  无失真编码(Lossless Encoding)
  •  阶梯式编码(Hierarchical Encoding)
 图像以数种分辨率来压缩,其目的是为了让具有高分辨率的图像也可以在较低分辨率的装置上显示。

在Independent JPEG Group所提供的原始码上,有jpegtran程序,就提供了优化Huffman,转成渐进式,镜射,旋转这些无损耗转换。

参看:无损耗JPEG旋转程序列表页面存档备份,存于互联网档案馆)(英语)

参见

参考来源

  1. ^ 吕凤军. 数字图像处理编程入门. 清华大学出版社. 1999. 
  2. ^ 存档副本. [2011-05-29]. (原始内容存档于2007-07-14). 
  3. ^ 存档副本. [2004-08-17]. (原始内容存档于2004-08-17). 
  4. ^ JPEG: PC厂商向JPEG专利持有者赔偿800万美元_第三媒体频道. [2013-07-21]. (原始内容存档于2014-01-08). 

外部链接