如何制作 tiff z-stack 保存或添加元数据?

2024-01-30

我有许多 tiff 文件,我想使用 python 将它们合并到 z 堆栈中。各个文件都有我想保存的元数据(OME https://www.openmicroscopy.org/site/support/ome-model/ome-tiff/在我的例子中),特别是关于它是哪个 z 切片的信息。或者,我想在 z 堆栈元数据中的某个位置插入它是 z 堆栈(而不是例如延时。我需要这个来使用 ImageJ 中的 Bioformats 正确打开堆栈)。

我可以使用例如制作 z 堆栈tifffile.py http://www.lfd.uci.edu/~gohlke/code/tifffile.py.html,读取各个文件,就像这个简单的例子一样:

img1 = tifffile.imread(path_to_img1)
img2 = tifffile.imread(path_to_img2)
zstack = np.zeros((2, img1.shape[0], img1.shape[1]))
zstack[0] = img1
zstack[1] = img2
tifffile.imsave(path, zstack)

我还可以使用读取各个元数据信息tifffile.TiffFile.

但是,我看不到如何为每个切片附加元数据。 Tifffile 有一个选项可以添加额外的标签(包括标签 ID 270,图像描述),但我不明白如何将其应用到每个单独的切片。另一方面,tifffile.TiffFile 对象没有 write 方法。

我不限于tifffile,也尝试过使用PIL,但没有成功。


尝试这个:

import numpy as np
import bioformats.omexml as ome
import tifffile
import sys
            
def writeplanes(pixel, SizeT=1, SizeZ=1, SizeC=1, order='TZCYX', verbose=False):

    if order == 'TZCYX':

        p.DimensionOrder = ome.DO_XYCZT
        counter = 0
        for t in range(SizeT):
            for z in range(SizeZ):
                for c in range(SizeC):

                    if verbose:
                        print('Write PlaneTable: ', t, z, c),
                        sys.stdout.flush()

                    pixel.Plane(counter).TheT = t
                    pixel.Plane(counter).TheZ = z
                    pixel.Plane(counter).TheC = c
                    counter = counter + 1

    return pixel


# Dimension TZCXY
SizeT = 1
SizeZ = n_zs
SizeC = n_chs
SizeX = 2048
SizeY = 2048
Series = 0


scalex = 0.1
scaley = scalex
scalez = 0.5
pixeltype = 'uint16'
dimorder = 'TZCYX'
output_file = os.path.join(out_dir, 'R{}'.format(i), file)

# create numpy array with correct order
img5d = np.random.randn(SizeT, SizeZ, SizeC, SizeY, SizeX).astype(np.uint16)

# Getting metadata info
omexml = ome.OMEXML()
omexml.image(Series).Name = output_file
p = omexml.image(Series).Pixels
#p.ID = 0
p.SizeX = SizeX
p.SizeY = SizeY
p.SizeC = SizeC
p.SizeT = SizeT
p.SizeZ = SizeZ
p.PhysicalSizeX = np.float(scalex)
p.PhysicalSizeY = np.float(scaley)
p.PhysicalSizeZ = np.float(scalez)
p.PixelType = pixeltype
p.channel_count = SizeC
p.plane_count = SizeZ * SizeT * SizeC
p = writeplanes(p, SizeT=SizeT, SizeZ=SizeZ, SizeC=SizeC, order=dimorder)

for c in range(SizeC):
    if pixeltype == 'unit8':
        p.Channel(c).SamplesPerPixel = 1
    if pixeltype == 'unit16':
        p.Channel(c).SamplesPerPixel = 2


omexml.structured_annotations.add_original_metadata(ome.OM_SAMPLES_PER_PIXEL, str(SizeC))

# Converting to omexml
xml = omexml.to_xml()

# write file and save OME-XML as description
tifffile.imwrite(output_file, img5d, metadata={'axes': dimorder}, description=xml)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何制作 tiff z-stack 保存或添加元数据? 的相关文章

随机推荐

  • PySpark DataFrame - 动态连接多个列

    假设我在 Spark 上有两个 DataFrame firstdf sqlContext createDataFrame firstdf id 1 firstdf column1 2 firstdf column2 3 firstdf co
  • 该方法对于错误类型不明确

    我试图了解 JAVA 中的重载是如何工作的 并试图掌握在 JAVA 中加宽 自动装箱和可变参数的情况下应用的各种重载规则 我无法理解以下场景中发生的情况 package package1 public class JustAClass pu
  • 如何手动修复npm漏洞?

    当我跑步时npm install它说found 33 vulnerabilities 2 low 31 moderate run npm audit fix to fix them or npm audit for details 然而 n
  • x:样式中的Key & TargetType

    使用此语句有什么区别 或优点 Style x Key x Type DataGridCell TargetType x Type DataGridCell 省略x Key属性 我认为 WPF 将密钥分配给相同的x Type在引擎盖下 MSD
  • jQuery:this.attr() 不是一个函数?

    我不太确定我是否没有在正确的范围内使用它或什么 但我有一个脚本 它基本上捕获链接单击并导致页面在转到链接页面之前淡出 但是 如果链接是 JavaScriptonclick 脚本失败 这是我的代码
  • 使用 JAX-RS Jersey 2 和 Grizzly 的 Swagger 文档

    我已经使用 JAX RS 实现了 Rest Web 服务 该功能不相关 现在我想使用 Swagger 生成其文档 我已按照以下步骤操作 1 In build gradle我得到了我需要的所有依赖项 compile org glassfish
  • Scala 中生成代码的性能和缓存

    我需要在运行时生成特征的实现 然后在特征的实例上执行已知方法 在这个例子中我正在运行A s a method import reflect runtime universe tools reflect ToolBox package p t
  • 无法在 Bluemix 中找到应用程序密钥和应用程序秘密。代替这些,可以使用应用程序 GUID

    我已经为我的 Android 应用程序创建了一个移动样板 但无法在 Bluemix 中找到应用程序密钥和应用程序秘密 除了这两个之外 还可以使用应用程序 GUID 任何人都可以帮助我 如何使用 APP GUID 初始化 IBMBluemix
  • 如何在软件包安装中包含(脚本构建的)库?

    我正在制作一个Python包 它有一个C 扩展模块和它需要的其他人的共享库 我希望一切都可以通过安装pip 我现在的setup py当我使用时文件有效pip install e 但是当我不使用开发模式时 即省略 e I get 无法打开共享
  • 在 R 帮助中搜索“for”和“repeat”循环帮助文件

    我正在尝试加载描述这些 功能 的页面 然而 Windows中的R控制台似乎讨厌我 它只是返回 for repeat for是一个保留字 如果你想查找它 你必须使用反引号 for
  • Javascript 从出生日期开始计算年龄

    我正在传递我选择的日历date of birth使用以下 JS 函数来计算年龄 var DOBmdy date split Bdate new Date DOBmdy 2 DOBmdy 0 1 DOBmdy 1 BDateArr Bdate
  • 如何从 c# 中的向量 3 列表中删除向量以实现统一

    我正在努力从向量三列表中删除向量 我试图在从列表中随机选择的位置生成一个盒子 然后我需要从列表中删除该项目 以便两个盒子不会在同一位置生成 我已经尝试过RemoveAt和Remove 使用向量 但没有工作 任何帮助将非常感激 void St
  • 如何确保 yum install 在 shell 脚本中成功?

    我有一个 shell 脚本 它检查是否有互联网连接 通过 ping google 然后调用 yum install packageA packageB assumeyes 我如何确认软件包已安装 或已经安装 我是否再次进行 yum 调用并解
  • WebAPI 2.2 OData v4 [EnableQuery] 适用于何处?

    截至 2015 年 1 月 应用 EnableQueryAttribute 的正确 错误在哪里 该文档链接如下 http www asp net web api overview odata support in aspnet web ap
  • 运动模拟游戏的动态如何运作?

    我想制作一款棒球模拟游戏 这些体育管理游戏是靠运气吗 完全靠运气的管理游戏并不公平 但也不能太可预测 这些游戏背后的逻辑是如何运作的 这都是关于概率和统计的 您根据指定的某些属性设置某事发生的机会 然后在游戏过程中加入随机因素 使事情变得更
  • 是否可以运行不在文件中的node.js脚本?

    我需要使用 C 应用程序中的 node js 运行 javascript 代码 但我不想之前将代码保存到文件中 是否可以直接将代码转发到node exe 而不将其临时保存到文件中 是的 您可以使用 eval 标志来运行代码 node eva
  • Flutter如何画半圆(半圆)

    怎样才能画出这样的半圆呢 Code class DrawHalfCircleClipper extends CustomClipper
  • evt.preventDefault(); 的反义词是什么

    一旦我解雇了evt preventDefault 如何再次恢复默认操作 根据 Prescott 的评论 相反 evt preventDefault 可能 本质上等于 默认 因为我们不再阻止它 否则 我倾向于向您指出其他评论和答案提供的答案
  • Eclipse 显示奇怪的 [DEBUG],我想禁用它

    根据下面的代码 我将程序的每一个细节都作为调试来获取 我想将其删除 运行应用程序时是否花费太多时间 我怎样才能禁用那些 DEBUG 2012 01 24 18 47 25 305 ERROR SqliteDatabaseType WARNI
  • 如何制作 tiff z-stack 保存或添加元数据?

    我有许多 tiff 文件 我想使用 python 将它们合并到 z 堆栈中 各个文件都有我想保存的元数据 OME https www openmicroscopy org site support ome model ome tiff 在我