たぶん以下の工程をすべて終わるのに4, 5時間かかるかもしれません。
I)DICOM import
東工大生命理工のMRI施設では、撮像したデータは、1 sliceにつき1 fileになるDICOMの形式で、USBメモリーなどを媒体として、直接実験グループに渡されます。
ただし、これらのDICOM画像は、Studyというフォルダの下で、撮像のmoduleごとにmodule名のついた別フォルダに分かれていて、その中には撮像セッティングのための、分析には不要なフォルダ(3P_Loca_1,calibration_2など )もありますから、それらはDICOM importの時に無視してかまいません。
必要なのは、通常、3D T1 IR FSPGIR-ASSETによる解剖・構造画像(3D_T1_IR_FSPGR_ASSET_*)と、EPIによる機能画像(runs, sessionごとに、fMRI_Brain_Wave_*という名前で分かれている)です。(module名により変わります)。
以下に示すのは、CONN(Connectivity toolbox)からSPM(Statistical Parametric Mapping)を動かして行う、一番簡易的なデータの前処理の方法です。それぞれの画像を詳細に見たい場合はクリックしてください。
MATLABを起動し、SPM12を立ち上げます(SPMはこのDownload registration formに記入送信してダウンロードできます)。立ち上げる時、addpathコマンドなどを利用し、SPM12がインストールされたディレクトリにパスを通すか、MATLABにそのパスを記憶させないといけません。たとえば、
addpath D:\\spm12
そして
spm fmri
で起動。
下の画面にある通り、DICOM Importのボタンを押すと、Batch Editorが開きます。ここで<-Xとある行にファイル名を指定すればよいのです。DICOM files とOutput directoryです。Output directoryとして、あらかじめ仮にimgと名の空フォルダを作っておくと良いでしょう。
DICOM files <-Xをクリックすると、SPMのウィンドウが開きます。ドライブを選び、左側のNavigate Directoriesのウィンドウから目的のフォルダに達してください。
ここでは、解剖・構造画像が196枚のslicesから構成される3D_T1_IR_FSPGR_ASSET_3をシングルクリックすると、右側のウィンドウにIM-0003-0001.dcmから、IM-0003-0196.dcmまでファイルが縦に並びます。そこで右クリックすると全ファイルが196枚なので一瞬で、Select Allできます。Functionalのdcmファイルの場合は枚数が多いので、Select Allにはしばらく待たないといけません。
全ファイルが196枚なので一瞬で、これらのファイル名はフルパスで下のWindowに移ります。Functionalのdcmファイルの場合は枚数が多いので、しばらく待たないといけません。
次のステップが重要です。ここでは、決してDoneのボタンを押してはいけません。DICOM Filesのウィンドウから操作が離れてしまいます。Doneボタンは押さずに、Navigate Directoriesのための左のウィンドウにカーソルを戻し、..(ドット2個)をクリックして一つ上のフォルダ(parent directory)に戻ってください。ここで..(ドット2個)は、Linuxの場合と同じ意味で一つ上の親ディレクトリを意味します。cd ..の..です。
次にfMRI_Brain_Waveの最初のrunを選び、同じようにクリックして、dcmファイルをすべてリストアップしますが、枚数が多いので時間がかかります。あわてずに。
同じく右クリック(Select All)で、下のWIndowに移しますが、かなりこれに時間がかかるはずです。この際、3D_T1_IT_FSPGR_ASSETの画像の下に追加する形にします。ここでもDoneボタンは押してはいけません。
全機能画像がすべての当該フォルダから選択された状態で、Doneボタンを押してください。画面が遷移します。
Batch Editorに戻ります。DICOM Filesに選んだ全DCMファイル数が表示されるまでしばらく待ちます。またCurrent Itemsに選んだ全DICOM Filesがフルパス表示されるまで待ちます。
Batch EditorでOutput Directory<-Xをクリックすると、ディレクトリ選択用のウィンドウが開くので、Navigate Directoriesして、最初に出力用に設定した空フォルダを選んで、クリックします。ここではimgです。
以上のように進みますと、Batch Editorが以下のように準備完了になるので、緑色の三角形のボタンをクリックしてRun Batchします。
後は、1時間以上待ってください。以下のようなバーが表示されていれば、作業開始です。
100% Completeになってこのバーが消えてもしばらく待ってください。MATLABのコマンドウィンドウに
Done 'DICOM import'
Done
のメッセージが出て、imgフォルダにniiファイルが出力されて初めてDICOM import終了です。
niiファイルはSPM12の場合、1 volumeの3Dファイルで、東工大の設定では、
s<Patient ID>-<セッション番号が右寄せで表示された4桁の整数>-00001-<インクリメントされるslice番号>-01.nii
のような形になります。
SPM8の場合、ヘッダ部分がhdrファイル、イメージ本体がimgファイルのペアになったAnalyzeファイルになります。NIFTI, ANALYZEの扱いはほぼ同じです。
II)Niiファイル(SPM8の場合はhdr/imgのAnalyze形式ファイル)を便利なようにディレクトリに振り分け
これはあくまで便宜的なもので、研究室により違いがあります。赤間研では伝統的に1人のデータごとに以下のようなディレクトリ構造に分けています。
<Patient ID>(実験参加者のIDです。この例では20161020ys)
--analyze
----structural(3D T1 IR FSPGR ASSETの構造画像関係、この例では最初にimgからs20161020ys-0003-00001-000001-01.niiを移動。3Dファイルなので1枚しかありません)
----functional(fMRIBrainwaveの機能画像関係、この例ではimgの残りの全NIIファイルをimgから移動させます。)
--behavioural(実験ログ関係は皆ここ)
--img(DICOM importの出力ファイルのディレクトリ)
--Study(DICOM ファイルのディレクトリ)
--spm(GLM関係に使います)
DICOMファイルでは1 sliceごとにファイルは1個でしたが、NIIファイルでは1 volumeごとに1個にまとめられています。
III)CONN(Connectivity toolbox)のインタフェースを介したPreprocessing
あらかじめCONNをダウロード(ここから)して解凍し、SPMのtoolboxのディレクトリにフォルダごと入れておきます。
MATLAB-SPMのコマンドウィンドウでconnと入力してEnterするか、SPMのToolboxのプルダウンメニューから選んで起動します。
CONNが起動します。
Version12.1の例です。[CONNはversionごとにGUIがかなり異なります。TR(Repetition time,繰り返し時間)がデフォルトは2 secondsですが、実験に合わせます。ここでは2.5に変更しています。変更したら、左側でBasicの下のFunctionalをクリック、と言う流れになります。]
以下がVersion17の例です。
TR(Repetition time,繰り返し時間)がデフォルトは2 secondsですが、実験に合わせます。ここでは2.5に変更しています。変更したら、左側でBasicの下のStructuralをクリック、と言う流れになります。
右上に半ば隠れているALTselectのボタンをクリックすると、SPM12のSelect filesのウィンドウが開きます。後は、SPMの操作の要領で、Structuralファイル(先にDICOM importした3D T1 IR FSPGR ASSETのniiファイル)をNavigate Directoriesして見つけて選べばよいです。<patient ID>\\analyze\\structuralに行ってください。
versionによっては、ALTselectでなく、SPMselectという隠れボタンを使う場合がありますが、その際は
https://sites.google.com/site/akamatitechlab/research/tips/conn1
を参照ください。OKボタンを押すと、構造nii画像が表示されます。
次に左側のボタンでFunctionalを選び、後は、先ほどと同様、ALTselectのボタンをクリックすると、SPM12のSelect filesのウィンドウが開きます。後は、SPMの操作の要領で、Functionalファイル(先にDICOM importしたfMRIBrainWaveのniiファイル)をNavigate Directoriesして見つけて選べばよいです。既にvisitしたディレクトリは、prevから直接呼び出せます。
<patient ID>\\analyze\\functionalに移れたら、右クリックで全niiファイルをSelect All して良いです。
下のウィンドウに移ったら、Doneボタンをクリック。ここでSelectされたファイル数を確認することを忘れないでください。
全volumes数だけniiファイルがあるので少々待ちます。ファイル数を確認してOK.
機能画像がCONN内で表示されました。
次に左のメニューでROIsに移ります。
次に下から2番目のPreprocessingのボタンを押し、Add->Start。いろいろとオプションを聞かれますが、撮像法やデータ処理法によって異なります。ここでは全部defaultの設定にOKしたケースです。前処理が開始され、しばらくの間待つことになります。
処理中はSPMが動いています。
Processing finished correctly. Output files importedのメッセージが出れば、CONNによるPreprocessingは終了です。
SPMによる処理ログはMATLABのコマンドウィンドウ上に表示されます。例えば以下の通りです。これをdiaryコマンドで保存しておくと勉強になるでしょう。
------------------------------------------------------------------------
Running job #1
------------------------------------------------------------------------
Running 'Realign & Unwarp'
SPM12: spm_realign (v6070) 17:59:48 - 02/12/2016
========================================================================
Printing 'Graphics' figure to:
C:\Users\owner\Documents\MATLAB\spm_2016Dec02.ps
Completed : 18:02:16 - 02/12/2016
SPM12: spm_uw_estimate (v6456) 18:02:16 - 02/12/2016
========================================================================
Printing 'Graphics' figure to:
C:\Users\owner\Documents\MATLAB\spm_2016Dec02.ps
Completed : 18:11:18 - 02/12/2016
SPM12: spm_uw_apply (v6301) 18:11:19 - 02/12/2016
========================================================================
Computing mask... : ...done
Reslicing images... : ...done
Writing mean image... : ...done
Completed : 18:13:36 - 02/12/2016
Done 'Realign & Unwarp'
Done
Functional centering translation x/y/z = [-9.2655029296875 -21.9049987792969 -15.5606994628906] (Subject 1)
------------------------------------------------------------------------
Running job #1
------------------------------------------------------------------------
Running 'Slice Timing'
SPM12: spm_slice_timing (v6130) 18:14:12 - 02/12/2016
========================================================================
Number of slices is... : 40
Time to Repeat (TR) is... : 2.5
Parameters are specified as... : slice indices
Completed : 18:17:15 - 02/12/2016
Done 'Slice Timing'
Done
Structural centering translation x/y/z = [-1.156001329422 -30.5 8.11000061035156] (Subject 1)
------------------------------------------------------------------------
Running job #1
------------------------------------------------------------------------
Running 'Segment'
SPM12: spm_preproc_run (v6365) 18:17:35 - 02/12/2016
========================================================================
Segment D:\20161020ys\analyse\structural\cs20161020ys-0003-00001-000001-01.nii
Completed : 18:23:48 - 02/12/2016
Done 'Segment'
Running 'Normalise: Write'
Done 'Normalise: Write'
Running 'Image Calculator'
SPM12: spm_imcalc (v6124) 18:24:01 - 02/12/2016
========================================================================
ImCalc Image: D:\20161020ys\analyse\structural\wc0cs20161020ys-0003-00001-000001-01.nii
Done 'Image Calculator'
Done
------------------------------------------------------------------------
Running job #1
------------------------------------------------------------------------
Running 'Normalise: Estimate & Write'
SPM12: spm_preproc_run (v6365) 18:24:09 - 02/12/2016
========================================================================
Segment D:\20161020ys\analyse\functional\meanus20161020ys-0005-00001-000001-01.nii
Completed : 18:26:04 - 02/12/2016
Done 'Normalise: Estimate & Write'
Done
Mapping files for session 1...: ...done
Calculating globals...: 960/960...done
Session 1 global statistics - mean: 1273.5640 stdv: 8.9285
Outlier detection: 6 identified outliers
Statistics of movement data:
x y z pitch roll yaw norm
mean 0.0114 0.0548 0.0271 0.0006 0.0002 0.0002 0.1270
stdv 0.0105 0.0524 0.0316 0.0006 0.0003 0.0003 0.1107
max 0.1541 0.8713 0.6245 0.0118 0.0057 0.0052 2.2048
Saving SPM regressor file D:\20161020ys\analyse\functional\art_regression_outliers_waus20161020ys-0005-00001-000001-01.mat and D:\20161020ys\analyse\functional\art_regression_outliers_and_movement_waus20161020ys-0005-00001-000001-01.mat
Warning. Error encountered during ART implicit-mask file creation. Skipping this step
Saved file: D:\20161020ys\analyse\functional\art_screenshot.jpg
------------------------------------------------------------------------
Running job #1
------------------------------------------------------------------------
Running 'Smooth'
Done 'Smooth'
Done
>>
ここで各ファイルの空間解像度に注意してください。革新脳・脳プロ:脳3T-MRI 標準プロトコルガイドラインに従った撮像の場合、native spaceで(元の空間解像度で)functional(機能画像)の場合は[3.31 3.31 4.0]が標準化後に[2 2 2]になり、structural(構造画像)の場合は[1 1 1.2]が標準化後に[2 2 2]になります。標準化後のvoxelサイズは双方が[2 2 2]です。
生成ファイルには、次のようなprefixが次々についてゆきます。
生成ファイル
functional(機能画像)の場合。
s*.nii:元ファイル
us*.nii ---> unwarped, 元の解像度[3.31 3.31 4.0]
aus*.nii ---> slice timing corrected, unwarped, 中心がvoxel座標[0 0 0]に合い、元の解像度
waus*.nii ---> normalized, slice timing corrected, unwarped, 標準化により解像度は[2 2 2](これをSPMの3D to 4D Conversion機能で4D化し(ここを読んでください)、1枚のファイルにすれば、PyMVPAの機能画像として利用できますが、中に含まれるvolumes数とvoxel sizeに注意してください。)
swaus*.nii ---> smoothed, normalized, slice timing corrected, unwarped, スムージング(デフォルトでは8 mm)され、解像度は[2 2 2] (MVPAではスムージングをかけると精度が落ちるので、これはGLM用になると思います。)
ただし、TR=1sのように短い場合は、slice timing correctionを省略することがあります(slice orderをdon't knowで指定した場合です)。その際はaというprefixを含むファイルは出力されません。
wc0cs*.nii: all tissues, sculpがなくなってstripしていることに注意; size [2 2 2]
それぞれの画像をいくつか同時表示して比較したい時は、SPMのCheck Regを使います。1枚の画像を表示する時はその左となりのDiplayボタンを押せば、様々な画像情報を閲覧することができます。
structural(構造画像)の場合。
s*.nii.nii:元ファイル、元の解像度[1 1 1.2]
cs*.nii:中心がvoxel座標[0 0 0]に合い、元の解像度[ 1 1 1.2]
wcs*.nii: さらにnornalized(標準化)で、sculpも残していてvoxel sizeは[2 2 2]
wc1cs*.nii: normalized, segmented->grey matter; [2 2 2] (ここからMVPA用の全脳マスクを作れますが、voxel sizeに留意。)
wc2cs*.nii: normalized, segmented-> white matter; [2 2 2]
wc3cs*.nii: normalized, segmented->csf; size [2 2 2]
重要なことは、analyze\\functionalのフォルダにあるたくさんのファイルから、waus*.nii だけを選択したいということです。
その為には、上の写真のようにFilterと書かれたテキストフィールドに、この文字列にパターンマッチするファイル名だけに絞るための、SPM独特の正規表現を入れる必要があります。
SPMの正規表現では、ワイルドカード(0個以上の任意の文字列にマッチ)は*(アスタリスク)でなくて.*(ドット、アスタリスク)です。この場合の.はリテラルでなく機能文字です。
そして文字列の冒頭をマッチするため^(ハッとマーク)を入れます。
^waus.*あるいは念のため^waus.*.nii
で normalized, slice timing corrected, unwarpedな機能画像が全部絞り込めるでしょう。
あとはいつも通りです。
4D.niiがanalyze\\functionalにできているのを確認してください。