ときどきこの質問を受けるので言及しておきます。
2024年4月にUbuntu 24.04が公開されました。
しかし、Ubuntu 24.04上では現行のFreeSurfer 7.4.1は動きません。
このため、FreeSurferを実行したい場合は、しばらくUbuntu 22.04からアップグレードしないようにしましょう。
ときどきこの質問を受けるので言及しておきます。
2024年4月にUbuntu 24.04が公開されました。
しかし、Ubuntu 24.04上では現行のFreeSurfer 7.4.1は動きません。
このため、FreeSurferを実行したい場合は、しばらくUbuntu 22.04からアップグレードしないようにしましょう。
SPMで位置合わせする方法は2つあります。
ここでは、Coregister について述べます。
ある施設のrs-fMRIのDICOMデータをNiftiに変換しようとした時に、以下のようになってしまい、4次元データができませんでした。
sub1_+rsfMRI_201.nii sub1_+rsfMRI_201_t10000.nii sub1_+rsfMRI_201_t100000.nii sub1_+rsfMRI_201_t102500.nii sub1_+rsfMRI_201_t105000.nii sub1_+rsfMRI_201_t107500.nii sub1_+rsfMRI_201_t110000.nii sub1_+rsfMRI_201_t112500.nii sub1_+rsfMRI_201_t115000.nii sub1_+rsfMRI_201_t117500.nii sub1_+rsfMRI_201_t120000.nii sub1_+rsfMRI_201_t122500.nii sub1_+rsfMRI_201_t12500.nii ...
ポイントは、ファイル名の後ろに tの後に数字がつくことです。
この原因を探っていたところ、dcm2niixのGitHubページを見つけました。
https://github.com/rordenlab/dcm2niix/issues/428
ここで開発者のChris Rorden教授が以下のように述べています。
your files have a bogus value for cardiac trigger time (0018,1060). This is a limitation of your images, not dcm2niix. You should work with your Philips Research Collaboration manager to fix your scanner. For archival-quality data you could purge the invalid tags from your images, e.g. gdcmanon –dumb –remove 0018,1060 -i … -o …
Cardiac Trigger Timeというタグに値が入ってしまっていることで、dcm2niixはこれを別々のものと認識してひとつにしないようです。過去に撮像したデータの場合、0018,1060を削除するのは一手ではないかとおっしゃっています。実際に確認したところ、そのタグが入っていました。
そこで、このタグを削除する以下のようなPythonスクリプトを書いてみました。pydicomが入っていれば動くはずです。
こちらから手に入れられます。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Script to remove trigger time from Philips fMRI # source: https://github.com/rordenlab/dcm2niix/issues/428 # 14 Oct 2023 K. Nemoto import sys, os, time, argparse import pydicom __version__ = '20231004' __desc__ = ''' Remove Trigger Time (0018,1060) from Philips rsfMRI ''' __epilog__ = ''' examples: dcm_rm_trigger_time.py DICOM_DIR1 DICOM_DIR2 ... ''' def remove_triggertime(src_dir): # modify files for root, dirs, files in os.walk(src_dir): for file in files: try: src_file = os.path.join(root, file) ds = pydicom.dcmread(src_file) pid = src_dir.replace('/','') del ds[0x0018, 0x1060] ds.save_as(src_file) except: pass if __name__ == '__main__': start_time = time.time() parser = argparse.ArgumentParser(description=__desc__, epilog=__epilog__, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('dirs', metavar='DICOM_DIR', help='DICOM directories.', nargs='+') err = 0 try: args = parser.parse_args() for dicom_dir in args.dirs: # Loop through all the provided directories print(f'remove dicom tag (0018,1060) from {dicom_dir}') remove_triggertime(dicom_dir) print("execution time: %.2f second." % (time.time() - start_time)) except Exception as e: print("%s: error: %s" % (__file__, str(e))) err = 1 sys.exit(err)
これは、
dcm_rm_triggertime.py DICOMフォルダ
とすることで、そのフォルダ内のtrigger timeタグを削除します。
この処理をした後のDICOMを使って dcm2niix を行ったところ、問題なく変換されました。
困っている人がいると思うので共有しておきます。
Windows 10/11 では、Windows Subsystem for Linux (WSL) を使ってUbuntuなどのLinuxをインストールできます。WSL2 を使うと、GPUも使えるとのことです。
しかし、WSL2は基本、コマンドラインです。LinuxのGUIを起動するためには、工夫が必要です。現在、いくつかのアプリが公開されていますが、FSLの公式ページでは、VcXsrv を勧めていますのでそれを使うのが無難でしょう。
Ubuntu 22.04 も発表されて1年が過ぎて安定してきましたので、ここでは、
をいれたうえで、FSL をインストールしてみます。
なお、このページは、FSLの公式サイトを参考に作成しました。
When using FreeSurfer and FSL 6.0.6 or later, a certain issue may arise:
First, I will explain how to confirm if you are affected by this issue and then provide the solutions along with the reasons.
FreeSurfer と FSL 6.0.6以降を使っていると、ある事象が起きます。
これの影響を受けているかの確認法および対処法を最初に解説した後、その理由を述べます。
ある方から、「CONNで前処理したfMRI画像から、デフォルト・モード・ネットワーク(DMN)の時系列データを取り出すにはどうしたらよいですか?」というご質問をいただきました。
鍵となるプログラムは以下の2つです。
以下に、方法を記載します。
FSL 6.0.6 and later now support CUDA 11 or later.
After various trials and errors, I have found a simple way to use CUDA effectively with FSL, which I will introduce here.
Assuming that FSL 6.0.6 or later is already installed.
FSL 6.0.6 以降で、CUDA 11以降も対応するようになりました。
いろいろ試行錯誤した結果、以下のようなシンプルな方法でFSLでCUDAを上手に使うことができるようになったので紹介します。
なお、Amulet社から販売している Powerstep Tower for Lin4Neuro は、既にこれらの設定が済んでいますので、電源入れたらすぐにEDDY, BEDPOSTX, XTRACTなどがGPUを使って解析できます。
なお、FSL 6.0.6 以降は既にインストールされているとします。
FSLはデフォルトでは、Linuxの場合は、.profile の下、macOS の場合はお使いのシェルに応じて、.bash_profile もしくは .zprofile の下に 以下のような設定が書き込まれます。(6.0.6以降の設定です)
# FSL Setup FSLDIR=/usr/local/fsl PATH=${FSLDIR}/share/fsl/bin:${PATH} export FSLDIR PATH . ${FSLDIR}/etc/fslconf/fsl.sh
この内容を理解できると、ソフトの設定がわかるようになるので、1行ずつ解説してみます。
FreeSurfer では Local Gyrification Index (LGI) を求めることができます。LGIを一言で言えば、脳の皮質の折りたたみの状態を指標化とでも言えるでしょうか。
詳細は、本家のウェブサイトにありますが、ポイントを示します。
この3つを準備しておけば、あとは、以下のコマンドをタイプするだけです。
recon-all -s <fsid> -localGI
FSLのバージョン情報がどこにあるか探したので備忘録として書いておきます。
cat /usr/local/fsl/etc/fslversion
で求められます。
しばらく前に、Ubuntu 18.04用にHCP Pipelineの環境を設定する方法を記載しましたが、いくつかアップデートもあるので、Ubuntu 20.04用以降でも設定できるようにします。
*2023/10/08追記: Neurodebianの設定についてうまく動かないミスがありましたので修正しました。神谷先生、ご指摘ありがとうございました。
*2024/03/29追記: Ubuntu 22.04でFreeSurferのスクリプトがダウンロードできない不具合を解消しました。金子先生、ご指摘ありがとうございました。
DICOMファイルがひとつのディレクトリに入っていて、パルスシーケンスごとにわけたくなることがありませんか?
これまで、私はpydicomを使ったり、DCMTKのツールを使ったスクリプトを使用していました。
しかし、先日、dcm2niixにDICOMソート機能があることを知りました。
ヘルプには
-r : rename instead of convert DICOMs (y/n, default n)
としか書いていないのですが、dcm2niix のGitHubのissue 604に以下の記載がありました。
https://github.com/rordenlab/dcm2niix/issues/604#issuecomment-1120269405
dcm2niix -r y /path/to/DICOMS – this will simply rename rather than convert the data. It sorts each session into a separate folder, which makes subsequent conversion much easier.
実際試してみます。DICOM というディレクトリにDICOM画像が入っていて、sorted というディレクトリに保存したいとします。
mkdir sorted dcm2niix -r y -o sorted DICOM
これで見事、sortedディレクトリの下に撮像年月日のディレクトリが作成され、その下にシーケンスごとにサブディレクトリにソートされたDICOM画像ができていました!
既に匿名化されているDICOMなどは、これを使うだけでソートが問題なくできますね。
知られていない裏技だと思うので紹介しておきます。
bedpostx_gpu を走らせると、以下のエラーがでます。
/usr/local/fsl/bin/bedpostx_postproc_gpu.sh: 行 20: --cnonlinear/bin/merge_parts_gpu: そのようなファイルやディレクトリはありません
この解決法がFSLのMLで紹介されています。
https://www.jiscmail.ac.uk/cgi-bin/wa-jisc.exe?A2=FSL;ee0b1626.2112
具体的には、
${FSLDIR}/bin の中にある bedpostx_postproc_gpu.sh の
# last 2 parameters are subjdir and bindir parameters="" while [ ! -z "$2" ] do
を
# last 2 parameters are subjdir and bindir parameters="" while [ ! -z "${2+x}" ] do
に変更します。
while の後の test文 の中が、 $2 が ${2+x} になっています。
これで無事に動きます。
ご紹介まで。(金子貴久子先生、情報提供ありがとうございました)
ATTENTION (16 Apr 2023): From 6.0.6, you can use the latest CUDA to run eddy_cuda10.2. So this post is obsolete. I wrote a new post, so please check it out.
FSL 6.0.5 ships eddy_cuda10.2 which literally uses CUDA 10.2.
I explored a way to use eddy_cuda10.2, PyTorch and Tensorflow concurrently. Below is How-To for Ubuntu 18.04/20.04.
1. 目的
2. フォルダ構造
3. aparcとasegのまとめ方
4. wmparcのまとめ方
5. Brain Stemの計測
6. 出力結果
6.1. aseg
6.2. wmparc
6.3. brainstem