【FSL】FSLを使ったVolumeの一括計測



1. 目的
2. Volume計算
3. 一括で計測する場合
3.1. フォルダ構造
3.2. コード
3.3. 結果


1. 目的

FSLをつかったVOI (ROI) Volumeの計測。

2. Volume計算

Volume計算にはFSLコマンドのfslstatsを用いる。
-Vオプションでvoxel数とvolumeを計測できる。

-V : output (for nonzero voxels)

$ fslstats lt_SN_mask.nii -V
529 293.009949

Volumeのみを取り出したい場合は、cutコマンドを用いる。

  • -d : 区切り文字を指定
  • f : 何個目の要素かを指定

このケースだと、空白(” “)で区切って(-d ” “)、2個目の要素(-f2)であるVolumeを抽出。

$ fslstats lt_SN_mask.nii -V | cut -d " " -f2
293.009949

3. 一括で計測する場合

3.1. フォルダ構造

3人の被験者がいて、以下のVOIのVolumeを計測する。

  • VTA_mask.nii
  • lt_SN_mask.nii
  • lt_ant_SN_mask.nii
  • lt_mid_SN_mask.nii
  • lt_pos_SN_mask.nii
  • rt_SN_mask.nii
  • rt_ant_SN_mask.nii
  • rt_mid_SN_mask.nii
  • rt_pos_SN_mask.nii
.
├── sub_1
│   ├── 20171007_134045tse3t1Conc1p1Neuromelanins020a1001A.nii
│   ├── MB.nii
│   ├── VTA_mask.nii
│   ├── kiritori.nii
│   ├── lt_SN_mask.nii
│   ├── lt_ant_SN_mask.nii
│   ├── lt_mid_SN_mask.nii
│   ├── lt_pos_SN_mask.nii
│   ├── rt_SN_mask.nii
│   ├── rt_ant_SN_mask.nii
│   ├── rt_mid_SN_mask.nii
│   └── rt_pos_SN_mask.nii
├── sub_2
│   ├── 20171007_134045tse3t1Conc1p1Neuromelanins020a1001A.nii
│   ├── MB.nii
│   ├── VTA_mask.nii
│   ├── kiritori.nii
│   ├── lt_SN_mask.nii
│   ├── lt_ant_SN_mask.nii
│   ├── lt_mid_SN_mask.nii
│   ├── lt_pos_SN_mask.nii
│   ├── rt_SN_mask.nii
│   ├── rt_ant_SN_mask.nii
│   ├── rt_mid_SN_mask.nii
│   └── rt_pos_SN_mask.nii
└── sub_3
├── 20171007_134045tse3t1Conc1p1Neuromelanins020a1001A.nii
├── MB.nii
├── VTA_mask.nii
├── kiritori.nii
├── lt_SN_mask.nii
├── lt_ant_SN_mask.nii
├── lt_mid_SN_mask.nii
├── lt_pos_SN_mask.nii
├── rt_SN_mask.nii
├── rt_ant_SN_mask.nii
├── rt_mid_SN_mask.nii
└── rt_pos_SN_mask.nii

3.2. コード

以下のコードを実行すると、各被験者、各ROIごとのVolumeを計測し、まとめてresult_vol.txtとして出力する。

#!/bin/sh

count=0
for sub in *;do
    echo "$sub done..."
    count=$(( ${count}+1 ))
    if [ ${count} = 1 ]; then
        # redirect subject name (folder name)
        echo "ID" >> tmp_ID
    fi
    echo ${sub} >> tmp_ID

    for roi in lt_SN rt_SN lt_ant_SN rt_ant_SN lt_mid_SN rt_mid_SN lt_pos_SN rt_pos_SN VTA;do
        if [ ${count} = 1 ]; then
            # redirect ROI name
            echo "${roi}(mm^3)" > tmp_${roi}
            # calc ROI vol
            fslstats ${sub}/${roi}_mask -V |cut -d " " -f2 >> tmp_${roi}
        else
            # calc ROI vol
            fslstats ${sub}/${roi}_mask -V |cut -d " " -f2 >> tmp_${roi}
        fi
    done
done

# merge calc result
paste tmp* > result_vol.txt
# remove tmp files
rm tmp*

3.3. 結果

result_vol.txtの中身は以下。
sub1~sub3は、同じデータを複製したものなので値は同じ。

ID VTA(mm^3) lt_SN(mm^3) lt_ant_SN(mm^3) lt_mid_SN(mm^3) lt_pos_SN(mm^3) rt_SN(mm^3) rt_ant_SN(mm^3) rt_mid_SN(mm^3) rt_pos_SN(mm^3)
sub_1 29.910278 293.009949 132.380676 104.685974 55.943298 304.087830 122.410583 106.347656 75.329590
sub_2 29.910278 293.009949 132.380676 104.685974 55.943298 304.087830 122.410583 106.347656 75.329590
sub_3 29.910278 293.009949 132.380676 104.685974 55.943298 304.087830 122.410583 106.347656 75.329590

Print Friendly, PDF & Email

【FSL】FSLを使ったVolumeの一括計測” へのコメント

  1. ご返信ありがとうございます。Neuromelanin-sensitive MRIから手動で作成されたVOIとのこと、承知しました。手動で作成されたという部分をより具体的にお教え頂きたいのですが、その際に使ったソフトウェア等についてはいかがでしょうか。

    • 基本的には、MRIcron(https://www.nemotos.net/?p=4340)を使っております。
      あるいは、ITK-SNAPを使います。
      この二つが使えれば、困ることはないと思います。

  2. 1点、質問をさせて下さい。このページに記載のございます、VTA_mask.niiやlt_SN_mask.nii等のmask画像は、どのように準備されたのでしょうか。

    • ご質問ありがとうございます。
      こちらは、手動で作成したものです。
      具体的には、Neuromelanin-sensitive MRIから作成したVOIでございます。

打田佑人 へ返信するコメントをキャンセル

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください