第3回:「脳画像データとFSLの基礎~NIfTI形式とfslhd/fslstats~」
前回は、bashスクリプトの基本的な書き方やテキスト処理コマンドを学びました。ここからは、実際に脳画像解析で用いられるファイル形式やツールに触れていきます。
脳画像解析は、MRIや拡散テンソル画像(DTI)などの3次元データを扱います。その代表的な形式がNIfTIファイル(.nii.gz)です。また、NIfTIファイルの情報を扱う上で、便利な解析ツールセットがFSLです。今回は、FSLに含まれるコマンドfslhdやfslstatsを使いながら、NIfTIファイルからヘッダ情報や統計値を取得する基本を学びます。
NIfTIファイル形式とは?
NIfTI(Neuroimaging Informatics Technology Initiative)形式は、脳画像研究で標準的に使われるデータフォーマットです。
.niiや.nii.gz拡張子を持ち、3Dまたは4D(時系列)データを格納
画像本体だけでなく、画像の解像度、ボクセルサイズ、座標系、スライス数などのメタデータ(ヘッダ情報)も含む
この形式に慣れておくと、多くの脳画像解析パイプラインでスムーズに作業ができます。
FSLとは何か?
FSL(FMRIB Software Library)は、オックスフォード大学FMRIB(現在WIN:Wellcome Centre for Integrative Neuroimaging)で開発された脳画像解析ツールセットです。
MRIやfMRI、拡散テンソル画像(DTI)など多様なデータの前処理・解析機能がある
コマンドラインベースでの操作が主体
fslhd、fslstats、fsleyesなど多数のコマンドが含まれる
FSLを使うと、NIfTIファイルの情報取得や統計計算がコマンド一発で行えます。
前提:この連載では、すでにFSLがインストール・設定済みの環境を想定しています。もし未インストールであれば、FSL公式サイト(FSL official)を参照してセットアップしてください。
fslhdでヘッダ情報を見る
fslhdコマンドは、NIfTIファイルのヘッダ情報をテキスト形式で表示します。
ヘッダには、ボクセル数、ボクセルサイズ、スキャン日付など、解析に必須となるメタ情報が含まれます。
fslhd sample.nii.gz
これを実行すると、多数の行にわたって情報が表示されます。
dim1, dim2, dim3あたりで画像の解像度(x, y, z方向のボクセル数)が、pixdim1, pixdim2, pixdim3で各ボクセルの物理的サイズ(mm単位)が確認できます。
fslstatsで画像の基本統計値を取得する
fslstatsコマンドはNIfTIファイルから統計値を抽出する際に便利です。
以下はよく使うオプションの一例です。
-R:最小値と最大値を返す
-m:平均値を返す
-s:標準偏差を返す
-V:有効ボクセル数とそのボリュームを返す(0以上のボクセル数など)
fslstats sample.nii.gz -R
これを実行すると、min maxという2つの値が返ってきます。これが画像内の全ボクセルの最小値と最大値です。
実習:サンプルNIfTIファイルから統計値を取得するスクリプト
ここでは、sample.nii.gzというサンプルファイルを用意しているとします(実際の環境でファイルを用意するか、もしくは自分で別名のNIfTIファイルを使用してください)。
前回までに作成した作業用ディレクトリneuro_script_tutorialに移動します。
cd ~/neuro_script_tutorial
以下の内容でget_stats.shというスクリプトを作成します。
#!/bin/bash
input_file="sample.nii.gz" # 解析対象のNIfTIファイル名
# ファイルが存在するか確認
if [[ ! -f $input_file ]]; then
echo "$input_file が見つかりません。ファイルを準備してください。"
exit 1
fi
# fslstatsで最小値と最大値を取得
# 出力は "min max" の形で返る
stats=$(fslstats $input_file -R)
# cutコマンドで最小値(max_var)と最大値(max_val)を分割抽出
min_val=$(echo $stats | cut -d " " -f 1)
max_val=$(echo $stats | cut -d " " -f 2)
echo "ファイル: $input_file"
echo "最小値: $min_val"
echo "最大値: $max_val"
スクリプトに実行権限を付与します。
chmod +x get_stats.sh
スクリプトを実行します。
./get_stats.sh
成功すれば、sample.nii.gzの最小値と最大値が表示されます。
テキスト処理コマンドで出力を整形
上記のスクリプトではcutを使って空白で区切られた出力を分解しました。
もし、平均値や標準偏差も取り出したい場合は、fslstatsに他のオプションをつけて、パイプでawkで抽出するなど拡張も可能です。
例えば、平均値(-M)と標準偏差(-S)も合わせて取得する場合は以下のようになります。
#!/bin/bash
input_file="sample.nii.gz"
if [[ ! -f $input_file ]]; then
echo "$input_file が見つかりません。"
exit 1
fi
# 最小値、最大値、平均値、標準偏差を一度に取得
stats=$(fslstats $input_file -R -M -S)
# statsは "min max mean std" の順で出力される
# cutやawkで順番に抽出可能
min_val=$(echo $stats | awk '{print $1}')
max_val=$(echo $stats | awk '{print $2}')
mean_val=$(echo $stats | awk '{print $3}')
std_val=$(echo $stats | awk '{print $4}')
echo "ファイル: $input_file"
echo "最小値: $min_val"
echo "最大値: $max_val"
echo "平均値: $mean_val"
echo "標準偏差: $std_val"
このように、fslstatsで得られた結果をテキスト処理コマンド(cut, awk等)で整形すれば、どんな情報が欲しいかに応じて出力を見やすくカスタマイズできます。
次回予告
今回はNIfTI形式のファイルを理解し、fslhdやfslstatsで画像ヘッダ情報・統計値を取得する方法を学びました。これにより、脳画像データの特徴を簡単に引き出せます。
次回は、実際の脳画像解析結果ファイル(tfce_corrpファイルなど)に触れ、有意差検出のアイデアについて学びます。どのような基準で有意と判断するか、その情報をコマンドで抽出するステップを踏み、最終的な自動処理スクリプトに向けた応用を目指します。