JPEG(图像压缩标准)
JPEG 是Joint Photographic Experts Group(联合图像专家小组)的缩写,是第一个国际图像压缩标准。JPEG图像压缩算法能够在提供良好的压缩性能的同时,具有比较好的重建质量,被广泛应用于图像、视频处理领域。人们日常碰到的“.jpeg”、‘’.jpg“等指代的是图像数据经压缩编码后在媒体上的封存形式,不能与JPEG压缩标准混为一谈。
中文名联合图像专家小组
Joint Photographic Experts Group
JPEG
第一个国际图像压缩标准
部分JPEG标准
⑴核心图像编码系统,为JPEG2000指定了基本的特征集合和码流语法;
⑵扩充(给⑴的核心定义添加更多的特征和完善度);
⑶运动JPEG2000指定了文件格式(MJ2),它包含用于动态视频的具有JPEG2000核心编码算法的图像序列编码;
⑷ISO/IEC15444-4:2002。它指定了使用第一部分的JPEG2000用于编码/解码一致性测试;
⑸参考软件 (包含Java和C实现)。在这一部分中,提供了两个软件源包(使用Java和C编程语言)用于测试和开发商对于JPEG2000系统实现的有效性检验;
⑹复合图像文件格式(用于文件扫描和传真应用程序)指定了其他文件格式(JPM)用于存储复合图像。ITU-TT.441ISO 16485多层混合光栅内容(mixed raster content,MRC)模型用于表示在第6部分的JPEG2000复合图像;
⑺对⑴的最小支持(技术报告)【已摒弃】。
⑻安全JPEG2000(JPSEC)。这一部分设计了用于JPEG2000应用的安全方面,例如加密、数字水印等;
⑼交互工具、API和协议(JPIP)。这一部分定义了一个交互式网络协议,并且它指定了用于JPEG2000图像和相关元数据高效的交换工具;
⑽3D和浮点数据(JP3D)。这一部分开发与三维数据有关的内容,以3D医疗图像重建作为例子;
⑾无线(JPWL)。这一部分开发了用于无线多媒体的应用。主要涉及用JPEG2000在易出错的无线网环境中JPWL的差错保护、检测和修正;
⑿对MPEG-4,ISO基本媒介文件格式(media file format)具有共同的文本ISO/IEC 14496-12
截止于2007年,⑴为完全被认可的ISO标准,定义了核心压缩技术和最小文件格式,⑵~⑹定义压缩和文件格式的扩充。其中,⑺已摒弃。⑻~仍在发展之中
技术概括
在计算机处理中,JPEG是一种广泛适用的压缩图像标准方式。JPEG就是「联合图像专家组」(JointPhotographicExpertsGroup)的首字母缩写。采用这种压缩格式的文件一般就称为JPEG;此类文件的一般扩展名有:.jpeg、.jfif、.jpg或.jpe,其中在主流平台最常见的是.jpg。JPEG只描述一副图像如何转换成一组数据流,而不论这些字节存储在何种介质上。由独立JPEG组创立的另一个进阶标准,JFIF(JPEGFileInterchangeFormat,JPEG文件交换格式)则描述JPEG数据流如何生成适于电脑存储或传送的图像。在一般应用中,我们从数码相机等来源获得的“JPEG文件”,指的就是JFIF文件,有时是ExifJPEG文件。
JPEG/JFIF是互联网上最常见的图像存储和传送格式。但此格式不适合用来绘制线条、文字或图标,因为它的压缩方式对这几种图片损坏严重。PNG和GIF文件更适合以上几种图片。不过GIF每像素只支持8bits色深,不适合色彩丰富的照片,但PNG格式就能提供JPEG同等甚至更多的图像细节。
JPEG(发音为/jay-peg/)是一种针对相片影像而广泛使用的一种失真压缩标准方法。使用这种压缩的档案格式一般也被称为JPEG;虽然在所有平台上.jpg是最普遍的,但是针对这种格式一般的扩展名是.jpeg、.jfif、.jpg、.JPG、或是.JPE。
这个名称代表JointPhotographicExpertsGroup(联合图像专家小组)。一个由独立JPEG小组(IndependentJPEGGroup)所建立的额外标准,称为JFIF(JPEGFileInterchangeFormat,JPEG档案交换格式)详细说明如何从一个JPEG串流,产出一个适合于电脑储存和传输(像是在因特网上)的档案。
在普遍的用法,当有人称呼一个"JPEG档案",一般而言他是意指一个JFIF档案,或有时候是一个ExifJPEG档案。然而,也有其他以JPEG为基础的档案格式,像是JNG。JPEG/JFIF是最普遍在万维网(WorldWideWeb)上被用来储存和传输照片的格式。它并不适合于线条绘图(drawing)和其他文字或图示(iconic)的图形,因为它的压缩方法用在这些图形的型态上,会得到不适当的结果(PNG和GIF格式通常是用来针对这种目的之图形;GIF每一像素只有8位元,并不很适合于用在彩色照片,PNG可以被用来无失真地储存照片,但是档案太大让它不适合在网页上放照片)。
在ISO公布的JPEG标准方案中,包含了两种压缩方式。一种是基于DCT变换的有损压缩编码方式,它包含了基本功能和扩展系统两部分:一种是基于空间DPCM(差分脉冲编码调制,是预测编码的一种)方法的无损压缩编码方式
压缩标准
压缩操作模式
1.基于DCT的连续模式(Sequential DCT-based mode of operation)
1) baseline sequential;
2) extended sequential, Huffman coding, 8-bit sample precision;
3) extended sequential, arithmetic coding, 8-bit sample precision;
4) extended sequential, Huffman coding, 12-bit sample precision;
5) extended sequential, arithmetic coding, 12-bit sample precision.
一次将图像由左到右、由上到下顺序处理。
2.基于DCT的渐进模式(Progressive DCT-based mode of operation)
1) spectral selection only, Huffman coding, 8-bit sample precision;
2) spectral selection only, arithmetic coding, 8-bit sample precision;
3) full progression, Huffman coding, 8-bit sample precision;
4) full progression, arithmetic coding, 8-bit sample precision;
5) spectral selection only, Huffman coding, 12-bit sample precision;
6) spectral selection only, arithmetic coding, 12-bit sample precision;
7) full progression, Huffman coding, 12-bit sample precision;
8) full progression, arithmetic coding, 12-bit sample precision.
当图像传输的时间较长时,可将图像分数次处理,以从模糊到清晰的方式来传送图像(效果类似GIF在网络上的传输)。
3.无失真模式(Lossless mode of operation)
1) lossless processes with Huffman coding;
2) lossless processes with arithmetic coding.
使用预测性编码代替基于DCT的变换,而且在这个模式中没有涉及量化。
4.分级模式(Hierarchical mode of operation)
图像以数种分辨率来压缩,其目的是为了让具有高分辨率的图像也可以在较低分辨率的设备上显示。
JPEG编解码器
JPEG下图为JPEG基本系统的编解码器原理图,输入的彩色图像为Y、U、V三个分量,JPEG对它们分别进行编码。
压缩步骤
由于JPEG的有损压缩方式(Lossy mode of operation)并不比其他的压缩方法更优秀,
因此我们着重来看它的有损压缩中最常用的基线JPEG算法(baseline sequential)。以一幅24位彩色图像为例,JPEG的压缩步骤分为:
1.颜色转换
JPEG支持图像采用任何一个色彩空间,支持1~4个颜色分量。灰度图像颜色分量数为1。RGB、YUV、YCbCr等拥有3种颜色分量。4种颜色分量的例子是青、洋红、黄和黑(Cyan,Magenta,Yellow,and Black,CMYK)。为了减少色度通道包含的大量的冗余信息,本例中采用YCbCr色彩空间。首先需要进行从RGB到YCbCr的色彩空间变换:
Y = 0.299000R + 0.587000G + 0.114000B
Cb = -0.168736R - 0.331264G + 0.500002B
Cr = 0.500000R - 0.418688G - 0.081312B
其中,Y表示亮度分量,Cb和Cr表示蓝红色度分量。
2.DC电平偏移
最初,在图像中的像素存储在无符号的整数中。对于数学计算,在图像中任何变换或数学计算开始之前,根本上是将这些采样转换成两个补码表示。DC电平偏移的目的是保证输入图像的采样有近似地集中在零附近的动态范围。DC电平偏移执行的图像采样只通过无符号数表示。
方法:假设图片分量的采样精度为n,那么分量中的每个像素值应减去2的(n-1)次幂。
对于图像而言他的采样由无符号的整数表示,例如CT(X光断层成像)图像,动态范围已经集中于零附近,所以不需要DC电平偏移。
3.子采样
色彩空间转换之后,图像的大多数空间信息包含在亮度分量Y中。色度分量Cb和Cr包含大量冗余的颜色信息,所以我们运用子采样较少色度数据量以在丢失少量信息的情况下压缩图像。
基线JPEG常用的子采样格式为4:2:0,同时支持4:2:2和4:4:4颜色格式。
3.DCT变换
FDCT、IDCTDCT(DiscreteCosineTransform)是将图像信号在频率域上进行变换,分离出高频和低频信息的处理过程。然后再对图像的高频部分(即图像细节)进行压缩,以达到压缩图像数据的目的。首先将图像划分为多个8*8的矩阵。然后对每一个矩阵作DCT变换。变换后得到一个频率系数矩阵,其中的频率系数都是浮点数。
标准色度量化表标准亮度量化表4.量化
由于在后面编码过程中使用的码本都是整数,因此需要对变换后的频率系数进行量化,将之转换为整数。由于进行数据量化后,矩阵中的数据都是近似值,和原始图像数据之间有了差异,这一差异是造成图像压缩后失真的主要原因。
量化算法在这一过程中,质量因子的选取至为重要。值选得过大,可以大幅度提高压缩比,但是图像质量就比较差;反之,质量因子越小(最小为1),图像重建质量越好,但是压缩比越低。对此,ISO已经制定了一组供JPEG代码实现者使用的标准量化值(如右图所示)。
右图的两个量化表的设计是根据由Lohscheller做的心理视觉实验来确定二维基函数的可见阈值。
这些表也不适用于各种各样的图像,但他们为大多8位精度自然图像进行亮度和色度采样提供了合理的、出色的结果。
5.编码
从前面过程我们可以看到,颜色转换完成到编码之前,图像并没有得到进一步的压缩,DCT变换和量化可以说是为编码阶段做准备。
编码采用两种机制:一是0值的行程长度编码;二是熵编码(EntropyCoding)。
zig_zag①之字形排序(Zig-zag ordering)
在JPEG中,采用曲徊序列,即以矩阵对角线的法线方向作“之”字排列矩阵中的元素。这样做的优点是使得靠近矩阵左上角、值比较大的元素排列在行程的前面,而行程的后面所排列的矩阵元素基本上为0值。
②使用RLE对交流系数(AC)进行编码
行程长度编码是非常简单和常用的编码方式,在此不再赘述。
需要注意的是,AC系数的之字形序列编码中有两个特殊符号——(0,0)和(15,0)。第一个特殊符号指的是块的结束(end-of-block,EOB),用来表明在之字形块中剩余的元素都是零。另一个特殊符号是指零游程长度(zero-run-length,ZRL),用来表明16个零游程。基线JPEG允许的零游程最大长度是16个。如果这里的零超过16个,那么这个游程分成几个长度为16的零游程。
DC差分编码③使用DPCM对直流系数(DC)进行编码
DCT系数量化之后,通过差分编码对量化后的DC系数编码。当前块的DC系数减去前个块的DC系数,然后对其差值进行编码,如右图所示。这就利用了邻接块DC值之间的空间相关性。
④熵编码
编码实际上是一种基于统计特性的编码方法。在JPEG中允许采用HUFFMAN编码或者算术编码。而基线JPEG算法(baseline sequential)采用的是前者。
经过RLE编码的AC系数可以映射成两个标志(RUNLENGTH,CATEGORY)和(AMPLITUDE),前者采用的是霍夫曼编码,而后者采用的是VLI编码。同理经过DPCM编码的DC系数同样可以映射成两个标志(CATEGORY)和(AMPLITUDE),,前者采用霍夫曼编码,后者采用VLI编码。
基线JPEG允许使用4个霍夫曼表,两个用于AC系数编码,两个用于DC系数编码。具体的编码表请查询ITU-T.81的表K.3~K.6
数据压缩格式
1.JPEG定义了三种压缩数据格式:
a) 交换格式 (interchange format)
b) 压缩图像数据的缩略格式(abbreviated format for compressed image data,)
c) 规范表数据的缩略格式(abbreviated format for table-specification data)
2.压缩数据规范的基本内容(General aspects of the compressed data formatspecifications)
在结构上,压缩数据格式包含一个由参数、标志和熵编码数据段组成的有序集合。参数和标记往往又形成标志段。由于所有这些组成部分是由字节对齐的代码表示的,因此每一个压缩数据格式由一个8-bits字节的有序序列组成。对于每一个字节,都定义了一个最高有效位(MSB)和一个最低有效位(LSB)。
插图的语法规定示例3.插图的语法规定 (Conventions for syntax figures)
如右图:
为了便于了解JPEG压缩数据流中每一个frame和scan的内容,必须掌握以下语法
– 参数/标记指示符:一个细线框包含一个标志或一个单独的参数;
– 段指示符:一个粗线框包含一个标志段、一个熵编码段或他们的结合;
– 参数长度指示符:细线框的宽度与其包含的参数或标志的位长成正比(如图B.1中的E(4位),B(8位)和D(16位)所示)。相反,粗线框的宽度是无意义的;
– 可选的/有条件的指示符:方括号标明,在压缩数据中,当前标志段或标记只是可选的或有条件的。
– 次序:交换格式中,图中所示的参数或标志都先于其右边所示的参数或标志,并跟在它左边的参数后面。
– 熵编码数据指示符:尖括号标明,其包围的内容是已经经过了熵编码的。
JPEG4.高层语法 (High-level syntax)
如右图:
Figure specifies the order of the high-level constituent parts of the interchange format for all non-hierarchical encoding processes specified in this Specification.
参考资料1.jpeg简介·电子发烧友