先日、FSLのJHU-labels.xml から、sed を使って領域名だけを抽出する方法を書きました。
その後、awk を使うともっとエレガントにできてしまうことに気づきました。
ポイントは、awk は、 区切り文字を複数指定できる ということです。
先日、FSLのJHU-labels.xml から、sed を使って領域名だけを抽出する方法を書きました。
その後、awk を使うともっとエレガントにできてしまうことに気づきました。
ポイントは、awk は、 区切り文字を複数指定できる ということです。
FSLには Johns Hopkins University の白質アトラスがついてきます。
そのアトラスの領域名を抽出したいと思いました。
cat JHU-labels.xml |\
sed -e 's@<label.*">@@' \
-e 's@</label>@@' \
-e 's@ @_@g' -e 's@__@@' |\
sed -n 17,66p
で、以下のようになります。
Middle_cerebellar_peduncle Pontine_crossing_tract_(a_part_of_MCP) Genu_of_corpus_callosum Body_of_corpus_callosum Splenium_of_corpus_callosum ...
もし、アトラスの番号を振りたかったら以下のようにします。
cat JHU-labels.xml |\
sed -e 's@<label.*">@@' \
-e 's@</label>@@' \
-e 's@ @_@g' \
-e 's@__@@' |\
sed -n 17,66p |\
nl -n rz |
sed -E 's@0{4}@@'
この結果は以下になります。
01 Middle_cerebellar_peduncle 02 Pontine_crossing_tract_(a_part_of_MCP) 03 Genu_of_corpus_callosum 04 Body_of_corpus_callosum 05 Splenium_of_corpus_callosum ...
Claude Code を自分のUbuntuにセットアップしたいと思いました。Claude CodeなのでClaudeチャットにセットアップのドキュメントを準備するようにお願いしたところ、結構わかりやすく準備してくれたので、少し手を入れながら公開します。以下、Claudeが生成した文章です。私はFreeSurferの関係でまだ Ubuntu 22.04 を使っているので、Ubuntu 22.04用となります。なお、Claude Codeのセットアップは実際に手を動かして問題がありませんでした。
私は GitHub と GitLab をどちらも使っています。
ほぼ同時期に以下のことが起き、GitHub/GitLab との通信ができなくなりました。
それぞれ調べて、以下のことがわかりました。
シェルスクリプトで、パイプの後に xargs を使って処理を行うことがあります。
あまりこの使い方がピンと来ていなかったのですが、改めて man を読むとポイントは2つかなと思いました。
Lin4Neuroは現在、Ubuntu 22.04版がメインとなっています。
FreeSurferがまだUbuntu 24.04に対応していないためです。
しばらく前からLin4Neuroを使っている方は、Ubuntu 20.04版をお使いの可能性があります。
これをUbuntu 22.04版に更新する方法を説明します。
Ubuntuでサードパーティーのソフトウェアをインストールする際、過去には、apt-key コマンドでパッケージの電子署名用のOpenPGP公開鍵を扱っていました。
しかし、現在、apt-keyは廃止となりました。
私の中で混乱があったのでポイントをまとめました。
OpenAI は whisper という文字起こしができるソフトウェアを提供しています。
オープンソース版を使えば、料金がかかることなく使うことができるのですが、Windowsでのセットアップはやや厄介です。
このため、Windowsでのセットアップの方法を解説していきます。また、公開されているサンプルデータを使って、実際に文字起こしにもトライしてみます。
Lin4Neuroのアンケートについてご協力いただきありがとうございました。アンケート結果を公開します。
私はこれまで脳画像解析に特化したLinux, Lin4Neuroの開発をしてきました。
WindowsやmacOSの方が気軽に触れられるように仮想環境で使えるようにしてきましたが、
脳画像解析ソフトがGPUを必要としてきたり、Dockerの環境が増えてきたりと、いろいろ変化がある中、
実機にLinuxが入っている環境を充実させる必要があると感じています。
そこでアンケートをさせていただけたらと思います。
このアンケートの結果は後日公開します。匿名で3分程度で終わるアンケートなので、皆様のご意見をお聞かせいただけますでしょうか。
今後の開発の参考にいたします。
どうぞよろしくお願いします。2025年2月末に一度集計したいと思います。
以下のリンクからご協力ください。
(アンケートは終了しました。ご協力いただきありがとうございました)
シェルスクリプトを記載する時、bashで実行されることを意識する際、冒頭のシェバン (shebang) 行に
#!/bin/bash
と記載することが多いです。
Linuxではこれで全く問題ないのですが、近年の macOS の状況を見ていると、これはちょっと考え直した方がいいかなと思ってきました。
簡潔に言うと、
#!/usr/bin/env bash
とするのが汎用性の高い運用になると思います。
mkdir -p は mkdir --parents であり、必要に応じて親ディレクトリを作成する便利なオプションです。
しかし、ふと、man を見たらもうひとつの機能があることに気づきました。それは「ディレクトリが存在していてもエラーを返さない」というものです。
私はこれまでいつもスクリプトでディレクトリを作成する際は、
[[ -d some_directory ]] || mkdir some_directory
としていました。
しかし、実は、これは
mkdir -p some_directory
で終わってしまうということですね。
小さなことですが、勉強になったので、備忘録として記録しておきます。
NVIDIAのGPUドライバーがプロプライエタリからオープンソースに移行したことに伴い、過去にプロプライエタリドライバを使っていた方がアップデートがうまくいかずトラブル場合が多々あります。
その時の対処法を以下に示します。
私はWindowsは仮想環境で使うことが多いのですが、Windows11が22H2以降、アップデートできない現象に遭遇しました。
対処法を簡単に書いておきます。検索すればたくさん情報は出てきます。ちなみに、これはシステム要件を満たしているのにアップデートできない場合とお考えください。
Windows11のISOを入手。方法は2つ
コマンドプロンプトを管理者権限で実行
マウントされたドライブに移動。Dドライブなら cd d: で移動できる
以下のコマンドを実行
setup /product server
やはり、最後の手段はCLIですね。
VirtualBox上でDebianをインストールしていろいろ試しているのですが、Guest Additionsをインストールしようとしてちょっと困ったので、備忘録として残しておきます。
cd /media/cdrom sudo sh VBoxLinuxAdditions.run
でいけます
最初、普通Ubuntuでやるように
cd /media/cdrom sudo ./VBoxLinuxAdditions.run
としたところ、
sudo: unable to execute ./VBoxLinuxAdditions.run: Permission denied
となりました。
なんでだろうと思ったところ、https://forums.virtualbox.org/viewtopic.php?t=58799にヒントが書かれていました。
cdromをマウントする際、/etc/fstabに
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
と書かれています。この noauto を exec にすることで、実行可能になるということでした。
もちろん、これを exec に変えるのも方法ですが、この場合、任意のCDが実行されてしまうリスクもはらんでいます。
それ以外の方法がないかと考えたところ、直接実行するのではなく、シェルから実行するという方法があるかなと思いました。
そうしたら、上記のリンクの最後にその旨が書かれていました。
なので、実際に試してみました。
cd /media/cdrom sudo sh VBoxLinuxAdditions.run
そうしたところ、あっさりと動きました。
スクリプトを直接実行ではなく、シェルから実行というのは常に頭のどこかに置いておくといいんだなということを学びました。

