Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ボリュームの領域分割を使用したバイナリ マスクの作成

この例では、ボリュームの領域分割アプリでボリュームをセグメント化する方法を説明します。ボリュームの領域分割アプリは、ボリュームを調査しボリューム内のオブジェクトをセグメント化するためのさまざまな方法を提供します。たとえば、ボリュームをスライス単位で表示したり、3 次元表現として表示したりできます。オブジェクトをセグメント化するには、ROI 描画ツールまたはペイント ブラシ ツールを使用して関心領域 (ROI) を描画します。この例では、脳の小さい領域を分離するバイナリ マスクを作成します。

ボリューム データのワークスペースへの読み込み

ボリュームをワークスペースに読み込みます。この例では、MAT ファイル vol_001.mat に格納されている、脳の MRI イメージのスタックを使用します。MRI データは、BraTS データセット [1] のサブセットに変更を加えたものです。

load(fullfile(toolboxdir('images'),'imdata',...
    'BrainMRILabeled','images','vol_001.mat'));

このコマンドは、vol という名前の 240×240×155 の大きさのボリュームをワークスペースに読み込みます。

whos vol
  Name        Size                    Bytes  Class     Attributes

  vol       240x240x155            17856000  uint16              

ボリュームの領域分割アプリを開く

ボリュームの領域分割アプリを開きます。MATLAB® ツールストリップの [アプリ] タブをクリックします。[イメージ処理とコンピューター ビジョン] セクションで [ボリュームの領域分割] をクリックします。

CreateBinaryMaskUsingVolumeSegmenterExample_01.png

ボリュームの領域分割へのボリュームの読み込み

ボリュームの領域分割アプリにボリュームを読み込むには、アプリのツールストリップで [ボリュームを開く] をクリックします。この例の場合、[ワークスペースから開く] を選択します。[ボリュームをインポート] ダイアログ ボックスで、ワークスペースに読み込んだボリューム vol を選択し、[OK] をクリックします (volumeSegmenter コマンド volumeSegmenter(vol) を使用して、アプリを開くときにボリュームを指定することもできます)。

"ボリュームの領域分割" アプリは、[3-D 表示] ペインにボリュームの 3 次元表現を表示し、[スライス] ペインにデータ セットの個々のスライスを表示します。

CreateBinaryMaskUsingVolumeSegmenterExample_02.png

既定の設定では、[スライス] ペインにはデータの最初のスライスが表示されます。イメージの上部には表示されたスライスの番号 (1/155 など) が表示されます。このデータセットの場合、最初の数スライスには脳のイメージが含まれていません。

また、既定の名前 Label1 を使用して、[ラベル] ペインにセグメンテーションのラベルが自動的に作成されます。[ラベル] ペインでは複数のラベルを定義できます。ただし、バイナリ マスクを作成する場合、作成するラベルは 1 つのみとしなければなりません。

ラベルの名前を変更するには、ラベル名をダブルクリックします。ラベルに関連付けられた色を変更するには、[ラベル] ペインに表示されたカラーの正方形をダブルクリックします。[ラベルを開く] ボタンを使用すると、オプションで既存のラベル セットをアプリに読み込むことができます。

ボリュームの調査

セグメント化する内容を指定するには、[3-D 表示] ペインおよび [スライス] ペインを使用してボリュームを調査します。

[3-D 表示] ペインでは、マウスを使用してボリュームを回転すると、あらゆる角度からデータを調べることができます。また、アプリのツールストリップの [3-D 表示] タブでは、ボリュームの表示をカスタマイズできます。たとえば、ボクセルの相対サイズを記述するメタデータがある場合、アプリのツールストリップにある [3-D 表示] タブの [空間参照] 部分でそのメタデータを指定できます。データの表示を改善するには、次の図に示すように、3 次元表示で使用する背景色の変更、表示のしきい値と不透明度の変更、表示への座標軸の方向の追加などを行います。脳の MRI データを使用すると、セグメント化する側頭葉の腫瘍を確認できます。

CreateBinaryMaskUsingVolumeSegmenterExample_03.png

また、[スライス] ペインでボリュームの各スライスを表示することもできます。スライス間を移動するには、ペインの下部にあるスライダーを使用します。腫瘍はスライス 35 からスライス 88 で確認できます。既定の設定では、[スライス] ペインに X-Y 軸に沿ってボリュームが表示されますが、これは [領域分割] タブのツールストリップの [向き] セクションにあるボタンを使用して変更することができます。また、[スライス] ペインでは、描画ツールを使用してマスクを定義します。

CreateBinaryMaskUsingVolumeSegmenterExample_04.png

描画ツールを使用したマスクの定義

セグメント化するオブジェクトを識別したら、アプリのツールストリップにある [描画] タブのツールを使用して、領域を定義できます。次の ROI ツールから、使用する描画ツールを選択します: [フリーハンド][補助付きフリーハンド][多角形][ペイント ブラシ]

[スライス] ペインで、オブジェクトが最初に現れるスライス (スライス 35) にナビゲートし、その周りに輪郭を描きます。この例の場合、[多角形] 描画ツールを使用します。クリックして頂点を 1 つ作成し、カーソルを動かして再度クリックし、2 番目の頂点を作成して両者を直線で接続します。この手順を継続して接続線を作成します。描画の終了後に頂点を追加するには、ROI のエッジをダブルクリックします。

CreateBinaryMaskUsingVolumeSegmenterExample_05.png

内挿を使用したオブジェクト ROI 作成の高速化

