3

3D 画像のムービーのスライスを表す 27GB の 2D tiff ファイルがあります。このデータを単純な numpy4d 配列であるかのようにスライスできるようにしたいと考えています。dask.array は、配列が hdf5 ファイルとしてメモリに格納されると、配列をきれいに操作するための優れたツールのようです。

これらのファイルがすべてメモリに収まらない場合、最初にこれらのファイルを hdf5 ファイルとして保存するにはどうすればよいですか。私は h5.py とデータベース全般に不慣れです。

ありがとう。

4

1 に答える 1

5

編集:dask.arrayimread機能を使用

現在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)

画像を HDF5 に保存する古い回答

データの取り込みは、多くの場合、最も厄介な問題です。Dask.array には、画像ファイルとの自動統合はありません (ただし、十分な関心があれば実行可能です)。幸い、numpy slicing 構文がサポートされているh5pyため、データの移動は簡単です。h5py次の例では、空の h5py データセットを作成し、for ループで 4 つの小さな 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 ファイルと、そのファイル内で呼び出される HDF5 データセットを作成'/x'します。

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)

これで、画像を一度に 1 つずつ 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.arrayHDF5 を介さずに、tiff ファイルのスタックから直接使用するのは非常に簡単です。

于 2015-08-11T23:58:10.630 に答える