3次元fMRI データセットを4次元fMRIデータセットに変換する方法: SPMとFSLの比較

fMRIデータは3次元データで取り扱う場合と4次元データで取り扱う場合があります。

3次元データの場合、たとえば1つのセッションが240ボリュームで構成されているとすると、240のniftiファイルで構成されます。

4次元データの場合、1つのniftiファイルに240ボリュームがすべておさめられています。

個人的には、データ管理という点では、4次元データの方が取り扱いやすいと思っています。

そこで3次元データを4次元データに変換する方法をSPMの場合とFSLの場合でまとめたいと思います。

必要な情報としては、TRです。この情報がないといくつかのソフトはうまく動かなくなります。

続きを読む

Linuxで特定の時間より後に生成されたファイルを列挙する方法

画像解析などをしていると、しばしば、「今の作業で新しくできたファイルは何だろう?」と思うことがあります。

Linuxでは、find コマンドに、-newer というオプションがあります。findのmanページには以下の記載があります。

-newer file
ファイルが file よりも最近に内容を更新されていれば、真を返す。

であるならば、あるファイルを作成して、作業をして、その後に、findをかければ列挙できるはずです。

いろいろ調べた結果、touchコマンドで -t オプションを使うとタイムスタンプを決められるので、それをスクリプトに組み込めるなと思いました。

以下のスクリプトで、新たに生成されたファイルの一覧が generated_from_タイムスタンプ.txt に作成されます。

#!/bin/bash

#generate timestamp
ts=$(date +%Y%m%d%H%M.%S)

#generate a temporary file with current timestamp for find
touch -t $ts /tmp/_timestamp

# BEGIN commands to generate new files
#
# END

# list files which is generated after /tmp/_timestamp
find . -type f -newer /tmp/_timestamp | tee -a generated_from_${ts}.txt

それって多重比較?

ある方から、「脳画像解析の他に心理検査と認知機能検査をやっているんだけれども、それらの検定を行う際は多重比較補正はしなくていいのでしょうか?」という質問をいただきました。

私がいつもいろいろ教わっている統計の専門家の佐賀大学の川口淳先生にお聞きしたところ、とてもわかりやすい説明をいただきました。川口先生の許可を得ましたので公開させていただきます。

続きを読む

ARMベース「Apple M1」搭載のmacbookに、FSLが対応しました(2021年4月)

2021年4月9日にFSLのMLで、以下の情報が流れてきました。

The latest FSL installer script should be able to download and install FSL on Apple ARM machines.

You can download the latest installer here (after filling in the form):

https://fsl.fmrib.ox.ac.uk/fsldownloads_registration

FSL will run using Rosetta2 and passes the FSL test suite.

ということで、FSLはついにApple M1チップに対応したようです。

macOS上のVirtualBoxで”Kernel driver not installed (rc=-1908)” が出た時の対処方法

macOSをBig Surにアップグレードした後、VirtualBoxから仮想マシンを起動しようとすると、”Kernel driver not installed (rc=-1908)”というエラーが出て、起動しないという現象にぶつかりました。

原因を探ったところ、”VirtualBoxのバージョンをあげること”が解決法として挙げられていました。

以下の方法でなんとか解決できたので、紹介します。キャプチャは全てmacOS Big Surのものです。

*22/Jan/2022 様々な方々とのやり取りの中で、うまくいかないこともたくさんありました。Homebrew経由でいくのが一番確実そうです。従って、記事をアップデートします。

続きを読む

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でも同様のことができることを教わりました。
自分の備忘録も兼ねてここに記載しておきます。

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

続きを読む

第9回 ABiS脳画像解析チュートリアル

2021年1月30日(土)〜31日(日)に、完全オンラインで「第9回ABiS脳画像解析チュートリアル」を開催いたします。
多数の参加申し込みをお待ちしております。
2020年12月27日までに受講申し込みをしてくださった方々で、受講環境が整われた方々にZoomアドレスが周知されます。

続きを読む

ARMベース「Apple M1」搭載のmacbookでは、2020年11月時点ではFSLは動きません

  • 2021年8月時点ではFSLはApple M1に対応しました。

Appleは11月17日からCPUをこれまでのIntelからARMベースのApple M1を搭載したmacbookを発売しました。

脳画像解析をされる方は注意してもらいたいのですが、2020年11月18日現時点で、FSLはApple M1には対応していません。対応までに数カ月かかるとFSLのメーリングリストで中の人がおっしゃっていました。

その他にも未対応のソフトは多くあると思われるので注意してください。

個人的には、macに関しては「ちょっと枯れてから」がいいと思っています。

macOSでUbuntu仮想マシンを起動しようとしたときに「VirtualBox VMが予期しない理由で終了しました」と出てクラッシュする時の対処法

題名のとおりなのですが、
Lin4NeuroをmacOS上で仮想マシンで走らせようとしたら、私の持っている Mojave, Catalina のどちらでも以下のメッセージが出てきて仮想マシンが立ち上がりませんでした。

続きを読む

macOS への FreeSurfer 7.1.1 のコマンドラインを使ったインストール(スクリプト付き)

FreeSurfer 7が公開されています。recon-allの時間が短縮されたり、海馬のsubfield解析がよりグレードアップしたりとなっています。

macOSへのインストールはデモ動画が示されていますが、コマンドラインで一気にインストールしたいと思いました。
以下、必要なものを示します。

続きを読む

Zoomでブレークアウトセッションに移行する際、全員のビデオをオフ、マイクをミュートにすると、一部の参加者が落ちてしまうことが防げる可能性が高い

気づけばほぼ毎日Zoomで何らかの会議やワークショップに参加する日々です。

先日、あるワークショップでホストをする機会がありました。

ブレークアウトセッションを多く使うワークショップですが、
毎回、何人かブレークアウトセッションに移行できず落ちてしまうという現象が起こりました。

おそらくネットワークの負荷が大きく、タイムアウトを起こしているのだろうという仮説を立てました。

続きを読む

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

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

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

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

シェルスクリプトで改行を削除したい時は、perl -pe ‘s/\n//’ が便利

タイトル通りの投稿ですが、よく忘れるので、備忘録として。

スクリプトを書いている時に、入力ファイルの改行を全部とって1行にしたいという時があります。

たとえば、

seq 5 > list
cat list
1
2
3
4
5

となっている時、これを

1 2 3 4 5

としたいような時をイメージしてください。

これを sed でやろうとするとうまくいきません。

sed 's/\n//' list
sed 's/\r//' list

などでいくかと思えどうまくいかず、いろいろはまることになります。
さらにmacとLinuxでは、sedがBSDのsedとGNU sed で違うため、ここもまたはまる原因になります。

でも、sedにこだわらず、Perlで

perl -pe 's/\n/ /' list

とすると、あっさりうまくいきます。
(細かく言うと、Windowsだと、\r\nだったりしますが、とりあえず、UNIX環境と仮定します)

なお、perlのオプション -e は引数をそのままプログラムとして実行するオプションで、ワンライナーでは必須のものであり、オプション -p は、入力の各行に対してプログラムを実行し、最後に結果を表示するオプションとのことです。こちらのサイトに詳しく書いてあり、勉強になりました。

ということで、シェルスクリプトで改行の削除に困ったら、sedにこだわらず、perl -pe を活用すると迷う時間が減るかもしれません。