购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1.4 JPEG

JPEG图像为静止连续色调图像,是一种常见的图像格式。它由联合图像专家组(Joint Photographic Experts Group,JPEG)开发。JPEG文件的扩展名为.jpg或.jpeg,它用有损压缩算法去除冗余的图像和彩色数据,在获得极高压缩比的同时展现丰富生动的图像,即可以用较小的磁盘空间得到较好的图像质量。然而,有损压缩算法将JPEG局限于显示格式,在每次保存为JPEG图像时都会丢失一些数据,因此,通常只在图像处理的最后阶段保存图像为JPEG格式。

JPEG可分为标准JPEG(Baseline JPEG)、渐进式JPEG(Progressive JPEG)和JPEG2000 3类。

(1)标准JPEG:以24bit存储单个光栅图像,是与平台无关的图像格式,支持最高级别的压缩。但是,这种压缩是有损耗的。在网页下载此类图像时,只能从上到下按顺序显示图像,直至图像资料全部下载完毕才能看到全貌。

(2)渐进式JPEG:为标准JPEG的改良格式,支持交错式传输。在网页下载此类图像时,先呈现图像的粗略外观,再慢慢呈现完整的内容,即先传输图像的轮廓,再逐步传输数据,让图像由朦胧到清晰显示。

(3)JPEG2000:为了改进JPEG基于离散余弦变换压缩方式的不足,联合图像专家组提出了JPEG2000。JPEG2000是基于小波变换的图像压缩标准,文件的扩展名通常为.jp2。在有损压缩下,JPEG2000的一个比较明显的优点是没有传统的JPEG(标准JPEG和渐进式JPEG)压缩中的马赛克失真效果。JPEG2000的失真主要是模糊失真。模糊失真产生的主要原因是在编码过程中高频量一定程度的衰减。传统的JPEG压缩也存在模糊失真的问题。在低压缩比情况下(压缩比小于10∶1),传统的JPEG图像质量有可能要比JPEG2000好。JPEG2000在压缩比较高的情况下,优势才开始明显。整体来说,和传统的JPEG相比,JPEG2000仍然有很大的技术优势,通常压缩性能大概可以提高30%以上。一般在压缩比达到100∶1的情况下,采用JPEG压缩的图像已经严重失真并开始难以识别了,但采用JPEG2000格式的图像仍可识别。有损压缩图像质量或失真程度一般用峰值信噪比(PSNR)指标来衡量。虽然峰值信噪比不能完全反映人类视觉效果,但是它仍是一个比较流行的量化指标。传统的JPEG与JPEG2000的对比如表2-2所示。

表2-2 传统的JPEG与JPEG2000的对比

在JPEG文件格式中,一个字(16bit)的存储使用的是摩托罗拉格式正序存放,而不是英特尔格式的逆序存放,即一个字的高字节(高8bit)在前,低字节(低8bit)在后。

JPEG文件是按段存储的,段的数量和长度并不是固定的。JPEG文件只要包含了足够的信息就能被打开。一般来说,JPEG文件常见的段有8个,分别是图像开始(Start Of Image,SOI)、图像识别信息(Application 0,APP0)、应用信息(Application n ,APP n )、定义量化表(Define Quantization Table,DQT)、帧图像开始(Start Of Frame,SOF0)、定义霍夫曼表(Define Huffman Table,DHT)、扫描开始(Start Of Scan,SOS)、图像结束(End Of Image,EOI)。JPEG文件结构如图2-4所示。

图2-4 JPEG文件结构

每个段包含两部分,分别是标记码和压缩数据。段的一般结构如图2-5所示。

图2-5 段的一般结构

段长度按大端序存放,高位在前,低位在后。有些段没有段长度,也没有段内容,只有段标识和段类型,如SOI、EOI。

下面分别介绍标记码和压缩数据的含义。

(1)标记码。

标记码由2字节构成,第1字节是段标识,固定值为0xFF,每个新段都以0xFF开头。第2字节是段类型,不同的值代表不同类型的段。例如,SOI的标记码为0xFFD8。段类型有30种,然而只有10种必须被所有的程序识别,其他类型都可以忽略。表2-3所示为常见的8种类型标记码。

表2-3 常见的8种类型标记码

