2017-02-02 6 views
0

MATLABを使用してHDF5コンテナを作成しました。コンテンツは、寸法が[1024 1024 4](=幅、高さ、チャンネル)のいくつかの画像です。私はこのようなデータセットを作成し、満たされた:すべての良いですMatlabでhdf5コンテナにデータを追加

% GENERATE DATA 
img = double(ones([1024 1024 4]));    % example for image 
imgs_dset = double(ones([size(img) n_imgs]); % dataset [1024 1024 4 n_imgs] 
datasetname = '/data'; 

% CREATE hdf5 container 
% dset_size is 'Inf' so that container can hold arbitrary number of imgs 
dset_size = [size(img) Inf];     % = [1024 1024 4 Inf] 
h5create(filename, datasetname, dset_size, 'Datatype', class(imgs_dset)); 

% FILL dataset 
h5write(filename, datasetname, imgs_dset); 

を、すべてn_imgsはファイルに書き込まれます。しかし、今度は、同じデータセットにさらに画像を追加したい場合は、のn_imgsのサイズを知らない(追加スクリプトは作成スクリプトから独立してファイルにアクセスします)。

は、古いバージョンでは'WriteMode', 'append'のようなオプションがありましたが、現在は機能h5writeは(docはこちら)パラメータstartcountを期待しています。

私はこれらのパラメータを決定する方法に困惑しています。設定例で

start = [1 j]; % probably translates to [1 n_imgs]? 
count = [20 1]; % translates to [img ?] 

私の例でこれらのパラメータを設定するにはどうすればよいですか?

  1. n_imgsを知りましたか?
  2. わからない場合はn_imgs

答えて

2

startは、ファイルの書き込みを開始する場所です。 countは、ファイルに書き込むデータ量です。

n_imgsがすでにファイルに書き込まれていて、追加する場合は、start[1 1 1 n_imgs+1]となります。 (すなわち、次の画像の最初にファイルへの書き込みを開始する)。ファイルに5つの新しい画像を追加したい場合、count[1024 1024 4 5]になります。

以前HDF5に書き込まれているどのように多くの画像がわからない場合、あなたはh5info

を使用して、それを調べることができますここではあなたの例とどのようにあなたがそれに追加することができます:

% GENERATE DATA 
n_imgs = 3; 
img = double(ones([1024 1024 4]));    % example for image 
imgs_dset = double(ones([size(img) n_imgs])); % dataset [1024 1024 4 n_imgs] 
datasetname = '/data'; 
filename = 'data.h5'; 

% CREATE hdf5 container 
% dset_size is 'Inf' so that container can hold arbitrary number of imgs 
dset_size = [size(img) Inf];     % = [1024 1024 4 Inf] 
h5create(filename, datasetname, dset_size, ... 
     'Datatype', class(imgs_dset), 'ChunkSize', [1024 1024 1 1]); 

% FILL dataset with first few images 
h5write(filename, datasetname, imgs_dset, [1 1 1 1], [size(img) n_imgs]); 

% APPEND to dataset 
n_new_images = 5; 
new_imgs_dset = double(ones([size(img) n_new_images])); 
info = h5info('data.h5', '/data'); 
curSize = info.Dataspace.Size; % is currently [1024 1024 4 3]. 
h5write(filename, datasetname, new_imgs_dset, ... 
      [1 1 1 curSize(end)+1], [size(img) n_new_images]); 

% check size of dataset after appending: 
info = h5info('data.h5', '/data'); 
disp(info.Dataspace.Size) % size is now [1024 1024 4 8] 
+0

素晴らしいですそれはまさに私が必要としていたものです。説明ありがとう! – Honeybear

関連する問題