Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MATLAB将nii文件保存到一个nii文件中_Matlab_Nifti - Fatal编程技术网

如何使用MATLAB将nii文件保存到一个nii文件中

如何使用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

我有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)

          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
在循环之外创建文件。我已经相应地更新了答案