使用Matlab将数据附加到hdf5容器
我使用MATLAB创建了一个HDF5容器。内容是几个尺寸为使用Matlab将数据附加到hdf5容器,matlab,hdf5,Matlab,Hdf5,我使用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 = '
[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\u img
都被写入文件。但是,我现在想向同一数据集中添加更多图像,不知道所创建文件的大小n_imgs
(附加脚本独立于创建脚本访问文件)
对于较旧的版本,有一个类似于'WriteMode','append'
的选项,但是现在函数h5write需要参数start
和count
(在这里)
我对如何确定这些参数感到困惑。在他们树立的榜样中
start = [1 j]; % probably translates to [1 n_imgs]?
count = [20 1]; % translates to [img ?]
在我的示例中如何设置这些参数
n\u imgs
n\u imgs
start
是数据中开始写入文件的位置count
是您将写入文件的数据量
假设n\u imgs
已写入文件,并且您希望追加,start
将是[1 n\u 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]
start
是数据中开始写入文件的位置count
是您将写入文件的数据量
假设n\u imgs
已写入文件,并且您希望追加,start
将是[1 n\u 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]
太好了,这正是我需要的。谢谢你的解释!太好了,这正是我需要的。谢谢你的解释!