VC数字图像处理编程讲座之六

2019-04-15 17:03发布

图像文件格式一般的图像文件结构主要都包含有文件头、文件体和文件尾等三部分

文件头: 软件ID、软件版本号、图像分辨率、图像尺寸、图像深度、彩 {MOD}类型、编码方式、压缩算法
文件体:图像数据、彩 {MOD}变换表
文件尾:用户名、注释、开发日期、工作时间
以上是一个大概的图像文件结构说明,实际的结构根据不同的格式其中的条目要细得多,结构也复杂得多,各个条目所占空间及条目间的排列顺序也大不相同。目前还没有非常统一的图像文件格式。但大多数图像处理软件都与数种图像文件格式相兼容,也即可读取多种不同格式的图像文件。这样,不同的图像格式间可相互转换。当然,还有专门的图像格式转换软件,用于各种图像格式间的转换。
图像文件后缀一览表
 
文件格式是存储文本、图形或者图像数据的一种数据结构。在文字处理中,存储文本文件要使用文件格式。例如,使用微软公司的Word处理器编写的文件,可根据不同的应用环境用不同的格式存储。如果使用多信息文本格式(Rich Text Format,RTF)存储,这个文件就可在其他的平台(如Mac机)或者使用其他的字处理器进行处理。同样,存储图像也需要有存储格式,从20世纪70年代图像开始进入计算机以来,开发了许许多多的图像文件存储格式,而且互相不兼容,需要使用针对特定格式的处理软件。现在都意识到,不兼容的格式给用户造成很多的不便,因此有些格式也逐渐被淘汰。在计算机中,有两种类型的图:矢量图(vector graphics)和位映象图(bitmapped graphics)。矢量图是用数学方法描述的一系列点、线、弧和其他几何形状,如图6-17(a)所示。因此存放这种图使用的格式称为矢量图格式,存储的数据主要是绘制图形的数学描述;位映象图(bitmapped graphics)也称光栅图(raster graphics),这种图就像电视图像一样,由象点组成的,如图6-17(b),因此存放这种图使用的格式称为位映象图格式,经常简称为位图格式,存储的数据是描述像素的数值。图6-1 矢量图与位映象图除了本章介绍的4种常用格式之外,在我们的工作中还会遇到其他图像格式。为方便查阅,现将部分图形与图像文件的后缀和名称列在表6-11和表6-12中。如果编写程序需要很专业的图像格式资源,包括一些源程序(source code),可以访问站点:http://www.wotsit.org/,你可饱览多媒体世界中的各种媒体的存储格式。表6-11位映象图格式/光栅图光栅(bitmapped formats / raster graphics)后缀文件名称后缀文件名称AG4Access G4 document imagingJFFJPEG (JFIF)ATTAT&T Group IVJPGJPEGBMPWindows & OS/2KFXKofax Group IVCALCALS Group IVMACMacPaintCITIntergraph scanned imagesMILSame as GP4 extensionCLPWindows ClipboardMSPMicrosoft PaintCMPPhotomatrix G3/G4 scanner formatNIFNavy Image FileCMPLEAD TechnologiesPBMPortable bitmapCPRKnowledge AccessPCDPhotoCDCTScitex Continuous TonePCXPC PaintbrushCUTDr. HaloPIXInset Systems (HiJaak)DBXDATABEAMPNGPortable Network GraphicsDXAutotrol document imagingPSDPhotoshop native formatED6EDMICS (U.S. DOD)RASSunEPSEncapsulated PostScriptRGBSGIFAXFaxRIAAlpharel Group IV document imagingFMVFrameMakerRLCImage SystemsGEDArts & LettersRLEVarious RLE-compressed formatsGDFIBM GDDM formatRNLGTX RunlengthGIFCompuServeSBPIBM StoryBoardGP4CALS Group IV - ITU Group IVSGISilicon Graphics RGBGX1Show PartnerSUNSunGX2Show PartnerTGATargaICAIBM IOCA (see MO:DCA)TIFTIFFICOWindows iconWPGWordPerfect imageIFFAmiga ILBMXBMX Window bitmapIGFInset Systems (HiJaak)XPMX Window pixelmapIMGGEM PaintXWDX Window dump表6-12 矢量图格式(vector graphics formats)后缀文件名称后缀文件名称3DS3D StudioGEMGEM proprietary906Calcomp plotterG4GTX RasterCAD - scanned images
into vectors for AutoCAD
AIAdobe IllustratorIGFInset Systems (HiJaak)CALCALS subset of CGMIGSIGESCDRCorelDRAWMCSMathCADCGMComputer Graphics MetafileMETOS/2 metafileCH3Harvard Graphics chartMRKInformative Graphics markup fileCLPWindows clipboardP10Tektronix plotter (PLOT10)CMXCorel Metafile ExchangePCLHP LaserJetDGAutotrolPCTMacintosh PICT drawingsDGNIntergraph drawing formatPDWHiJaakDRWMicrografx Designer 2.x, 3.xPGLHP plotterDS4Micrografx Designer 4.xPICVariety of picture formatsDSFMicrografx Designer 6.xPIXInset Systems (HiJaak)DXFAutoCADPLTHPGL Plot File (HPGL2 has raster format)DWGAutoCADPSPostScript Level 2EMFEnhanced metafileRLCImage Systems "CAD Overlay ESP"
vector files overlaid onto raster images
EPSEncapsulated PostScriptSSKSmartSketchESIEsri plot file (GIS mapping)WMFWindows MetafileFMVFrameMakerWPGWordPerfect graphicsGCAIBM GOCAWRLVRML    后缀文件名称        
文件格式是存储文本、图形或者图像数据的一种数据结构。在文字处理中,存储文本文件要使用文件格式。例如,使用微软公司的Word处理器编写的文件,可根据不同的应用环境用不同的格式存储。如果使用多信息文本格式(Rich Text Format,RTF)存储,这个文件就可在其他的平台(如Mac机)或者使用其他的字处理器进行处理。同样,存储图像也需要有存储格式,从20世纪70年代图像开始进入计算机以来,开发了许许多多的图像文件存储格式,而且互相不兼容,需要使用针对特定格式的处理软件。现在都意识到,不兼容的格式给用户造成很多的不便,因此有些格式也逐渐被淘汰。在计算机中,有两种类型的图:矢量图(vector graphics)和位映象图(bitmapped graphics)。矢量图是用数学方法描述的一系列点、线、弧和其他几何形状,如图6-17(a)所示。因此存放这种图使用的格式称为矢量图格式,存储的数据主要是绘制图形的数学描述;位映象图(bitmapped graphics)也称光栅图(raster graphics),这种图就像电视图像一样,由象点组成的,如图6-17(b),因此存放这种图使用的格式称为位映象图格式,经常简称为位图格式,存储的数据是描述像素的数值。图6-1 矢量图与位映象图除了本章介绍的4种常用格式之外,在我们的工作中还会遇到其他图像格式。为方便查阅,现将部分图形与图像文件的后缀和名称列在表6-11和表6-12中。如果编写程序需要很专业的图像格式资源,包括一些源程序(source code),可以访问站点:http://www.wotsit.org/,你可饱览多媒体世界中的各种媒体的存储格式。表6-11位映象图格式/光栅图光栅(bitmapped formats / raster graphics)后缀文件名称后缀文件名称AG4Access G4 document imagingJFFJPEG (JFIF)ATTAT&T Group IVJPGJPEGBMPWindows & OS/2KFXKofax Group IVCALCALS Group IVMACMacPaintCITIntergraph scanned imagesMILSame as GP4 extensionCLPWindows ClipboardMSPMicrosoft PaintCMPPhotomatrix G3/G4 scanner formatNIFNavy Image FileCMPLEAD TechnologiesPBMPortable bitmapCPRKnowledge AccessPCDPhotoCDCTScitex Continuous TonePCXPC PaintbrushCUTDr. HaloPIXInset Systems (HiJaak)DBXDATABEAMPNGPortable Network GraphicsDXAutotrol document imagingPSDPhotoshop native formatED6EDMICS (U.S. DOD)RASSunEPSEncapsulated PostScriptRGBSGIFAXFaxRIAAlpharel Group IV document imagingFMVFrameMakerRLCImage SystemsGEDArts & LettersRLEVarious RLE-compressed formatsGDFIBM GDDM formatRNLGTX RunlengthGIFCompuServeSBPIBM StoryBoardGP4CALS Group IV - ITU Group IVSGISilicon Graphics RGBGX1Show PartnerSUNSunGX2Show PartnerTGATargaICAIBM IOCA (see MO:DCA)TIFTIFFICOWindows iconWPGWordPerfect imageIFFAmiga ILBMXBMX Window bitmapIGFInset Systems (HiJaak)XPMX Window pixelmapIMGGEM PaintXWDX Window dump表6-12 矢量图格式(vector graphics formats)后缀文件名称后缀文件名称3DS3D StudioGEMGEM proprietary906Calcomp plotterG4GTX RasterCAD - scanned images
into vectors for AutoCAD
AIAdobe IllustratorIGFInset Systems (HiJaak)CALCALS subset of CGMIGSIGESCDRCorelDRAWMCSMathCADCGMComputer Graphics MetafileMETOS/2 metafileCH3Harvard Graphics chartMRKInformative Graphics markup fileCLPWindows clipboardP10Tektronix plotter (PLOT10)CMXCorel Metafile ExchangePCLHP LaserJetDGAutotrolPCTMacintosh PICT drawingsDGNIntergraph drawing formatPDWHiJaakDRWMicrografx Designer 2.x, 3.xPGLHP plotterDS4Micrografx Designer 4.xPICVariety of picture formatsDSFMicrografx Designer 6.xPIXInset Systems (HiJaak)DXFAutoCADPLTHPGL Plot File (HPGL2 has raster format)DWGAutoCADPSPostScript Level 2EMFEnhanced metafileRLCImage Systems "CAD Overlay ESP"
vector files overlaid onto raster images
EPSEncapsulated PostScriptSSKSmartSketchESIEsri plot file (GIS mapping)WMFWindows MetafileFMVFrameMakerWPGWordPerfect graphicsGCAIBM GOCAWRLVRML    后缀文件名称        几种常见的文件格式:
1>JPEG格式
    微处理机中的存放顺序有正序(big endian)和逆序(little endian)之分。正序存放就是高字节存放在前低字节在后,而逆序存放就是低字节在前高字节在后。例如,十六进制数为A02B,正序存放就是A02B,逆序存放就是2BA0。摩托罗拉(Motorola)公司的微处理器使用正序存放,而英特尔(Intel)公司的微处理器使用逆序。JPEG文件中的字节是按照正序排列的。
JPEG委员会在制定JPEG标准时,定义了许多标记(marker)用来区分和识别图像数据及其相关信息,但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。直到1998年12月从分析网上具体的JPG图像来看,使用比较广泛的还是JPEG文件交换格式(JPEG File Interchange Format,JFIF)本号为1.02。这是1992年9月由在C-Cube Microsystems公司工作的Eric Hamilton提出的。此外还有TIFF JPEG等格式,但由于这种格式比较复杂,因此大多数应用程序都支持JFIF文件交换格式。 JPEG文件使用的颜 {MOD}空间是CCIR 601推荐标准进行的彩 {MOD}空间(参看第7章)。在这个彩 {MOD}空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。从RGB转换成YCbCr空间时,使用下面的精确的转换关系:       Y = 256 * E'y      Cb = 256 * [E'Cb] + 128      Cr = 256 * [E'Cr] + 128
其中亮度电平E'y和 {MOD}差电平E'Cb和E'Cb分别是CCIR 601定义的参数。由于E'y的范围是0~1,E'Cb和E'Cb的范围是-0.5~+0.5,因此Y, Cb和Cr的最大值必须要箝到255。于是RGB和YCbCr之间的转换关系需要按照下面的方法计算。(1) 从RGB转换成YCbCrYCbCr(256级)分量可直接从用8位表示的RGB分量计算得到:       Y =   0.299 R + 0.587 G  + 0.114 B     Cb = - 0.1687R - 0.3313G  + 0.5   B + 128    Cr = 0.5 R - 0.4187G - 0.0813 B + 128需要注意的是不是所有图像文件格式都按照R0,G0,B0,…… Rn,Gn,Bn的次序存储样本数据,因此在RGB文件转换成JFIF文件时需要首先验证RGB的次序。(2) 从YCbCr转换成RGB RGB分量可直接从YCbCr(256级)分量计算得到:     R = Y                 + 1.402 (Cr-128)      G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)      B = Y + 1.772 (Cb-128)在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。这就是说JFIF文件中的第一个图像样本是图像左上角的样本。文件结构文件结构
JPEG文件使用的颜 {MOD}空间是CCIR 601推荐标准进行的彩 {MOD}空间(参看第7章)。在这个彩 {MOD}空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。从RGB转换成YCbCr空间时,使用下面的精确的转换关系:       Y = 256 * E'y      Cb = 256 * [E'Cb] + 128      Cr = 256 * [E'Cr] + 128
其中亮度电平E'y和 {MOD}差电平E'Cb和E'Cb分别是CCIR 601定义的参数。由于E'y的范围是0~1,E'Cb和E'Cb的范围是-0.5~+0.5,因此Y, Cb和Cr的最大值必须要箝到255。于是RGB和YCbCr之间的转换关系需要按照下面的方法计算。(1) 从RGB转换成YCbCrYCbCr(256级)分量可直接从用8位表示的RGB分量计算得到:       Y =   0.299 R + 0.587 G  + 0.114 B     Cb = - 0.1687R - 0.3313G  + 0.5   B + 128    Cr = 0.5 R - 0.4187G - 0.0813 B + 128需要注意的是不是所有图像文件格式都按照R0,G0,B0,…… Rn,Gn,Bn的次序存储样本数据,因此在RGB文件转换成JFIF文件时需要首先验证RGB的次序。(2) 从YCbCr转换成RGB RGB分量可直接从YCbCr(256级)分量计算得到:     R = Y                 + 1.402 (Cr-128)      G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)      B = Y + 1.772 (Cb-128)在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。这就是说JFIF文件中的第一个图像样本是图像左上角的样本。文件结构文件结构JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此JFIF格式成了事实上JPEG文件交换格式标准。JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。下面是其中的8个标记:
  1. SOI  0xD8            图像开始
  2. APP0 0xE0            JFIF应用数据块
  3. APPn 0xE1 - 0xEF    其他的应用数据块(n, 1~15)
  4. DQT  0xDB           量化表
  5. SOF0 0xC0            帧开始
  6. DHT  0xC4           霍夫曼(Huffman)表
  7. SOS  0xDA           扫描线开始
  8. EOI  0xD9            图像结束
为使读者对JPEG定义的标记一目了然,现将JPEG的标记码列于表6-05,并保留英文解释。表6-05 JPEG定义的标记
Symbol (符号)Code Assignment(标记代码)Description(说明)Start Of Frame markers, non-hierarchical Huffman codingSOF00xFFC0Baseline DCTSOF10xFFC1Extended sequential DCTSOF20xFFC2Progressive DCTSOF30xFFC3Spatial (sequential) lossless Start Of Frame markers, hierarchical Huffman codingSOF50xFFC5Differential sequential DCTSOF60xFFC6Differential progressive DCTSOF70xFFC7Differential spatial losslessStart Of Frame markers, non-hierarchical arithmetic codingJPG0xFFC8Reserved for JPEG extensionsSOF90xFFC9Extended sequential DCTSOF100xFFCAProgressive DCTSOF110xFFCBSpatial (sequential) LosslessStart Of Frame markers, hierarchical arithmetic codingSOF130xFFCDDifferential sequential DCTSOF140xFFCEDifferential progressive DCTSOF150xFFCFDifferential spatial LosslessHuffman table specificationDHT0xFFC4Define Huffman table(s)arithmetic coding conditioning specificationDAC0xFFCCDefine arithmetic conditioning tableRestart interval terminationRSTm0xFFD0~0xFFD7Restart with modulo 8 counter mOther markerSOI0xFFD8Start of imageEOI0xFFD9End of imageSOS0xFFDAStart of scanDQT0xFFDBDefine quantization table(s)DNL0xFFDCDefine number of linesDRI0xFFDDDefine restart intervalDHP0xFFDEDefine hierarchical progressionEXP0xFFDFExpand reference image(s) APPn0xFFE0~0xFFEFReserved for application useJPGn0xFFF0~0xFFFDReserved for JPEG extensionCOM0xFFFECommentReserved markersTEM0xFF01For temporary use in arithmetic codingRES0xFF02~0xFFBFReservedJPEG文件由下面的8个部分组成:(1) 图像开始SOI(Start of Image)标记(2) APP0标记(Marker)① APP0长度(length)② 标识符(identifier)③ 版本号(version)④ X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米)⑤ X方向像素密度(X density)⑥ Y方向像素密度(Y density)⑦ 缩略图水平像素数目(thumbnail horizontal pixels)⑧ 缩略图垂直像素数目(thumbnail vertical pixels)⑨ 缩略图RGB位图(thumbnail RGB bitmap)(3) APPn标记(Markers),其中n=1~15(任选)① APPn长度(length)② 由于详细信息(application specific information)(4) 一个或者多个量化表DQT(difine quantization table)① 量化表长度(quantization table length)② 量化表数目(quantization table number)③ 量化表(quantization table)(5) 帧图像开始SOF0(Start of Frame)① 帧开始长度(start of frame length)② 精度(precision),每个颜 {MOD}分量每个像素的位数(bits per pixel per color component)③ 图像高度(image height)④ 图像宽度(image width)⑤ 颜 {MOD}分量数(number of color components)⑥ 对每个颜 {MOD}分量(for each component)
    • ID
    • 垂直方向的样本因子(vertical sample factor)
    • 水平方向的样本因子(horizontal sample factor)
    • 量化表号(quantization table#)
(6) 一个或者多个霍夫曼表DHT(Difine Huffman Table)① 霍夫曼表的长度(Huffman table length)② 类型、AC或者DC(Type, AC or DC)③ 索引(Index)④ 位表(bits table)⑤ 值表(value table)(7) 扫描开始SOS(Start of Scan)① 扫描开始长度(start of scan length)② 颜 {MOD}分量数(number of color components)③ 每个颜 {MOD}分量
    • ID
    • 交流系数表号(AC table #)
    • 直流系数表号(DC table #)
④ 压缩图像数据(compressed image data)(8) 图像结束EOI(End of Image)表6-06表示了APP0域的详细结构。有兴趣的读者可通过UltraEdit或者PC TOOLS等工具软件打开一个JPG图像文件,对APP0的结构进行分析和验证。表6-06 JFIF格式中APP0域的详细结构
偏移长度内容块的名称说明02 byte0xFFD8(Start of Image,SOI)图像开始22 byte0xFFE0APP0(JFIF application segment)JFIF应用数据块42 bytes length of APP0 blockAPP0块的长度65 bytes "JFIF"+"0"识别APP0标记111 byte 主要版本号(如版本1.02中的1)121 byte 次要版本号(如版本1.02中的02)131 byte and Y densities>X和Y的密度单位units=0:无单位units=1:点数/英寸units=2:点数/厘米142 bytes 水平方向像素密度162 bytes 垂直方向像素密度181 byte 缩略图水平像素数目191 byte 缩略图垂直像素数目 3n < Thumbnail RGB bitmap>缩略RGB位图(n为缩略图的像素数)   Optional JFIF extension APP0 marker segment(s)任选的JFIF扩展APP0标记段 …… ……  2 byte0xFFD9(EOI) end-of-file图像文件结束标记2>GIF文件格式   GIF(Graphics Interchange Format)是CompuServe公司开发的图像文件存储格式,1987年开发的GIF文件格式版本号是GIF87a,1989年进行了扩充,扩充后的版本号定义为GIF89a。GFI图像文件以数据块(block)为单位来存储图像的相关信息。一个GIF文件由表示图形/图像的数据块、数据子块以及显示图形/图像的控制信息块组成,称为GIF数据流(Data Stream)。数据流中的所有控制信息块和数据块都必须在文件头(Header)和文件结束块(Trailer)之间。GIF文件格式采用了LZW(Lempel-Ziv Walch)压缩算法来存储图像数据,定义了允许用户为图像设置背景的透明(transparency)属性。此外,GIF文件格式可在一个文件中存放多幅彩 {MOD}图形/图像。如果在GIF文件中存放有多幅图,它们可以像演幻灯片那样显示或者像动画那样演示。 文件结构GIF文件结构的典型结构如图6-01所示。为下文说明方便,在构件左边加了编号。1Header GIF文件头 2Logical Screen Descriptor 逻辑屏幕描述块 3Global Color Table 全局彩 {MOD}表  … 扩展模块(任选) …   4Image Descriptor 图形描述块 5Local Color Table 局部彩 {MOD}表(可重复n次)6Table Based Image Data 表式压缩图像数据7Graphic Control Extension 图像控制扩展块8Plain Text Extension 无格式文本扩展块n9Comment Extension 注释扩展块10Applicaton Extension 应用程序扩展块  … 扩展模块(任选) …   11GIF Trailer GIF文件结束块 图6-01 GIF文件结构数据块可分成3类:控制块(Control Block),图形描绘块(Graphic-Rendering Block)和专用块(Special Purpose Block)。(1) 控制块:控制块包含有用来控制数据流(Data Stream)或者设置硬件参数的信息,其成员包括:控制块包含有用来控制数据流(Data Stream)或者设置硬件参数的信息,其成员包括:
  • GIF文件头(Header)
  • 逻辑屏幕描述块(Logical Screen Descriptor)
  • 图形控制扩展块(Graphic Control Extension)
  • 文件结束块(Trailer)
(2) 图形描绘块:包含有用来描绘在显示设备上显示图形的信息和数据,其成员包括:包含有用来描绘在显示设备上显示图形的信息和数据,其成员包括:
  • 图像描述块(Image Descriptor)
  • 无格式文本扩展块(Plain Text Extension)
(3) 特殊用途数据块;包含有与图像处理无关的信息,其成员包括:包含有与图像处理无关的信息,其成员包括:
  • 注释扩展块(Comment Extension)
  • 应用扩展块(Application Extension)
除了在控制块中的逻辑屏幕描述块(Logical Screen Descriptor)和全局彩 {MOD}表(Global Color Table)的作用范围是整个数据流(Data Stream)之外, 所有其他控制块仅控制跟在它们后面的图形描绘块。 构件详解1. GIF文件头
 构件详解1. GIF文件头文件头描述块(Header)定义GIF数据流(GIF Data Stream),它的结构如图6-02所示。文件头描述块(Header)由GIF标记域(Signature)和版本号(Version)域组成,是一个由6个固定字节组成的数据块,它们用来说明使用的文件格式是GIF格式及当前所用的版本号。GIF标记域(Signature)存放的是“GIF”,版本号域存放的是1987年5月发布的“87a”或者1989年7月发布的“89a”,或者更加新的版本号。76543210字节号域的名称数据类型 0  Signature1GIF标记3 Bytes 2   3  Version4版本号3 Bytes 5  图6-02 标记/版本数据块的结构 2. 逻辑屏幕描述块