TIFF图像文件格式解析

TIFF 6.0 Specification下载链接

1TIFF文件格式概述

TIFF是Tagged Image File Format的缩写。作为一种标记语言,TIFF与其他文件格式最大的不同在于除了图像数据,它还可以记录很多图像的其他信息。 理论上来说, 任何其他的图像格式都能为TIFF所用, 嵌入到TIFF里面。比如JPEG, Lossless JPEG, JPEG2000和任意数据宽度的原始无压缩数据都可以方便的嵌入到TIFF中去。在存储真彩色图像时和BMP格式一样,直接存储RGB三原色的浓度值而不使用彩色映射(调色板)。

TIF的全面性也产生了不少问题,它的包罗万象造成结构较为复杂,变体很多,兼容性较差,它需要大量的编程工作来全面译码。例如,TIF图像数据可以用几种不同的方法压缩,用一个程序来读出所有的TIF几乎是不可能的。

2 TIFF格式解析

TIFF文件由三部分组成:

  1. 图像文件头Image File Header(IFH)
  2. 图像文件目录Image File Directory(IFD)(其中包含了目录项Directory Entry(DE))
  3. 图像数据

2.1 图像文件头(Image File Header,IFH)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210320180957716.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDg3NDc2Ng==,size_16,color_FFFFFF,t_70
IFH 数据结构包含3个成员共计 8 个字节。

名称字节数数据类型说明
Byteorder2intByte order 成员可能是“MM”(0x4d4d)或“II”(0x4949), 0x4d4d 表示该 TIFF 图是摩托罗拉整数格式,0x4949 表示该图是 Intel 整数格式
Version2intVersion 成员总是包含十进制 42(0x2a), 它用于进一步校验该文件是否为 TIF 格式, 42 这个数并不是一般人 想象中的那样认为是 tif 软件的版本, 实际上, 42 这个数大概永远不会变化
Offset to first IFD4longIFD(接下来要说的第2个数据结构)相对文件开始处的偏移量。

简单了解:摩托罗拉整数格式,Intel 整数格式的区别
‘MM’高位在前,'II’低位在前

2.2 图像文件目录(Image File Directory,IFD)

一个TIFF文件中至少有1个IFD,一个IFD里至少有一个DE.

在这里插入图片描述
IFD是TIF图中最重要的数据结构,它包含了一个 TIF文件中最重要的信息。

一个 TIF 图可能有多个 IFD, 这说明文件中有多个图像, 每个 IFD 标识 1 个图像的基本属性。

IFD结构中包含了三类成员,DirectoryEntry Count 指出该结构里面有多少个目录入口;接下来就是 N 个线性排列的DE序列, 数量不定,每个DE标识了图像的某一个属性;最后就是一个偏移量,标识下一个文件目录相对于文件开始处的位置,当然, 如果该 TIF 文件只包含了一幅图像,那么就只有一个IFD,显然,这个偏移量就等于 0;

名称字节数数据类型说明
Directory Entry Count2int本IFD中DE(Directory Entry,目录项)的数量
Directory Entry(1)12DE(DE结构图中已画出)每个DE标识了图像的一个属性
Directory Entry(2)12
Directory Entry(n)12
Offset to next IFD4long下一个IFD的偏移量

我们可以看到,这种IFD中有一种自建的数据结构DE(见右边的表)。需要指出的是,DE的个数是不定的,因为每个DE只标识了图像的一个属性,那么这幅图像有N个属性就会有N个DE,用户甚至可添加自定义的标记属性,这就是为什么称TIF格式文件为“可扩充标记的文件”的原因。

我们接下来就详细研究一下DE。

2.3 目录项(Directory Entry,DE)

由DE标识的图像属性有:图像的大小、分辨率、是否压缩、像素的行列数、颜色深度(单色、16色、256色、真彩色)等等。

