从 TIFF 文件中读取子图像打开实时脚本TIFF 文件可以包含一个或多个图像文件目录 (IFD)。每个 IFD 都包含与图像关联的图像数据和元数据(标记)。每个 IFD 可以包含一个或多个 subIFD,后者也可以包含图像数据和元数据。这些子图像通常是包含 subIFD 的 IFD 中图像数据的降分辨率版本(缩略图)。

要读取 IFD 中的子图像,必须从 SubIFD 标记中获取子图像的位置。SubIFD 标记包含由指向子图像的字节偏移量构成的数组。然后,可以将 subIFD 的地址传递到 setSubDirectory 方法以将该 subIFD 设置为当前 IFD。大多数 Tiff 对象方法作用于当前 IFD。

使用 Tiff 对象构造函数打开包含图像和子图像的 TIFF 文件。以下示例使用在 创建 TIFF 子目录 中创建的 TIFF 文件,该文件包含一个具有两个 subIFD 的 IFD 目录。Tiff 构造函数打开该 TIFF 文件,并将文件中的第一个 subIFD 设置为当前 IFD。

t = Tiff("my_subimage_file.tif","r");检索与当前 IFD 关联的 subIFD 的位置。使用 getTag 方法获取 SubIFD 标记的值。此方法将返回指定 subIFD 位置的字节偏移量数组。

offsets = getTag(t,"SubIFD");导航到第一个子图像。

首先,将当前 IFD 设为包含第一个子图像的目录。

dirNum = 1;

setDirectory(t,dirNum)然后,使用 setSubDirectory 方法导航到第一个 subIFD。指定该 subIFD 的字节偏移量作为参量。此调用会将该 subIFD 设置为当前 IFD。

setSubDirectory(t,offsets(1))采用与读取文件中的任何其他 IFD 一样的方式,读取当前 IFD(第一个 subIFD)中的图像数据。

subimage_one = read(t);查看第一个子图像。

imagesc(subimage_one)

导航到第二个子图像。

首先,将当前 IFD 重置为包含第二个子图像的目录。

setDirectory(t,dirNum)然后使用 setSubDirectory 方法导航到第二个 subIFD。指定第二个 subIFD 的字节偏移量。

setSubDirectory(t,offsets(2))采用与读取文件中的任何其他 IFD 一样的方式,读取当前 IFD(第二个 subIFD)中的图像数据。

subimage_two = read(t);查看第二个子图像。

imagesc(subimage_two)

关闭 Tiff 对象。

close(t)