如何使用MATLAB将nii文件保存到一个nii文件中
我有360个3D nifti文件,我想读取所有这些文件并保存到一个nifti文件中,使用该文件应该可以生成一个大尺寸的4D文件。到目前为止,我写了以下几行如何使用MATLAB将nii文件保存到一个nii文件中,matlab,nifti,Matlab,Nifti,我有360个3D nifti文件,我想读取所有这些文件并保存到一个nifti文件中,使用该文件应该可以生成一个大尺寸的4D文件。到目前为止,我写了以下几行 clear all; clc; fileFolder=fullfile(pwd, '\functional'); files=dir(fullfile(fileFolder, '*.nii')); fileNames={files.name}; for i=1:length(fileNames) fnam
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
这段代码使用了一个变量temp,该变量是4D struct并包含所有图像。然而,myfile.nii只是一个文件,而不是所有的图像,因为它的大小只有6mb,至少应该是1gb。
有人能看一下并告诉我我错在哪里吗?按照您编写的方式,您的循环正在覆盖
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')
按照您编写的方式,您的循环正在覆盖
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')
我以前尝试过,但在save_nii行中出现了一个与struct相关的错误。错误为“多个结构元素的字段引用,后面跟着更多的引用块是错误的”。我认为这是因为temp中有两个元素,一个是.img,另一个是.hdr。你能对此发表评论吗?有解决办法吗?在循环外调用make_nii和save_nii可以解决这个问题,例如循环:y(:,:,:,i)=x(i)。img end temp=make_nii(y)save_nii(temp,'myfile.nii')谢谢你的提示。@Vendetta抱歉,刚刚看到你昨天的评论。是的,您是对的,您还必须使用
make_nii
在循环之外创建文件。我已经根据我之前的尝试更新了答案,但在save_nii行中出现了一个与struct相关的错误。错误为“多个结构元素的字段引用,后面跟着更多的引用块是错误的”。我认为这是因为temp中有两个元素,一个是.img,另一个是.hdr。你能对此发表评论吗?有解决办法吗?在循环外调用make_nii和save_nii可以解决这个问题,例如循环:y(:,:,:,i)=x(i)。img end temp=make_nii(y)save_nii(temp,'myfile.nii')谢谢你的提示。@Vendetta抱歉,刚刚看到你昨天的评论。是的,您是对的,您还必须使用make_nii
在循环之外创建文件。我已经相应地更新了答案