名称字节数数据类型说明
tag2int本属性的标签编号
type2int本属性的数据类型
length4long该类型数据的数量,而不是某个数据的长度
value/valueOffset4long属性值本身,或属性值的存放偏移量(图上有虚线箭头!),大于4字节就需要用指针
  • tag是该属性的标签编号(TagID),在图像文件目录中,它是按照升序排列的(但不一定是连续的)。TIFF的tags有很多,详情请见TIFF 6.0 Specification::Appendix A
    在这里插入图片描述
    在这里插入图片描述

这里挑选了一些常用tags进行翻译列出:

TagID属性名称说明
0x0100图像宽
0x0101图像高
0x0102颜色深度值=1为单色,=4为16色,=8为256色。如果该类型数据个数>2个,说明是真彩图像
0x0103图像数据是否压缩值=05表示压缩
0x0140调色板偏移量值=1为单色,=4为16色,=8为256色。如果该类型数据个数>2个,说明是真彩图像

有些值,如水平(垂直)分辩率是分数型的属性,其值要占用8个字节,占用空间大,故存储的是其具体数值的偏移量。

这里再附上一个中文的tags功能查阅文献,给自己未来使用

2.4 图像数据

这些数据可能是压缩的,也可能是未压缩的。如果经过压缩,那么压缩算法又有许多种,所以,图像数据是TIF文件中最为复杂的部分,暂还没有单个程序能译出所有的压缩算法。

2.5 上述数据的排列顺序

值得注意的是,由于IFH、IFD、DE中存在各种各样的指针,因此,有时这些元数据甚至可能出现在数据后。一般的数据结构是:

数据组织结构(上至下)
IFH(含有指向IFD的偏移量,偏移量中间夹着的就有图像数据)
图像数据
IFD和DE中指针指向的值
IFD

一般要根据指针来判断具体位置。

3 实例分析

我找到了一张lena.tiff如下图:在这里插入图片描述

对该图像进行分析.

3.1 整体概览

在这里插入图片描述
由该文件的IFH得知该图像的第一个IFD所在位置,然后由DE计数器得知该图像的10个属性,根据指针便宜位置可以访问到DE;又知该TIFF只有一个IFD,即一幅图像。

3.2 IFH分析

在这里插入图片描述
标出的棕色部分即为IFH部分。查阅数据定义,可以知道:

名称字节数该图像的值意义
Byteorder24D 4D成员是“MM”(0x4d4d) 表示该 TIFF 图是摩托罗拉整数格式
Version200 2A十进制的42,永恒不变
Offset to first IFD400 0C 00 08第一个IFD,从文件开始处的偏移量

3.3 接下来是大量的图像数据

在这里插入图片描述

3.4 第一个(也是最后一个)IFD

接下来我们按照指针给出的第一个IFD的位置。
在这里插入图片描述
棕色部分开始标出的就是IFD数据。

名称字节数意义
Directory Entry Count200 0A有10个DE
Directory Entry(1)1200FE00040000000100000000见 表 DE1
Directory Entry(1)12010000030000000102000000见 表 DE2
Directory Entry(1)12010100030000000102000000见 表 DE3
Directory Entry(1)120102000300000003000C0086见 表 DE4
Directory Entry(1)12010300030000000100010000见 表 DE5
Directory Entry(1)12010600030000000100020000见 表 DE6
Directory Entry(1)12011100040000000100000008见 表 DE7
Directory Entry(1)12011500030000000100030000见 表 DE8
Directory Entry(1)120117000400000001000C0000见 表 DE9
Directory Entry(1)12011C00030000000100010000见 表 DE10
Offset to next IFD400 00这是最后一个IFD

3.5 10个DE

DE1

名称字节数意义
tag200 FENewSubfileType: 254 新的子文件类型标识。用比特来标识图像的类型,Bit0如果是1代表缩略图,Bit1如果是1代表多页图像中的某一页,Bit2如果是1代表它是透明度掩码图像.其余的位数暂时没有定义。
type200 00long
length41只有一个参数
value/valueOffset40属性值本身是0。该图像Bit0,1,2都不是1

