FSLでFA画像を用いてMD画像を非線形変換する方法

FSLにはFA画像を非線形変換する際、FA_2_FMRIB58_1mm という設定ファイルが準備されており、比較的簡単に非線形変換ができます。
しかし、MD画像を非線形変換したい場合にはすぐにはうまくできません。
この時、FA画像の非線形変換のパラメーターを利用することで、可能になります。
ポイントは、flirt, fnirt, applywarp を上手に使うことです。
以下、sub1_FA.nii.gz, sub1_MD.nii.gz があるという前提でこれらを標準化するコマンドを記載します。コメントに意味を記載しています。

# FA画像を線形変換で標準化
# パラメータを affine.mat として出力(変換後の画像は出力しない)
flirt -ref $FSLDIR/data/standard/FMRIB58_FA_1mm \
      -in sub1_FA \
      -omat affine.mat
# FA画像を非線形変換で標準化
# 非線形変換のパラメータ画像を、sub1_cout.nii.gz として出力
# FA画像の標準化された画像を、sub1_FA_fnirted.nii.gz として出力
fnirt --config=FA_2_FMRIB58_1mm \
      --in=sub1_FA \
      --aff=affine.mat \
      --cout=sub1_cout \
      --iout=sub1_FA_fnirted
# MD画像を非線形変換で標準化
# 上記で得られた、affine.mat, sub1_cout.nii.gz を利用して、
# sub1_MD を変換させる
# sub1_FA と sub1_MD は全く同じ次元なので、パラメータだけ当てはめることができる
# MD画像の標準化された画像を、sub1_MD_fnirted.nii.gz として出力
applywarp --ref=$FSLDIR/data/standard/FMRIB58_FA_1mm \
          --in=sub1_MD \
          --warp=sub1_cout \
          --premat=affine.mat \
          --out=sub1_MD_fnirted

Making use of eddy_cuda of FSL 6.0.4 on Ubuntu 18.04

eddy implemented in FSL is time-consuming program. FSL recommends using eddy_cuda, GPU version of eddy. They ship eddy_cuda8.0 and edddy_cuda9.1. If you use Ubuntu 18.04, you can make use of eddy_cuda9.1 with only 4 commands.

Disclaimer: Installing nvidia-driver could cause display problem. I am not responsible for the problem…

続きを読む

Ubuntu18.04上のFSL6.0.4でeddy_cudaを使う方法

FSLにはeddyという拡散MRI画像の渦電流を補正するプログラムが搭載されています。
かつてはeddy_correctというシンプルなプログラムでしたが、
今のeddyは、計算量がとてつもなく大きな(=処理時間がかかる)プログラムとなっています。

Liux版のFSLには、eddy_openmp というCPU版と、eddy_cuda{8.0,9.1}というGPU版があります。

Ubuntu 18.04 が搭載されているLinuxで NVIDIA製のグラフィックボードが搭載されている場合、eddy_cudaを比較的簡単にセットアップできるので紹介します。

注意:NVIDIAのドライバを入れる時点で、ディスプレイの解像度が変になることがあります。現在の実働マシンに使う場合は相当注意しながら行ってください。個々人の環境があまりにも違うのでこの方法で不具合が起こっても責任は負いかねます。(すでに3台のマシンでセットアップを行い問題ないことを確認していますが…)

続きを読む

fslroiやmrconvertを使ってNIfTI画像からスライスを1枚だけ削除する方法

拡散画像からZ軸(上下)方向に1枚だけスライスを除く必要がありました。

どんな方法があるか調べていたところ、fslroiがいいなと思いました。
そして、慶応大学病院の上田先生からMrtrixについてくるmrconvertでも同様のことができることを教わりました。
自分の備忘録も兼ねてここに記載しておきます。

実際に試せるように、サンプル画像を準備しました。この画像をベースに説明します。

オリエンテーションの確認

まず、fslhd を用いて、この画像のオリエンテーションを確認します。

fslhd dwi.nii.gz

この結果の qform は以下になります。

qform_name	Scanner Anat
qform_xorient	Right-to-Left
qform_yorient	Posterior-to-Anterior
qform_zorient	Inferior-to-Superior

スキャナーにおいて、X軸は左右、Y軸は前後、Z軸は上下で撮影しているということになります。
つまり、この画像は水平断ということになります。

dimensionの確認

続いて、この画像のdimensionを確認します。先程の fslhd の結果の最初の方を見ます。

dim1		256
dim2		256
dim3		80
dim4		31

これで、x軸方向に256, y軸方向に256, z軸方向に80, 軸として31 (b0も含む) ということがわかります。ちなみにこれは30軸でとっている画像ですので、b0は1ボリュームとわかります。

