VBMの結果を用いて容積を測定する方法

VBMで得られる画像を用いて、灰白質や白質画像の容積を求めることができます。

事前の準備として、以下のことが必要です。

  • get_totals.m
  • Ged Ridgwayが公開している容積算出のためのスクリプトです。http://www0.cs.ucl.ac.uk/staff/g.ridgway/vbm/get_totals.mここから入手できます(右クリックしてリンク先を保存としてください)。これをSPMのディレクトリに保存します。

  • WFU PickAtlas
  • これは、局所容積を求めたい時に便利です。マスク画像を簡単に作成することができます。http://fmri.wfubmc.edu/software/PickAtlasここから入手できます。今回はこのセットアップ方法は説明しませんのであしからず。

画像としては、以下のものが必要となります。

  • SPM8のNew Segmentを使っている時
  • modulationをかけ、smoothを[0 0 0]としたもの。出力ファイルは、灰白質ならば、smwc1xxx.niiのような形をとるはずです。New Segmentでは、smoothingをかけないという選択肢はないので、[0 0 0]とします。今までいろいろ試してみましたが、smoothingをかけると信号値が若干変化しますので、smoothing前のデータを用いるのがよいと思います。

  • SPM12のNew Segmentを使っている時
  • modulationをかけ、smoothを[0 0 0]としたもの。出力ファイルは、灰白質ならば、mwc1xxx.niiのような形をとるはずです。SPM8との違いは、smoothingを[0 0 0]とすると、sがつかないようになったようです。(猪狩先生、情報をどうもありがとうございます)

  • VBM8を使っている時
  • Modulationを”affine + non-linear (SPM8 default)”とします。non-linear onlyですと、線形変換の結果は考慮されませんので、頭蓋容積を補正済みのデータになってしまい、生値を得ることができないので注意が必要です。出力ファイルは、灰白質ならば、mwrp1xxx.niiとなります。

それでは、はじめましょう。

  1. 基本編
  2. まずは、全灰白質容積を算出しましょう。

    Matlabのコマンドウィンドウから、

    get_totals
     
    

    とタイプします。そうすると、画像を選択するダイアログが出ますので、灰白質容積を求めたい画像を選択します。(複数選択できます。)

    すると、Matlabのコマンドウィンドウに、

    ans =
      739.8652
    

    というように出力されます。これが求めたい容積です。複数画像を選択した場合、ファイルの選択順に出力されます。

    これは簡単ですね。get_totalsとコマンドを打てばいいのですから。

    それでは、次にいきましょう。

  3. 応用編
  4. get_totalsでは、マスク画像を指定することにより、局所の容積を算出することができます。
    ここでは、左半球の灰白質容積を求めたいとします。

    Matlabのコマンドウィンドウで、

    help get_totals
     
    

    とタイプしてみてください。そうすると、次のようなメッセージが出てきます。

      get_totals – Returns image totals (sum over all voxels), in ml
    t = get_totals
    [t files] = get_totals(files, thr, msk)
    GUI file-selection is used if files not specified as argument (or empty).

    ここにあるget_totals(files, thr, msk)がキモでして、get_totalsの後に閾値やマスク画像を指定できます。これを手で入力するのは面倒くさいのですが、[]と指定して、「空ですよ」と伝えてあげるとファイルの選択画像が出現します。なので、これを使いましょう。

    それでは、具体的に進めていきます。

    • 作業ディレクトリの準備
    • SPMで仕事をするときには、作業ディレクトリ(Working directory)を決めておいた方が便利です。Matlabのコマンドウィンドウなり、SPMのUtil->CDで、そのディレクトリにうつっておいて後の仕事をします。

    • マスク画像の準備
    • WFU PickAtlasでマスク画像を作成します。SPM8のToolboxからWFU PickAtlasを起動し、Human Atlasを選択すると、下図のような画面が起動します。

      今は、左半球のマスクを作りたいと考えています。そこで、PickAtlasの左側にあるメニューから、TD Hemispheresを選択し、Left Brainstem, Left Cerebellum, Left Cereberumをそれぞれダブルクリックして、右のパネル(Working Region1)に移します。「大脳の情報だけわかればいいから」という人はLeft Cereberumだけでもいいかもしれません。今は、複数の領域からマスクを作れることを示すためにあえて左を全部選びました。

      そうしましたら、画面中央下あたりにある、”SAVE MASK”をクリックします。そうすると保存するための画面が出ますので、作業ディレクトリの中に適当に名前をつけて保存してください。ここでは、lt_hemisphere.niiという名前にします。そうすると、マスク画像が作成されます。

      試しに、SPMのDisplayからlt_hemisphere.niiを表示してみましょう。下図のようになるはずです。ここで、Voxel Sizeが2x2x2となっていることに注意してください。

    • マスク画像のボクセルサイズの変更
    • 先ほど、Displayの結果で見たように、PickAtlasで作成されるマスク画像はボクセルサイズが2x2x2となっています。しかし、DARTELの出力結果のボクセルサイズは標準では、1.5×1.5×1.5となっています。これでは画像の次元が異なってしまうため、画像の掛け算を行うことができません。したがって、マスク画像のボクセルサイズを変更することが必要となります。このために、SPMの”Coregister (Reslice)”を用います。

      SPMの左上のウィンドウから、”Coregister (Reslice)”を選択します。

      coregister_reslice

      そうすると、下図のようなウィンドウが出現しますので、

      Image Defining Spaceに、灰白質画像を指定します。
      Images to Resliceに、マスク画像を指定します。
      InterpolationはNearest neighbourにします。そうすることで、マスクがバイナリ画像(二値画像)のままとなります。

      その他の設定はデフォルトのままで結構です。

      reslice_settings

      そうすると、計算が始まり、新しくファイルの先頭にrが付加されたファイルが生成されます。今の場合ですと、rlt_hemisphere.niiという画像ができます。
      これをSPMのDisplayで表示してみます。そうすうと、Vox Sizeが-1.5 x 1.5 x 1.5と変わっていることがわかるかと思います。

      ここまで来ればあと一息です。

    • get_totalsで左半球の灰白質容積算出
    • Matlabのコマンドウィンドウで、次のようにタイプします。

      get_totals([],[],[])
       
      

      ここで、[]はMatlabではそこが空ということを意味します。今は、画像ファイルも閾値もマスク画像も空ですよという意味です。そうすると、最初に下図のように画像ファイルを選択するダイアログが表示されます。

      そうすると、次にマスク画像を選択する画面が出てきます。ここでは、先程準備したrlt_hemisphere.niiを選択します。

      なお、閾値は空ですと、0に設定されます。もし、信号値0.1以上を示す領域での容積を求めたいならば、ここで[]の代わりに、0.1と入力すれば大丈夫です。

      そうすると、Matlab上に

      ans =
        350.6627
      

      のような表示が出てきます。先ほどの全灰白質容積と比較すると約半分になっていることがわかりますね。

