当然のことながら初心者向け。玄人さんのお役には立ちません。
2012/01/31
目次
事前準備
SPMのダウンロード, パス設定, データの準備, CurrentDirectory, SPMの起動,
Preprocessing
DICOMインポート,
ファイル名変換,
初期画像削除,
Slice Timing,
Realign,
Segment,
Coregister,
Normalise,
Tips
spmbatch,
事前準備
SPMのダウンロード
まずは下記のページで必要事項を記入し,SPM8をダウンロード。
http://www.fil.ion.ucl.ac.uk/spm/software/download.html
アップデートファイルも下記ページからダウンロード
ftp://ftp.fil.ion.ucl.ac.uk/spm/spm8_updates
解凍後以下のフォルダに移す。
C:\Program Files\MATLAB\R2011b\toolbox
(環境によって異なる)
最初にSPM8本体を上記フォルダに移動し,その後アップデータファイルを上書きする。
パス設定
マットラボ上でSPM8を使うためには,マットラボにSPM8の場所を教えておく必要がある。
マットラボを起動し,メニューのファイル->パス設定を選択する。
パス設定ウィンドウの左上二番目の「サブフォルダーも追加」ボタンをクリックする。
先ほどコピーしたC:\Program Files\MATLAB\R2011b\toolbox\spm8フォルダを選択してOKボタンを押す。
spm8以下のフォルダがすべて指定されるので,保存ボタンを押したのち,閉じるボタンを押す。
これでspm8をコマンドライン上から呼び出すことができるようになる。
データの準備
上記図はデータのディレクトリ構造の一例。
ドライブの直下に<研究名>フォルダを作成し,その中にdataフォルダ,ICAフォルダ,Jobフォルダを作成(安静時fMRIでICA解析を行う場合)。
activation研究の場合には,dataとGroup,Jobのフォルダを作成する。
dataフォルダの中に個人ごとのフォルダを作成する。
その際,連番になっていることが望ましい。
群がある場合にはD001,D002,・・・,N001,N002などでも可。
個人フォルダの中にMRIスキャナから取り出したDICOMフォルダをコピーする。
DICOMからアナライズフォーマットに変換したファイルを格納するフォルダを作成しておく。
必要に応じてfunc,T1,T2。
同じフォルダでもよいが分けておいた方が視認性,操作性が向上する。
またPreprocessingにおいてバッチ処理を行うため,個人ごとのフォルダ構造は同じでなければならない。
マットラボ上での現在地を示す概念。
マットラボを起動し,SPMやその他のツールボックスを使う前にほぼ必ずここを変更する。
SPMでファイルやフォルダを指定するときのスタート地点となるので,必ず変更しておきたい。
通常はデータの格納されている場所が便利なので,上の例であれば,dataフォルダやそのうえの研究名フォルダがよい。
CurrentDirectoryの変更は図の赤丸で囲まれた部分で行うか,コマンドウィンドウ上でcdコマンドを使う。
cdの使用法はhelp cdと
コマンドウィンドウ上でうち,エンターを押すと表示される。
SPMの起動は中央のコマンドウィンドウにてspm fmriとタイプしエンターを押す。
一度立ち上げた後であれば,右下のコマンド履歴からspm fmriをダブルクリックすることでも起動できる。
SPM8が起動すると,3つのウィンドウがあらわれる。
左上がメニューウィンドウ,右がグラフィックウィンドウ。
左下はなんだろう?
途中経過やらなんやらが表示されるから便宜的にプロセスウィンドウとでもしておこう。
ノートだと普通に3つのウィンドウ表示するのが難しかったりするのでやはりSPM解析はデスクトップ及びマルチモニター推奨。
(SPMでなくてもマルチモニターは激推奨)
Preprocessing
MRIスキャナで測定したデータはDICOM形式。
SPMで解析するためにはAnalyze形式に変換する必要がある。
メニューウィンドウの中に「DICOM Import」ボタンがあるのでこれを使いたくなるが,使わない。
このボタンで行うと*.hdrと*.imgという二つの拡張子のファイルができてしまう。
一方で「Batch」ボタンから進んで処理すると*.niiという拡張子のファイルしか作成されない方法が使える。
後者の方がデータの扱いが簡単なので,こちらを推奨。

「Batch」ボタンを押すとBatchEditorウィンドウが表示される。
左の枠はModule Listでここに処理したいジョブが表示され,追加,コピー,削除等を行うことができる。
右の枠はModule Listにあるジョブのそれぞれの詳細が表示され,パラメータの指定や変更等が行える。

BatchEditorウィンドウにおけるメニューのSPM->Util->DICOM Importを選択する。
そうするとこんな感じ。
ModuleListにDICOMImport <-Xと表示され,右側にはその詳細なパラメータが入っている。
<-Xと表示されているパラメータはまだ入力が済んでいないところを示しているので,基本的にそこを埋めていく。
右の枠を見ると,DICOM files <-XとなっているのでまずはDICOMファイルを指定してあげる必要がある。
その行をダブルクリックするか,シングルクリックして指定した後,下の「Select Files」ボタンを押すとファイル指定ウィンドウが出てくる。
ここで表示されるフォルダとファイルはCurrentDirectoryの中身である。
ウィンドウの上の方には現在いるフォルダが表示される。
真ん中左の白い部分がフォルダの移動に使う枠である。
その中の「..」(ピリオド二つ)をクリックすることで一つ上の階層に戻ることができる。
また,左枠に表示されているフォルダをクリックすることでそのフォルダに移動することができる。
ドライブ自体の変更は左ちょい上にあるドロップリストから行う。
この辺の操作はファイル指定ウィンドウでもフォルダ指定ウィンドウでも共通。
DICOMファイルが入っているフォルダまで行くと以下のような感じ。
ファイルは真ん中右の白枠に表示される。
このフォルダの中に含まれるすべてのファイルが対象の場合には,その白枠の中で右クリックすると「Select All」と出てくるので,これをクリックする。
すると以下のように下の枠に選択されたファイルが移動する。
すべてではない場合にはShiftやCtrlキーを活用して同様に指定する。
その際ファンクションのDICOMと構造画像のDICOMを一緒にして指定してもかまわない。
ちゃんと識別してAnalyze形式のファイルを吐き出してくれる。
間違えて必要のないファイルを指定してしまったときには,下の枠からそのファイルをクリックするとリストから除外できる。
下枠で右クリックすると「Unselect All」機能が使え,最初からやり直すことが可能。
その場合,右枠から必要なファイルが消えているが,一度上層のフォルダに戻り,再度このフォルダを表示されることで,すべてのファイルが再表示される。
真ん中左に現在選択されているファイルの数が表示される。
目的のファイルがきちんと選択されているか,一つの指標になる。
下枠に必要なファイルをすべて移動したら,真ん中の「Done」を押す。
(その際ファイルの順番がばらばらになっていない方がよい)
DICOMファイルを選択するとBatchEditorはこんな感じになる。
次はOutput directoryを指定する。
Output directory <-Xの行をダブルクリックするか,クリックして指定してから「Select Files」ボタンを押す。
すると今度は下記のようなDirectory選択ウィンドウが表示される。
見た目はほどファイル選択ウィンドウを一緒。
違うのは,右側の枠にファイル名ではなく,フォルダ名が表示されること。
左側の枠でフォルダの移動を行うのは一緒。
指定するときに,右枠を使う。
DICOMファイルを指定した同じ個人のフォルダに移動し,funcフォルダをクリックし指定する。
するとこんな感じ。
funcフォルダにAnalyze形式のファイルが保存されることになる。
(構造画像も一緒に吐き出される場合もあるので,その場合は変換後T1やT2に移動)
変更の場合の対処もファイル選択ウィンドウと一緒。
下枠に指定されているフォルダをクリックで消して再度指定しなおせばよい。
問題なければDoneボタンを押す。
Output Directoryを指定したあとのBatchEditorはこんな感じ。
次に,Output image formatを変更する。
ここはデフォルトがTwo files (img+hdr) NlfTlになっている。
これだと二倍ファイルができてしまうので変更する必要がある。
Output image formatをクリックするとその下の枠に選択肢が出てくる。
Single format (nii) NlfTlをクリックして選択する。
これでDICOM Importのパラメータの指定と変更は完了。
左上にあるsaveボタンで忘れずにこのジョブを保存しておきたい。
このプロセスだけでなく,すべての作業でジョブを残すことをお勧めする。
もしエラーなどが出た場合,保存したジョブを呼び出して修正し,再度実行などが簡単に行えるためである。
ジョブは独立したフォルダに保存しておく方が無難。
個人的には研究名フォルダの中にJobフォルダを作成し,そこにすべてのジョブを保存するようにしている。
ジョブのファイル名はJob_<プロセス名>_<被験者>といった感じ。
例えばJob_DicomImport_001。
spmbatchを用いた自動化にも重要。
保存ができたら左上の緑三角アイコンの実行ボタンを押して処理を進める。
実行ボタンを押すと,プロセスウィンドウに進捗状況が表示される。
DICOM Importは結構時間がかかるので,しばし待つ。
マットラボ本体のコマンドウィンドウに
Done 'DICOM Import'
と表示されたら終了。
出力フォルダをエクスプローラ等で確認するとこんな感じ。
ここで機能画像と構造画像の双方が吐き出されていたら,構造画像をT1やT2に移動する。
ファイルサイズが機能画像と構造画像ではかなり違うため一目瞭然。
この作業を個人ごとに繰り返すことになるが,DICOMファイルがどの個人でも同じファイル名で保存されているのであれば,spmbatchを使った処理が便利。
spmbatchの入手は以下のウェブサイトから。
DICOMのファイル名が個人ごとに異なるため,spmbatchが使えないときにはSPMのBatchEditorで複数人のModuleを指定して,一気に実行させることで効率的作業になる。
Moduleの追加はメニューからプロセスを指定するか,左の枠ですでにあるModule上で右クリックし,複製することで行える。
出力されたファイルは通常非常に長ったらしい名前がついている。
SPMでこれらを扱うのはめんどくさいので,ファイル名を短い連番に変更することを推奨する。
例えば0001.nii,0002.nii,・・・などがよいと思われる。
通常機能画像は3ケタで収まる。ファイル名は4ケタにしておくと,必ず先頭が0になるので,あとでrawデータだけ指定したい場合などで捗る(そんなことあんまないけど)。
私が使っているのはRenB32というフリーソフト。
マットラボでコード書いてもいいし,やり方はなんでもよい。
解析対象が非常に多い場合にはコード書いた方が便利。
一人ひとりちんたらなんてやってられない。
dir関数でファイル名取得して,
movefile('ファイル名',strcat(sprintf('%04d',増加変数),'.nii'));
ってな感じで回せばよいです。
Preprocessingに入る前に,MRI信号が安定していない最初の数スキャンは解析から除くので削除しておく必要がある。
ActivationStudyの場合は,3~5スキャン程度除くことが多かった。
Resting-Stateの場合は,10スキャン削除している。
削除するのはもちろんDICOMではなくAnalyze形式のデータ。
Slice Timing
fMRIでは全脳をスキャンするのに2~4秒程度かけて20~30枚のDICOM画像を得ている。
当然同一スキャンの画像でもスライスが異なれば,測定した時間がずれていることになる。
これを補正するのがSlice Timing Correctionである。
(ブロックデザインでは必ずしも必要ではない)
SliceTimingの補正を行うには,メニューウィンドウの真ん中上にある「Sliece Timing」ボタンを押す。
Batch Editorが立ち上がるが,Module Listの中にはSliece Timingが登録された状態で出てくる。
Data <-Xとなっている行をダブルクリックすると,そのサブアイテムとしてSession <-Xが出てくる。複数セッションあるデータの場合には,その数だけSession <-Xを用意する。
その場合,Dataをクリックし,真ん中のCurrent ItemsにでてくるNew Sessionをクリックすることで増やせる。
Session <-Xをクリックするとファイル選択ウィンドウが出てくるので,対象被験者のfuncフォルダに移動する。
DICOMインポートとファイル名変換,初期画像削除が問題なくできていれば上の図のような感じで表示される。
真ん中右の枠で右クリックし,「Select All」を選択して,「Done」ボタンを押す。
対象でない画像が含まれる場合は,Filter機能(後述予定)を活用するとよい。
対象ファイルが指定できるとこんな感じ。
あとは,<-Xのついている必要なパラメータを設定していく。
Number of Slicesは1スキャン当たりのスライス数。
TRは1スキャンするのにかかる時間(秒)。
TAはTR-(TR/nSlices)の式を入れてもいいし,計算した値をいれてもよい。
式を入れた場合は自動的に計算してくれる。
Slice Orderはスライスの測定順番でだいたいパターンが決まっている。
ascending: 1,2,...,nSlices
descending: nSlices,nSlices-1,..,2,1
interleave: 2:2:nSlices 1:2:nSlices-1とか
わからない場合は測定MRI装置で確認するか,わかる人に確認。
入力は例えば1:20でもいいし,1 2 3 ... 20のような形式でも可。
Reference Sliceは通常最初に取るスライスか,スキャンの真ん中で取るスライスを指定する。
私見では真ん中のスライスを推奨。
すべてのパラメータを入力したら,Jobを保存して実行する。
プロセスウィンドウに進捗状況が示される。
終わるとプロセスウィンドウの上部バーの表記がDoneになる。
これが出ると終了のサイン。
対象者のfuncフォルダを見ると下記のように頭文字がaになったファイルがもともと指定した数と同じだけ吐き出される。
これでSliece Timingのプロセスが完了。
Realign
1スキャンごとに頭部の微動を評価して,補正してくれる。
まずはメニューウィンドウの左上のドロップダウンリストからRealign(Est&Res)を選択する。
するとBatchEditorにRealign: Estimation & Resliceのテンプレートが読み込まれる。
<-Xのついている項目を埋めていく。
ここでは基本対象となるファイルの指定だけ。
Data <-Xの行をダブルクリックすると
Session <-Xと行が追加されるので,
それをダブルクリックする。
ファイル選択ウィンドウを出てくるので,対象者のフォルダまで移動する。
頭が0のファイルが先頭に見えているけど,対象となるのはスライスタイミングを補正した頭にaがついたファイル群。
フィルタ機能を利用します。
赤丸で囲まれたところに ^aと入力し,エンターを押すか,Filtボタンを押すと真ん中右の枠にはaで始まるファイルだけが表示されます。
「^~」は~で始まるファイルだけ選択という意味になります。
ファイルが表示されている枠で右クリックし,「Select All」を選択後,Doneを押します。
Realignで入力が最低限必要なのはこれだけです。
他のパラメータはデフォルトで構いません。
ジョブを保存して,実行します。
こんな感じで処理が進みます。
プロセスウィンドウのバーにDoneと表示されたら修了です。
グラフィックウィンドウには頭部微動の評価結果が出てきます。
上のラインプロットはx軸,y軸,z軸で何ミリ動いたか,下はどのぐらい回転したかを表示しています。
動きが大きい場合には解析対象から除外する必要があります。
基準は研究の目的や精度によって異なりますが,通常のActivationStudyの場合2mm程度が基準になります。
対象者のfuncフォルダにrp_****.txtと一連のra****.niiファイルが作成されています。
rpのつくファイルの中にHeadMotionの時系列データが入っていますので,このファイルを1stLevel解析で共変量として用いることもできます。
Segment
Thin sliceのT1画像がある場合には後の標準化をより正確に行える。
Segmentationはその準備で,しなくても標準化できるけど精度があがるらしい。
高齢者対象の研究だと灰白質密度で補正することなんかがよくあるのでSegmentしておいた方がよい。
VBM研究などで灰白質密度の算出が目的の場合には,SPMに含まれるDARTELを使う方がよい。
Thin sliceのT1画像がない場合には飛ばす。
SPMメニューウィンドウの赤丸のところをクリック。
BatchEditorウィンドウにSegmentのパラメータが出てくる。
Data <-Xとなっているので,ここをクリックしてT1画像を指定する。
この処理は複数人を一つのジョブでいっぺんにできる。
すべての被験者のT1構造画像を事前にT1.niiに変更しておけば,一括で指定可能。
右の赤丸のところでT1.niiと入力し,すべての被験者のデータが入っているフォルダ(ここではdata)において,左の赤丸のところのR..ボタンを押す。
そうするとサブフォルダまで再帰的にT1.niiを探してくれて,下の枠に放り込んでくれる。
問題なければDoneボタンを押す。
そうするとこんな感じ。
あとAffine Regulationのところにヨーロピアンとと東アジアンを選択する項目があるので,一応東アジアンを選択。
で,ジョブを保存して実行する。
終わったら,各被験者のT1フォルダにいくつかファイルができている。
上の図はSegmentationの結果をわかりやすくならべたもの。
c1T1.nii 灰白質(左上)
c2T1.nii 白質(右上)
mT1.nii (左下)
右下はオリジナルのT1画像。
このmT1.niiを今後の処理に使う。
Coregister
この処理は,機能画像と構造画像の位置合わせを行います。
この処理を行わないと,ThinSliceT1画像を用いた標準化がうまくいきません。
機能画像だけしかない場合は飛ばします。
BatchEditorにCoregisterのジョブが登録される。
Reference ImageとSource Imageに<-Xがついているのでこれらを指定する。
Referenceの方に基準となる画像を入れる。
ここではSliceTimingとRealignの終わった,頭がraとなっている画像を指定。
先頭の1枚だけでよい。
Sourceの方にはReference画像に位置を合わせたい画像を入れる。
ここではさきほどSegmentしたmT1.niiを指定。
(Segmentしない場合にはT1.nii)
ReferenceとSourceの両方を指定したら実行。
T2画像もある場合には,T1画像をダイレクトに機能画像に位置合わせせずに,まずT2を機能画像に合わせ,そのT2にT1を合わせてやるとより正確にできる(らしい)。
こんな感じになったらプロセス終了。
次へ。
Normalise
標準化を行う。
SPMメニューウィンドウからNormalise(Est & Wri)を選択する。
バッチエディターにNormaliseのパラメータが登録される。
まずは一番上のData <-Xをダブルクリック。
するとSubject以下のアイテムが追加される。
Source Imageにさきほど処理したmT1画像を入れる。
もしくはT1画像。
構造画像がない場合には,機能画像(ra****.nii)を指定する。
Image to Writeをダブルクリックして,標準化したい画像を登録する。
ここではraがついたファイル群。
次にTemplate Image <-Xをダブルクリックする。
ここでは標準脳を指定する。
Source Imageで指定した画像と同じ種類のものを選択する。
T1.niiを選択。
Source Imageが機能画像の場合はEPI.niiを選択する。
安静時で機能的結合を解析する場合には,Voxel sizeが[2 2 2]だとデータが膨大すぎて回らないので,[3 3 3]に変更する。
これをしておかないとGIFTを用いた独立成分分析ではエラーがでる。
同様に,保存して実行。
こんな感じのグラフィックウィンドウになって処理が進む。
左がTemplate Image(標準脳)で,右が標準化された個人のSource Imageになる。
終了したら次へ。
Tips
spmbatch
DICOMインポートやSliceTimingなどのPreprocessingが同じ処理を被験者ごとに行う必要がある。
対象のファイルや被験者ごとのフォルダ構造が同じであればspmbatchというツールを用いて,一気に処理できる。
spmbatchの入手は以下のウェブサイトから。
使い方は簡単。
1.テンプレートとなる一人分のジョブファイルを作成。
2.spmbatchを起動し,まずそのジョブファイルを指定。
3.テンプレートの個人のフォルダを指定。
4.同様の処理を行いたい被験者たちのフォルダを一括指定。
これだけ。
とりあえずここまで。いつまで続くやら。
すごく役に立ちました!ぜひ続けてください!!
返信削除