ここから、Z軸方向に最初の1枚だけを取り除きたいと思います。

fslroi を使う場合

まず、fslroi の挙動を確認します。
引数なしで、 fslroi とタイプすると、使い方が示されます。

fslroi
Usage: fslroi <input> <output> <xmin> <xsize> <ymin> <ysize> <zmin> <zsize>
       fslroi <input> <output> <tmin> <tsize>

       fslroi <input> <output> <xmin> <xsize> <ymin> <ysize> <zmin> <zsize> <tmin> <tsize>
Note: indexing (in both time and space) starts with 0 not 1! Inputting -1 for a size will set it to the full image extent for that dimension.

fslroi では、インデックスは0から開始と書いてあり、-1とすればその方向のすべての画像を使うと書いてあります。X軸とY軸方向に関してはすべて使いたいので、xminとyminは0を指定し、xsizeとysizeは-1を指定します。(256でもいいですが、全部使う時は-1とした方が汎用性が高いですね)
そして、Z軸方向は、最初だけ除くので、zminは0ではなく1とします。これがポイントです。枚数は80-1で79枚となりますので、zsizeは79となります。つまり以下のコマンドとなります。fslのツールは画像を指定する際に拡張子は指定しなくていいので、.nii.gzを抜いて指定していることに注意してください。出力画像はFSLを使って79枚にしたということで、dwi79f.nii.gz としましょう。

fslroi dwi dwi79f 0 -1 0 -1 1 79

fslval を使って、dwi79f.nii.gz のdim3だけぱっと見てみましょう。

fslval dwi79f dim3
79

きちんと1枚削られたようです。

mriconnvert を使う場合

mrconvert でも同様のことを行います。
mrconvert のヘルプを見てみます。

mrconvert

ヘルプの途中を抜き出します。

USAGE
     mrconvert [ options ] input output
        input        the input image.
        output       the output image.

Note that for both the -coord and -axes options, indexing starts from 0
rather than 1. E.g. -coord 3 <#> selects volumes (the fourth dimension)
from the series; -axes 0,1,2 includes only the three spatial axes in the
output image.

ここで、mrconvert でもインデックスは0からスタートすると書いてありますね。
-coord 3は実際は4番目のdimensionになると書いてあります。

mrconvert の際、もっとシンプルになります。

mrconvert 入力画像 出力画像 -coord 操作したい軸番号 残したいスライス

今、操作したい軸番号は Z軸です。水平断では、3番目の軸になります。
インデックスが0からはじまりますので、2を指定することになります。
そして残したいスライスですが、2番めから最後までとなります。
こちらも最初が0なので、1から最後までとなります。
MatlabやPythonで指定するように連続する数はコロンでつなげれば大丈夫です。
そして、最後はendでOKですので、今の場合、1:end となります。(1:79と同意になります。インデックスが0からはじまっているので、すべてでも0:79となります)

つまり、以下になります。出力画像はMRtrixを使っているので、dwi79m.nii.gzとします。

mrconvert dwi.nii.gz dwi79m.nii.gz -coord 2 1:end

こちらも、fslval を使って、dwi79m.nii.gz のdim3だけぱっと見てみましょう。

fslval dwi79m dim3
79

きちんと1枚削られたようです。

ヘッダーの比較

2つのプログラムでヘッダーがどう変わるのかも確認しておきたいと思いました。

fslhd を使ってヘッダーを吐き出します。

fslhd dwi79f > dwi79f_header.txt
fslhd dwi79m > dwi79m_header.txt

この2つを diff で比較してみましょう。

diff dwi79*.txt
1c1
< filename   dwi79f.nii.gz
---
> filename  dwi79m.nii.gz
57,58c57,58
< sto_xyz:1  -1.000000 0.000000 0.000000 133.356003 
< sto_xyz:2  0.000000 1.000000 0.000000 -89.139999 
---
> sto_xyz:1 -1.000000 0.000000 -0.000000 133.356003 
> sto_xyz:2 -0.000000 1.000000 -0.000000 -89.139999 
66c66
< descrip        6.0.4:ddd0a010
---
> descrip       MRtrix version: 3.0.2-31-g67bf6093

sformの sto_xyz:2 で、0.000000のところが、FSLでは符号なしで、MRtrixでは負の符号がついていますが、
それ以外は全く同じなので、影響なしと考えます。

ということで、どちらの方法でも同じものを得られることがわかりました。

Workaround for FSL 6.0.4 python dependencies

