从python中的各个tiff创建一个tiff堆栈

时间:2017-11-12 11:08:52

标签: python image-processing tiff

我根据此处的示例创建不同大小的tiff堆栈: http://www.bioimgtutorials.com/2016/08/03/creating-a-z-stack-in-python/

可以在此处下载tif文件的示例: nucleus

我有一个包含5个tiff文件的文件夹。 我想堆叠它们以便能够在imageJ中打开它们,使它们看起来像这样:

enter image description here

这适用于以下代码:

from skimage import io
import numpy as np
import os

dir = 'C:/Users/Mich/Desktop/tiff stack/'

listfiles =[]


for img_files in os.listdir(dir):
    if img_files.endswith(".tif") :
        listfiles.append(img_files)



first_image = io.imread(dir+listfiles[0])

io.imshow(first_image)

first_image.shape

stack = np.zeros((5,first_image.shape[0],first_image.shape[1]),np.uint8)



for n in range(0,5):
    stack[n,:,:]= io.imread(dir+listfiles[n])

path_results = 'C:/Users/Mich/Desktop/'
io.imsave(path_results+'Stack.tif' ,stack)

问题来自于我只想堆叠4个第一个或第3个。

4个tiff图像的示例:

   stack=np.zeros((4,first_image.shape[0],first_image.shape[1]),np.uint8)

   for n in range(0,4):
       stack[n,:,:]= io.imread(dir+listfiles[n])

然后我得到了这样的结果: enter image description here

并且在尝试堆叠文件夹的3个第一个图像时,它们会合并!

   stack=np.zeros((3,first_image.shape[0],first_image.shape[1]),np.uint8)

   for n in range(0,3):
       stack[n,:,:]= io.imread(dir+listfiles[n])

enter image description here

我在代码中哪里错了,所以它只是在一个尺寸为3,4或5的多维堆栈中添加单独的tiff?

1 个答案:

答案 0 :(得分:2)

指定图像数据的颜色空间(photometric='minisblack'),否则tifffile插件会从输入数组的形状中猜出它。

这是一个直接使用tifffile插件的简短版本:

import glob
from skimage.external import tifffile

with tifffile.TiffWriter('Stack.tif') as stack:
    for filename in glob.glob('nucleus/*.tif'):
        stack.save(tifffile.imread(filename), photometric='minisblack')