在《TIFF 图像格式介绍》文章简要介绍了 TIFF 图像结构,本文用代码实操一下。
演示图片下载自:https://camelyon17.grand-challenge.org/Data/
用 QuPath 打开图片,在左边属性可看到这个 H&E 图片是金字塔结构的,存储了不同分辨率的图像。
用 Python 也可以看到有多个 pages 每个 page 对应一个图像。
>>> import tifffile
>>> wsi = tifffile.TiffFile("test_001.tif")
>>> wsi
<tifffile.TiffFile 'test_001.tif'>
>>> pages = wsi.pages
>>> len(pages)
9
第一个 page 对应分辨率最高的图像,它是 tile 存储形式,可以查看到 tile 长宽都是 512.
>>> page0 = pages[0]
>>> page0.tilelength
512
>>> page0.tilewidth
512
使用 .tags
获取到图像 metadata 也即 IFD entry. 比如下面我们可以查看 tile 存储位置(offset),假如自己写读取代码,那么可以根据位置读取到 tile 数据。
>>> page0_tags = page0.tags
>>> page0_tags["ImageWidth"].value
86016
>>> page0_tags["ImageLength"].value
89600
>>> page0_tags["TileOffsets"].value[0:5]
(16, 3586416, 3596929, 7268478, 7279382)
比较一下不同分辨率图像大小。
>>> page1 = pages[1]
>>> print(page0.imagelength, page0.imagewidth)
89600 86016
>>> print(page1.imagelength, page1.imagewidth)
44800 43008