Cargue una stack tiff en una matriz numpy con python

Comunidad Hallo Stack Overflow,

Estoy teniendo un pequeño problema con los archivos .tif. Estoy seguro de que es solo un problema menor que no puedo solucionar (tenga en cuenta que soy un progtwigdor relativamente nuevo).

Básicamente: preparé archivos .tif que tienen un tamaño de 64x64xn (n hasta 1000). La imagen es solo un archivo que contiene todos estos segmentos. Me gustaría cargar la imagen en una matriz numpy (multidimensional). Yo he tratado:

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) 

y otras cosas (como tifffile). Parece que solo puedo leer la primera parte de la stack. ¿Es posible que “expim” contenga toda la información que se guarda en la stack tiff?

Cualquier ayuda es apreciada!

No estoy seguro de si hay una manera de hacer que PIL abra varias secciones de una stack de tiffs.

Sin embargo, si no está obligado a usar PIL, una alternativa es scikit-image , que abre múltiples cortes de una stack de tiff de forma predeterminada. Aquí hay un código de ejemplo de cómo cargar una stack tiff en una matriz Numpy usando scikit-image:

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

Tenga en cuenta que la función imread carga la imagen directamente en una matriz Numpy. Además, las dimensiones de la matriz resultante están ordenadas (z, y, x) donde z representa la profundidad, y representa la altura yx representa el ancho. Por lo tanto, para obtener una única porción de la stack, todo lo que tienes que hacer es:

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

PIL tiene una función que seek desplazarse a diferentes sectores de una stack tiff.

 from PIL import Image as pilimage file_path=(D:\luca\test\test.tif) print("The selected stack is a .tif") dataset = pilimage(file_path) w,h = dataset.size tifarray = np.zeros((w,h,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)