图像处理、分析与机器视觉
上QQ阅读APP看书,第一时间看更新

5.4 JPEG文件

严格来说,JPEG并非一种文件格式,它是由ISO和CCITT为静态图像所建立的第一个国际数字图像压缩标准。JPEG主要是为了解决图像信息过于庞大的问题,它通过有损压缩方式去除图像中的冗余数据,可以用最少的磁盘空间仍能获得较好的图像质量。使用JPEG标准压缩的图像后缀名为“.jpg”或“.jpeg”。

JPEG属于有损压缩,它通常通过分析图像,剔除人眼无法识别的信息,只保留连续色调图像中亮度和色相的变化,并将处理后的数据保存为24位的彩色图像。JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩。IMAQ Write File 2的JPEG实例使用Image Quality参数指定对图像压缩的情况,它的值从0~1000可选。其中0级压缩比最高,图像品质最差,而1000级则图像的细节几乎无损。默认情况下,Image Quality的值为759。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,比较适合应用于互联网,也普遍应用于需要连续色调的图像。

JPEG文件大体上可以分成两个部分:标记码(Tag)和被压缩的数据。标记码由两个字节构成,其前一个字节是固定值0xFF,后一个字节则根据不同意义有不同数值。在每个标记码之前还可以添加数目不限的无意义的0xFF填充,也就说连续的多个0xFF可以被理解为一个0xFF,并表示一个标记码的开始。JPEG常用的标记有SOI (Start of Image)、APP (Application)、DQT (Define Quantization Table)、SOF0 (Start of Frame)、DHT (Define Huffman Table)、DRI (Define Restart Interval)、SOS (Start of Scan)、EOI (End of Image),这些标记在文件中以标记码形式出现,例如SOI的标记代码为0xFFD8。在完整的节标记码后,一般直接存放该标记码对应的压缩数据流,记录关于文件的各种信息。表5-6列出了JPEG常用标记的标记码、占用的字节数和表示的意义。

表5-6 JPEG常用标记

续表

此外,由于在JPEG文件中0xFF具有标志性的意义,所以在压缩数据流(真正的图像信息)中若出现0xFF,就需要做特别处理。具体方法是,在数据0xFF后添加一个没有意义的0x00。换句话说,如果在图像数据流中遇到0xFF,应该检测其紧接着的字符,并根据获得的值分别进行处理:

(1)0x00,表示0xFF是图像流的组成部分,需要进行译码。

(2)0xD9,与0xFF组成标记EOI,则图像流结束,同时图像文件结束。

(3)0xD0~0xD7,则组成RSTn标记,且忽视整个RSTn标记,即不对当前0xFF和紧接着的0xDn两个字节进行译码,并按RST标记的规则调整译码变量。

(4)0xFF,则忽视当前0xFF,对后一个0xFF再作判断。

(5)其他数值,则忽视当前0xFF,并保留紧接的此数值用于译码。

JPEG 2000作为JPEG的升级版,其压缩率比JPEG高约30%左右,同时支持有损和无损压缩。JPEG 2000格式有一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,不断提高图像质量,让图像由朦胧到清晰显示。此外,JPEG 2000还支持所谓的感兴趣区域特性,可以任意指定影像上感兴趣区域的压缩质量,还可以选择指定的部分先解压缩。JPEG 2000和JPEG相比优势明显,且向下兼容,因此可取代传统的JPEG格式。JPEG 2000既可应用于传统的JPEG市场,如扫描仪、数码相机等,又可应用于新兴领域,如网络传输、无线通信等。

由于JPEG优异的品质和杰出的表现,它的应用也非常广泛。目前各类浏览器均支持JPEG这种图像格式,因为JPEG格式的文件尺寸较小,下载速度快,使得它成为网络上较受欢迎的图像格式。虽然压缩时图像亮度和色相的变化常会被保留,但JPEG采用的有损压缩算法却会导致图像不能完全被重建。因此,若需要在重建的图像上进行精确测量,一般并不建议使用JPEG格式。