FreeSurferをインストールした後の第一歩

FreeSurferをインストールした後、自分のデータを用いてどうしたらいいか困る人が多くいます。

まず、1例を試してみるといいと思います。

以下のようにされてはいかがでしょうか。

  1. ターミナルを開きます。
  2. 画像があるディレクトリに移動します。
  3. たとえば、画像が、/Users/foo/img_dataにあるとすれば、

    $ cd /Users/foo/img_data/
    

    となります。

  4. 画像の被験者IDを決めます
  5. FreeSurferでは実はこれが大事です。ここをきちんとしていないと、話が次に進みません。

  6. 以下の書式でコマンドをうちます。
  7. $ recon-all -s 【被験者ID】 -i 【NIFTI画像ファイル】 -all
    

    今、被検者IDがHC001、NIFTI画像がV_HC001.niiだとすると、

    $ recon-all -s HC001 -i V_HC001.nii -all
    

    となります。

これでしばらく待ちます。私の最近のPCでは、9時間程度で1例の処理が終わります。

もし、複数例あって、きちんとIDと画像ファイル名がしっかり対応ができているならば、
以下のようなスクリプトがかけますね。

画像がすべてV_[ID].niiになっているとするならば…

#!/bin/bash
#FreeSurfer preprocessing script using nifti files.

for id in "$@"
do
    recon-all -s $id -i V_${id}.nii -all
done

という感じになりますね。

出力ファイルは、$SUBJECTS_DIRに出力されます。
私の場合、
$SUBJECTS_DIRはホームディレクトリの下のfreesurfer/subjectsにしてあります。
この設定の仕方は、こちらをご覧ください。

どこにあるかすぐにわからなかったら、以下をしたらいいと思います。

$ cd $SUBJECTS_DIR

ここに先ほど入力したIDがあります。その中にいろいろ入っています。

$SUBJECTS_DIRはHDDの容量をくいますので、十分なスペースを確保しないと容量不足に陥りますのでご注意ください。

LinuxでUSBメモリをNTFSにフォーマットにするコマンド

先日、USBメモリに4GBを超えるファイルをコピーする必要がありました。
Windowsユーザー、Macユーザーも使うUSBメモリなので、NTFSフォーマットがよいと考えました。MacユーザーもNTFSは標準で読み取りはできますので。

これまで、フォーマットするときにGPartedでやっていました。GUIで簡単ですから。

しかし、今回は、NTFSフォーマットだけでなく、ボリュームラベルも変更する必要がありました。Gpartedでは、これは2段階(NTFSへのフォーマットとラベルの設定)になってしまうので、もっと簡単な方法はないかと思いました。