imglob or imcp provided with FSL requires numpy.testing.decorators. However, numpy.testing.decorators has been deprecated from numpy 1.18. So, if you use numpy >=1.18, you see the following error:

ModuleNotFoundError: No module named 'numpy.testing.decorators'

Paul Mccarthy kindly suggested a workaround for this problem.

The below is his original message.
https://www.jiscmail.ac.uk/cgi-bin/wa-jisc.exe?A2=FSL;a26a0779.2010

1. Move $FSLDIR/fslpython/envs/fslpython/bin/python3.7 to $FSLDIR/fslpython/envs/fslpython/bin/python3.7_bin
2. Replace $FSLDIR/fslpython/envs/fslpython/bin/python3.7 with a script containing this:

#!/usr/bin/env bash
thisdir=$(cd $(dirname $0) && pwd)
$thisdir/python3.7_bin -I "$@"

3. Change the permissions of the new $FSLDIR/fslpython/envs/fslpython/bin/python3.7 to make it executable

With this suggestion, I wrote a tiny script.

#!/bin/bash

cd $FSLDIR/fslpython/envs/fslpython/bin/
sudo mv python3.7 python3.7_bin

cat << 'EOF' | sudo tee python3.7 > /dev/null
#!/usr/bin/env bash
thisdir=$(cd $(dirname $0) && pwd)
$thisdir/python3.7_bin -I "$@"
EOF

sudo chmod 755 python3.7

This script will make FSL use internal python within FSL.

Ubuntu 18.04 に HCP Pipeline の環境を設定する方法

HCP Pipelineを準備するのは簡単ではありませんが、東京大学小池研の植松明子さんとディスカッションしている中で、Ubuntu 18.04にHCP Pipelineを設定する方法を確立できたのでご紹介します。植松さんのinputに感謝申し上げます。

続きを読む

第2回国際脳MRI・臨床データ解析チュートリアル(2020年9月27日Zoom)

東京大学の小池先生から、第2回国際脳MRI・臨床データ解析チュートリアルの開催案内をいただきました。

今回はZoomでの開催とのことです。
ご関心のある方は、ぜひ下記をご覧いただき、ご応募ください。
(クリックするとPDFが入手できます)

私は今回もLin4Neuroを提供する方向で調整しています。前回よりもさらに必要なものをしっかり実装したものを提供できる予定です。

macOS 10.15 (Catalina) でFSLのインストールがうまくいかない時の解決方法

FSLのMLに最近、macOS 10.15の方々がインストールがうまくいかないという相談がたくさんなされています。

エラーメッセージは以下のような感じです。

Stage 1
By installing this python distribution you agree to the license terms in
/usr/local/fsl/fslpython/LICENSE.txt
100%
/usr/local/fsl/etc/fslconf/fslpython_install.sh: line 188: /usr/local/fsl/fslpython/bin/conda: No such file or directory
/usr/local/fsl/etc/fslconf/fslpython_install.sh: line 189: /usr/local/fsl/fslpython/bin/conda: No such file or directory
/usr/local/fsl/etc/fslconf/fslpython_install.sh: line 190: /usr/local/fsl/fslpython/bin/conda: No such file or directory
/usr/local/fsl/etc/fslconf/fslpython_install.sh: line 191: /usr/local/fsl/fslpython/bin/conda: No such file or directory

これに対する解決法がFSLの中の人から示されています。

https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=FSL;bd0fa8bf.2004

具体的には以下になります。

  1. テキストエディタで fslpython_install.sh を開きます。管理者権限が必要です。
  2. sudo open -e /usr/local/fsl/etc/fslconf/fslpython_install.sh
    
  3. コードの修正
  4. 149行目が以下のようになっているはずです。

    dl_cmd_opts=”–fail”

    これを以下のように修正します。( -L を追加するだけです )

    dl_cmd_opts=”–fail -L”

  5. コマンドの実行
  6. 以下のコマンドを実行します。

    sudo rm -r /usr/local/fsl/fslpython
    sudo /usr/local/fsl/etc/fslconf/fslpython_install.sh  -f  /usr/local/fsl
    

私はCatalinaをまだ使っていませんが、たぶんはまる人がたくさんいると思いますので、掲載しておきます。

国際脳ヒトMRI研究ポータルサイト

東京大学の小池先生が国際脳のヒトMRI研究ポータルサイトを開設されました。

http://mriportal.umin.jp/

このサイトは、国際脳ヒト脳MRI研究プロジェクトで策定されたデータ取得手順、データ集約と共有化、前処理技術開発、Traveling subject project、倫理的配慮などの情報を集約し、国内のヒト脳MRI研究を発展させることを目的としたウェブサイトとのことです。

