gpt4 book ai didi

python - 与 tif 一起保存图像元数据的最佳方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 17:55:28 94 4
gpt4 key购买 nike

在我作为研究生的工作中,我捕捉显微镜图像并使用 python 将它们保存为原始 tif。我想添加元数据,例如我正在使用的显微镜​​的名称、放大倍数和成像激光波长。这些细节对于我如何对图像进行后处理都很重要。

我应该可以用 tif 做到这一点,对吧?因为它有标题?

我能够在 PIL 图像中添加信息:

im.info['microscope'] = 'george'

但是当我保存并加载该图像时,我添加的信息消失了。

我愿意接受所有建议。如果我也有,我将只保存一个包含元数据的单独的 .txt 文件,但将它嵌入到图像中会非常好。

最佳答案

Tifffile 是在 python 中保存带有大量元数据的显微镜图像的一种选择。

它没有很多外部文档,但文档很棒,因此您只需在 python 中键入 help(tifffile) 即可获得大量信息,或者查看 source code .

您可以查看源代码(第 750 行)中的 TiffWriter.save 函数,了解可用于写入元数据的不同关键字参数。

一种是使用description,它接受一个字符串。当您阅读图像时,它将显示为标签“ImageDescription”。

另一个是使用 extratags 参数,它接受一个元组列表。这允许您写入 TIFF.TAGS() 中存在的任何标签名称。最简单的方法之一是将它们写成字符串,因为这样您就不必指定长度。

您还可以使用 ijmetadata 编写 ImageJ 元数据,源代码 here 中列出了可接受的类型。

例如,如果您编写以下内容:

import json
import numpy as np
import tifffile

im = np.random.randint(0, 255, size=(150, 100), dtype=np.uint8)
# Description
description = "This is my description"
# Extratags
metadata_tag = json.dumps({"ChannelIndex": 1, "Slice": 5})
extra_tags = [("MicroManagerMetadata", 's', 0, metadata_tag, True),
("ProcessingSoftware", 's', 0, "my_spaghetti_code", True)]
# ImageJ metadata. 'Info' tag needs to be a string
ijinfo = {"InitialPositionList": [{"Label": "Pos1"}, {"Label": "Pos3"}]}
ijmetadata = {"Info": json.dumps(ijinfo)}
# Write file
tifffile.imsave(
save_name,
im,
ijmetadata=ijmetadata,
description=description,
extratags=extra_tags,
)

读图可以看到如下标签:

frames = tifffile.TiffFile(save_name)
page = frames.pages[0]
print(page.tags["ImageDescription"].value)

输出:'这是我的描述'

print(page.tags["MicroManagerMetadata"].value)

输出:{'ChannelIndex': 1, 'Slice': 5}

print(page.tags["ProcessingSoftware"].value)

输出:my_spaghetti_code

关于python - 与 tif 一起保存图像元数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20529187/

94 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com