Linfeng-Tang / PIAFusion

This is official tensorflow implementation of “PIAFusion: A Progressive Infrared and Visible Image Fusion Network Based on Illumination Aware”
MIT License
65 stars 13 forks source link

关于h5文件 #7

Open ysh5858 opened 8 months ago

ysh5858 commented 8 months ago

data_MSRS.h5 维度是(26112, 4, 64, 64),其中那个4代表什么意思,如果自己要制作训练集的话,怎么制作呀

Linfeng-Tang commented 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