
TIFF格式.ppt
34页TIFF格式,FYH,2010-12-2,2,TIFF格式,TIFF格式简介 TIFF格式结构 TIFF格式编码 与其他格式比较,,,,,2010-12-2,3,TIFF格式简介,TIFF 格式(文件扩展名为 .tif 或 .tiff)全名是Tagged Image File Format,是由Aldus公司开发,最初是出于跨平台存储扫描图像的需要而设计的它的特点是图像格式复杂、存贮信息多正因为它存储的图像细微层次的信息非常多,图像的质量也得以提高,故而非常有利于原稿的复制 如果你想在不同的应用程序之间调用图形文件,TIF格式将是您最好的选择在刚开始的时候, TIFF只是一个二值图像格式,因为当时的桌面扫描仪只能处理这种格式随着扫描仪的功能越来越强大,并且桌面计算机的磁盘空间越来越大,TIFF逐渐支持灰阶图像和彩色图像2010-12-2,4,TIFF格式简介,TIFF格式有压缩和非压缩二种形式,其中压缩可采用LZW无损压缩方案存储不过,由于TIFF格式结构较为复杂,兼容性较差,因此有时你的软件可能不能正确识别TIFF文件(现在绝大部分软件都已解决了这个问题)目前在Mac和PC机上移植TIFF文件也十分便捷,因而TIFF现在也是微机上使用最广泛的图像文件格式之一。
2010-12-2,5,TIFF格式简介,TIFF是一种比较灵活的图像格式主要是描述图像的资料,包括黑白、彩色及灰度的图像该格式支持256色、24位真彩色、32位色、48位色等多种色彩位 TIFF-B适用于二值图像: TIFF-G适用于黑白灰度图像; TIFF-P适用于带调色板的彩色图像: TIFF-R适用于RGB真彩图像支持具有 alpha 通道的 CMYK、RGB、Lab、索引颜色和灰度图像以及有 alpha 通道的位图模式图像2010-12-2,6,TIFF格式简介,TIFF支持RLE、LZW、JPEG等多种编码压缩方式(详见P17) TIFF可采用LZW无损压缩方案存储人们通常在专业领域应用TIF格式的文件,可以在不同平台之间进行数据交换,以便在不同平台之间能输出高质量图像,例如印刷厂等除了纯粹的图像信息外,TIF文件还能保存诸如名称、应用软件和扫描仪类型等的其他数据2010-12-2,7,TIFF格式简介,TIFF 格式Photoshop 可以在 TIFF 文件中存储图层;但是,如果在其它应用程序中打开此文件,则只有拼合图像是可见的TIFF 可以制作质量非常高的图像,因而经常用于出版印刷,几乎所有的桌面扫描仪都可以生成 TIFF 图像。
它可以显示上百万的颜色(尽管灰度图像仅局限于 256 色或底纹),通常用于比 GIF 或 JPEG 格式更大的图像文件2010-12-2,8,TIFF格式简介,(1)应用广泛①TIFF可以描述多种类型的图像;②TIFF拥有一系列的压缩方案可供选择;③TIFF不依赖于具体的硬件;④TIFF是一种可移植的文件格式2)TIFF具有可扩展性在TIFF 6.0中定义了许多扩展,它们允许TIFF提供以下通用功能:①几种主要的压缩方法;②多种色彩表示方法;③图像质量增强;④特殊图像效果;⑤文档的存储和检索帮助3)格式复杂TIFF文件的复杂性给它的应用带来了一些问题一方面,要写一种能够识别所有不同标记的软件非常困难另一方面,一个TIFF文件可以包含多个图像,每个图像都有自己的IFD和一系列标记,并且采用了多种压缩算法这样也增加了程序设计的复杂度TIFF图像格式的特点,2010-12-2,9,TIFF格式结构,图像文件头(Image File Header-IFH) 图像文件目录(Image File Directory-IFD) 目录入口(Directory Entry-DE) 图像数据,文件头 标示信息区 图像数据区,2010-12-2,10,TIFF格式结构,IFH数据结构包含3个成员共计8个字节,Byte order成员可能是“MM” (0x4d4d)或“II”(0x4949),0x4d4d表示该TIFF图是摩托罗拉整数格式 0x4949表示该图是Intel整数格式;Version成员总包含十进制42(0x2a),它用于进一步校验该文件是否为TIF格式,42这个数并不是一般人 想象中的那样认为是tif软件的版本,实际上,42这个数大概永远不会变化;第三个成员是IFD(接下来要说的第二个数据结构)相对文件开始 处的偏移量。
1.图像文件头,2010-12-2,11,TIFF格式结构,2 标示信息区,图像文件目录 IFD是TIF图中最重要的数据结构,它包含了一个TIF文件中最重要的信息,一个TIF图可能有多个IFD,这说明文件中有多个图像,每个IFD标识1个图像的基本属性 IFD结构中包含了三类成员,Directory Entry Count指出该结构里面有多少个目录入口;接下来就是N个线性排列的DE序列,数量不定(这就是 为什么称TIF格式文件为可扩充标记的文件,甚至用户可以添加自定义的标记属性),每个DE标识了图像的某一个属性;最后就是一个偏移量, 标识下一个文件目录相对于文件开始处的位置,当然,如果该TIF文件只包含了一幅图像,那么就只有一个IFD,显然,这个偏移量就等于02010-12-2,12,TIFF格式结构,,2010-12-2,13,TIFF格式结构,目录入口DE共12个字节,上页图简单说,一个DE就是一幅图像的某一个属性例如图像的大小、分辨率、是否压缩、像素的行列数、一个像素由几位 表示(1位代表黑白两色,8位代表256色等等)等其中:tag成员是该属性的编号,在图像文件目录中,它是按照升序排列的。
我们可以通过读 这些编号,然后到TIF格式官方白皮书中查找相应的含义2010-12-2,14,TIFF格式结构,属性是用数据来表示的,那么type就是代表着该数据的类型,TIF官方指定的有5种数据类型length成员是数据的数量而不是数据类型的长度 valueOffset很重要,它是tag标识的属性代表的变量值相对文件开始处的偏移量如果变量值占用的空间小于4个字节,那么该值就存放在 valueOffset中即可,没必要再另外指向一个地方了2010-12-2,15,TIFF格式结构,4 图像数据区,根据IFD所指向的地址.存储相关的图像信息包含有压缩方式信息,如何排列数据,如何分割数据等 信息TIFF文件实际上在文件的开始处有一个关键字,告诉应用程序文件以什么顺序保存的,在其他图像格式处用户隐藏了这个顺序2010-12-2,16,TIFF格式编码,常用的图像压缩方法,包括 行程长度压缩RLE,霍夫曼编码压缩,LZW压缩方法,算术压缩方法,JPEG压缩等LZW通过存储这些代表原始图像中一串数据的代码,从而降低图像存储空间GIF文件主要支持256色彩色图像,其特点是采用压缩比较大的LZW算法。
它由全局信息表、调色板数据、局部信息表和像素数据4部分组成.GIF解码较快,因为采用隔行存放的GIF图像,在边解码边显示的时候可分成四遍扫描第一遍扫描虽然只显示了整个图像的八分之一,第二遍的扫描后也只显示了1/4,但这已经把整幅图像的概貌显示出来了在显示GIF图像时,隔行存放的图像会给您感觉到它的显示速度似乎要比其他图像快一些,这是隔行存放的优点2010-12-2,17,TIFF格式编码,2010-12-2,18,TIFF格式编码,Compression标记值 1 没有压缩方法 2 一维Huffman行程长度编码压缩方法 3 CCITT组3版本 FAX编码压缩方法 4 CCITT组4版本 FAX编码压缩方法 5 LZW字串编码压缩方法 6 表示JPEG压缩方法 32766 表示2位RLE压缩方法 32771 CCITT压缩方法2版本 32773 PackBits压缩方法 32809 4位元的Thunderscan增量和RLE 32900 8位或16位 Pixar“picio“ RLE 32901 Silicon Graphics RLE,适用于黑白图像 利用bits数的大小来代替在黑白 图像中连续出现的黑点和白点数,,,,机,PackBits is a fast, simple lossless compression scheme for RLE ofdata used on Macintosh computer,,2010-12-2,19,TIFF格式编码,根据 Lempel-Ziv-Welch Encoding ,简称 LZW 的压缩算法,用任何一中语言来实现它.LZW压缩有三个重要的对象:数据流(CharStream)、编码流(CodeStream)和编译表(String Table)。
在编码时,数据流是输入对象(文本文件的据序列),编码流就是输出对象(经过压缩运算的编码数据);在解码时,编码流则是输入对象,数据流是输出对象;而编译表是在编码和解码时都须要用借助的对象2010-12-2,20,TIFF格式编码,与该算法相关的概念和词汇,1)'Character': 字符,一种基础数据元素,在普通文本文件中,它占用1个单独的byte,而在图像中,它却是 一种代表给定像素颜色的索引值2)'CharStream':数据文件中的字符流3)'Prefix':前缀如这个单词的含义一样,代表着在一个字符最直接的前一个字符一个前缀字符长度可以为0,一个prefix和一个character可以组成一个字符串(string),4)'Suffix': 后缀,是一个字符,一个字符串可以由(A,B)来组成,A是前缀,B是后缀,当A长度为0的时候,代表Root,根5)'Code:码,用于代表一个字符串的位置编码6)'Entry',一个Code和它所代表的字符串(string),2010-12-2,21,TIFF格式编码,LZW编码器使用了一种很实用的分析算法,称为贪婪分析算法LZW算法中,首先建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字存入压缩文件中。
总是将两个数据值看成一对字符进行处理分别放入Prefix和Suffix如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中压缩完成后将串表丢弃如“print“ 字符串,如果在压缩时用266表示,只要再次出现,均用266表示,并将“print“字符串存入串表中,在图象解码时遇到数字266,即可从串表中查出266所代表的字符串“print“,在解压缩时,串表可以根据压缩数据重新生成2010-12-2,22,TIFF格式编码,LZW算法的适用范围对原始数据ABCCAABCDD.进行LZW压缩为了区别代表串的值(Code)和原来的单个的数据值(String),需要使它们的数值域不重合,上面用0-3来代表A-D,那么AB就必须用大于3的数值来代替,比如4 另外一个例子,原来的数值范围可以用8bit来表示,那么就认为原始的数的范围是0~255,压缩程序生成的标号的范围就不能为0~255(如果是0-255,就重复了)只能从256开始,但是这样一来就超过了8位的表示范围了,所以必须要扩展数据的位数,至少扩展一位,但是这样不是增加了1个字符占用的空间了么?但是却可以用一个字符代表几个字符,比如原来255是8bit,但是现在用256来表示254,255两个数,还是划得来的。
从这个原理可以看出LZW算法的适用范围是原始数据串最好是有大量的子串多次重复出现,重复的越多,压缩效果越好反之则越差,可能真的不减反增了2010-12-2,23,TIFF格式编码,LZW算法中特殊标记随着新的串(string)不断被发现,标号也会不断地增长,如果原数据过大,生成的标号集(string table)会越来越大,这时候操作这个集合就会产生效率问题如何避免这个问题呢?Gif在采用lzw算法的做法是当标号集足够大的时候,就不能增大了,干脆从头开始再来,在这个位置要插入一个标号,就是清除标志CLEAR,表示从这里我重新开始构造字典,以前的所有标记作废,开始使用新的标记这时候又有一个问题出现,足够大是多大?这个标号集的大小为比较合适呢?理论上是标号集大小越大,则压缩比率就越高,但开销也越高 一般根据处理速度和内存空间连个因素来选定GIF规范规定的是12位,超过12位的表达范围就推倒重来,并且GIF为了提高压缩率,采用的是变长的字长。
