您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

核心4D图像tif存储为hdf5 python

核心4D图像tif存储为hdf5 python

从那时起,dask 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)

数据提取通常是最棘手的问题。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可以out愉快地包裹

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<x_3, shape=(), chunks=(), dtype=float64>

如果您想获得更多对图像堆栈的本地支持,那么我建议您提出一个问题dask.array直接在您的tiff文件堆栈中使用,而无需通过HDF5 ,将非常容易。

python 2022/1/1 18:43:57 有302人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