SPMで位置合わせする方法は2つあります。
- Realign: これは同じモダリティで位置合わせする場合に選びます。主に fMRIやPETの位置合わせに用いられます。
- Coregister: これは別のモダリティで位置合わせする場合に選びます。
ここでは、Coregister について述べます。
SPMで位置合わせする方法は2つあります。
ここでは、Coregister について述べます。
ある方から、「CONNで前処理したfMRI画像から、デフォルト・モード・ネットワーク(DMN)の時系列データを取り出すにはどうしたらよいですか?」というご質問をいただきました。
鍵となるプログラムは以下の2つです。
以下に、方法を記載します。
ある方から、Apple M1のmacでSPMを起動しようとするとspm_check_installation(‘basic’)でエラーが出て起動しないという相談を受けました。
コンパイルしたら問題は解決しました。コンパイル方法を共有します。
ただし、その後、SPMのMLでこのディスカッションに乗ってみたところ、コンパイルは不要だよということも教えていただきました。なので、コンパイルに挑戦してみたい人向けと思ってください。(普通は不要です)
fMRIデータは3次元データで取り扱う場合と4次元データで取り扱う場合があります。
3次元データの場合、たとえば1つのセッションが240ボリュームで構成されているとすると、240のniftiファイルで構成されます。
4次元データの場合、1つのniftiファイルに240ボリュームがすべておさめられています。
個人的には、データ管理という点では、4次元データの方が取り扱いやすいと思っています。
そこで3次元データを4次元データに変換する方法をSPMの場合とFSLの場合でまとめたいと思います。
必要な情報としては、TRです。この情報がないといくつかのソフトはうまく動かなくなります。
以前、DTIの画像などをFreeSurferの脳表に投影する方法を紹介しましたが、SPMの結果のspmT画像をFreeSurferの脳画像に投影する方法もわかりましたので紹介したいと思います。
必要なコマンドは、mri_vol2surf です。
入力画像は、spmT_0001.nii とします。出力ファイル名は、左半球の画像ということで、lh.spmT_0001.mgzとします。
今回、大事になるのは、–mni152reg というオプションです(木村先生、教えてくれてありがとうございました)。MNI空間でのあわせこみに使えるオプションです。
シンプルに以下でいけました。
mri_vol2surf --mov spmT_0001.nii --mni152reg --hemi lh --o lh.spmT_0001.mgz
入出力ファイル以外のオプションは2つだけ、–mni152reg と –hemi lh だけです。
最後に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
結果、以上のような感じで表示できました。
※満席になりましたので、申し込みを締め切らせていただきました。
これまでに脳画像解析勉強会を開催してまいりましたが、2019年度も2回開催予定です。
今回は、「SPM-VBMの基本は理解できた、その先をもう少し知りたい」方を対象にしたいと思います。
日時:2019年12月1日(日)9:00-17:00
場所:オフィス東京(東京駅八重洲口から徒歩5分)
費用:無料
定員:30名(先着順)
受講条件
– Matlabを既にお持ちであること
– 「すぐできるVBM」の内容は理解されていること
勉強会の内容(予定)
9:00-15:00
– Matlab入門(兼予習)
– SPMを利用したMatlabスクリプト
– SPMの結果をFigureにしていく方法
– VBMのTips
15:00-17:00
– 「今さら聞けないことを聞きたい」質疑応答コーナー
DICOM→NIFTIに変換する際に、MRI画像の左右を反転する方法はありますか?というご質問をいただきました。
DICOM→NIFTIの際に変換する方法は私が知る限りあまりないと思いますが、NIFTI画像に対する方法はあります。
この方法を紹介します。
FSLに、”MNI152_T1_2mm_LR-masked” というファイルがあります。
画像の反転の確認にはわかりやすいファイルなので、今回はこれを使用します。
Mangoで見ると、画像に埋め込まれている”R”が実際にR側にあることに気をつけてください。
最近、ある方にこういう依頼を受けました。
「SPMの結果から閾値を超えるクラスターの全領域名が知りたい」
このためには、まず、閾値を超えるクラスターの座標を知る必要があります。
SPMの構造体には、座標がすべて入っています。
SPMで結果を出した後に、Matlabのコマンドウィンドウに以下をタイプするだけでOKです。
xSPM.XYZmm
SPMの統計結果は xSPM という構造体におさめられています。
xSPMとタイプすると構造体の内容を見ることができます。
>> xSPM xSPM = フィールドをもつ struct: swd: 'ワーキングディレクトリ' title: 'コントラストのタイトル' Z: [1×1102 double] n: 1 STAT: 'T' df: [1.0000 250.0000] STATstr: 'T_{250}' Ic: 2 Im: [] pm: [] Ex: [] u: 3.1232 k: 100 XYZ: [3×1102 double] XYZmm: [3×1102 double] S: 70831 R: [1 41.5028 447.2876 1.2207e+03] FWHM: [3.6448 3.8374 3.7707] M: [4×4 double] iM: [4×4 double] DIM: [3×1 double] VOX: [3 3 3] Vspm: [1×1 struct] thresDesc: 'p<0.001 (unc.)' VRpv: [1×1 struct] Pp: [1×116 double] Pc: [1×58 double] uc: [4.8405 Inf 62.0000 62.0000] units: {'mm' 'mm' 'mm'}
これを改めてみると、SPMのResultsに出てくる内容がほぼ網羅されていることがわかります。
Z: [1×1102 double] はZ値が1102個あるということです。つまり、閾値を超えるボクセルが1102ボクセルあるということがわかります。
u: 3.1232 は p<0.001, uncorrectedに相応するT値、k: 100 はextent thresholdです。
XYZ: [3×1102 double]には、ボクセルの位置が入っており、XYZmmに、そのMNI座標が入っています。
とこんな感じでいろいろな情報が入っています。
XYZmmは3×1102ですから、3行1102列の行列です。
これは扱いにくいので、転置してあげると扱いやすくなります。
>> A=xSPM.XYZmm; >> A' ans = -9 54 21 -6 54 24 -9 54 24 -12 54 24 -6 57 24 -9 57 24 -12 57 24 -15 57 24 (…以下、この例の場合では1102行の出力が続きます)
こうやってすべての座標を得ることができました。
SPMでは、統計の結果はデフォルトでは、8mm離れたピーク領域しか表示されませんが、このような方法を使えば自分が気になっている領域が入っているかどうかを確認できます。
SPM12のアップデートのリリースが先ほどされました。
様々なバグ修正が行われています。
アップデートのREADMEを見ると、自分的に興味深いことを発見しました。
コマンドラインでですが、octaveでの動作ができるようにいろいろ試みられているようです。
バッチ処理などにmatlabなしでoctaveだけでできたら、応用範囲が一気に広がります。
すでにSPM12をインストールしている方々でしたら、アップデートは、Matlabから下記のコマンドを打てば自動でできます。
spm_update update
お試しあれ。
すぐできるVBMで、一般的なRenderにつれて触れていますが、最近、SPMに、もうひとつのRender機能があることを発見しました。
SPMで統計結果を出した後、左下のウィンドウから overlays… Render を選択するところまでは同じですが、
ファイルを選ぶ際に、SPM12のフォルダの”rend”ではなく、”canonical”フォルダにある”cortex*.gii”を選択します。
すると、下のようなRenderファイルが得られます。
これはマウスでくるくる回せます。
また、内側を見せたい場合は、右クリックして、Connected Componentsのうちのどちらかのチェックを外します。
そうすると、内側を見ることができるようになります。
きれいな結果なので、論文に使えると思います。
I used to use auto_reorient.m script to reorient MR images. However, this script doesn’t work without runnig SPM12 since spm_affreg.m is moved to spm12/toolbox/OldNorm/.
Therefore, I thought of another way to reorient images automatically.
The simple way is to coregister images to MNI images. However, if origin is too far from center of the image, it is likely to fail. So before coregistration, I set the origin of the image to the center, then coregister the image to MNI (icbm152.nii under spm12/toolbox/DARTEL).
I tested the script with various images and it works fine.
If you are interested, you can get the script from the link below.
Download acpc_coreg.m (Right click -> Save as)
Save the script under directory to which Matlab path is set, then type
acpc_coreg
from Matlab command window.
You need SPM12 for this script.
SPMのスクリプトを書く際、SPMのウィンドウを起動したいと思うことがあります。
SPMのコードを見ながら、以下で起動できることがわかりました。
便利なので備忘録がわりに書いておきます。
spm('CreateMenuWin','on'); %左上のウィンドウ spm('CreateIntWin','on'); %左下のウィンドウ spm_figure('Create','Graphics','Graphics','on'); %右のウィンドウ
かつてauto_reorient.mというスクリプトを配布していましたが、これは現在のSPM12で動かなくなってしまいました。理由は単純でSPM12からspm_affregという機能がなくなってしまったからです。もし、過去のSPMからspm_affreg.mを持ってきたら問題なく使えるのですが、この機会に別の手法を考えてみました。
シンプルな方法は、MNI標準脳にCo-registrationすることです。これだけでかなりあいます。
しかし、画像の原点があまりにも違うところに設定されているとエラーが出ることがあります。
そこで、以前、山下先生に教わった方法を採用し、まず、originを画像の中心に設定し、そのうえで、SPM12に搭載されているicbm152.niiにco-registartionするスクリプトを書いてみました。
多くの画像で試してみましたが、それなりにうまくいきますし、処理速度も速いです。
よかったら試してみてください。
acpc_coreg.mをダウンロード(右クリックで保存してください)
Matlabのパスが通っているフォルダにこのファイルを置いていただき、
Matlabから
acpc_coreg
とタイプするだけです。
先日、VBMチュートリアルにて、ある質問を受けました。
「MacのSPMでファイル選択の時にフォントの上半分が切れてしまうんですけど、解決法はないですか?」
具体例を示したほうがわかりやすいので、以下に示します。ファイル選択画面でこうなります。
これは気持ち悪いですよね。
いろいろ調べました。
その中で、どうも、spm12/matlabbatch/private の中にある
cfg_mlbatch_defaults.m
の中でフォントを規定しているようだというところにチュートリアルの最中に気づきました。
そして、今日、少し調査してみました。
SPMのバッチはSPM単独ではなく、Matlabbatchというものを使っているという知識はありました。
なので、GoogleでMatlabbatch font で調べたところ
以下の記事を見つけました。
https://en.wikibooks.org/wiki/SPM/Installation_on_64bit_Windows
その下にこんなことが書いてありました。
Edit spm/matlabbatch/private/cfg_mlbatch_defaults.m and modify lines:
cfg_defaults.cfg_ui.lfont.FontName = ‘Arial Narrow’;
cfg_defaults.cfg_ui.bfont.FontName = ‘Arial Narrow’;
Arial NarrowはMacにもあります。試してみました。
具体的には、cfg_mlbatch_defaults.m を開き、23行目にある
‘FontName’,get(0,’FixedWidthFontName’),…
を
‘FontName’,’Arial Narrow’,…
に変えます。
それで保存して、SPMを起動して、ファイル選択画面を出したところ…
フォントが綺麗に表示されるようになりました!
フォントがきになる方は試してみる価値があるかと思います。
ちなみに、ui.bfontの方は変えない方が良かったです。
SPM12で、ひとつバグがあることがわかっています。
モデル作成の時に、maskにexplicit maskを指定すると、estimateができずに失敗するというものです。
以下のようなエラーが出ます。
Running ‘Model estimation’ SPM12: spm_spm (v6842) 11:34:04 – 25/11/2016 ======================================================================== SPM12: spm_est_non_sphericity (v6827) 11:34:05 – 25/11/2016 ======================================================================== Failed ‘Model estimation’ 存在しないフィールド ‘xVol’ を参照しています。 In file “/Users/psymacpro3/Documents/MATLAB/spm12/spm_est_non_sphericity.m” (v6827), function “spm_est_non_sphericity” at line 105. In file “/Users/psymacpro3/Documents/MATLAB/spm12/spm_spm.m” (v6842), function “spm_spm” at line 431. In file “/Users/psymacpro3/Documents/MATLAB/spm12/config/spm_run_fmri_est.m” (v5809), function “spm_run_fmri_est” at line 33. The following modules did not run: Failed: Model estimation
これは、バグであることが知られており、解決方法として、spm_est_non_sphericity.mを差し替えることが推奨されています。
下記リンクのものをダウンロードし、SPM12のフォルダに上書きしてください。
これで問題なくなります。
バグフィクスされたspm_est_non_sphericity.mをダウンロード(右クリック→名前をつけて保存で保存してください)
リソースはこちら:
https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=spm;2c0ae193.1611
SPM12のアップデートが公開されました。
今回のアップデートでMatlab R2016a日本語版でSPM12が起動しないバグが解消されています。
SPM12をすでにインストールされている方は、Matlabからの簡単なコマンドでアップデートできます。spm_update(1)とタイプするだけです。
spm_update(1) A new version of SPM12 is available on: http://www.fil.ion.ucl.ac.uk/spm/download/spm12_updates/ (Your version: 6685 - New version: 6906) Download and install in progress... Success: 2152 files have been updated.
21/Oct/2016 SPM12がアップデートされました。このアップデートで下記の対処はもう必要なくなります。したがって、この記事は意味がないです。私のウェブサイトからの配布も終了します。
過日、Matlab R2016a日本語版では、SPM12を起動するときにエラーが出るという記事を投稿しました。その後、修正版spm_figure.mがあるという情報をいただき、さらに、開発者のGuillaume Flandinからも了承をいただきましたので、ここに修正版spm_figure.mを公開します。
修正方法は簡単で、下にあるspm_figure.mをダウンロードしていただき、SPM12の中にあるspm_figure.mと置き換えていただくだけです。
心配な方は、まず現在のspm_figure.mをspm_figure.m.origなどに修正してから置き換えられるとよいかと思います。
なお、Guillaume Flandinからの情報だと、この修正は、次のSPM12のアップデートで適応されるとのこと。
次のSPMアップデートが出た時点で、私のウェブサイトからの配布は終了します。
SPM12から、Display機能にあったReset Originがなくなりましたが、
先ほど、SPMのMLで、コマンドが紹介されていたので、紹介します。
spm_image('resetorient');
spm_imageで、SPMのDisplay機能を呼び出すことができるのですね。
そして、引数に’resetorient’を指定することでオリジン情報をクリアできます。
これは、とんでもない位置合わせをやってしまった時に、元に戻す便利な機能なので、共有しておきます。
SPM12では、灰白質(GM)、白質(WM)、脳脊髄液(CSF)容積もプラグインなしで算出できるようになりました。
まず、segmentationを行います。そうすると、seg8.matというファイルができます。これには、MRIをGM, WM, CSFにどのように分割したかという情報が入っています。
SPM12ではこれを用いて、これらの容積を求めることができます。
SPMのBatch editorを起動し、メニューから、SPM -> Util -> Tissue Volumesと選択します。
そうすると、下図のような内容が出てきます。
Segmentation mat-files: ここにseg8.matを指定します。
Maximum tissue class, Mask image: これはともにデフォルトのままでOKです。
Output file: 適当な名前をつけましょう。私はTissue_volumesという名前をいつもつけています。
これで実行すると、Matlab上に
Running 'Tissue Volumes' Segmentation files: /home/kiyotaka/img_data/ID001_seg8.mat /home/kiyotaka/img_data/ID002_seg8.mat /home/kiyotaka/img_data/ID003_seg8.mat Volumes (litres): 0.8050 0.5908 0.3279 0.8012 0.5897 0.3340 0.7893 0.5739 0.3914 Done 'Tissue Volumes' Done
といった内容が出力され、ワーキングディレクトリにTissue_volumes.csvというファイルも作られています。
一目瞭然ですが、左から順にGM, WM, CSFがリットルで表示されています。
これをすべて足せばICVになるわけですね。便利ですね。