検索してなかなかすぐに見つけられなかったのですが、以下の方法が簡便とわかったので、紹介します。

  • USBメモリのデバイス名の確認
  • Linuxでは、USBメモリは、/dev/sdc1とか/dev/sdb1などに割り当てられます。どこに割り当てられたかを確認する必要があります。方法として、dmesgを使う方法と、fdisk -lを使う方法があります。

    • dmesg
    • USBメモリをPCにさした時点で、端末に

      $ dmesg
      

      とタイプします。そうすると、以下のようなメッセージが出てきます。

      [ 8939.172114] usb 3-2: New USB device found, idVendor=054c, idProduct=05bb
      [ 8939.172119] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
      [ 8939.172120] usb 3-2: Product: Storage Media
      [ 8939.172122] usb 3-2: Manufacturer: Sony
      [ 8939.172124] usb 3-2: SerialNumber: EBA5A08FFF1748
      [ 8939.712192] usb-storage 3-2:1.0: USB Mass Storage device detected
      [ 8939.712398] scsi3 : usb-storage 3-2:1.0
      [ 8939.714168] usbcore: registered new interface driver usb-storage
      [ 8939.717329] usbcore: registered new interface driver uas
      [ 8940.957656] scsi 3:0:0:0: Direct-Access     Sony     Storage Media    0100 PQ: 0 ANSI: 6
      [ 8940.957872] sd 3:0:0:0: Attached scsi generic sg2 type 0
      [ 8940.958666] sd 3:0:0:0: [sdc] 30507008 512-byte logical blocks: (15.6 GB/14.5 GiB)
      [ 8940.959280] sd 3:0:0:0: [sdc] Write Protect is off
      [ 8940.959282] sd 3:0:0:0: [sdc] Mode Sense: 43 00 00 00
      [ 8940.959779] sd 3:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
      [ 8940.964615]  sdc: sdc1
      [ 8940.966528] sd 3:0:0:0: [sdc] Attached SCSI removable disk
      [ 9741.422259] usb 3-2: USB disconnect, device number 2
      

      ここにUSBとかsdcとか出てきますね。
      これで、/dev/sdcが割り当てられたとわかります。

    • fdisk -l
    • もうひとつの方法はfdiskを用いることです。-lオプションで、デバイスの一覧を表示します。

      $ sudo fdisk -l
      

      とすると、今度は次のように表示されます。

      Disk /dev/sdc: 15.6 GB, 15619588096 bytes
      ヘッド 255, セクタ 63, シリンダ 1898, 合計 30507008 セクタ
      Units = セクタ数 of 1 * 512 = 512 バイト
      セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
      I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
      ディスク識別子: 0xc3072e18
      
      デバイス ブート      始点        終点     ブロック   Id  システム
      /dev/sdc1              48    30507007    15253480    c  W95 FAT32 (LBA)
      

      この方がわかりやすいですね。いずれにしても、/dev/sdc1がUSBメモリのパーティションだということがわかります。ちなみに、sdc1の1はパーティションの番号で、USBメモリの場合、たいていパーティションは1つなので、sdc1がUSBメモリのパーティションになります。

  • NTFSへのフォーマット
  • ここでは、mkfs -t ntfsというコマンドを使います。そして、ラベルは、-Lというオプションですので、以下のようにタイプします。
    (mkfs.ntfsとmkfs -t ntfsは同義です)

    $ sudo mkfs -t ntfs -L usbdisk /dev/sdc1
    

    そうすると、フォーマットがはじまります。もし、クイックフォーマットにしたい場合は、-Qをつけて、

    $ sudo mkfs -t ntfs -Q -L usbdisk /dev/sdc1
    

    とします。(通常はこちらの方が現実的です)

  • ファイルシステムの確認
  • ふつう、する必要はありませんが、きちんとNTFSに変換されたか知りたい人もいることでしょう。

    その場合は、以下のコマンドをタイプします。

    $ sudo parted -l
    

    そうすると、以下のようなメッセージが表示されます。

    モデル: Sony Storage Media (scsi)
    ディスク /dev/sdc: 15.6GB
    セクタサイズ (論理/物理): 512B/512B
    パーティションテーブル: msdos
    
    番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
     1    24.6kB  15.6GB  15.6GB  primary  ntfs              lba
    

    きちんとファイルシステムがntfsになっていることが確認できました。

覚えておくと便利なFSLViewのオプション3つ

FSLViewを使うと、2つの画像を簡単に重ねあわせて表示できるわけですが、その際に様々なオプションを組み合わせることで画像をわかりやすく見せることができます。

主に3つ覚えておけば、結構いけるなと思いましたので、その3つを紹介します。

その3つとは、

  • -l (Lookup table)
  • -b (Brightness)
  • -t (Transparency)

です。

続きを読む

AFNIの3dresampleを使った画像のボクセルサイズの変更

これまで、MRI画像のボクセルサイズを変更する時に、簡単な方法がないなと思っていました。

コマンドひとつで簡単にできないかなといろいろ検索したところ、AFNIの3dresampleというプログラムに行き着きました。

書式は簡単です。
たとえば、ボクセルサイズを2mm x 2mm x 2mm にしたいとしたら、

$ 3dresample -dxyz 2 2 2 -prefix 出力画像 -inset 入力画像

となります。

入力画像、出力画像、ともにNIFTI画像(.nii, .nii.gz)が使えます。

FSLViewやITK-SNAPでは、2つの画像を重ねあわせる時、ボクセルサイズが一致していることが必須ですので、これを知っていることで、作業が簡単になるかもしれません。

続きを読む

Lin4Neuroのメジャーアップデート (18 Jan 2016)

時間がかなりかかってしまいましたが、Lin4Neuroのメジャーアップデートを公開しました。
見た目は変わっていませんが、システムは相当変わっています。

  • 今後、Lin4NeuroはUbuntuのmini.isoをベースに、XFCE 4.12を搭載していきます。メモリ使用量は起動時は300MB未満です。
  • これから公開していきますが、Lin4Neuroの作成スクリプトを準備しました。どうやってLin4Neuroが作られているのかを確認できます。

現時点で、以下のパッケージが収載されています。

  • 3D Slicer
  • AFNI
  • DSI Studio
  • FSL
  • ITK-SNAP
  • Mango
  • MRI Convert
  • MRIcroGL
  • MRIcroN
  • Virtual MRI

