【问题标题】:How to save ImageJ tiff metadata using Python如何使用 Python 保存 ImageJ tiff 元数据
【发布时间】:2018-06-20 12:42:32
【问题描述】:

我正在尝试使用 tifffile 保存 tiff 堆栈,并使用 this solution 添加 ImageJ tiff 元数据标签和值。

代码运行没有错误,但是当我在 ImageJ 中打开“图像信息”时,我没有看到我创建的新标签。

我真的不知道 Tiff 标签是如何工作的,所以我选择了一个名为“Name”的标签,因为当我打开用 ImageJ 保存的元数据时,这个标签名称就存在了。

我只对原始解决方案的功能进行了一些更改以支持我的标签。 这是我正在使用的代码:

def imagej_metadata_tags(metadata, byteorder):
    """Return IJMetadata and IJMetadataByteCounts tags from metadata dict.

    The tags can be passed to the TiffWriter.save function as extratags.

    """
    header = [{'>': b'IJIJ', '<': b'JIJI'}[byteorder]]
    bytecounts = [0]
    body = []

    def writestring(data, byteorder):
        return data.encode('utf-16' + {'>': 'be', '<': 'le'}[byteorder])

    def writedoubles(data, byteorder):
        return struct.pack(byteorder+('d' * len(data)), *data)

    def writebytes(data, byteorder):
        return data.tobytes()

    metadata_types = [
        ('Name', b'Name', 1, writestring),
    ]

    for key, mtype, count, func in metadata_types:
        if key not in metadata:
            continue
        if byteorder == '<':
            mtype = mtype[::-1]
        values = metadata[key]
        if count is None:
            count = len(values)
        else:
            values = [values]
        header.append(mtype + struct.pack(byteorder+'I', count))
        for value in values:
            data = func(value, byteorder)
            body.append(data)
            bytecounts.append(len(data))

    body = b''.join(body)
    header = b''.join(header)
    data = header + body
    bytecounts[0] = len(header)
    bytecounts = struct.pack(byteorder+('I' * len(bytecounts)), *bytecounts)
    return ((50839, 'B', len(data), data, True),
            (50838, 'I', len(bytecounts)//4, bytecounts, True))

ijtags = imagej_metadata_tags({'Name': 'DPY'}, '>')

tif.imsave(some_path, frame, imagej=True, extratags=ijtags)

【问题讨论】:

    标签: python image-processing metadata tiff fiji


    【解决方案1】:

    IJMetadata 标记只能包含某些特定于应用程序的信息。请参阅imagej_metadata_tag 函数的文档。您可以指定metadata={'Name': 'A name'} 以在ImageDescription 标记中保存其他元数据。 ImageJ 可能会或可能不会使用此信息。 ImageJ 使用的 TIFF 标签没有记录。

    【讨论】:

    • 这太好了,谢谢!当我给 tifffile 提供参数 metadata={'test_tag':'test_value'} 时,它不会出现在“显示信息”中,但它确实出现在使用宏命令 getInfo("image.description") 返回的标签中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2010-11-26
    • 2019-11-20
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多