構造画像と機能画像を指定したら、前処理 Preprocessing を行います。
最初に、前処理のパイプラインを選択します。通常は、一番上のものを選ぶことで問題ないです。
そうすると、以下のパイプラインがセットされます。
具体的な流れは以下になります。
- 脳機能画像を、”original data” としてラベル付けします。
- 脳機能画像の Realignment を行います。
- 脳機能画像の origin を (0,0,0) にセットします。
- 脳機能画像の Slice-Timing Correctionを行います。
- 脳機能画像の外れ画像の検出を行います。
- 脳機能画像の分割化 & 標準化 を行います。
- 標準化が終わった脳機能画像を “mni-space data” としてラベル付けします。
- 構造画像の origin を (0,0,0) にセットします。
- 構造画像の分割化 & 標準化 を行います。
- 脳機能画像の平滑化を行います。
- 脳機能画像を “smoothed data” としてラベル付けします。
この流れにもうひとつプロセスを付け加えましょう。それは、「最初の数スキャンを除去する」です。
fMRIは最初の数スキャンはT1効果が安定状態(飽和状態)になっていないため、信号値が高信号を示す傾向にあります。このため、最初の10秒程度を捨てスキャンとして除きます。TRが2秒の時、10秒は5スキャンにあたります。このため、今回は最初の5スキャンを取り除くこととします。
前処理のパイプラインのダイアログの右側の “Add” をクリックし、“functional Removal of inital scans (disregard initial functional scans)”を選択します。そうすると、パイプラインの一番下にセットされますので、右側の”Move Up”をクリックして、”functional Label current functional files as “original data””の下にセットします。この流れをアニメーションGIFにしましたので、ご覧ください。
ここまですると前処理の設定が完了しました。最後に並列処理の設定を紹介します。macOSとLinuxの方で、CPUのコア数が多く、かつ、メモリがふんだんにある場合は非常に有用です。目安として、前処理を並列で行う場合、1列でメモリを最大3GB消費します。このため、メモリが8GBの方は、最大2列程度、メモリが16GBの方は最大4列程度、並列処理が行なえます。コア数よりもメモリに依存すると考えてよいでしょう。
並列処理をしたい場合は、前処理のウィンドウの右下の “local processing (run on this computer)” をクリックし、”distributed process (run on Background process (Unix,Mac))” を選択します。
ここまで設定できたら、“Start” をクリックします。そうすると、以下の画面が出てきます。
- 並列処理を設定した場合は、いくつに分散するかのウィンドウが出ます。今、サンプルデータは 8コア CPU, メモリ 16GBのノートPCで処理したいので、4つに分散することにします。(最大12GBのメモリが使われることが想定されます)
- Slice Orderを指定する画面が出ます。今回のサンプルデータは interleaved (Siemens) ですので、それを選んでOKをクリックします。
- 最初のスキャンをいくつ取り除くかのウィンドウが出ます。10秒 = 5TR 分のスキャンを取り除くので、5 と入力 してOKをクリックします。
- 外れスキャンの設定画面が出ます。これを “scrubbing” や “censoring” と言います。ここではデフォルトの”User intermediate settings (97th percentiles in normative sample)” を選びます。下にあるように、Global signal のZ値が5以上外れた場合、そして、動きが0.9mm以上ある場合には外れスキャンとして扱われます。もし、conservative (95th percentiles)にした場合は、Z値が3以上、動きが0.5mm以上で外れスキャンとして扱われます。デフォルトのままOKをクリックします。
- Segmentationの設定ウィンドウが出ます。基本、デフォルトのままで大丈夫です。デフォルト設定では、SegmentationにSPMで提供されているTissue Probability Mapを使います。そして、標準化後、構造画像のボクセルサイズは 1mm x 1mm x 1mm に、機能画像のボクセルサイズは 2mm x 2mm x 2mm に設定します。Bounding boxは[-90 -126 -72;90 90 108]となります。Bounding boxについて知りたい方は、こちらの記事をご参照ください。そのままOKをクリックします。
-
平滑化の kernelサイズを設定します。デフォルトでは 8mm ですが、最近、6mm の設定の場合が多いので 6 に変更します。そのうえでOKをクリックします。
- こうすると前処理がはじまります。並列処理をした場合は、下のようなウィンドウが表示されます。すべて処理が終わるとFinishedになります。
しばらく時間がかかりますので待ちます。
吉池と申します。
いつも先生のWebsiteで、SPMやCONNの勉強を実施しています。
今日は、ここのCONN(20.b)並列処理で、MATLAB 計算環境の事で、ご教示ください。
(IT環境なので、見当違いなら申し訳ございません)
それは、前処理の箇所ですが、先生のWebsiteでは、
「distributed processing (run on Background process (Windows))」
(先生の事例は、Unix,Macですが、私はWindows 10で解析しています。)
をご紹介されています。
さて、本日の質問は、この二つ上のラジオボタンの「queue/script it (save as scripts to be run later)」の機能に関して、どういった機能なのか、また、CONN前処理時にMATLABとどういった
スクリプトを繋げる方法など、ご存じでしたら、ぜひご教授頂きたく、投稿致しました。よろしくお願い致します。
吉池さん
この queue / script に関しては、私自身、そこまで使ったことはないですが、たとえば、100人の処理をする際に、4つの並列処理をしたい場合、25人分の処理をひとつのスクリプトとして4つのスクリプトを保存する感じです。
distributed processing は一気に始まってしまいますが、スクリプトとして保存すれば、実際に実行するのは後でもいいので、自分で実行するタイミングをコントロールできます。
いずれにしてもシェルスクリプトとして吐き出されますので、mac/unix環境と考えてもらった方がいいかなと思います。
根本先生
早速のお返事、本当に御礼申し上げます。
「シェルスクリプトとして吐き出される」の件、教えて頂きまして、本当に感謝申し上げます。
今後も、引き続きよろしくお願い致します。吉池。