今後のアップデートで、その他のソフトウェアも収載予定です。

最新版のダウンロードは、 こちらからどうぞ。

Major update of Lin4Neuro (18 Jan 2016)

Though it took such a long time, I’m pleased to announce the release of the update of Lin4Neuro.
It looks the same, but it is quite different.

  • From now on, Lin4Neuro is based on minimal Ubuntu with XFCE 4.12. RAM consumption is less than 300MB when the system is up.
  • I prepared scripts to show how I made Lin4Neuro. You can check what has been done while minimal Ubuntu transform into Lin4Neuro (The scripts are to be released soon).

Right now, following packages are pre-installed.

  • 3D Slicer
  • AFNI
  • DSI Studio
  • FSL
  • ITK-SNAP
  • Mango
  • MRI Convert
  • MRIcroGL
  • MRIcroN
  • Virtual MRI

Other software packages will be added in the next update.

You can download the latest version from here.

SPM12から搭載された灰白質、白質、脳脊髄液容積算出機能

SPM12では、灰白質(GM)、白質(WM)、脳脊髄液(CSF)容積もプラグインなしで算出できるようになりました。

まず、segmentationを行います。そうすると、seg8.matというファイルができます。これには、MRIをGM, WM, CSFにどのように分割したかという情報が入っています。
SPM12ではこれを用いて、これらの容積を求めることができます。

SPMのBatch editorを起動し、メニューから、SPM -> Util -> Tissue Volumesと選択します。

tissue_volumes1

そうすると、下図のような内容が出てきます。

tissue_volumes2

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になるわけですね。便利ですね。

SPM12から搭載された解剖学的名称の同定

この内容は、以前、東大の小池先生から教えていただいた内容です。
まとめるのが遅くなりましたが、まとめてみました。

すぐできるVBMでは、Anatomy Toolboxを使って結果の解剖学的位置の同定を行いました。執筆時点では知らなかったのですが、SPM12から、プラグインを導入しなくても、解剖学的位置を簡単に知ることができるようになりました。

まずは、SPMで結果を出します。

その時、SPMの左下のウィンドウに、下図に示すように、Atlasというメニューが新しく出るようになりました。これを選んで、Label using -> Neuromorphometricsと選択します。

labels1

そうすると、右のSPMの座標が表示されている表の、座標のところを右クリックすると、その座標がどのくらいの確率でどの場所かということが表示されます。
今の場合、座標 [0 26 40] は、21.4%の確率で、左上前頭回内側面、18.0%の確率で右上前頭回内側面、16.2%の確率で左補足運動野ということがわかります。(x軸の座標が0なので、左右どちらもあります。例があまりよくなかったですね…)

labels2

さらに、これは、結果の表だけでなく、Sectionなどで画像を表示したときも利用することができます。

Overlays -> Sections で、画像を表示した後に、画像の上で右クリックをするとメニューが出てきます。

そこで、Display -> Labels -> Neuromorphometricsと選択していきます。

labels3

そうすると、画面にその座標が表示されるようになります。

ちなみに、同じDisplayの中にあるcoordinateを選ぶと座標が表示されますし、Fileを選択すると、背景に使った画像のファイル名が表示されます。

SPMの結果の上での右クリックはバージョンがあがるにつれ、様々な機能が追加されていますので、時間があるときに試してみると発見があります。

ということで、小池先生、遅ればせながらありがとうございました。

Thinkpad X250でUbuntu 14.04を動かすときに、タッチパッドを無効にする方法

私は、今、Thinkpad X250とT430を使っています。Thinkpad T430では、BIOSで、タッチパッドを無効にすれば、そのままタッチパッドが無効になったので、よかったのですが、同じことをX250でやっても効果がありません。

それでいろいろ調べてみました。

結論は、以下の方法が一番早いかと思います。

ターミナルで以下をタイプします。

$ synclient TouchpadOff=1

ただ、これは、一時的なもので、ずっとそうしたくない場合は、自動でこれが動くようにしてあげればいいわけです。

私はXFCE環境なので、XFCEでどうするかを調べました。

2つのファイルを準備する必要があります。

  • disable-touchpad.sh (名前はなんでもいいです)
  • これには、以下の2行だけ記載されています。

    #!/bin/sh
    synclient TouchpadOff=1
    

    これを実行権限をつけた後、パスの通っているディレクトリに保存します。私は、~/binに起きました。

  • disable-touchpad.desktop (これも拡張子が.desktopであれば名前はなんでもいいです)
  • これには、以下の3行だけ記載されています。

    [Desktop Entry]
    Type=Application
    Exec=disable-touchpad.sh
    

    この保存場所が大事なのですが、

    ~/.config/autostart

    に保存します。autostartがなければ自分で作れば大丈夫です。

    これで、ログアウトし、再度ログインすると、めでたく、Touchpadが無効になっています。

