JPEG


JPEG (正體)

Free Web Hosting with Website Builder
JPEG
MIME类型: image/jpeg
开发者: Joint Photographic Experts Group
类型码: JPEG

电脑中,JPEG(发音为jay-peg, IPA: [ˈdʒeɪpɛg])是一种针对相片影像而广泛使用的一种失真压缩标准方法。这个名称代表Joint Photographic Experts Group(联合图像专家小组)。此团队创立于西元1986年,1992年发布了JPEG的标准而在1994年获得了ISO 109918-1的认定。JPEG与视讯音讯压缩标准的MPEG(Moving Picture Experts Group)很容易混淆,但两者是不同的组织及标准。

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

一个由独立JPEG小组(Independent JPEG Group)所建立的额外标准,称为JFIFJPEG File Interchange Format,JPEG档案交换格式)详细说明如何从一个JPEG串流,产出一个适合于电脑储存和传输(像是在因特网上)的档案。在普遍的用法,当有人称呼一个"JPEG档案",一般而言他是意指一个JFIF档案,或有时候是一个Exif JPEG档案。然而,也有其他以JPEG为基础的档案格式,像是JNG。

使用JPEG格式压缩的图片档案一般也被称为JPEG Files,最普遍被使用的副档名格式为.jpg,其他常用的副档名还包括.jpeg,.jpe,.jfif以及.jif。JPEG格式的资料也能被嵌进其他类型的档案格式中,像是TIFF类型的档案格式。

JPEG/JFIF是最普遍在万维网(World Wide Web)上被用来储存和传输照片的格式。它并适合于线条绘图(drawing)和其他文字或图示(iconic)的图形,因为它的压缩方法用在这些图形的型态上,会得到不适当的结果(PNGGIF格式通常是用来针对这种目的之图形;GIF每一像素只有8位元,并不很适合于用在彩色照片,PNG可以被用来无失真地储存照片,但是档案太大让它不适合在网页上放照片)。

对于JFIF的MIME媒体型态是image/jpeg(定义在RFC 1341)。

目录

编码

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

色彩空间转换

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

  • Y 成份表示一个像素的亮度
  • U 和 V 成份一起表示色调饱和度

这种编码系统非常有用,因为人类眼睛在 Y 成份可以比 U 和 V 看得更仔细。使用这种知识,编码器(encoder)可以被设计得更有效率地压缩影像。

缩减取样(Downsampling)

上面所作的转换使下一步骤变为可能,也就是减少 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)子影像是:


\begin{bmatrix}
 52 & 55 & 61 &  66 &  70 &  61 & 64 & 73 \\
 63 & 59 & 55 &  90 & 109 &  85 & 69 & 72 \\
 62 & 59 & 68 & 113 & 144 & 104 & 66 & 73 \\
 63 & 58 & 71 & 122 & 154 & 106 & 70 & 69 \\
 67 & 61 & 68 & 104 & 126 &  88 & 68 & 70 \\
 79 & 65 & 60 &  70 &  77 &  68 & 58 & 75 \\
 85 & 71 & 64 &  59 &  55 &  61 & 65 & 83 \\
 87 & 79 & 69 &  68 &  65 &  76 & 78 & 94
\end{bmatrix}

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


\begin{bmatrix}
 -76 & -73 & -67 & -62 & -58 & -67 & -64 & -55 \\
 -65 & -69 & -73 & -38 & -19 & -43 & -59 & -56 \\
 -66 & -69 & -60 & -15 &  16 & -24 & -62 & -55 \\
 -65 & -70 & -57 &  -6 &  26 & -22 & -58 & -59 \\
 -61 & -67 & -60 & -24 &  -2 & -40 & -60 & -58 \\
 -49 & -63 & -68 & -58 & -51 & -60 & -70 & -53 \\
 -43 & -57 & -64 & -69 & -73 & -67 & -63 & -45 \\
 -41 & -49 & -59 & -60 & -63 & -52 & -50 & -34
\end{bmatrix}

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


\begin{bmatrix}
 -415 & -30 & -61 &  27 &  56 & -20 & -2 &  0 \\
    4 & -22 & -61 &  10 &  13 &  -7 & -9 &  5 \\
  -47 &   7 &  77 & -25 & -29 &  10 &  5 & -6 \\
  -49 &  12 &  34 & -15 & -10 &   6 &  2 &  2 \\
   12 &  -7 & -13 &  -4 &  -2 &   2 & -3 &  3 \\
   -8 &   3 &   2 &  -6 &  -2 &   1 &  4 &  2 \\
   -1 &   0 &   0 &  -2 &  -1 &  -3 &  4 & -1 \\
    0 &   0 &  -1 &  -4 &  -1 &   0 &  1 &  2
\end{bmatrix}

注意左上角之相当大的数值。这就是DC系数。

量化(Quantization)

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

一个普遍的量化矩阵是:


\begin{bmatrix}
 16 & 11 & 10 & 16 & 24 & 40 & 51 & 61 \\
 12 & 12 & 14 & 19 & 26 & 58 & 60 & 55 \\
 14 & 13 & 16 & 24 & 40 & 57 & 69 & 56 \\
 14 & 17 & 22 & 29 & 51 & 87 & 80 & 62 \\
 18 & 22 & 37 & 56 & 68 & 109 & 103 & 77 \\
 24 & 35 & 55 & 64 & 81 & 104 & 113 & 92 \\
 49 & 64 & 78 & 87 & 103 & 121 & 120 & 101 \\
 72 & 92 & 95 & 98 & 112 & 100 & 103 & 99
\end{bmatrix}

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