プロトコル論文がpreprintで公開されていたり、有用な情報が掲載されていますので、一見の価値ありです。

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
    

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

第1回国際脳MRI・臨床データ解析チュートリアル(2020年2月6日〜7日@東大駒場キャンパス)

2020年2月6・7日に、東京大学駒場キャンパスにおいて、「国際脳MRIプロトコルデータ(HCP data 含む)と精神疾患臨床データの前処理・解析」というテーマにおいて、脳MRI・臨床データ解析チュートリアルが開催されます。ついに日本でHCPデータの解析法などを学べる時が来ました。

主催の東京大学の小池先生から情報をいただきましたので、告知させていただきます。

関心ある方は、こちらをご確認ください。

私は講師としては参加しませんが、HCP readyのLin4Neuroを提供します。

2019年度第2回脳画像解析(FreeSurfer)勉強会(2020年1月12日開催)

2019年11月16日7時で定数に達しましたので、締め切りました。

2020年1月12日開催予定の『FreeSurfer勉強会』のご案内をいたします。
まい参加希望の方は、下記のフォームにて、お申し込みをしていただけますよう、お願い申し上げます。
FreeSurferの勉強会を開催します。
今回は、「FreeSurferでrecon-allはやってみた。でも、もう少し学んでみたい」方を対象にしたいと思います。
現時点では、内容は以下を予定しています。

9:00-15:00
– recon-allのステップの理解
– ROI解析
– 縦断解析
– TRACULA(予定です)

15:00-17:00
– スクリプト化演習

日時:2020年1月12日(日)9:00-17:00
場所:オフィス東京(東京駅八重洲口から徒歩5分)
費用:無料
定員:30名(先着順)
受講条件:
– これまでにFreeSurferの解析を一度はやったことがある方
– ご自身のPCを持ち込んで作業ができる方

Gridengine の Ubuntu 18.04LTS へのインストール方法

1. はじめに

