ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

イメージの領域分割アプリを使用したイメージのセグメンテーション

この例では、イメージの領域分割アプリを使用してイメージをセグメント化する方法を説明します。イメージの領域分割アプリには、各種のしきい値処理オプション、塗りつぶしアルゴリズム、グラフ カット アルゴリズム、動的輪郭アルゴリズムなど、セグメンテーション メソッドがいくつか用意されています。イメージをセグメント化するアプリを使用すると、目的のセグメンテーションが得られるまで、これらのオプションを個別に試すか、組み合わせて使用することができます。次の例は、アプリでセグメンテーションが得られるまでの 1 つの過程を示しています。

イメージの領域分割アプリを開く

この例の部分では、イメージの領域分割アプリを開き、イメージを読み込む方法を説明します。

イメージを MATLAB® ワークスペースに読み取ります。この例では、関数 dicomread を使用して膝関節の CT スキャン データをインポートします。イメージ内の 3 つの骨の領域を周囲の軟組織から分割します。

I = dicomread('knee1');
imshow(I,[])

イメージの領域分割アプリを開きます。MATLAB ツールストリップで [アプリ] タブを開き、[画像処理とコンピューター ビジョン] の下にある [イメージの領域分割] をクリックします。イメージの領域分割アプリはコマンド ラインから開くこともできます。

imageSegmenter

イメージを領域分割アプリに読み込みます。[イメージの読み込み] をクリックし、イメージを含むファイルの名前またはワークスペース変数の名前のいずれを指定するかを選択します。イメージの領域分割アプリは、imread で読み取り可能なファイルであれば開くことができます。既にイメージをワークスペースに読み込んでいるため、[ワークスペースからのイメージの読み込み] オプションを選択します。[ワークスペースからインポート] ダイアログ ボックスで、作成した変数を選択します。

データ ブラウザーには、読み込んだイメージが表示されると共にセグメンテーションの結果のサムネイル (マスク イメージ) が表示されます。最初は、開始前であるため、サムネイル全体が黒色です。アプリを使用して複数のセグメンテーションを実行でき、それぞれのセグメンテーションがサムネイルと共にデータ ブラウザーに表示されます。[新規セグメンテーション] をクリックし、新規セグメンテーションを開始します。セグメンテーション作成中の手順の履歴がデータ ブラウザーの [履歴] に表示されることにも注意してください。

イメージのセグメント化

セグメンテーション処理を開始するために、アプリのツールストリップに表示されるオプションのいずれかを選択します。イメージの領域分割アプリには使用可能なセグメンテーション ツールがいくつかあります。セグメンテーションは反復処理で、目的の結果が得られるまでいくつかのオプションを試すことができます。

  • しきい値処理 — 分離する強度値を指定する自動手法です。この手法は、セグメント化するイメージ内の複数のオブジェクトが同程度のピクセル強度値をもっており、背景などイメージ内の他の領域と簡単に区別できる場合に役立ちます。

  • グラフ カット — 前景と背景をセグメント化する半自動手法。このメソッドはシード ポイントにあまり注意する必要がなく、対話形式でセグメンテーションを改良できます。

  • フリーハンド — セグメント化するオブジェクトの輪郭となる領域を手動で描画します。マウスを使用して、フリーハンド領域や多角形領域を描画できます。

  • 塗りつぶし — 開始点を指定する自動手法で、同じような強度値の領域をセグメント化するメソッドです。

  • 動的輪郭 — 反復型メソッドで、イメージ内にマークを付け、オブジェクトをセグメント化するイメージ内の領域を動的輪郭により拡張 (または縮小) します。初期シード マスクの精度が最終結果に影響する可能性があります。

しきい値手法を使用したセグメント化

セグメンテーションの最初の試みとして、しきい値処理を試します。

[セグメンテーション ツール] の [しきい値] をクリックします。[しきい値] タブに複数のしきい値処理オプションが表示されます。スライダーを使用して値を指定する手動しきい値処理を含む、様々なしきい値処理メソッドを選択できます。ただし、この膝のイメージでは前景と背景のピクセル強度の違いが明確でなく、骨のオブジェクトのほかにも多数のオブジェクトが含まれています。しきい値処理は、このイメージにとって最適な選択であるとは思えません。

[しきい値を閉じる] をクリックして、結果を受け入れずにメインのアプリ ウィンドウに戻り、他のオプションのいずれかを試します (しきい値処理されたマスク イメージを保持する場合は、[適用] をクリックします)。

グラフ カット手法を使用したセグメント化

イメージの領域分割でサポートされる別の手法にはグラフ カット セグメンテーションがあります。グラフ カットは、イメージ上にマークを付けて前景とする領域や背景とする領域を示す半自動メソッドです。マーク ("スクリブル" とも呼ばれる) は領域内の単純な線となります。

