Open ysh5858 opened 8 months ago
4表示单通道的红外图像和3通道的可见光图像。 你可以通过修改一下MATLAB程序来生成.h5文件。
clear; close all;
% %%%%%%%%%%%%%%%%%%%% 存h5文件 %%%%%%%%%%%%%%%%%%%%%%%%%%%%% savepath='../data_VIF.h5'; size_input=64; stride=86;
% initialization data=zeros(size_input,size_input,4,1);
mr_folder='../test_data/MFNet/vi'; pet_folder='../test_data/MFNet/ir'; mr_filepaths=dir(fullfile(mr_folder,'.png')); pet_filepaths=dir(fullfile(pet_folder,'.png')); count=0; night_count = 1; day_count = 1; day_paths = cell(length(mr_filepaths)); night_paths = cell(length(mr_filepaths)); for i=1:1:length(mr_filepaths) name = mr_filepaths(i).name; finger = contains(name,'D'); isContain=any(finger); if isContain day_paths{day_count} = name; day_count = day_count + 1; % if day_count - night_count > 2 % day_count = day_count - 1; % continue
% end else night_paths{night_count} = name; night_count = night_count + 1; % if night_count - day_count > 2 % night_count = night_count - 1; % continue % end end end num = min(day_count, night_count)
count=0;
night_count = 1;
day_count = 1;
number = 0;
for i=1:2:num-1
number = number +1;
day_paths{i}
mr_image=im2double(imread(fullfile(mr_folder,day_paths{i}))); %读入第i张图片
pet_image=im2double(imread(fullfile(pet_folder,day_paths{i}))); %读入第i张图片
[a,b,c] = size(pet_image);
if c>1
pet_image=rgb2gray(pet_image);
else
pet_image=pet_image;
end
[height,width, c]=size(mr_image);
for x=1:stride:(height-size_input+1)
for y=1:stride:(width-size_input+1)
sub_mr_image=mr_image(x:x+size_input-1,y:y+size_input-1, :);
sub_pet_I=pet_image(x:x+size_input-1,y:y+size_input-1, :);
count=count+1;
data(:,:,1,count)=sub_mr_image(:, :, 1);
data(:,:,2,count)=sub_mr_image(:, :, 2);
data(:,:,3,count)=sub_mr_image(:, :, 3);
data(:,:,4,count)=sub_pet_I;
day_count = day_count + 1;
end
end
night_paths{i}
mr_image=im2double(imread(fullfile(mr_folder,night_paths{i}))); %读入第i张图片
pet_image=im2double(imread(fullfile(pet_folder,night_paths{i}))); %读入第i张图片
[a,b,c] = size(pet_image);
if c>1
pet_image=rgb2gray(pet_image);
else
pet_image=pet_image;
end
[height,width, c]=size(mr_image);
for x=1:stride:(height-size_input+1)
for y=1:stride:(width-size_input+1)
sub_mr_image=mr_image(x:x+size_input-1,y:y+size_input-1, :);
sub_pet_I=pet_image(x:x+size_input-1,y:y+size_input-1, :);
count=count+1;
data(:,:,1,count)=sub_mr_image(:, :, 1);
data(:,:,2,count)=sub_mr_image(:, :, 2);
data(:,:,3,count)=sub_mr_image(:, :, 3);
data(:,:,4,count)=sub_pet_I;
night_count = night_count + 1;
end
end
end fprintf('%d infrared and visible images are selected, which contains %d day scenes, and %d night scene. Therefore, we collect %d infrared and visible pathes.\n', 2 number, number, number, count) % fprintf('共选择%d对红外和可见光图像对, 白天场景和可见光场景都为%d对, 裁剪得到%d个patches.\n', 2 number, number, count) night_count day_count count % 将训练图像的顺序打乱 % order=randperm(count); % data=data(:,:,:,order);
% 将裁剪好的图像存入HDF5文件中
chunksz=256;
totalct=0;
create_flag=true;
for batch_num=1:floor(count/chunksz)
lastread=(batch_num-1)*chunksz;
batch_data=data(:,:,:,lastread+1:lastread+chunksz);
startloc=struct('dat',[1,1,1,totalct+1]);
% 将数据保存为hdf5的格式
if batch_num~=1
create_flag=false;
end
curr_dat_sz=store2hdf5(savepath,batch_data,create_flag,startloc,chunksz);
totalct=curr_dat_sz(end);
end
data_MSRS.h5 维度是(26112, 4, 64, 64),其中那个4代表什么意思,如果自己要制作训练集的话,怎么制作呀