3D Slicerのデータ構造(MRML)

この内容は, 3D SlicerのDeveloper Guideの MRML Overview (https://slicer.readthedocs.io/en/latest/developer_guide/mrml_overview.html)の内容を主観を交えて解説しています. Developer向けガイドですので, 内部構造的な表現だったり, すこし3D Slicerでの表示と異なる用語になっていたりしますが, ご了承ください.

3D Slicerで画像などを開くと単に画像データを読み込んだというだけでなく, その他諸々のデータを一括して管理するSceneに読み込んだとして扱われます. 読み込んだデータもしくは処理により出来たデータは, Sceneの中にいくつかの種類に別れたNodeに適宜分別され管理されます.治療のデータ(DICOM-RTなど)は治療計画時の輪郭データであったり, 線量評価点など各種Nodeに分かれて読み込まれます. そのため, 何か(プログラミングなど)しようとした際にそれらNodeの理解が必要になります.

Sceneのデータ構造はMedical Reality Modeling Language (MRML) と言われ, Visualization Toolkitや Insight Toolkitなどで開発されたライブラリだそうです. そのため, Sceneの各NodeにつけられるIDなどには接頭語としてvtkMRML などが付きます(SlicerのDataモジュールで確認可能).

MRMLに含まれるNodeには大きく7種類のNodeがあります. 順に説明します.

  • DataNodes
  • DisplayNodes
  • StorageNodes
  • ViewNodes
  • PlotNodes
  • SubjectHierarchyNode
  • SequenceNode

DataNodes

DataNodesはもっとっも目にするNodeとなると思います. 様々な画像データを含むデータを保存,管理します. DataNodesの代表的な派生Nodeとして下のものがあります.

  • Volume (vtkMRMLVolumeおよび派生クラス)
    • 一般的な画像データ, つまり, Volumeデータなどマトリックス状にスカラー値をもつボクセルによって作られるデータを保存, 管理します. CTやMRI, 一般撮影画像などの2D画像はこのクラスで管理されます. segmentationされた領域のデータも, ボリュームタイプの3Dデータ(対象領域の画素にのみ0以外の値になり, その他は0となるボリュームデータ)であればこのタイプになります. そのほか, スカラー値を持つボクセルと言いましたが, ボクセルに複数の数値データをもつ多次元データやTensorなども含まれたりします. それらには, RGBデータをもつデータ, Deformation Vector Fieldなども含まれます. よく似た4次元データとして時系列データがありますが, 時系列のデータは別途SequenceNodeがあるのでそちらで扱われます.
  • Model (vtkMRMLModelNode)
    • 体表面を形どったサーフフェイスメッシュや, 内部もメッシュとして分割されたボリュームメッシュを保存・管理します. 治療の輪郭は次のSegmentationとして扱われます.
  • Segmentation (vtkMRMLSegmentationNode)
    • 名前の通りSegmentationされたデータを扱います. 治療の輪郭やラベリングされた領域などがこのNodeになります. データ形式は複数の形式で保管することができ, メッシュやBinaryLabelmapとしても保管されたりします. プログラムコード的にはクラス内部にVolumeやModelのクラス変数を持っているのではと思います.
  • Markups (vtkMRMLMarkupsNodeとその派生クラス)
    • 幾何学的な位置や直線, 曲線などを管理します. Fiducial markerや計測のための位置や領域を表す座標値, アノテーションを付す位置の情報などとなります.
  • Transform(vtkMRMLTransformNode)
    • 画像を変形させるための情報を保管します. 線形, 非線形問わず管理されます. 一応, Linear, B-spline, grid用の3種類の派生クラスがあります.
  • Text(vtkMRMLTextNode)
    • 設定ファイルや説明テキストなどのテキスト情報
  • Table(vtkMRMLTableNode)
    • 表敬式のデータを管理. 計算結果や計測結果などを表示するためのデータ.

DisplayNodes (vtkMRMLDisplayNode)

DIsplayNodeは表示用設定を保存します. 表示のためのデータ自体はないので, DataNodeと連携してデータを表示します.

表示設定ですので, 一つのデータを様々な設定で表示することもありえます. その際は複数のDisplayNodeをもつことになります.

逆にDataNodeは表示設定がないため, とりあえず表示もDisplayNodeに頼ります. そのため, DataNodeが1つ作られると, 必ずデフォルトでDisplayNodeが作られます.

このNodeは1種類ですので, vtkMRMLDisplayNodeとすでにNode IDがついています.

StorageNodes(vtkMRMLStorageNode)

ファイルの保存のしかたを管理するクラス. 保存する情報としては, ファイル名やファイル形式, 座標系など.

ViewNode(vtkMRMLAbstractViewNode)

画像表示のための周辺の設定を管理する. Abstractとついているようにプログラミングでは派生クラスを使うのが通常になる. 派生クラスにはしたの種類がある

  • vtkMRMLCameraNode
    • 3D viewのカメラ位置・向きなどの設定を管理する
  • vtkMRMLClipModelNode
    • ModelNodeをクリップするスライスの設定を管理する
  • vtkMRMLCrosshairNode
    • カーソル位置を示すクロスヘアラインの設定を管理する
  • vtkMRMLLayoutNode
    • 画面レイアウト(分割方法やどのパネルに何を表示するかなど)を管理する
  • vtkMRMLInteractionNode
    • マウス操作などの設定を管理する
  • vtkMRMLSelectionNode
    • Scene全体の情報を管理する. 全体で使用される単位や現在のSceneの状態など.

PlotNodes

TableNodeのデータをどのようにグラフで表示するかを設定する. 以下の3種類がある.

  • PlotSeriesNode
  • PlotViewNode
  • PlotChartNode

SubjectHierarchyNode(vtkMRMLSubjectHierarchyNode)

DataNodeの各ノードを階層形式で管理する. おそらくData moduleを表示した際に表示されるデータのツリー構造を示すためのnode. Sceneに一つのみ作られる.

SequenceNode

DataNodeのタイムシーケンスのリストや多次元データをリストとして管理する.

SequenceBrowserNodeがどのDataNodeを今表示するか(しているか)を管理する.