2017-01-19 6 views
0

У меня есть 360 файлов 3D-nifti, я хочу прочитать все эти файлы и сохранить в один файл nifti с помощью Nifti Analyze tool, который должен дать 4D-файл большого размера. До сих пор я написал следующие строкиКак сохранить nii-файлы в один файл nii с помощью MATLAB

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 

Этого код облегчает с переменной температурой, которая является 4D структуры и содержит все изображения. Тем не менее, myfile.nii - это всего лишь один файл, а не все его изображения, так как его размер равен 6 Мб, он должен быть по крайней мере одним 1 гб. Может кто-нибудь, пожалуйста, посмотрите и сообщите мне, где я ошибаюсь?

ответ

1

То, как вы его написали, ваша петля перезаписьmyfile.nii, так что вы звоните save_nii каждый раз через петлю только с последними данными. Вместо этого вы должны будете вызывать save_nii только один раз за пределами цикла и сохранять всю переменную temp сразу.

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') 
+0

Я пробовал раньше, и я получаю сообщение об ошибке, связанной с struct в строке save_nii. Ошибка: «Ссылка на поле для нескольких элементов структуры, за которой следуют дополнительные ссылочные блоки, является ошибкой». Я думаю, это потому, что в temp есть два элемента .img, а другой - .hdr. Можете ли вы прокомментировать это? Любые обходные пути? – Vendetta

+0

Он решается путем вызова make_nii и save_nii вне цикла, например. Loop: у (:,:,:, я) = х (я) .img конец температура = make_nii (у) save_nii (температура, 'myfile.nii') Спасибо за подсказку. – Vendetta

+0

@ Vendetta Извините, вы только что видели свой комментарий со вчерашнего дня. Да, вы правы, вам придется создавать файл с помощью 'make_nii' вне цикла. Я обновил ответ, соответственно, – Suever

Смежные вопросы