【问题标题】:Load a tiff stack in a numpy array with python使用 python 在 numpy 数组中加载 tiff 堆栈
【发布时间】:2016-10-09 21:08:37
【问题描述】:

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

基本上:我准备了 64x64xn 大小的 .tif 文件(n 直到 1000)。该图像只是一个包含所有这些切片的文件。我想将图像加载到(多维)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 堆栈中的所有信息?

【问题讨论】:

    标签: python arrays image numpy tiff


    【解决方案1】:

    我不确定是否有办法让 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)
    

    【讨论】:

    • 不确定我收到的多页 TIFF 是否有问题,但收到此错误:KeyError: <COMPRESSION.CCITT_T6: 4>
    【解决方案2】:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-21
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 2016-06-08
      • 2017-11-12
      相关资源
      最近更新 更多