剩余九个DE以类似的方法读取,这里直接读取后总结每个DE的意义。(参考了很久很久的手册!!!!辛苦了!!!!!)

Which DE意义
DE2图像宽度为512
DE3图像长度为512
DE4R\G\B三通道的位深度(原文:BitsPerSample,比特每样点)都是2048
DE5压缩类型为1,无压缩(Uncompressed)
DE6PhotometricInterpretation值为第2类,即颜色空间为RGB
DE7每个Strip偏移量为8
DE8每像素样点数为3
DE9每个Strip的长度为786432
DE10PlanarConfiguration(How the components of each pixel are stored.),我理解的是每个像素点的存储格式,是BGR,RGB,或甚至是GBR?? 值=1

DE9和DE10后各有1字节填充。

4 问题和总结

  1. 这一段没太看懂,也搜不到,翻译出来更是难以理解。TIFF field到底是什么?
    在这里插入图片描述
  2. PlanarConfiguration(How the components of each pixel are stored.)这个参数啥意思
  3. 我观察了PNG、TGA、TIFF、BMP。发现了这些图像格式有的一些共性:
  • 拥有说明整个文件的信息
  • 拥有说明图像信息的原数据
  • 图像的原始数据
  • 调色板

这些元素永远存在于图像格式中,只是他们组织数据的方式有所不同。有些格式非常规范;有些格式复杂,却带来了非常大的灵活度。

  1. TIFF的一些特点:
  • 它可以包含多个IFD,这也就意味着一个文件包含多张图片的可能
  • 它对图像信息的说明采用了很多Tags,有的规定好了是公认的,剩下则是可以自定义。这样就可以软件自定义,比如一个软件专门设置一个tag给软件之间交换时说明用处。这是非常灵活的。
  1. TIFF即支持无压缩,也支持下列压缩方法(Specification中列出):
    在这里插入图片描述

5 参考文献和资料

  1. 来自Rice University的Lena标准测试图像
  2. 来自Adobe的TIFF 6.0 Specification
  3. 【文件格式-TIFF】TIFF图像格式结构
  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Halcon是一款功能强大的图像处理软件,可以用于处理3D视觉的Tiff图像。下面展示了处理3D Tiff图像的一般步骤。 1. 导入图像:首先,使用Halcon提供的图像导入功能将3D Tiff图像文件导入到Halcon中。可以使用read_tiff函数来读取Tiff图像文件,并将其加载为Halcon的图像对象。 2. 图像预处理:在进行3D视觉处理之前,可能需要对图像进行一些预处理,以提高后续的处理效果。例如,可以使用smooth_image函数对图像进行平滑处理,使用normalize函数对图像进行归一化,或者使用enhance_image函数增强图像的对比度。 3. 三维视觉处理:Halcon提供了一系列的三维视觉处理函数,可以对3D Tiff图像进行分割、测量、重建等操作。例如,可以使用threshold函数对图像进行分割,使用distance_transform函数计算图像中每个像素点到目标边界的距离,或者使用surface_reconstruction函数重建3D对象的表面。 4. 结果分析和可视化:在完成3D视觉处理后,可以根据实际需求对处理结果进行分析和可视化。可以使用region_features函数提取图像区域的特征,使用measure_distance函数测量两个点之间的距离,或者使用gen_3d_shape_model函数生成3D对象的模型。 5. 结果输出:最后,可以使用write_tiff函数将处理结果以Tiff图像的形式保存到硬盘中,或者使用disp_object函数在Halcon的图形窗口中显示结果。 总之,Halcon提供了丰富的功能和工具,可以用于处理3D Tiff图像。通过导入图像、预处理、三维视觉处理、结果分析和输出等步骤,可以实现对3D Tiff图像的全面处理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值