Search code examples
matlabnifti

How do I save nii files into one nii file using MATLAB


I have 360 3D-nifti files, I want to read all these files and save into one nifti file using Nifti Analyze tool that should yield a 4D file of large size. So far I have written following lines

clear all;
clc; 

fileFolder=fullfile(pwd, '\functional');
files=dir(fullfile(fileFolder, '*.nii'));
fileNames={files.name};

     for i=1:length(fileNames)

          fname=fullfile(fileFolder,fileNames{i});
          z(i)=load_nii(fname);
          y=z(i).img;
          temp(:,:,:,i) = make_nii(y);
          save_nii(temp(:,:,:,i), 'myfile.nii')

fprintf('Iter:  %d\n', i)
end

This code facilitates with a variable temp that is 4D struct and contains all the images. However, myfile.nii is just one single file its not all the images because its size is just 6mb it should be atleast one 1gb. Can someone please have a look and let me know where I am wrong?


Solution

  • The way that you have it written, your loop is overwriting myfile.nii since you're calling save_nii every time through the loop with only the latest data. You'll want to instead call save_nii only once outside of the loop and save the entire temp variable at once.

    for k = 1:numel(fileNames)
        fname = fullfile(fileFolder, fileNames{k});
        z(k) = load_nii(fname);
        y(:,:,:,k) = z(k).img;
    end
    
    % Create the ND Nifti file
    output = make_nii(y);
    
    % Save it to a file
    save_nii(output, 'myfile.nii')