需要注意的是,在JPEG中,0xFF具有标记的意思,因此在压缩图像数据流时,如果出现了0xFF,则需要判断是标记码还是压缩数据。

判断方法是:如果在图像数据流中遇到0xFF,则应该检测其紧接着的字符,根据该字符对应的以下各种情况,进行不同的处理。

①0x00:表示0xFF是图像数据流的组成部分,需要进行译码。

②0xD9:表示与0xFF组成标记EOI,代表图像数据流的结束和图像文件的结束。

③0xD0~0xD7:组成RST n 标记,需要忽视整个RST n 标记,即不对当前0xFF和紧接着的0xD n 2字节进行译码,并按RST标记的规则调整译码变量。

④0xFF:忽略当前0xFF,对后一个0xFF进行判断。

⑤其他数值:忽略当前0xFF,并将此数值及其之后的数值用于译码。

(2)压缩数据。

一个完整的2字节标记码后面,就是该标记码对应的压缩数据,它记录了关于JPEG文件的若干信息。其中,紧接着标记码的2字节存放的是这个段的长度,包括段内容和段长度本身,但不包括段标识和段类型的长度。段内容应不大于65533字节。

下面按一般JPEG文件中常见的8个段的排列顺序介绍各段的结构。

1.SOI

SOI是JPEG文件的文件头,格式非常简单,只包括1字节的段标识0xFF和1字节的段类型0xD8,没有数据内容。

2.APP0

APP0的标记码为0xFFE0,该标记码后包含9个具体的字段。

(1)段长度:2字节,用来表示(1)到(9)的9个字段的总长度,即不包含标记码,但包含本字段。

(2)交换格式:5字节,固定值为0x4A46494600,即字符串“JFIF0”的ASCII码。通常使用JFIF的JPEG交换格式和TFIF的JPEG交换格式。

(3)版本号:2字节,前一字节为主版本号,后一字节为次版本号。固定值一般为0x0102,表示JFIF的版本号为1.2,但也可能为其他数值,表示其他版本号。

(4)密度单位:1字节,可选值,取值为0表示无单位;取值为1表示点数/英寸;取值为2表示点数/厘米。

(5) X 方向像素密度:2字节,表示水平方向的密度。

(6) Y 方向像素密度:2字节,表示垂直方向的密度。

(7)缩略图水平像素数:1字节。

(8)缩略图垂直像素数:1字节。

(9)缩略图RGB位图:长度是3字节的倍数,即3× n 字节, n 为缩略图像素总数(缩略图 X 方向像素数与缩略图 Y 方向像素数的乘积),保存了一个24bit的RGB位图。通常情况下,如果没有缩略图,则字段(7)和(8)的取值均为0,且删除本字段。

3.APP n

APP n 标记是一种扩展标记,用于存储与特定应用程序相关的数据。这些标记允许应用程序在JPEG文件中存储自定义信息,而不会影响图像的解码和显示。每个APP n 标记都包含一个特定的标识符和相关的数据。 n 的取值范围为1~15,标记码为0xFFE1~0xFFEF,包含了应用详细信息。

APP1(标识符为“Exif”):这是用于存储图像的Exif元数据的标记。Exif数据包含有关拍摄设备、拍摄参数和其他图像信息的详细信息。

APP2(标识符为“ICC_PROFILE”):这是用于存储图像的ICC(International Color Consortium)配置文件的标记。ICC配置文件包含颜色管理信息,可用于确保图像在不同设备和软件之间的一致性显示。

APP14(标识符为“Adobe”):这是由Adobe Systems定义的一个标记,用于存储与Adobe应用程序相关的数据。它可以包含特定于Adobe软件的信息,如色彩设置和转换参数。

除了上述常见的标记,APP n 标记还可以根据应用程序的需求进行自定义。每个标记的数据部分的格式及含义由相关的应用程序定义和解释。总之,APP n 标记是JPEG文件中用于存储应用程序特定信息的扩展标记。它们允许应用程序在JPEG图像中附加自定义数据,以满足特定的应用需求。

4.DQT

JPEG文件一般有两个DQT, Y 值(亮度)和 C 值(色度)各定义了一个DQT段。DQT的标记码为0xFFDB,标记码后包含两个具体的字段。

(1)段长度:2字节,表示段长度和多个量化表(QT)字段的总长度。

