从 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)