ボリュームでスライス間を移動して、オブジェクトが現れる各スライスで ROI を描画することかできます。ただし、ボリュームの領域分割アプリでは、スライスをまたがってオブジェクトをセグメント化するのに役立ついくつかの自動内挿ツールを提供しています。

内挿を使用するには、まず 2 つのスライスに手動で領域を定義しなければなりません。オブジェクトが現れる最初のスライスには既に領域を定義してあります (スライス 35)。同じ手順を使用して、オブジェクトが現れる最後のスライスに領域を定義します (スライス 88)。スライダーの上に、ROI のあるスライスを示す、ラベルと関連付けられた色のバーが 2 つ配置されます。

CreateBinaryMaskUsingVolumeSegmenterExample_06.png

2 つのスライスにオブジェクトを定義した状態で、[自動内挿] をクリックします。間にあるすべてのスライスに ROI が自動的に定義されます。ROI をもつすべてのスライスが青色のバーで示され、スライス 35 からスライス 88 までが連続したバーのように見えています。

CreateBinaryMaskUsingVolumeSegmenterExample_07.png

あるいは、2 つのスライスに ROI を定義した後、[手動内挿] をクリックすることもできます。このオプションを使用すると、[手動内挿] ダイアログ ボックスが開きます。内挿の元となる 2 つの領域 (領域 1 と領域 2) を選択します。最初の領域を選択するには、ダイアログ ボックスの下部にあるスライダーを使用して、ROI のある最初のスライス (スライス 35) にナビゲートしてから、表示された ROI の内部をクリックします。2 番目の領域を選択するには、領域 2 をクリックしてスライス 88 にナビゲートし、表示された ROI の内部をクリックします。2 つの領域を選択後、[実行] をクリックし、間にあるすべてのスライスで ROI を内挿します。

CreateBinaryMaskUsingVolumeSegmenterExample_08.png

内挿した ROI の調整

内挿の使用後、個々のスライスをチェックして、満足できる ROI が作成されているかを確認します。スライス 71 では、セグメント化するオブジェクト全体が ROI で塗りつぶされていないことに注目してください。[ペイント ブラシ] ツールを使用することで、ROI を手動で調整できます。あるいは、[自動化] タブのツールのいずれかを使用することもできます。たとえば、[動的輪郭] を使用して、腫瘍の全体が塗りつぶされていないスライスで ROI を大きくすることができます。また、[アルゴリズムの追加] を使用して、ROI 上で動作する独自のアルゴリズムを指定することもできます。

CreateBinaryMaskUsingVolumeSegmenterExample_09.png

カスタム処理の実行

ROI 上で動作する独自のアルゴリズムを追加できます。[自動化] タブで [アルゴリズムの追加] をクリックします。独自の処理を 2 次元スライスごとに動作させるか (スライスベース)、3 次元ボリューム全体で動作させるか (ボリュームベース) を選択します。

CreateBinaryMaskUsingVolumeSegmenterExample_10.png

この例では、[スライスベース] の下で [新規] オプションを選択して [関数テンプレート] をクリックし、2 次元スライスごとに動作する新しい関数を作成します。MATLAB エディターでテンプレートが開きます。テンプレートのサンプル コードを、使用するコードに置き換えます。使用する関数では、個別のイメージとしての各スライスおよびマスクという 2 つの引数を受け入れなければなりません。また、マスク イメージを返さなければなりません。

テンプレートの編集が完了したらファイルを保存します。"ボリュームの領域分割" アプリにより、[自動化] タブ ツールストリップに関数用のボタンが自動的に作成されます。1 つのスライス上で関数をテストするには、[実行] をクリックします。既定の設定では、関数は現在のスライスにのみ適用されます。

CreateBinaryMaskUsingVolumeSegmenterExample_11.png

1 つのスライスで関数をテストした後は、すべてのスライスまたはスライスのサブセットで関数を実行できます。関数は、現在のスライスから最後 (最も番号の大きいスライス) までか、現在のスライスから最初 (スライス 1) までに対して実行できます。また、開始スライスと終了スライスを指定してスライスの範囲を指定することもできます。

CreateBinaryMaskUsingVolumeSegmenterExample_12.png

方向オプションのいずれかを選択した場合は、表示中のスライス番号が更新されます。この表示を使用すると、処理の進捗を表示することができます。

CreateBinaryMaskUsingVolumeSegmenterExample_13.png

バイナリ マスク ボリュームの作成

バイナリ マスク ボリュームを作成するには、[領域分割] タブの [ラベルの保存] をクリックします。マスクは MAT ファイルやワークスペース変数に保存できます。この例では、[ワークスペース変数として保存] をクリックします。[ワークスペースに保存] ダイアログ ボックスで、セグメンテーションを logical マスクとして保存するか categorical マスクとして保存するかを指定します。logical を選択し (ラベルが 1 つしかない場合の既定)、変数に名前 my_mask_volume を指定して [OK] をクリックします。元のボリュームと同じ次元で logical クラスの 3 次元ボリュームが作成されます。

マスクを表示するには、関数 volshow を使用します (volshow(my_mask_volume);)。

CreateBinaryMaskUsingVolumeSegmenterExample_14.png

参考文献

[1] Medical Segmentation Decathlon. "Brain Tumours." Tasks. Accessed May 10, 2018. http://medicaldecathlon.com/.

BraTS データセットは、CC-BY-SA 4.0 のライセンスに基づき Medical Segmentation Decathlon によって提供されます。一切の保証および表明を行いません。詳細については、ライセンスを参照してください。MathWorks® は、この例で使用されているデータのサブセットに変更を加えています。この例では、元のデータセットから 1 スキャンの MRI データを MAT ファイルに保存して使用しています。

参考

関連するトピック