\begin{bmatrix}
 -26 & -3 & -6 &  2 &  2 & -1 & 0 & 0 \\
   0 & -2 & -4 &  1 &  1 &  0 & 0 & 0 \\
  -3 &  1 &  5 & -1 & -1 &  0 & 0 & 0 \\
  -4 &  1 &  2 & -1 &  0 &  0 & 0 & 0 \\
   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
\end{bmatrix}

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


\mathrm{round}
\left(
 \frac{-415}{16}
\right)
=
\mathrm{round}
\left(
 -25.9375
\right)
=
-26

熵编码技术(entropy coding)

Z字型扫描矩阵的顺序

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

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

−26, −3, 0, −3, −3, −6, 2, −4, 1 −4, 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, −3, −6, 2, −4, 1 −4, 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 系数差异加回去之后)


\begin{bmatrix}
 -26 & -3 & -6 &  2 &  2 & -1 & 0 & 0 \\
   0 & -3 & -4 &  1 &  1 &  0 & 0 & 0 \\
  -3 &  1 &  5 & -1 & -1 &  0 & 0 & 0 \\
  -4 &  1 &  2 & -1 &  0 &  0 & 0 & 0 \\
   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
\end{bmatrix}

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


\begin{bmatrix}
 -416 & -33 & -60 &  32 &  48 & -40 & 0 & 0 \\
    0 & -24 & -56 &  19 &  26 &   0 & 0 & 0 \\
  -42 &  13 &  80 & -24 & -40 &   0 & 0 & 0 \\
  -56 &  17 &  44 & -29 &   0 &   0 & 0 & 0 \\
   18 &   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
\end{bmatrix}

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



Image:JPEG example image decompressed.jpg
注意原来(上)与解压缩影像(下)的些微差异,在左下角可以轻易地看出来

\begin{bmatrix}
 -68 & -65 & -73 & -70 & -58 & -67 & -70 & -48 \\
 -70 & -72 & -72 & -45 & -20 & -40 & -65 & -57 \\
 -68 & -76 & -66 & -15 &  22 & -12 & -58 & -61 \\
 -62 & -72 & -60 &  -6 &  28 & -12 & -59 & -56 \\
 -59 & -66 & -63 & -28 &  -8 & -42 & -69 & -52 \\
 -60 & -60 & -67 & -60 & -50 & -68 & -75 & -50 \\
 -54 & -46 & -61 & -74 & -65 & -64 & -63 & -45 \\
 -45 & -32 & -51 & -72 & -58 & -45 & -45 & -39
\end{bmatrix}

且对每一个项目加上 128


\begin{bmatrix}
  60 & 63 & 55 &  58 &  70 &  61 & 58 & 80 \\
  58 & 56 & 56 &  83 & 108 &  88 & 63 & 71 \\
  60 & 52 & 62 & 113 & 150 & 116 & 70 & 67 \\
  66 & 56 & 68 & 122 & 156 & 116 & 69 & 72 \\
  69 & 62 & 65 & 100 & 120 &  86 & 59 & 76 \\
  68 & 68 & 61 &  68 &  78 &  60 & 53 & 78 \\
  74 & 82 & 67 &  54 &  63 &  64 & 65 & 83 \\
  83 & 96 & 77 &  56 &  70 &  83 & 83 & 89
\end{bmatrix}

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


\begin{bmatrix}
 -8 &  -8 &  6 &  8 &  0 &   0 &  6 & -7 \\
  5 &   3 & -1 &  7 &  1 &  -3 &  6 &  1 \\
  2 &   7 &  6 &  0 & -6 & -12 & -4 &  6 \\
 -3 &   2 &  3 &  0 & -2 & -10 &  1 & -3 \\
 -2 &  -1 &  3 &  4 &  6 &   2 &  9 & -6 \\
 11 &  -3 & -1 &  2 & -1 &   8 &  5 & -3 \\
 11 & -11 & -3 &  5 & -8 &  -3 &  0 &  0 \\
  4 & -17 & -8 & 12 & -5 &  -7 & -5 &  5
\end{bmatrix}

每个像素大约是 5 的平均绝对误差,也就是说,\frac{1}{64} \sum_{x=1}^8 \sum_{y=1}^8 |e(x,y)| = 4.8125。误差在左下角显而易见,左下方的像素变得比它邻近右方的像素还更暗。

用法

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

照片

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


低品质 (10%), 档案大小为 1.7 KB.
中等品质 (50%), 档案大小为 5.7 KB.
最高品质 (100%), 档案大小为 36 KB.


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

中等品质的相片只有六分之一的储存空间,但是几乎没有明显的细节损失或是看得到的人为效果。然而,一旦超过一个某整的压缩限度,压缩的影像逐渐地显现出可以看得到的瑕疵。参考比率失真理论(en: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年所主张的专利,且发现他们因为前案而无效作废 [1]。其他的也已推断Forgent并无拥有涵盖JPEG的专利 [2] 。尽管如此,在2002年2004年之间,Forgent借由把他们的专利授权给某些30家公司,而获得大约9千万美金。在2004年4月,Forgent控告31家其他公司来强求更多的授权支付。同年的七月,21家较大的电脑公司组成的协会提出反控告,包含使该专利无效的目标。然而,到2005年7月的时候,这场官司仍然持续中(德国新闻连结)。

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

无损耗旋转 (lossless JPEG rotation)

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

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

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

参看:无损耗JPEG旋转程式列表 (英语)

参见

外部链接







Why are we here?
All text is available under the terms of the GNU Free Documentation License
This page is cache of Wikipedia. History