我使用MATLAB创建了一个HDF5容器。内容是多个尺寸为[1024 1024 4]
(=宽度,高度,通道)的图像。我创建并填充了这样的数据集:
% 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需要参数start
和count
(doc在这里)。
我很困惑如何确定这些参数。在他们设置的例子中
start = [1 j]; % probably translates to [1 n_imgs]?
count = [20 1]; % translates to [img ?]
如何在我的示例中设置这些参数?
n_imgs
?n_imgs
?答案 0 :(得分: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]