[グラフ カット] オプションをクリックします。イメージの領域分割の [グラフ カット] タブが開きます。

骨の部位に前景領域のマークを付けます。[グラフ カット] タブを開くと、[前景をマーク] があらかじめ選択されています。マウスを使用して、セグメント化するイメージの 3 つの領域に線を描画します。

イメージの背景部位にマークを付けます。[背景をマーク] をクリックし、背景とするイメージの部位の上に線を描画します。最初の線が描画されると、イメージの領域分割は即座にセグメンテーションを実行します。青い部位はセグメント化された領域を示しています。グラフ カット メソッドでは、背景とする部位のマーク付け作業を続けることでセグメンテーションを改良できます。このメソッドを使用すると、1 回目としては妥当なセグメンテーションが得られます。このイメージには前景と背景の強度値の差がほとんどないため、良好なセグメンテーションが得られません。このセグメンテーションは、動的輪郭手法を使用したセグメント化のフリーハンド セグメンテーション後にこの例で行う、動的輪郭メソッドを使用することで完了できます。

フリーハンドの領域描画によるセグメント化

別の手法として、マスク イメージに含める領域を単純に描画してみることもできます。イメージの領域分割には、四角形、楕円、多角形の描画やフリーハンドによる形状の描画に使用できるツールが用意されています。

[セグメンテーション ツール] エリアの [フリーハンドの描画] オプションをクリックします。カーソルが、十字形に変わります。イメージ上の任意の場所に移動し、マウス ボタンを押して、セグメント化するオブジェクトの輪郭となる形状をイメージ上に描画します。次の図の例は、フリーハンドのオプションを使用して領域を描画したものです。マスク イメージができるまでの進行状況を履歴ウィンドウで確認できます。

マスク イメージを保存します。セグメント化するすべての領域を描画したら、オブジェクトの大まかなセグメンテーションを作成したことになります。このマスク イメージを保存するには、[エクスポート] をクリックします。

動的輪郭手法を使用したセグメント化

イメージの領域分割でサポートされる別の手法には動的輪郭があります。動的輪郭では、セグメント化するオブジェクトを識別するシード領域を描画します。その後、イメージの領域分割は反復プロセスでオブジェクトの境界に向かって領域を拡張します。

[動的輪郭] オプションをクリックします。イメージの領域分割の [動的輪郭] タブが開きます。

セグメント化する領域内にシード形状を描画します。これらの領域の描画にはフリーハンド ツールを使用できます。

[実行] をクリックし、動的輪郭を使用してオブジェクトが境界まで塗りつぶされるように領域を拡張します。最初は、既定の動的輪郭メソッド (領域ベース) と既定の反復回数 (100) を使用します。イメージの領域分割の右下隅に処理の進行状況が表示されます。結果を見ると、この手法は 3 つのオブジェクトのうち 2 つでうまく行きましたが、1 つのオブジェクトではセグメンテーションが背景にはみ出していることがわかります。この領域ではオブジェクトの境界がはっきりしていません。

今度は反復回数を変更して動的輪郭のセグメンテーションを繰り返します。操作を元に戻すには [適用] をクリックし、現在のセグメンテーションを保存した後、データ ブラウザーのセグメンテーションの履歴にある以前の手順を選択します。これにより、元のフリーハンドの領域と共にイメージが表示されます。反復ボックスで反復回数に 35 を指定して変更し、再度 [実行] をクリックします。セグメンテーションが満足のいく状態になったら、[適用] をクリックします。領域の色が青から黄に変化し、変更が適用されたことを示します。いずれかの領域にあるわずかに不完全な部分を削除する方法については、セグメンテーションの微調整を参照してください。

セグメンテーションの微調整

この例の部分では、イメージのセグメンテーションを微調整する方法を説明します。イメージの領域分割アプリには、穴の塗りつぶしなどの操作に使用できるツールがいくつか用意されています。これを示すため、この例では、動的輪郭手法を使用したセグメント化のセグメンテーションの結果を使用します。

詳細に調べると、マスク領域の 1 つに小さな穴があります。初期化マスクを改善するために、[穴の塗りつぶし] をクリックします。

イメージの領域分割で [穴の塗りつぶし] をクリックすると、領域内の穴が塗りつぶされます。

マスク イメージの保存

目的のセグメンテーションが得られたら、マスク イメージを作成できます。

[エクスポート] をクリックして [イメージのエクスポート] を選択します。[ワークスペースにエクスポート] ダイアログ ボックスで、セグメンテーションのマスク イメージ、セグメンテーション実行後のマスク イメージ、元のイメージをセグメント化したバージョンに名前を割り当てることができます。

アプリがイメージのセグメント化に使用した MATLAB コードを取得するには、[エクスポート] をクリックして [関数の生成] を選択します。MATLAB エディターが開き、イメージのセグメント化に必要なコードを含む関数が表示されます。

この情報は役に立ちましたか?