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 を活用すると迷う時間が減るかもしれません。

UbuntuでGnumericを用いてCSVをXLSXに変換する方法

あるプロジェクトで、csvファイルをxlsxに変換する必要がありました。
いろいろな方法がありますが、比較的やりやすかった方法がありましたので、備忘録として記載します。

方法は、gnumeric (とnkf)を使う方法です。インストールは簡単です。

sudo apt install gnumeric nkf

ここでは、例として、sample.csv を sample.xlsx に変換したいと考えます。

  1. 文字コードをUTF-8に変換
  2. 日本語が入っている場合、Shift-JISなどだとうまくいかない場合があるので、文字コードをUTF-8に変換します。

    nkf -wLu --overwrite sample.csv
    
  3. Gnumericで変換
  4. Gnumericについているssconvertというプログラムが簡単に変換してくれます。

    ssconvert sample.csv sample.xlsx
    
  5. XLSXシートのタブ名から.csvを取り除く
  6. 簡単なのですが、この場合、sample.xlsxのシート名が sample.csv となってしまいます。これは気持ち悪いなと思いました。

    なので、これを取り除く工夫が以下です。xlsxをxmlに変換し、xmlの中の.csvをsedで取り除き、そして、再度xmlをxlsxに変換します。

    ssconvert --export-type=Gnumeric_XmlIO:sax:0 $sample.xlsx sample.xml
    sed -i 's/.csv//' sample.xml
    ssconvert --export-type=Gnumeric_Excel:xlsx sample.xml sample.xlsx
    rm sample.xml
    

これで望みどおりの変換ができました。

以上、まとめると、以下のようなスクリプトになります。

#!/bin/bash
#prerequisites: nkf and gnumeric
for f in *.csv
do
  nkf -wLu --overwrite $f
  base=${f%.csv}
  ssconvert $f ${base}.xlsx
  ssconvert --export-type=Gnumeric_XmlIO:sax:0 ${base}.xlsx ${base}.xml
  sed -i 's/.csv//' ${base}.xml
  ssconvert --export-type=Gnumeric_Excel:xlsx ${base}.xml ${base}.xlsx
  rm ${base}.xml
  mv $f csv
done

UbuntuでDropboxの同期が進まない時は、ディレクトリ数を確認する

最近、あるワークステーションを新規にセットアップしました。
いつもファイルはDropbox経由で同期することによって楽しているので、今回も同じようにしたら、
1週間たっても同期がされません。

おかしいなと思っていろいろ調べてみたら、公式ドキュメントにヒントがありました。

同期できない場合 – 互換性のない特殊文字と不良なファイル名に関する問題の解決方法

Linux で 1 万件以上のフォルダを監視する

Linux 版の Dropbox デスクトップ アプリは、デフォルト設定により 1 万件以上のフォルダを監視することはできません。制限数を超えた場合は監視されないため、同期中に無視されます。簡単な回避策として、まずターミナルを開き、次を入力してください。

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p

このコマンドでシステムに 10 万件までのフォルダを監視するように指示することができます。コマンドを入力しパスワードを入力したら、すぐに Dropbox が同期を再開します。

私のDropbox内のフォルダ数はどのくらいだろう?と思って、以下のコマンドでディレクトリ数を数えてみました。

find Dropbox -type d | wc -l

その結果ですが、14454 と出てきました。1万件超えています。

そこで、アドバイス通り、以下のコマンドを入力しました。

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p

そうしたところ、同期がはじまりました!システムで何か変な設定をしてしまったのではないかと心配だったのでほっとしました。

普段使っているDropboxは、少しずつ増えていっているので、おそらく監視しているフォルダ数がそれほど多くないのかもしれませんね。

動的プログラミング言語を知っている人のためのPython入門

最近、Pythonの勉強をしていますが、いろいろ調べている中で、Matthew Brett氏がMatlabやRに慣れている人のためのPythonの手引き、”Brisk Introduction to Python“を書かれているのを見つけました。既にMatlabやRを知っている方々がPythonのコツを理解するのによいテキストと思います。このため、Brett氏の承諾を得て、研究室のメンバーで翻訳しました。

動的プログラミング言語を知っている人のためのPython入門はこちらからどうぞ。

Jupyter_Notebookはこちら(右クリックで保存してください)

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

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

http://mriportal.umin.jp/

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

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