CONNで前処理したfMRI画像の時系列データを取り出す方法

ある方から、「CONNで前処理したfMRI画像から、デフォルト・モード・ネットワーク(DMN)の時系列データを取り出すにはどうしたらよいですか?」というご質問をいただきました。

鍵となるプログラムは以下の2つです。

  • conn_matc2nii
  • spm_summarise

以下に、方法を記載します。

続きを読む

SPMの結果をFreeSurferの脳表画像に投影する方法

以前、DTIの画像などをFreeSurferの脳表に投影する方法を紹介しましたが、SPMの結果のspmT画像をFreeSurferの脳画像に投影する方法もわかりましたので紹介したいと思います。

必要なコマンドは、mri_vol2surf です。

  • 入力ファイルと出力ファイル名
  • 入力画像は、spmT_0001.nii とします。出力ファイル名は、左半球の画像ということで、lh.spmT_0001.mgzとします。

  • mri_vol2surf のオプション
  • 今回、大事になるのは、–mni152reg というオプションです(木村先生、教えてくれてありがとうございました)。MNI空間でのあわせこみに使えるオプションです。

  • 実際のコマンド
  • シンプルに以下でいけました。

    mri_vol2surf --mov spmT_0001.nii --mni152reg --hemi lh --o lh.spmT_0001.mgz
    

    入出力ファイル以外のオプションは2つだけ、–mni152reg と –hemi lh だけです。

  • Freeviewでの表示
  • 最後にfreeviewで表示します。T値が3以上を表示したいと思ったので、thresholdを3,5としてあります。

    freeview -f \
    $SUBJECTS_DIR/fsaverage/surf/lh.inflated:overlay=lh.spmT_0001.mgz:overlay_threshold=3,5\
      --viewport 3d --layout 1
    

    結果、以上のような感じで表示できました。

SPMの結果から、自動で各座標の解剖学的名称を抽出するスクリプト

SPMの結果から領域名を抽出するのに苦労している方は多いと思います。
SPM12からは、GUIを用いて簡単に同定することはできるようになりましたが、
(この方法を知りたい方は、こちらの記事を参照してください)
それでも何十箇所もある場合、マウスで一つ一つ確認するのは骨が折れます。

先日、SPMのMLで、Guillaume Flandinがこのようなメールを流していたことに気づきました。

続きを読む

SPMの3つのウィンドウを起動するためのコマンド

SPMのスクリプトを書く際、SPMのウィンドウを起動したいと思うことがあります。
SPMのコードを見ながら、以下で起動できることがわかりました。
便利なので備忘録がわりに書いておきます。

spm('CreateMenuWin','on'); %左上のウィンドウ
spm('CreateIntWin','on');  %左下のウィンドウ
spm_figure('Create','Graphics','Graphics','on'); %右のウィンドウ

SPM8でSPECT/PET画像を一括で解剖学的標準化するスクリプト

SPMでSPECT画像やPET画像を標準化するとき、Normalise (Est & Write)から行います。しかし、この時、Source ImageとImages to Writeにいちいち画像ファイルを指定せねばならず、苦痛を伴います。

私の友人の岩手医大の山下典生先生が、この問題を解決するスクリプトを書いて下さいました。

使い方はいたって簡単です。

  1. fy_normalise.mをダウンロード(右クリックで名前をつけてリンク先を保存)し、SPMのフォルダの中に保存します。
  2. Matlabから以下のようにタイプします。
  3. fy_normalise
    
  4. すると画像を選択するダイアログが出現しますので、標準化したいファイルを選択します。
  5. 次に、ディレクトリを聞かれますので、設定ファイルを保存したいディレクトリを指定します。
  6. そうすると、保存先にspm_normalise_20140117_1621112.matのようなファイルが保存されます。
  7. 次に、SPMのBatchを起動し、ファイルを開くから先ほど保存したmatファイルをしてします。
  8. そうすると、Subjectが指定された状態になります。
  9. パラメータを確認し、大丈夫であることを確認したら、実行すれば解剖学的標準化がはじまります。

非常に便利なので、関心のある方はどうぞお使いください。なお、fy_normalise(”,1)とすると、一度に標準化を走らせることもできますが、設定ミスで後悔しないように、設定を確認してから走らせることをお勧めします。

山下先生、ありがとうございました!

VBM8の前処理のベンチマーク

VBMの前処理にはどのくらいの時間がかかりますか?という質問を受けましたので、様々なマシンで計測してみました。

3人の3D-T1 MRI画像(ボクセルサイズ 1x1x1mm)をVBM8でDARTELでノーマライズしています。
前処理の設定をvbm8_preproc.matという名前で保存して、以下のベンチマークスクリプトを用意しました。とても単純なMATLABのスクリプトで、処理の前後にtic, tocというコマンドを入れることで前処理にかかった時間を測定するというものです。

%vbm8_benchmark.m
tic
spm('defaults','pet');
spm_jobman('initcfg');
load vbm8_preproc.mat;
spm_jobman('run',matlabbatch);
toc

その結果は、以下のようになりました。

Machine CPU Core Thread Memory OS Matlab Processed time
Workstation BTO AMD Opteron Processor 2425HE x 2 12 12 24GB Xubuntu 12.04 R2013b 74m31s
Desktop BTO Core i7-960 3.2GHz 4 8 24GB Xubuntu 12.04 R2011b 34m47s
Desktop BTO Core i7-960 3.2GHz 4 8 24GB Xubuntu 12.04 R2013b 33m20s
Mac Book Pro (Late 2011) Core i7-2640M 2.8GHz 2 4 8GB Mac OSX 10.9 R2011b 30m29s
Thinkpad T430s Core i7-3520M 2.9GHz 2 4 16GB Windows 7 R2013a 35m0s
Thinkpad T430s Core i7-3520M 2.9GHz 2 4 16GB Xubuntu 12.04 R2013b 29m12s
Desktop BTO Core i7-3930K 3.2GHz 6 12 32GB Xubuntu 12.04 R2013b 26m52s

