Main Content

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

イメージの領域分割でのグラフ カットを使用したイメージのセグメント化

この例では、イメージの領域分割アプリのグラフ カット オプションを使用して、イメージをセグメント化する方法を説明します。グラフ カットは、イメージを前景要素と背景要素にセグメント化するために使用可能な半自動セグメンテーション手法です。グラフ カット セグメンテーションでは初期化を正確に行う必要はありません。イメージ上に線 ("スクリブル" と呼ばれる) を描画し、前景にするものと背景にするものを識別します。イメージの領域分割は、スクリブルに基づいて自動的にイメージをセグメント化し、セグメント化されたイメージを表示します。結果に満足がいくまで、イメージ上にスクリブルを更に描いてセグメンテーションを改良できます。

グラフ カット手法はグラフ理論をイメージ処理に適用して高速のセグメンテーションを実現しています。この手法は、各ピクセルを重み付きエッジで接続されるノードとして、イメージのグラフを作成します。ピクセルにつながりがある確率が高いほど、重みが大きくなります。このアルゴリズムは弱いエッジに沿った切り取りによって、イメージ内のオブジェクトのセグメンテーションを行います。イメージの領域分割では、"レイジー スナッピング" と呼ばれる特定のタイプのグラフ カット アルゴリズムが使用されています。グラフ カットに関係した他のセグメンテーション手法については、イメージの領域分割でのローカル グラフ カット (Grabcut) を使用したイメージのセグメント化を参照してください。

イメージの領域分割アプリへのイメージの読み込み

イメージをワークスペースに読み取ります。この例では、サンプル イメージ baby.png をワークスペースに読み取ります。

b = imread('baby.jpg');

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

SegmentImageUsingGraphCutInImageSegmenterExample_02.png

アプリのツールストリップで、[イメージの読み込み] をクリックしてから、[ワークスペースからのイメージの読み込み] を選択します。[ワークスペースからインポート] ダイアログ ボックスで、ワークスペースに読み取ったイメージを選択します。イメージの領域分割アプリに、選択したイメージが表示されます。

SegmentImageUsingGraphCutInImageSegmenterExample_03.png

imageSegmenter コマンドを使用してイメージを指定し、このアプリを開くこともできます。

imageSegmenter(b);

グラフ カットを使用したイメージのセグメント化

イメージの領域分割アプリのツールストリップで、[グラフ カット] を選択します。

SegmentImageUsingGraphCutInImageSegmenterExample_04.png

グラフ カット セグメンテーション用の新しいタブが開きます。グラフ カット セグメンテーションの最初の手順として、前景に含めるイメージの要素にマークを付けます。[グラフ カット] タブが開くと、[前景をマーク] オプションがあらかじめ選択されます。前景としてオブジェクトにマークを付けるには、そのオブジェクト上に線を描画します ("スクリブル" とも呼ばれる)。線を描画する場合、セグメント化するオブジェクト内のさまざまな値をすべて含めるようにします。必要に応じて複数の線を個別に描画できます。線の描画に満足できない場合、いつでも編集できます。[消去] をクリックし、削除する線の一部分にカーソルを移動します。始めからやり直す場合は、[マーキングをクリア] をクリックします。

SegmentImageUsingGraphCutInImageSegmenterExample_05.png

次に、[背景をマーク] をクリックし、スクリブルを描画して、背景とするイメージの要素にマークを付けます。線の描画が終了すると、イメージの領域分割は即座にセグメンテーションを実行します (青色の表示)。

SegmentImageUsingGraphCutInImageSegmenterExample_06.png

セグメンテーションを調整するには、前景や背景の線を描き加え続けます。たとえば、イメージの下部付近には、前景から削除する必要のある領域が複数存在します。これらの問題を解決するには、これらのイメージ部分に背景の線を描き加えます。

SegmentImageUsingGraphCutInImageSegmenterExample_07.png

セグメンテーションで詳しく確認するには、[バイナリの表示] をクリックします。

SegmentImageUsingGraphCutInImageSegmenterExample_08.png

セグメンテーションが満足のいく状態になったら、[グラフ カット] タブのツールストリップで [マスクの作成] をクリックします。アプリで [グラフ カット] タブが閉じ、[セグメンテーション] タブに戻ります。

マスク イメージのワークスペースへの保存

メインの [セグメンテーション] タブに戻ると、[モルフォロジー] や [動的輪郭] などのツールを使用してマスク イメージを調整できます。マスク イメージを保存するには、[エクスポート] をクリックします。また、[エクスポート] オプションを使用して、イメージの領域分割アプリがセグメンテーションの作成に使用したコードを取得することもできます。

SegmentImageUsingGraphCutInImageSegmenterExample_09.png

参考

|

関連するトピック