FSLやそれを利用したHCPパイプラインでは、計算を高速化するためにCPUあるいはGPUを介した並列分散処理を行います。CPUの並列分散化には、Sun Microsystemsが開発していたオープンソースのSun Grid Engine(SGE)が使われます。しかし、同社は2010年にOracleが買収し、ソースコードがクローズドになってしまいました(現在はUnivaが引き継いでいますが、これもクローズドです)。これを受けて、リバプール大のグループがSun Grid Engineのオープンソースの最終版である6.2u5をベースに、オープンソースでの開発を継続し、Son of Grid Engineとして公開しています。(https://arc.liv.ac.uk/trac/SGE/wiki )しかし、Son of Grid Engineも2016年を最後に開発が停止しています。一方、Debian/Ubuntu系では、”gridengine” として同様の試みがなされてきており、現在も開発が継続されています。そこで、Ubuntu18.04LTSへのgridengineのインストール方法について紹介します。なお、本稿は京都大学精神科の宮田淳先生が作成した「Son of Grid EngineのUbuntu18.04LTSへのインストール方法」をベースに、筑波大学精神科の根本清貴が改変したものです。この場を借りて宮田淳先生に御礼申し上げます。なお根本は(もちろん宮田先生も)本マニュアルの内容に関して一切の責任を負いません。あくまで自己責任でこのマニュアルをご使用下さい。

続きを読む

Son of Grid EngineのUbuntu 18.04 LTS / RHEL7 / CentOS7 へのインストール方法

FSLやそれを利用したHCPパイプラインでは、計算を高速化するためにCPUあるいはGPUを利用した介した並列分散処理を行います。CPU の並列分散化には、Sun Microsystems が開発していたオープンソースの Sun Grid Engine(SGE)が使われます。しかし同社は2010年にOracle買収し、ソースコードがクローズドになってしまいました。

これを受けて、リバプール大のグループがSun Grid Engine のオープンソースの最終版である 6.2u5 を利用したベースに、オープンソースでの開発を継続し、Son of Grid Engine として公開しています。Son of Grid Engine も SGE と呼ばれています。
https://arc.liv.ac.uk/trac/SGE/wiki

対応OSはLinuxのみで、Debian/Ubuntu系、RedHat/CentOS系があります。

インストールにはいろいろ工夫が必要ですが、このたび、京都大学の宮田淳先生がそのインストールマニュアルを作成してくださいました。

宮田先生のご厚意で公開をご快諾いただきましたので、公開します。

Son of Grid Engine の Ubuntu 18.04LTS へのインストール方法

Son of Grid Engine の CentOS7 へのインストール方法

2019年度第1回脳画像解析勉強会(2019年12月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
– 「今さら聞けないことを聞きたい」質疑応答コーナー

FSLをCPUによる並列処理で高速化する(Chris Rorden版fsl_subの使用)

FSL(FMRIB Software Library)には、fsl_subというプログラムがあります。これは並列処理をするためのプログラムですが、基本、クラスターコンピューティングを想定しており、CPUによる並列処理に対応していません。
Chris Rorden先生が、CPUでの並列処理に対応したfsl_subを公開されています。CPUでの高速化の手順を研究室の黒下君がまとめてくれましたので、公開します。

続きを読む

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

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

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

続きを読む

FSLやSPMを用いて画像の左右を反転する方法

DICOM→NIFTIに変換する際に、MRI画像の左右を反転する方法はありますか?というご質問をいただきました。

DICOM→NIFTIの際に変換する方法は私が知る限りあまりないと思いますが、NIFTI画像に対する方法はあります。

この方法を紹介します。

FSLに、”MNI152_T1_2mm_LR-masked” というファイルがあります。

画像の反転の確認にはわかりやすいファイルなので、今回はこれを使用します。

Mangoで見ると、画像に埋め込まれている”R”が実際にR側にあることに気をつけてください。

続きを読む

WindowsでのMRIcronのインストール方法

*MRIcronは開発が終了しており、最終版が2-September-2019なので、こちらのインストール方法を改めて紹介します。

MRIcronはNIFTIファイルのビューワーです。開発は終了しており、後継のMIRcroGLを使うことが勧められていますが、使い勝手はいいので、以下、紹介します。

MRIcronは、https://www.nitrc.org/frs/?group_id=152よりダウンロードします。

2-September-2019 の “MRIcron_windows.zip” をクリックします。

ファイルをダウンロードするにあたっての規約が表示されますので、[I Agree]をクリックします。

そうすると、MRIcron_windows.zip を保存する画面が出てくると思いますので、適宜保存します。

ファイルが圧縮されていますので、解凍してください。Windows10では、ファイルを右クリックで、「すべて展開」で展開できます。

すると、下図のようにファイルが解凍されます。

“mricron.exe” をダブルクリックします。(拡張子を表示するオプションを有効にしていない方はmricronだけかもしれません)

そうすると、一度だけ、以下のwarningが出ます。

ここで、「詳細情報」をクリックすると、以下のような画面になるので、「実行」をクリックします。

そうすると無事に起動します。(表示される画像は違うかもしれませんが)

以下、簡単に、背景画像と、アトラスを重ね合わせる方法を紹介します。

まず、背景画像を表示します。上に使っているのは、ch2.nii.gzですが、それを表示します。

MRIcronのメニューから、”File” -> “Open templates” -> “ch2.nii.gz” で、上手のような画像が表示されます。

これに、AALアトラスを重ね合わせたいと思います。

メニューの”Overlay” -> “Add” を選びます。

画像の選択画面が出ますので、MRIcronのフォルダがあるところの Resources/templates/aal.nii.gz を探します。

私の場合、MRIcronを ダウンロード/MRIcron_windows/MRIcron にインストールしてあるので、以下のところにありました。

そうすると、AALアトラスが重ね合わせられて表示されました。ここで適当な領域をクリックすると、ウィンドウの上にその解剖学的名称が出ています。
今の場合、右の海馬をクリックしたので、Hippocampus_R と表示されています。(MRIcronの表示はデフォルトは、RadiologicalでなくNeurologicalであり、右側は右に表示されます)

なお、デフォルトだと、アトラスはベタッと上に表示されます。
アトラスを少し透過させて、下の画像も確認するためには、”Overlay” -> “Transparency on Background” で値を調整します。
60%としてみると、以下のようになりました。こうすれば、背景画像とアトラスを比較できます。

SPMの結果から閾値をこえる領域のすべての座標を求める方法

最近、ある方にこういう依頼を受けました。

「SPMの結果から閾値を超えるクラスターの全領域名が知りたい」

このためには、まず、閾値を超えるクラスターの座標を知る必要があります。
SPMの構造体には、座標がすべて入っています。

SPMで結果を出した後に、Matlabのコマンドウィンドウに以下をタイプするだけでOKです。

xSPM.XYZmm

SPMの統計結果は xSPM という構造体におさめられています。
xSPMとタイプすると構造体の内容を見ることができます。

>&gt; 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&lt;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列の行列です。
これは扱いにくいので、転置してあげると扱いやすくなります。

>&gt; A=xSPM.XYZmm;
>&gt; 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離れたピーク領域しか表示されませんが、このような方法を使えば自分が気になっている領域が入っているかどうかを確認できます。