このようにしてVBMで得られた画像から容積を求めることができます。

Print Friendly, PDF & Email

11 thoughts on “VBMの結果を用いて容積を測定する方法

  1. お忙しいところ、丁寧にご教授頂きまして、ありがとうございます。
    また、お返事が大変遅くなり大変失礼致しました。

    扁桃体の容積を測定しなくてはならず、大変困っていたところでした。
    本当にありがとうございました。

  2. 包括脳チュートリアルでは、いつも大変貴重な情報をありがとうございます。

    New Segmentの部分について質問させて頂きたく存じます。
    New segmentでsmoothing sizeを聞いてくる欄が見当たらないのですが・・。
    またNew segmentではき出される画像はsmwc1xxx.niiではなくrc1xxx.niiです。
    通常のsegmentではsmwc1xxx.niiが出てきます。
    (SPM8でアップデートは最新です。)

    ご多忙のこととは存じますが、何卒よろしくお願い致します。

    • ご指摘ありがとうございました。
      私の言葉足らずでした。

      > New segmentでsmoothing sizeを聞いてくる欄が見当たらないのですが・・。
      > またNew segmentではき出される画像はsmwc1xxx.niiではなくrc1xxx.niiです。

      New Segmentの後、DARTELを使ってNormalize to MNI spaceをする時のファイル名ですね。
      New Segmentの時は、
      Segmentationで、Tissue -> Native -> DARTEL imported
      これで、rc1xxx.niiが作成されます。
      その後、DARTELを走らせ、
      Normalize to MNIで、Preserve Amountとすると、smwc1xxx.niiとなります。

      その情報を補足させていただきます。

      ご指摘ありがとうございました。

  3. いつも非常にためになる情報をいただき大変ありがとうございます。
    この記事で教えていただいたget_totals.mでマスクを指定して測定した結果と、spm_mask.mでマスクをあらかじめした画像をget_totalsで測定した結果が少し異なります。また、左右反対になっているようです。
    VBMの結果からは左>右になりそうな領域の結果が、前者では左右となるため、後者の方が正しいのではないかと思うのですが、少し不安になりコメントをさせていただきました。
    VBM8で分画化したm0wrp1*.niiやmwrp1*.niiをWFU PickAtlasで作成したROIでマスクしました。

    SPMのメーリングリストでget_totalsを検索しても同様の問題点は議論されていませんでしたが、よく知られた問題なのでしょうか?

    • nktk様

      とても重要なご指摘をありがとうございます。
      検討しなければいけないことと思いますが、一応、確認ですが、画像はマスク画像も含めてすべてNIfTI形式ですよね?
      NIfTIでいじるときに、左右がひっくり返ることはちょっと想像しがたいのですが、検証が必要かと思います。
      少し時間をいただいて、私の方でも検証させていただきたいと思います。
      よろしくお願いします。

      • 早速のお返事ありがとうございます。
        以下、私の環境を少し補足させていただきます。
        ファイル形式はすべてNIfTI形式です。
        MRIcroやSPMでの表示は、ROI画像の左右は間違っていませんでした。
        get_totalsは
        http://www0.cs.ucl.ac.uk/staff/g.ridgway/vbm/get_totals.m
        のものをそのまま使用しています。

        最初のコメントの中で脱字がありましたので、冗長となりますが念のため訂正させていただきます。
        誤:VBMの結果からは左>右になりそうな領域の結果が、前者では左右となるため、後者の方が正しいのではないかと思うのですが、少し不安になりコメントをさせていただきました。
        正:VBMの結果からは左が右より大きくなりそうな領域の結果が、前者では左が右より小さくなるため、後者の方が正しいのではないかと思うのですが、少し不安になりコメントをさせていただきました。

        お忙しいところ、お手間を増やして本当に申し訳ありません。どうぞよろしくお願いします。

        • nktk様

          どうもありがとうございます。
          今、状況を再現できました。
          確かにマスクがひっくり返ってしまうような問題が起こるようですね。
          Ged Ridgwayに質問してみます。
          貴重なご指摘をありがとうございました。

          • nktk様

            Ged Ridgwayから返事をいただいた結果、画像の座標系の問題であることがわかりました。
            解決策が見つかりましたので、ブログの内容を更新させていただきました。
            これで試していただけたらと思います。よろしくお願いします。

コメントを残す

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