ちなみに、検索するとよく出てくる

/usr/share/X11/xorg.conf.d/50-synaptics.conf

の一番最後に、以下を記載

Section "InputClass"
Identifier "no need for accelerometers in X"
MatchProduct "SynPS/2 Synaptics TouchPad"
Option "Ignore" "on"
EndSection

というのは、ひとつ間違えるとシステムが起動しなくなることもあり得るので、注意が必要です。

LinuxホストでVirtualboxを使う際、USBデバイスを利用するためにしなければならないこと

Linux上でVirtualboxを使っている時、USBデバイスが認識されないで困っていました。
ドキュメントを見たら、きちんと書いてありました。

ドキュメントはこちら

2.3.4. The vboxusers group

The Linux installers create the system user group vboxusers during installation. Any system user who is going to use USB devices from VirtualBox guests must be a member of that group. A user can be made a member of the group vboxusers through the GUI user/group management or at the command line with

sudo usermod -a -G vboxusers username

vboxusersというグループにユーザーを登録しないと使えないと書いてあります。

早速やってみました。ユーザーネームがfooだとすると、

$ sudo usermod -a -G vboxusers foo

となるわけです。

そうしたところ問題なく使えるようになりました。

fslmathsでproportional scalingをするワンライナー

Proportional scalingは割り算するだけなので大変ではありません。
スクリプトを書くまでもなく、ワンライナーでいけないかと思いました。
次のような感じでばっちりいけました。

必要なものはファイル名となんらかのglobalが記載されているテキストファイルです。ここでは、id_volume.txtとします。

$ cat id_volume.txt

filename1 1.34
filename2 1.43
filename3 1.36
...
filename4 1.47

それでは、本題です。

$ cat id_volume.txt | while read line; \
do id=`echo $line | awk '{ print $1 }'`; \
icv=`echo $line | awk '{ print $2 }'`; \
echo "ID=${id} and ICV=${icv}"; \
fslmaths ${id} -div ${icv} p${id}; done

これで、ファイル名の前にpがついたファイルができます。

Packages to install to run MITK-2015.05.2 on Ubuntu 14.04

MITK-2015.05.2 depends on Qt5, which makes users to install some additional packages.
With trials and errors, below is what you need to do to run MITK-2015.05.2 on Ubuntu 14.04.

  1. build-essential
  2. You need this to run Qt5

    $ sudo apt-get install build-essential
    
  3. Core of Qt5
  4. $ sudo apt-get install qt5-default qttools5-dev-tools
    

    With this command bunch of software packages will be installed on your system.

  5. Two more libraries…
  6. You need two more libraries to run MITK-2015.05.2

    sudo apt-get install libqt5webkit5 libqt5svg5
    
  7. Set environment variable
  8. As the official site points out, you need to set envirament variable as below (when you use bash). I put this in ~/.bashrc

    export QT_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins 
    

Now it works!

Thinkpad X250, X201s, T430s上のUbuntu 14.04に対して、lm-sensorsとthinkfanを用いて熱対策を行う方法

しばらく前から気になっていたのですが、Thinkpad X201sやThinkpad X250にUbuntu 14.04を入れると、妙に熱くなる時がありました。
lm-sensorsをインストールして、温度を見たところ、CPUの温度が77℃に達していました!これは大変と思いました。
調べたところ、”Thinkpad overheating with Ubuntu”といった感じの記事がいろいろ見つかりました。
それらを見てみると、どうもファンの制御がうまくいっていないようです。

そんな中、”Ubuntu 11.10 on ThinkPad X220 でファン制御“という投稿を見つけました。

続きを読む

Linuxでターミナルから日本語名のディレクトリだけを削除したい時の簡単なコマンド

Linuxを使っていると、ターミナルから日本語関連のものを削除するときに、わざわざ日本語入力を可能にしてからというのはめんどくさいですよね。

スマートな方法はと考えました。

下記の方法で、アルファベットおよび数字ではじまらないディレクトリを削除できます。間違って削除するのは心配なので、削除する前に確認のメッセージを出すようにしました。

$ rm -ri [!a-zA-Z0-9]*

Linuxにおいては、シェルでは、[]の中の!は「それ以外」を意味します。
今の場合は、「a-z, A-Z, 0-9ではじまるもの以外」ということになるわけですね。