(2)量化表:一个DQT可以包含多个量化表,量化表数量最多为4个,每个量化表都有自己的信息字节,其中包括以下两项内容。

● 精度及量化表ID:1字节,高4bit表示精度,只有两个可选值,即0表示8bit,1表示16bit。低4bit表示量化表ID,取值范围为0~3。

● 表项:64×(精度取值+1)字节。例如,当精度取值为0时,即8bit精度,其表项长度为64×(0+1)=64字节。

5.SOF0

SOF0标记码为0xFFC0,标记码后包含6个具体的字段。

(1)段长度:2字节,(1)~(6)共6个字段的总长度。

(2)样本精度:1字节,表示每个数据样本的比特数,通常是8bit。

(3)图像高度:2字节,表示以像素为单位的图像高度。

(4)图像宽度:2字节,表示以像素为单位的图像宽度。

(5)颜色分量个数:1字节,1表示灰度图像,3表示YCrCb或YIQ彩色图像,4表示CMYK彩色图像。JPEG通常采用YCrCb彩色模型,其中,Y表示亮度,Cr表示红色分量,Cb表示蓝色分量。

(6)颜色分量信息:颜色分量个数×3字节,通常为9字节,并依次表示如下信息。

● 颜色分量ID:1字节,取值为1表示Y,2表示Cb,3表示Cr,4表示I,5表示Q。

● 采样系数:1字节,高4bit表示水平采样因子,低4bit表示垂直采样因子。采样系数以水平和垂直方向的采样率表示,通常以“水平采样率乘垂直采样率”的形式表示。采样系数决定了色度分量相对于亮度分量的采样密度,从而影响了图像的颜色信息和细节。较高的采样率可以提供更好的色彩保真度,但会增加图像文件的大小。

● 量化表号:1字节,表示当前分量使用的量化表ID。

6.DHT

JPEG文件里有两类霍夫曼表:一类用于DC(直流分量);另一类用于AC(交流分量)。一般有4个霍夫曼表,即亮度DC霍夫曼表、亮度AC霍夫曼表、色度DC霍夫曼表、色度AC霍夫曼表,最多可有6个霍夫曼表,包括两个额外的亮度霍夫曼表和色度霍夫曼表。DHT标记码为0xFFC4,该标记码后包含两个具体的字段。

(1)段长度:2字节,表示(1)~(2)两个字段的总长度。

(2)霍夫曼表(HT):一个DHT可以包含多个霍夫曼表,每个霍夫曼表都有自己的信息字节,其中包含以下字段。

● 表ID和表类型:1字节,高4bit表示表的类型,取值只有两个,即0表示DC,1表示AC。低4bit表示霍夫曼表ID。

● 霍夫曼表位表:16字节,这16个数的和应该小于或等于256。

● 霍夫曼表值表:长度为霍夫曼表位表16个数的和。例如,霍夫曼表位表的值为00-01-05-01-01-01-01-01-01-00-00-00-00-00-00-00,共16字节,其和为12,则霍夫曼表值表为12字节。

7.SOS

SOS标记码为0xFFDA,SOS后紧接的是压缩的图像数据,数据存放顺序是从左到右、从上到下。SOS标记码后包含4个具体的字段。

(1)段长度:2字节。

(2)颜色分量个数:1字节,只有3个可选值,1表示灰度图像,3表示YCrCb或YIQ彩色图像,4表示CMYK彩色图像。

(3)颜色分量信息:按颜色分量个数重复出现,每个颜色分量包括以下字段。

● 颜色分量ID:1字节,1表示Y,2表示Cb,3表示Cr,4表示I,5表示Q。

● 霍夫曼表ID:1字节,高4bit表示DC霍夫曼表ID;低4bit表示AC霍夫曼表ID。

(4)压缩图像数据:3字节,包括以下字段。

● 谱选择开始:1字节,固定值为0x00。

● 谱选择结束:1字节,固定值为0x3F。

● 谱选择:1字节,固定值为0x00。

8.EOI

EOI只有2字节的标记码,标记码为0xFFD9,表示JPEG文件的结束。 WO0J46fh9QMyn2K5qdzOjMDwj1EfQ8xkswEslcGFT7T3XX5hoD4p8iI14UZsdw3F

点击中间区域
呼出菜单
上一章
目录
下一章
×