使用 python 在 numpy 数组中加载 tiff 堆栈

Load a tiff stack in a numpy array with python

我在处理 .tif 文件时遇到一点问题。我确信这只是一个我无法解决的小问题(请记住,我是一个相对较新的程序员)。

基本上:我准备了大小为 64x64xn(n 到 1000)的 .tif 文件。该图像只是一个包含所有这些切片的文件。我想将图像加载到(多维)numpy 数组中。我试过:

from PIL import Image as pilimage

file_path=(D:\luca\test\test.tif)
print("The selected stack is a .tif")
dataset = pilimage(file_path)
tiffarray = np.array(dataset)
expim = tiffarray.astype(np.double);
print(expim.shape)

和其他东西(比如 tifffile)。我似乎只能读取堆栈的第一部分。 "expim" 是否可以包含保存在 tiff 堆栈中的所有信息?

我不确定是否有办法让 PIL 打开 tiff 堆栈的多个切片。

但是,如果您不必使用 PIL,另一种选择是 scikit-image,它默认从 tiff 堆栈打开多个切片。下面是一些示例代码,说明如何使用 scikit-image 将 tiff 堆栈加载到 Numpy 数组中:

>>> from skimage import io
>>> im = io.imread('an_image.tif')
>>> print(im.shape)
(2, 64, 64)

请注意,imread 函数将图像直接加载到 Numpy 数组中。此外,结果数组的维度是有序的 (z, y, x),其中 z 表示深度,y 表示高度,x 表示宽度。因此,要从堆栈中获取单个切片,您所要做的就是:

>>> print(im[1].shape)
(64, 64)

PIL 有一个函数 seek 可以移动到 tiff 堆栈的不同切片。

from PIL import Image

file_path=(D:\luca\test\test.tif)
print("The selected stack is a .tif")
dataset = Image.open(file_path)
h,w = np.shape(dataset)
tiffarray = np.zeros((h,w,dataset.n_frames))
for i in range(dataset.n_frames):
   dataset.seek(i)
   tiffarray[:,:,i] = np.array(dataset)
expim = tiffarray.astype(np.double);
print(expim.shape)