python 三维数组 存为tiff_核心4D图像tif存储为hdf5 python

编辑:使用dask.array的imread函数

从0.7.0版开始,您无需将图像存储在HDF5中.直接使用imread函数:

In [1]: from skimage.io import imread

In [2]: im = imread('foo.1.tiff')

In [3]: im.shape

Out[3]: (5, 5, 3)

In [4]: ls foo.*.tiff

foo.1.tiff foo.2.tiff foo.3.tiff foo.4.tiff

In [5]: from dask.array.image import imread

In [6]: im = imread('foo.*.tiff')

In [7]: im.shape

Out[7]: (4, 5, 5, 3)

将图片存储到HDF5的较早答案

数据提取通常是最棘手的问题. Dask.array没有与图像文件的任何自动集成(尽管如果有足够的兴趣,这是完全可行的.)幸运的是,将数据移至h5py很容易,因为h5py支持numpy切片语法.在以下示例中,我们将创建一个空的h5py数据集,然后在for循环中将四个小tiff文件存储到该数据集中.

首先,我们获得图像的文件名(请原谅玩具数据集.我周围没有任何现实的东西.)

In [1]: from glob import glob

In [2]: filenames = sorted(glob('foo.*.tiff'))

In [3]: filenames

Out[3]: ['foo.1.tiff', 'foo.2.tiff', 'foo.3.tiff', 'foo.4.tiff']

加载并检查样本图像

In [4]: from skimage.io import imread

In [5]: im = imread(filenames[0]) # a sample image

In [6]: im.shape # tiny image

Out[6]: (5, 5, 3)

In [7]: im.dtype

Out[7]: dtype('int8')

现在,我们将在该文件中创建一个HDF5文件和一个名为’/ x’的HDF5数据集.

In [8]: import h5py

In [9]: f = h5py.File('myfile.hdf5') # make an hdf5 file

In [10]: out = f.require_dataset('/x', shape=(len(filenames), 5, 5, 3), dtype=im.dtype)

太好了,现在我们可以一次将图像插入HDF5数据集.

In [11]: for i, fn in enumerate(filenames):

....: im = imread(fn)

....: out[i, :, :, :] = im

此时dask.array可以愉快地结束

In [12]: import dask.array as da

In [13]: x = da.from_array(out, chunks=(1, 5, 5, 3)) # treat each image as a single chunk

In [14]: x[::2, :, :, 0].mean()

Out[14]: dask.array

如果您希望看到更多对图像堆栈的本机支持,那么我建议您使用raise an issue.直接从tiff文件堆栈中使用dask.array是非常容易的,而无需通过HDF5.

你可能感兴趣的:(python,三维数组,存为tiff)