この結果をまとめると、以下のようになります。

  • CPUが一番影響します。新しいCPU、かつ1コアあたりの性能が高いCPUだとよい結果となります。
  • これはSPM全体に言えることですが、マルチコアは効果はたいしてありません。逆に言えば、SPMを複数立ち上げて処理させることで処理時間を短縮できる可能性があります。
  • メモリは8GB以上あれば、さほど変わりありません。
  • WindowsとLinuxを比べるとLinuxに軍配があがります。
  • Matlabもバージョンが最新の方が処理速度が改善されているようです。

ということで、SPM-VBMという観点からでは、1コアあたりの周波数ができるだけ速いCPUを入手することをお勧めします。

心理のためのMatlabチュートリアル (SPMユーザに役立つMatlab入門)

SPMを使う方々は必ずMatlabを使いますが、世の中のMatlab入門をうたった書籍は、たいていが工学向けで、SPMを使う人がこれを知っておいたらいいというようなMatlab入門はあまりありません。何かいい手引きがないかと探していたら、Antonia Hamilton女史の書いたMatlab for Psychologists: A Tutorialという手引きを見つけました。ざっと見たところ非常によい手引きと感じたので、Hamilton女史に連絡をとり、日本語訳の許可をいただきました。日本語訳ができましたので、公開します。「心理のため」となっていますが、SPMを使う方々には、とても有用だと思います。
 なお、翻訳にあたり、山口大学の松尾幸治先生に多くのアドバイスをいただきました。この場をお借りして深謝いたします。

心理のためのMatlabチュートリアルをダウンロード

チュートリアルで用いるデータは下からダウンロードしてください。
練習用データ

Run SPM2, SPM5, and SPM8 concurrently

Many SPMers use different versions of SPM. We can run different versions of SPM in one computer, but we need to set MATLAB path carefully.

I had some discussion with Volkmar Glauche and Guillaume Flandin, who kindly gave me advice how to write the script for running diferrent spms.

Below is the scripts which enables us to run SPM2, SPM5, and SPM8 concurrently.

  1. make a directory where you want to save scripts. (e.g. ~/spm_paths/)
  2. add the directory to the path in Matlab. (File -> Set Path -> Add path)
  3. put spm_rmpath.m in SPM2 folder.
  4. You find this file in SPM5 or SPM8 directory. You can just copy it from SPM5/8 to SPM2 directory.

  5. write scripts to run spm2, spm5, and spm8
  6. suppose your spm2, spm5, and spm8 directories are “/usr/local/spm2″, “/usr/local/spm5″, and “/usr/local/spm8″. (change the pathname to your circumstance)

    %%%%%%%%%%%%%%% spm2.m
    % remove spm path
    while true
    try, spm_rmpath; catch break; end
    end
    % add spm2 path
    addpath /usr/local/spm2;
    % run spm2
    spm;

    %%%%%%%%%%%%%%% spm5.m
    % remove spm path
    while true
    try, spm_rmpath; catch break; end
    end
    % add spm5 path
    addpath /usr/local/spm5;
    % run spm5
    spm;

    %%%%%%%%%%%%%%% spm8.m
    % remove spm path
    while true
    try, spm_rmpath; catch break; end
    end
    % add spm8 path
    addpath /usr/local/spm8;
    % run spm8
    spm;

    (Of course you can add any paths you like between “addpath /usr/local/spm/spm2/5/8″
    and “spm”)

  7. save these scripts in the directory ~/spm_paths/
  8. In a matlab window, type “spm2″
  9. In another matlab window, type “spm5″
  10. In another matlab window, type “spm8″

Now you can run different versions of SPM concurrently.

Matlab script for automatic AC-PC setting in SPM5, 8, or 12

ON 17 Oct 2008, Carlton Chu posted a nice script to SPM mailing list.
Though it doesn’t have any response from the list, I find it very useful, so I introduce the script on my blog.

The purpose of the script is simple: Set AC-PC automatically for you!

Though it takes time (around 5 minutes per subject in my circumstance), It’s so much time-saving for me who have more than 1000 subjects which I need to realign.

If you are interested, try the following script. It works for SPM5 and later (SPM8 or 12).

In the original post, function which calls select files window was commented out. I uncommented it and it runs without any problems.


function auto_reorient(p)
spmDir=which('spm');
spmDir=spmDir(1:end-5);
tmpl=[spmDir 'canonical/avg152T1.nii'];
vg=spm_vol(tmpl);
flags.regtype='rigid';
p=spm_select(inf,'image');
for i=1:size(p,1)
f=strtrim(p(i,:));
spm_smooth(f,'temp.nii',[12 12 12]);
vf=spm_vol('temp.nii');
[M,scal] = spm_affreg(vg,vf,flags);
M3=M(1:3,1:3);
[u s v]=svd(M3);
M3=u*v';
M(1:3,1:3)=M3;
N=nifti(f);
N.mat=M*N.mat;
create(N);
end

Usage: Download the file below, put the file into the SPM5, 8, or 12 directory, and run “auto_reorient” from Matlab window.

auto_reorient.m