如何在 python 中组合 .tif 堆栈?

How to combine .tif stacks in python?

我正在尝试将多个 .tif 堆栈(每个堆栈已经包含 40 张图像)组合成一个 tiff 堆栈。我更愿意使用 python 来执行此操作。到目前为止我尝试的是(请记住,我没有太多编写代码的经验,如果我遗漏了一些明显的东西,很抱歉):

import numpy as np
from skimage import io

im1 = io.imread('filename1.ome.tif')
for i in range(2,10):
    im = io.imread('filename'+str(i)+'.ome.tif')
    im1 = np.concatenate((im1,im))

io.imsave('filescombined.ome.tif', im1)

这确实给我留下了一个 .tif 文件,并且根据:

print(im1.shape)

这是正确的形状,通过使用 im1.dtype 我知道两者都是 uint16。但是,我无法在 ImageJ(或我尝试过的任何其他查看器)中打开生成的图像。问题似乎不是由于 io.imread 或 io.imsave 导致的数据丢失,因为如果我这样做:

image = io.imread('filename1.ome.tif')
io.imsave('testing.ome.tif', image)

结果可以打开。所以我猜这个问题必须源于np.concatenate,但我不知道到底是什么问题,更不用说如何解决了。

如果您对如何修复它有任何想法,我们将不胜感激!

试试 scikit 图像的 external.tifffile 模块。好像没有遇到你描述的问题。

以下适用于 Windows 7 和 Python 3.5。它正确地保存了 180 张图像,每张 100x100 像素,可以直接导入 ImageJ

from skimage.external import tifffile as tif
import numpy as np

stack1 = np.random.randint(255, size=(20, 100, 100))

for i in range(2,10):
    stack = np.random.randint(255, size=(20, 100, 100))
    stack1 = np.concatenate((stack1,stack))

tif.imsave('stack1.tif', stack1.astype('uint16'), bigtiff=True)

当您将文件拖放到 ImageJ 中时,将弹出生物格式导入选项(见下文)。只需 select 视图堆栈 "Standard ImageJ" 即可加载数据。Screenshot of the ImageJ Bio-Format Import Option popup window