2017-01-19 3 views
0

360の3D-Niftiファイルがあります。これらのファイルをすべて読み込み、大きいサイズの4Dファイルを生成するNifti Analyze toolを使用してniftiファイルに保存します。今まで私は以下の行を書いていますMATLABを使用してniiファイルを1つのniiファイルに保存するには

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構造体であり、すべてのイメージを含む変数tempを使って容易になります。しかし、myfile.niiは、そのサイズがちょうど6メガバイトであるため、すべてのイメージではなく、1つの単一ファイルです。少なくとも1ギガバイトでなければなりません。 誰かが見て、私が間違っている場所を教えてもらえますか?あなたが最新のデータのみでループを通るたびにsave_niiを呼んでいるので、

答えて

1

あなたはそれが書かれている方法で、あなたのループがmyfile.niiを上書きしています。代わりにsave_niiをループ外に1回だけ呼び出すと、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

前に試したところ、save_nii行の構造体に関するエラーが発生しました。エラーは '複数の構造要素のフィールド参照に続き、より多くの参照ブロックがエラーです'というエラーです。これは、一時的な1つの.imgと2つの要素が.hdrであるためです。 これにコメントしていただけますか?回避策はありますか? – Vendetta

+0

ループの外でmake_niiとsave_niiを呼び出すことによって解決されます。 ループ: Y(:、:、:、I)= xで(i)はは* .img 端TEMP = make_nii(Y) save_nii(TEMP、 'myfile.nii')手がかりのため おかげ。 – Vendetta

+0

@Vendetta申し訳ありませんが、昨日からあなたのコメントを見ました。はい、そうです。ループの外側で 'make_nii'を使ってファイルを作成する必要があります。私はそれに応じて答えを更新しました – Suever

関連する問題