PythonのPydicomライブラリを用いて、DICOMヘッダーをCSVにまとめて保存
Pydicomは、DICOMのヘッダーや画像を操作するのに用いるライブラリである。
Pydicomのインストールは、以下のコマンドを実行。
pip3 install pydicom
CSV形式の表データを扱うには、Pandasライブラリを用いる。
Pandasライブラリのインストールは、以下のコマンドを実行。
pip3 install pandas
次のような、フォルダ構造でデータを準備する。この場合では、各被験者フォルダの中にDICOMが保存されている。
DICOM_folder ├── Subject001 │ ├── XXX.dcm │ ├── ... │ └── XXX.dcm ├── Subject002 │ ├── XXX.dcm │ ├── ... │ └── XXX.dcm ├── ... └── SubjectXXX
次のコードを、extract_dcm_header.pyとして保存する。このとき、スクリプトはDICOM_folderフォルダと同じ階層に保存する。
import os
import pydicom
import pandas as pd
input='DICOM_folder' # Input folder
output='dicom_headers.csv' # Output CSV
dcm_dfs = []
failed_files = []
processed_files = []
for root, _, files in os.walk(input): # Find DICOM file for each subject
if len(files) != 0: # If DICOM files exist
try:
f = os.path.join(root, files[0])
dcm = pydicom.dcmread(f) # Read DICOM
_df = pd.DataFrame({dcm[k].keyword: [dcm[k].value] for k in dcm.keys() if dcm[k].keyword != "PixelData"}) # Read Headers
dcm_dfs.append(_df) # Gather headers of all subjects in a list
processed_files.append(f)
except:
failed_files.append(f)
dcm_dfs = pd.concat(dcm_dfs, ignore_index=True) # Concat headers of all subjects in a table
dcm_dfs.to_csv(output, index=False) # Save as CSV
2.3. スクリプトの準備で用意した、extract_dcm_header.pyを実行するには、次のコマンドを実行する。
python3 ./extract_dcm_header.py
収集したDICOMヘッダーは、dicom_headers.csvとして保存される。
まず、必要なライブラリを読み込む。
import os import pydicom import pandas as pd
ここでは、入力となるDICOMフォルダーと出力となるDICOMヘッダーのまとまったCSVの名前を定義している。
今回の場合だとinput='DICOM_folder'、output='dicom_headers.csv'。
input='DICOM_folder' # Input folder output='dicom_headers.csv' # Output CSV
データを格納するための、箱(リスト)を定義。
dcm_dfs = [] failed_files = [] processed_files = []
被験者ごとのDICOMファイルを検索。
for root, _, files in os.walk(input): # Find DICOM file for each subject
DICOMファイルがある場合のみ、処理を実行。
if len(files) != 0: # If DICOM files exist
Pydicomを用いて、DICOMデータを読み込む。
try:
f = os.path.join(root, files[0])
dcm = pydicom.dcmread(f) # Read DICOM
DICOMからヘッダー(Header)情報を、Pandasで読み込む。
PixelDataタグを含めると、出力(CSV)が崩れておかしくなるので、収集に含めないようにしている。
_df = pd.DataFrame({dcm[k].keyword: [dcm[k].value] for k in dcm.keys() if dcm[k].keyword != "PixelData"}) # Read Headers
収集した結果を、被験者ごとに処理をして、一つの箱(リスト)にまとめる。
dcm_dfs.append(_df) # Gather headers of all subjects in a list
processed_files.append(f)
except:
failed_files.append(f)
すべての被験者のヘッダー情報を、一つの表形式のデータ(DataFrame型)に変換する。
dcm_dfs = pd.concat(dcm_dfs, ignore_index=True) # Concat headers of all subjects in a table
結果を、CSVとして保存する。
dcm_dfs.to_csv(output, index=False) # Save as CSV
ときどきこの質問を受けるので言及しておきます。
2024年4月にUbuntu 24.04が公開されました。
しかし、Ubuntu 24.04上では現行のFreeSurfer 7.4.1は動きません。
このため、FreeSurferを実行したい場合は、しばらくUbuntu 22.04からアップグレードしないようにしましょう。
SPMで位置合わせする方法は2つあります。
ここでは、Coregister について述べます。