ある方から、「CONNで前処理したfMRI画像から、デフォルト・モード・ネットワーク(DMN)の時系列データを取り出すにはどうしたらよいですか?」というご質問をいただきました。
鍵となるプログラムは以下の2つです。
- conn_matc2nii
- spm_summarise
以下に、方法を記載します。
- DMNのROIの作成
- Batch -> SPM -> Util -> 4D to 3D File Conversion
- 4D Volume に networks.nii を指定
- ImCalc
- Input images: networks_00001.nii から networks_00004.nii まで指定
- Output Filename: dmn
- Expression: sum(X)
- OptionsのData Matrix を “Yes – read images into data matrix” に変更
- OptionsのInterpolation を “Nearest neighbour” に変更
- 時系列画像データの生成
- ROI内の時系列データの取り出し
CONNにはrois の中にnetworks.niiというファイルが準備されています。これは4次元画像となります。最初の4つの画像がDMNになります。
SPMで、以下の方法で一度ばらします。
次に、ImCalcを使ってこれを全部足します。
これで実行すると、dmn.nii が生成されます。
CONNには、conn_matc2nii というプログラムが準備されています。CONNは時系列データはniftiではなく、matcという形式で保存しています。このプログラムは、それをnifti画像に変換します。
時系列データは、conn_projectの中の results/preprocessing に入っています。conn_projectの名前がconn_project01 だとすると以下で、変換できます。
cd conn_project01/results/preprocessing conn_matc2nii
これで、niftiDATA_Subject001_Condition000.nii といったデータができるはずです。
続いて、ROI内の時系列データを取り出します。
このために、spm_vol で画像データとROIデータを読み込みます。
V = spm_vol(spm_select); %上で作成した niftiDATA*.nii を指定します msk = spm_vol(spm_select); %最初に作成したdmn.niiを指定します
ここまでできたら、最後に spm_summarise を使って、dmn.nii 内の平均時系列データを取り出します。
time_course = spm_summarise(V,msk,@mean);
time_course が時系列データなので、csvなどで吐き出せるかと思います。
最後にmatlabでプロットしてみます
plot(time_course)
無事にプロットできました。
すみません.スレッドにこれ以上ご返答ができない状態だったので,新しいスレッドを立ててご返答させていただきます.
なるほど.私の理解不足でした.脳領域ごとの時系列データを取得するには,どの領域がどのROIなのかを確認した上で上記の手法を用いるのですね.
理解不足で申し訳ありません.
「脳領域」という言葉の定義によって変わってきますが、今回のような「デフォルトモードネットワーク」をROIとして考えるならばそのようになります。
夜分遅くまで回答していただいて本当にありがとうございました.
未熟者ですが,研究の方を頑張っていきたいと思います.
根本清貴先生
改めて別のディレクトリを準備して,前処理をやり直した結果,無事時系列データをcsvファイルにて取り出すことができました.
何度も質問に回答していただき,本当にありがとうございました.
無事に取り出せてよかったです。
夜分遅くに申し訳ないのですが,もう一つ簡潔に質問させてください.
今回はDMNの関心領域のデータの平均値について扱いましたが,ROIごとの時系列を取り出す際には,「DMNのROIの作成」時にInput imagesをROIごとのniiデータとし,ROIの数だけ同じ作業を実行すればよいのでしょうか.
はい、そのとおりです。
V は変える必要はないので、
msk にいれる内容を変えて、time_courseの変数名を適宜変えてあげればどんどん取り出すことができるかと思います。
ROIの数ごと一括でdmn.niiを作成する方法などはあったりしますでしょうか.何度も申し訳ありません.
ここでおっしゃっているROIはconnのnetworks.niiでいいのでしょうか?
すでにdmnを作る作業で
networks_0001.nii 〜 networks_0032.nii ができているはずです。
conn/rois/networks.txt にそれぞれのネットワークの構成要素が書いてあります。
たとえばSensoriMotor network の ROI を作るには、networks.nii の 5-7 を取り出せばいいということがわかります。
なので、networks_0005.nii から networks_0007.nii をImCalcで足せばいいことがわかります。
ひとつひとつ画像を確認しながらやった方がいいと思いますので、ここは地道にやることをお勧めします。
32個なので。
それとも 32個のROIひとつひとつの timecourse を求めたいということですか?
根本清貴先生
こんにちは.何度も質問をして申し訳ありません.
先日質問させていただいた箇所において,Matlab上で”conn_mat2cnii”を実行しても「関数または変数 ‘conn_mat2cnii’ が認識されません」とエラーが出てしまいます.
ディレクトリは”conn_project01/results/preprocessing”としており,matc形式の時系列データが格納されています.
この際はどうすれば良いでしょうか.ちぐはぐな質問で申し訳ありませんが,回答していただければ幸いです.
すみません、typoです。
matc2nii
でした。
修正しておきます。
すみません.”conn_matc2nii”でも実行されません.connがMatlabで動いている以上,パスは通っていると思うのですが,問題があるとしたらどのような問題があると思われますか.
何度も申し訳ありません.
CONNのバージョンはいくつでしょうか?どのバージョンからのっているかわからないので、もしかしたら古いバージョンにはないかもしれません。
conn17を用いています.またダウンロードしたconn17には”conn_matc2nii.m”というファイルが確認できます.なので関数はあるけれども実行できないという状況であります.
申し訳ありません.connのパスを再設定すると,関数は一応動くようになりました.しかしながら今度は,
——–
この型の変数ではドット インデックスはサポートされていません。
エラー: conn_matc2nii (行 10)
filepathresults=CONN_x.folders.preprocessing;
——–
といったエラーが返されるようになりました.
そうしましたら、改めて別のディレクトリを準備されて、
そこで前処理をやり直していただけませんか。
そのうえで、conn_matc2nii を実行したらすんなりいくかもしれません。
おそらく、mat2c ファイルが変になっているのではないかと推測します。
根本清貴先生
こんにちは.時系列データ生成の質問をさせていただいた同志社大学文化情報学部のY.Sugimotoと申します.ご返信が遅くなり申し訳ありません.
「2.時系列画像データの生成」に関して質問がございます.
この章に記載されているコマンドはターミナルなどで動かせるものでしょうか.またconn_mat2cniiのプログラムを起動させるにはどのようにすれば良いでしょうか.
お忙しいところ申し訳ありませんが,ご返信いただければ幸いです.
Y.Sugimoto
ここに書いてあるコマンドは、すべてMatlabでタイプするものです。
Matlabにコピペしてもらえたらと思います。