私の場合、これで、不要な日本語ディレクトリをさらっと消せました。

画像ファイル振り分けスクリプト

画像解析を行っている人ならば、一度は画像の振り分け作業に悩まされたことがあると思います。
私ももれなくその一人で、最近、あるプロジェクトにおいて、画像を分けなければならずしばらく放置していました。

しかし、よく考えてみたら、こういう「めんどくさい」けれども「単純な作業」こそ、コンピューターにさせるべき作業なわけです。

そこで、以下のようなスクリプトを考えてみました。コメントで何をしているか説明します。

#!/bin/sh

#filesorter.sh
#sort files according to the sorting list
#Usage: filesorter.sh sorting_list
#You need to prepare a sorting list beforehand.
#It should be like the following.
# img001  HC
# img002  PT
# img003  HC
# img004  PT
# img005  PT

#引数が指定されているかチェック
if [ $# -ne 1 ]; then
	echo "A sorting file should be specified!"
	echo "Usage: $0 sorting_file"
	echo "Sorting file includes ID and Categorized Group"
	echo "example:"
	echo "img001  HC"
	echo "img002  PT"
	echo "img003  HC"
	echo "img004  PT"
	echo "img005  PT"

	exit 1
fi

#ファイルを読み込み、空白行を削除し、1行ずつ$lineにセット
cat $1 | sed '/^$/d' | while read line
do
    #AWKを使って、第1フィールドを変数idにセット
    #第2フィールドを変数categoryにセット
    id=`echo $line | awk '{ print $1 }'`
    category=`echo $line | awk '{ print $2 }'`
	
    #変数categoryの名前に相当するディレクトリがなければ作成
    if [ ! -e $category ]; then
        mkdir $category
    fi

    #変数idを含むファイルを先ほど作成したディレクトリにコピー
    echo "copy $id to $category"
    cp *${id}* $category
done

興味のある方は、こちらからダウンロードしてください。

Ubuntu 14.04でLibreOfficeを4.xから5.xにアップグレードする方法

この記事は、もともとは、Ubuntu 12.04でLibreOfficeを3.xから4.xにアップグレードする方法に記載していたものですが、Ubuntu 14.04においても同様の方法でいけますので、改めて記載します。

Ubuntu 14.04を利用していると、LibreOfiiceは4.xのままです。
しかし、LibreOfficeは5.xにアップグレードされ、互換性なども以前にまして高まっています。
以下の方法で、簡単にLibreOfficeを4.xから5.xにアップグレードできます。

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get dist-upgrade

ここでポイントは、apt-get updateの後にapt-get dist-upgradeを行うことです。

apt-get upgradeとapt-get dist-upgradeの違いは、man apt-getに以下の記載があります。

upgrade
upgrade は、現在システムにインストールされている全パッケージの最新バージョンを、/etc/apt/sources.list に列挙した取得元からインストールするのに使用します。現在インストール中のパッケージに新しいバージョンがあれば更新しますが、いかなる時も現在インストール中のパッケージの削除は行いません。対象のパッケージが、他のパッケージのインストール状態を変更せずに更新できない場合は、現在のバージョンのままとなります。最初に update を実行しておき、apt-get にパッケージの新しいバージョンがあることを知らせる必要があります。

dist-upgrade
dist-upgrade は、upgrade の機能に加え、新バージョンのパッケージに対する依存関係の変更を知的に操作します。apt-get は「洗練された」競合解決システムを持ち、必要とあらば比較的重要でないパッケージを犠牲にして、最重要パッケージの更新を試みます。そのため dist-upgradeは、いくつかのパッケージを削除する可能性があります。/etc/apt/sources.list ファイルには、必要なパッケージファイルを検索する場所のリストが含まれています。

upgradeは全く削除されることなく、dist-upgradeは必要あらばファイルを削除する可能性があるわけですね。今回、LibreOfficeの3.xから4.xへのアップグレードには、いくつかのファイルが削除される必要もあるので、dist-upgradeを利用することとなります。

何はともあれ、この3つのコマンドで、LibreOfficeを安定した最新版にアップグレードできます。

ANTsのMacOSXへのインストール方法(ソースからのコンパイル)

ANTs (Advanced Normalization Tools)は、近年注目されている脳画像解析ツールです。性能が高いのですが、導入方法などが親切に説明されていません。
ある方と、ANTsのMacOSXへの導入についていろいろやりとりすることがありましたので、一連の流れを記載しておきます。

開発者によるHow-toはこちらに記載されています。

続きを読む