3次元fMRI データセットを4次元fMRIデータセットに変換する方法: SPMとFSLの比較

fMRIデータは3次元データで取り扱う場合と4次元データで取り扱う場合があります。

3次元データの場合、たとえば1つのセッションが240ボリュームで構成されているとすると、240のniftiファイルで構成されます。

4次元データの場合、1つのniftiファイルに240ボリュームがすべておさめられています。

個人的には、データ管理という点では、4次元データの方が取り扱いやすいと思っています。

そこで3次元データを4次元データに変換する方法をSPMの場合とFSLの場合でまとめたいと思います。

必要な情報としては、TRです。この情報がないといくつかのソフトはうまく動かなくなります。

SPMの場合: spm_file_merge

SPMの場合は、’Batch’ -> ‘SPM’ -> ‘Util’ -> ‘3D to 4D file Conversion’ で指定できます。

3D Volumes: 3次元ファイルを指定します。
Output Filename: 出力ファイル名を指定します。
Data Type: デフォルトはINT16となっていますが、これは’SAME’の方がいいと思います。SAMEであれば入力したデータタイプと同じになります。
interscan interval: ここにTRが入ります。2とか2.5とか入ります。

GUIでぽちぽちやるのが面倒くさい人は、’spm_file_merge’ コマンドをMatlabから直接タイプできます。

Matlabから以下のようにタイプすると、説明が出てきます。

help spm_file_merge
  Concatenate 3D volumes into a single 4D volume
  FUNCTION V4 = spm_file_merge(V,fname,dt)
  V      - images to concatenate (char array or spm_vol struct)
  fname  - filename for output 4D volume [defaults: '4D.nii']
           Unless explicit, output folder is the one containing first image
  dt     - datatype (see spm_type) [defaults: 0]
           0 means same datatype than first input volume
  RT     - Interscan interval {seconds} [defaults: NaN]
 
  V4     - spm_vol struct of the 4D volume
 __________________________________________________________________________
 
  For integer datatypes, the file scale factor is chosen as to maximise
  the range of admissible values. This may lead to quantization error
  differences between the input and output images values.
 __________________________________________________________________________
  Copyright (C) 2009-2018 Wellcome Trust Centre for Neuroimaging

spm_file_merge(V,fname,dt,TR)とすればいいわけですね。(細かい話ですが、ヘルプからTRが抜けていることに気づきました。小さなバグですね)

出力ファイル名を ‘sub1_epi.nii’ TRが 2.5とするならば、以下のようなコマンドになります。

spm_file_merge(spm_select,'sub1_epi.nii',0,2.5)

これで先程のGUIと同じ事ができます。最初のspm_selectは、ファイルを選んだら文字配列で返してくれるので、これを使うのが一番てっとり早いと思います。

正しいものができたかどうかは、niftiコマンドで確認できます。

V = nifti('sub1_epi.nii')
V =
NIFTI object: 1-by-1
            dat: [64×64×40×240 file_array]
            mat: [4×4 double]
     mat_intent: 'Aligned'
           mat0: [4×4 double]
    mat0_intent: 'Scanner'
         timing: [1×1 struct]
        descrip: '4D image'

V.timing
ans = 

  フィールドをもつ struct:

    toffset: 0
     tspace: 2.5000

といった感じで、TRも正しくセットできたことが確認できます。

FSLの場合: fslmerge

FSLの場合は、fslmergeを使います。

コマンドだけタイプすると、ヘルプが出力されます。

$ fslmerge

Usage: fslmerge <-x/y/z/t/a/tr> <output> <file1 file2 .......> [tr value in seconds]
     -t : concatenate images in time
     -x : concatenate images in the x direction
     -y : concatenate images in the y direction
     -z : concatenate images in the z direction
     -a : auto-choose: single slices -> volume, volumes -> 4D (time series)
     -tr : concatenate images in time and set the output image tr to the final option value
     -n <N> : only use volume <N> from each input file (first volume is 0 not 1)

入力ファイルが、001.nii 〜 240.nii で、出力ファイルが sub1_epi.nii.gz、TRが2.5sの場合、以下になります。

fslmerge -tr sub1_epi [012][0-9][0-9].nii 2.5 

[012][0-9][0-9].nii は最初の数字が0か1か2のどれかで、残り2文字は0-9の任意の数字という意味になります。

正しいものができたかどうかは、fslinfoが便利です。

fslinfo sub1_epi.nii.gz
data_type	FLOAT32
dim1		64
dim2		64
dim3		40
dim4		240
datatype	16
pixdim1		3.312500
pixdim2		3.312500
pixdim3		4.000000
pixdim4		2.500000
cal_max		0.000000
cal_min		0.000000
file_type	NIFTI-1+

pixdim4に2.5と入っていますので、正しくTRが設定されたことがわかります。

Print Friendly, PDF & Email

3次元fMRI データセットを4次元fMRIデータセットに変換する方法: SPMとFSLの比較” へのコメント

  1. ピングバック: CONNチュートリアル (20.b対応版): 必要なデータ

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください