使用 Tifffile 库保存带有不同元数据的 TIFF 堆栈

使用 Tifffile 库保存带有不同元数据的 TIFF 堆栈

本文档介绍了如何使用 tifffile 库将显微镜图像保存为多层 TIFF 文件,并为每一层添加不同的元数据。重点在于如何利用 OME-TIFF 格式存储图像数据,并包含各层切片的 Z 轴位置等信息,方便后续图像分析和处理。

在使用显微镜进行图像采集时,经常需要将不同高度(Z轴)的图像保存为一个 TIFF 堆,并且希望每张切片都包含特定的元数据,例如 Z 轴位置。 tifffile 库是一个强大的 Python 库,可以方便地读写 TIFF 文件。下面介绍如何使用它来保存带有不同元数据的 TIFF 堆栈。

OME-TIFF 格式

对于显微镜图像,推荐使用 OME-TIFF 格式。 OME-TIFF 是一种专门为生物图像设计的 TIFF 变体,可以存储丰富的元数据,包括图像的物理尺寸、单位、通道信息、Z 轴位置等。

代码示例

以下代码示例展示了如何使用 tifffile 库创建一个 OME-TIFF 文件,其中包含一个 Z 轴堆栈,并且每张切片都有自己的 Z 轴位置信息。

使用 Tifffile 库保存带有不同元数据的 TIFF 堆栈

百宝箱

百宝箱是支付宝推出的一站式ai原生应用开发平台,无需任何代码基础,只需三步即可完成AI应用的创建与发布。

使用 Tifffile 库保存带有不同元数据的 TIFF 堆栈292

查看详情 使用 Tifffile 库保存带有不同元数据的 TIFF 堆栈

import numpy from tifffile import TiffWriter  # 模拟显微镜图像数据 data = numpy.random.randint(0, 1023, (8, 256, 256), 'uint16') pixelsize = 0.29  # 像素大小,单位:微米 zpositions = [0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7] # Z轴位置  # 构建元数据 metadata = {     'axes': 'ZYX',     'SignificantBits': 10,     'PhysicalSizeX': pixelsize,     'PhysicalSizeXUnit': 'µm',     'PhysicalSizeY': pixelsize,     'PhysicalSizeYUnit': 'µm',     'Plane': {         'PositionZ': zpositions,         'PositionZUnit': ['µm'] * data.shape[0],         'PositionY': [7.5] * data.shape[1],         'PositionYUnit': ['µm'] * data.shape[1],         'PositionX': [10.5] * data.shape[2],         'PositionXUnit': ['µm'] * data.shape[2],     }, }  # 写入 OME-TIFF 文件 with TiffWriter('temp.ome.tif', bigtiff=False, ome=True) as tif:     tif.write(         data,         photometric='minisblack',         # tile=(128, 128),  # 可以设置分块大小,提高读取效率         # compression='adobe_deflate', # 可以设置压缩方式,减小文件大小         resolutionunit='CENTIMETER',         resolution=(1e4 / pixelsize, 1e4 / pixelsize),         metadata=metadata,     )

代码解释:

  1. 导入必要的库: 导入 numpy 用于生成模拟数据,tifffile 用于写入 TIFF 文件。
  2. 模拟数据: data 是一个三维 numpy 数组,模拟了 8 张 256×256 的显微镜图像。
  3. 定义元数据: metadata 是一个字典,包含了 OME-TIFF 格式要求的各种元数据。
    • axes: 定义了图像的轴的顺序,这里是 ZYX (Z轴,Y轴,X轴)。
    • PhysicalSizeX/Y: 定义了像素的物理尺寸,单位是微米。
    • Plane: 包含每个切片的元数据,例如 Z 轴位置。 PositionZ 是一个列表,包含了每个切片的 Z 轴位置。 PositionZUnit 指定了 Z 轴位置的单位。
  4. 写入 TIFF 文件: 使用 TiffWriter 创建一个 TIFF 文件,并设置 ome=True 来启用 OME-TIFF 格式。 tif.write() 函数将图像数据和元数据写入文件。
    • photometric=’minisblack’:指定图像的颜色模式为灰度图像。
    • resolutionunit=’CENTIMETER’和 resolution:定义了图像的分辨率。
    • tile 和 compression:可以用来优化存储和读取性能,根据实际情况选择。

注意事项

  • OME-TIFF 规范: 务必参考 OME-TIFF 的官方文档,了解完整的元数据规范,确保生成的 TIFF 文件符合标准。
  • 元数据类型: metadata 字典中的值必须是正确的数据类型,例如数值、字符串或列表。
  • 文件大小: 如果图像数据量很大,可以考虑使用 bigtiff=True 来创建 BigTIFF 文件,以支持更大的文件大小。
  • 数据类型: 确保 data 数组的数据类型与显微镜图像的数据类型一致,例如 uint8、uint16 或 float32。

总结

通过使用 tifffile 库和 OME-TIFF 格式,可以方便地将显微镜图像保存为多层 TIFF 文件,并为每张切片添加不同的元数据。这对于后续的图像分析和处理非常有用。 请根据实际情况修改代码,以满足您的具体需求。例如,您可以添加更多的元数据,例如通道信息、时间戳等。

python adobe Python numpy 数据类型 字符串 float32 切片

上一篇
下一篇