【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)

1
2
$ fslstats lt_SN_mask.nii -V
529 293.009949

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

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

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

1
2
$ 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
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
.
├── 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として出力する。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/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

【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でございます。

コメントを残す

This site uses Akismet to reduce spam. Learn how your comment data is processed.