SPM12から、Display機能にあったReset Originがなくなりましたが、
先ほど、SPMのMLで、コマンドが紹介されていたので、紹介します。
spm_image('resetorient');
spm_imageで、SPMのDisplay機能を呼び出すことができるのですね。
そして、引数に’resetorient’を指定することでオリジン情報をクリアできます。
これは、とんでもない位置合わせをやってしまった時に、元に戻す便利な機能なので、共有しておきます。
SPM12から、Display機能にあったReset Originがなくなりましたが、
先ほど、SPMのMLで、コマンドが紹介されていたので、紹介します。
spm_image('resetorient');
spm_imageで、SPMのDisplay機能を呼び出すことができるのですね。
そして、引数に’resetorient’を指定することでオリジン情報をクリアできます。
これは、とんでもない位置合わせをやってしまった時に、元に戻す便利な機能なので、共有しておきます。
あるプロジェクトにおいて、「MRI画像の一覧画像を作成してもらいたい」という依頼を受けました。
イメージとしては、下記のようなものです。

以前、FSLのシェルスクリプトチュートリアルを翻訳していた際に、演習に
Lightbox Viewerがあったのを思い出して、改めて、それを見ながら、さらに機能を追加したスクリプトを考えてみました。
作成しながら勉強になることがいくつもあったので、細かくわけてみたいと思います。
先日、Ubuntuでapt-get updateを行った所、以下のエラーに遭遇しました。
W: http://jp.archive.ubuntu.com/ubuntu/dists/trusty-updates/main/source/Sources の取得に失敗しました ハッシュサムが適合しません
このような場合の解決法がいくつか提示されています。よくみられているもののひとつに、Ubuntuフォーラム内の投稿があります。
これでいいのですが、本質は何か考えてみました。
本質は、
/var/lib/apt/lists
の中にあるファイルとの比較で失敗しているようです。
したがって、消せばいいのは、この中身で、apt-getはその下にあるpartialディレクトリがなかったら自動で作成してくれます。
なので、やればいいのは、たった一つです。
$ sudo rm -r /var/lib/apt/lists/*
これでapt-get updateを行えば問題は解決するはずです。
自分の備忘録として残しておきます。
タイトル通りなのですが、
Matlab R2016a日本語版では、SPM12を起動しようとするとエラーが出ます。
詳しい現象は、こちらに説明されていますので、下記をご覧ください。
こちらに解決法が書いてあり、「デスクトップの言語を英語にする」と書いてあります。
Linuxではこれは簡単です。
ターミナルを起動し、
LANG=C matlab &
で英語環境でMatlabが起動します。
Macで同じことができるかと思ったらダメでした。
Macでは、ターミナルでLANG変数を変更しても、Matlab起動時に無視されてしまうとのこと。Mathworks本家が言っているのでどうしようもないです。
決して賢くはないですが、なんとかする方法がわかりましたので書いておきます。
Matlabを起動する前に、
システム環境設定→言語と地域
で、優先する言語を”English”にします。
そして、そのウィンドウを閉じようとすると、再起動しますかと聞かれますが、再起動しなくてOKです。
そこで、Matlabを起動すると、英語モードで起動します。
そうすると、SPMは問題なく起動します。
終わったあとに、もう一度 System Preferences… で同様にJapaneseを優先言語にもってきます。
これで終了すれば、日本語に戻ります。
もっとスマートな方法があるかと思いましたが、ありませんでした…。
今後、時間があるときに、SPMのMailing listにバグ報告を出しておこうと思いますが、
一番の対策は、Matlab R2015b以降にはしばらくアップデートしないということになります。
ご参考まで。
Ubuntu 16.04になってから、Plymouthの挙動が変なので、いろいろ調べたところ、以下のことがわかりました。
これまでは、テーマは、/lib/plymouth/themesの下に保存されていましたが、これからは、/usr/share/plymouth/themesの下に保存されるようになったようです。
したがって、自作のテーマを使いたい場合、以下を行う必要があります。今、テーマはmytheme/mytheme.plymouthと仮定します。
$ sudo update-alternatives --install \ /usr/share/plymouth/themes/default.plymouth default.plymouth \ /usr/share/plymouth/themes/mytheme/mytheme.plymouth 100
$ sudo update-alternatives --config default.plymouth
$ sudo update-initramfs -u
場所が変更になったことだけ頭においておけば、そこまで悩む必要はなさそうです。
FreeSurferのrecon-allで前処理を行った後、Quality Checkを行うことはとても大事です。
広島大の北村先生と一緒に、やり方を確認しました。北村先生がまとめてくださいましたので、その方法を以下に記します。
原典はFreeSurferのホームページを参考にしています。
https://surfer.nmr.mgh.harvard.edu/fswiki/FsTutorial/OutputData_freeview
Lin4Neuro日本語版にバグがある報告を受けましたので、アップデートしました。具体的には、キーボード配列が英語キーボードになってしまっていて、日本語入力ができない状況になってしまっていたので、それを修正しました。
最新バージョンは、こちらからどうぞ。
FreeSurferをインストールした後、自分のデータを用いてどうしたらいいか困る人が多くいます。
まず、1例を試してみるといいと思います。
以下のようにされてはいかがでしょうか。
たとえば、画像が、/Users/foo/img_dataにあるとすれば、
$ cd /Users/foo/img_data/
となります。
FreeSurferでは実はこれが大事です。ここをきちんとしていないと、話が次に進みません。
$ 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として扱うことにします。
#!/bin/sh
if [ $# -lt 1 ]
then
echo "Please specify image files!"
echo "Usage: $0 imagefiles"
echo "Wild card can be used."
exit 1
fi
for f in "$@"
do
subjid=`imglob $f`
recon-all -i $f -s $subjid -all
done
という感じになりますね。
出力ファイルは、$SUBJECTS_DIRに出力されます。
私の場合、
$SUBJECTS_DIRはホームディレクトリの下のfreesurfer/subjectsにしてあります。
この設定の仕方は、こちらをご覧ください。
どこにあるかすぐにわからなかったら、以下をしたらいいと思います。
$ cd $SUBJECTS_DIR
ここに先ほど入力したIDがあります。その中にいろいろ入っています。
$SUBJECTS_DIRはHDDの容量をくいますので、十分なスペースを確保しないと容量不足に陥りますのでご注意ください。
2018.09.09追記:この記事は古くなっています。最新版は、こちらに準備しましたので、こちらをご覧ください。
先日、ANTsをMacにインストールする方法を記載しましたが、Ubuntuでも同じことができるので、記載します。
開発者によるHow-toはこちらに記載されています。
先日、USBメモリに4GBを超えるファイルをコピーする必要がありました。
Windowsユーザー、Macユーザーも使うUSBメモリなので、NTFSフォーマットがよいと考えました。MacユーザーもNTFSは標準で読み取りはできますので。
これまで、フォーマットするときにGPartedでやっていました。GUIで簡単ですから。
しかし、今回は、NTFSフォーマットだけでなく、ボリュームラベルも変更する必要がありました。Gpartedでは、これは2段階(NTFSへのフォーマットとラベルの設定)になってしまうので、もっと簡単な方法はないかと思いました。
検索してなかなかすぐに見つけられなかったのですが、以下の方法が簡便とわかったので、紹介します。
Linuxでは、USBメモリは、/dev/sdc1とか/dev/sdb1などに割り当てられます。どこに割り当てられたかを確認する必要があります。方法として、dmesgを使う方法と、fdisk -lを使う方法があります。
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オプションで、デバイスの一覧を表示します。
$ 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メモリのパーティションになります。
ここでは、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を使うと、2つの画像を簡単に重ねあわせて表示できるわけですが、その際に様々なオプションを組み合わせることで画像をわかりやすく見せることができます。
主に3つ覚えておけば、結構いけるなと思いましたので、その3つを紹介します。
その3つとは、
です。
これまで、MRI画像のボクセルサイズを変更する時に、簡単な方法がないなと思っていました。
コマンドひとつで簡単にできないかなといろいろ検索したところ、AFNIの3dresampleというプログラムに行き着きました。
書式は簡単です。
たとえば、ボクセルサイズを2mm x 2mm x 2mm にしたいとしたら、
$ 3dresample -dxyz 2 2 2 -prefix 出力画像 -inset 入力画像
となります。
入力画像、出力画像、ともにNIFTI画像(.nii, .nii.gz)が使えます。
FSLViewやITK-SNAPでは、2つの画像を重ねあわせる時、ボクセルサイズが一致していることが必須ですので、これを知っていることで、作業が簡単になるかもしれません。
時間がかなりかかってしまいましたが、Lin4Neuroのメジャーアップデートを公開しました。
見た目は変わっていませんが、システムは相当変わっています。
現時点で、以下のパッケージが収載されています。
今後のアップデートで、その他のソフトウェアも収載予定です。
最新版のダウンロードは、 こちらからどうぞ。
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.
Right now, following packages are pre-installed.
Other software packages will be added in the next update.
You can download the latest version from here.
SPM12では、灰白質(GM)、白質(WM)、脳脊髄液(CSF)容積もプラグインなしで算出できるようになりました。
まず、segmentationを行います。そうすると、seg8.matというファイルができます。これには、MRIをGM, WM, CSFにどのように分割したかという情報が入っています。
SPM12ではこれを用いて、これらの容積を求めることができます。
SPMのBatch editorを起動し、メニューから、SPM -> Util -> Tissue Volumesと選択します。

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

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になるわけですね。便利ですね。
この内容は、以前、東大の小池先生から教えていただいた内容です。
まとめるのが遅くなりましたが、まとめてみました。
すぐできるVBMでは、Anatomy Toolboxを使って結果の解剖学的位置の同定を行いました。執筆時点では知らなかったのですが、SPM12から、プラグインを導入しなくても、解剖学的位置を簡単に知ることができるようになりました。
まずは、SPMで結果を出します。
その時、SPMの左下のウィンドウに、下図に示すように、Atlasというメニューが新しく出るようになりました。これを選んで、Label using -> Neuromorphometricsと選択します。

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

さらに、これは、結果の表だけでなく、Sectionなどで画像を表示したときも利用することができます。
Overlays -> Sections で、画像を表示した後に、画像の上で右クリックをするとメニューが出てきます。
そこで、Display -> Labels -> Neuromorphometricsと選択していきます。

そうすると、画面にその座標が表示されるようになります。
ちなみに、同じDisplayの中にあるcoordinateを選ぶと座標が表示されますし、Fileを選択すると、背景に使った画像のファイル名が表示されます。
SPMの結果の上での右クリックはバージョンがあがるにつれ、様々な機能が追加されていますので、時間があるときに試してみると発見があります。
ということで、小池先生、遅ればせながらありがとうございました。
私は、今、Thinkpad X250とT430を使っています。Thinkpad T430では、BIOSで、タッチパッドを無効にすれば、そのままタッチパッドが無効になったので、よかったのですが、同じことをX250でやっても効果がありません。
それでいろいろ調べてみました。
結論は、以下の方法が一番早いかと思います。
ターミナルで以下をタイプします。
$ synclient TouchpadOff=1
ただ、これは、一時的なもので、ずっとそうしたくない場合は、自動でこれが動くようにしてあげればいいわけです。
私はXFCE環境なので、XFCEでどうするかを調べました。
2つのファイルを準備する必要があります。
これには、以下の2行だけ記載されています。
#!/bin/sh synclient TouchpadOff=1
これを実行権限をつけた後、パスの通っているディレクトリに保存します。私は、~/binに起きました。
これには、以下の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デバイスが認識されないで困っていました。
ドキュメントを見たら、きちんと書いてありました。
ドキュメントはこちら。
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
となるわけです。
そうしたところ問題なく使えるようになりました。
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がついたファイルができます。