Main Content

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

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

この例では、イメージの領域分割アプリでローカル グラフ カット (別名 "grabcut") を使用して、イメージをセグメント化する方法を説明します。グラフ カットと同様、ローカル グラフ カットは、イメージを前景要素と背景要素にセグメント化するために使用可能な半自動セグメンテーション手法です。ローカル グラフ カットでは、セグメント化するオブジェクトを取り囲む関心領域を最初に描きます。イメージの領域分割アプリは、ROI の内容に基づいて自動的にイメージをセグメント化します。

グラフ カットの場合と同様に、ROI 内部のイメージで "スクリブル" と呼ばれる線を描いて、自動セグメンテーションを調整します。線を描画し、前景にするものと背景にするものを識別します。ローカル グラフ カット オプションは、ROI の境界内にある要素だけをセグメント化します。

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

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

イメージをワークスペースに読み取ります。

car = imread('car2.jpg');

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

SegmentImageUsingLocalGraphCutGrabcutInImageSegmenterExample_02.png

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

SegmentImageUsingLocalGraphCutGrabcutInImageSegmenterExample_03.png

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

imageSegmenter(b);

ローカル グラフ カット (grabcut) を使用したイメージのセグメント化

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

SegmentImageUsingLocalGraphCutGrabcutInImageSegmenterExample_04.png

イメージの領域分割アプリで、ローカル グラフ カット セグメンテーション用の新しいタブが開きます。ローカル グラフ カット セグメンテーションの最初の手順として、セグメント化するイメージのオブジェクトの周りに ROI を描きます。イメージの領域分割アプリの [ローカル グラフ カット] タブを開くと、[ROI の描画] ボタンがあらかじめ選択されます。イメージの上にカーソルを移動して、セグメント化するオブジェクト全体を囲む ROI を描きます。良好な初期セグメンテーションを得るには、必ずオブジェクトを完全に囲むように ROI を描き、オブジェクトと ROI 境界の間に少し空間を残します。セグメント化するオブジェクトが完全に ROI の内部にあることを確認します。

四角形または多角形の ROI を描くように選択できます。[ROI のスタイル] メニューを使用して選択します。四角形を描くには、カーソルをイメージの上に置いて、クリック アンド ドラッグします。多角形を描くには、マウスをクリック アンド ドラッグして、クリックごとに頂点を作成します。多角形の描画を完了するには、ダブルクリックします。描いた形に満足できない場合、いつでも編集できます。ROI を右クリックし、[削除] を選択します。

ROI の作成が終了すると、イメージの領域分割アプリにより ROI のオブジェクトが自動的にセグメント化されます。青いシェーディングはセグメント化された領域を示しています。

SegmentImageUsingLocalGraphCutGrabcutInImageSegmenterExample_05.png

自動セグメンテーションを調整するには、線 (スクリブル) を描いて自動セグメンテーションで前景にならなかったすべての部分にマークを付けます。ROI が描画されると、イメージの領域分割により自動的に [前景をマーク] ボタンが選択されます。

SegmentImageUsingLocalGraphCutGrabcutInImageSegmenterExample_06.png

前景に含まれていない領域をセグメンテーションから削除するには、それらの領域に背景としてマークを付けます。[背景をマーク] オプションを選択し、背景とすべきセグメンテーション部分を識別するために ROI 内部に線を描きます。

SegmentImageUsingLocalGraphCutGrabcutInImageSegmenterExample_07.png

セグメンテーションが満足のいく状態になったら、[適用] をクリックします。イメージの領域分割アプリにより、セグメント化されたイメージ部分の色が黄色に変わります。

SegmentImageUsingLocalGraphCutGrabcutInImageSegmenterExample_08.png

バイナリ イメージの表示とマスクの保存

マスク イメージを表示するには、[バイナリの表示] をクリックします。メインの [セグメンテーション] タブで、バイナリ マスク イメージを表示することもできます。メインのイメージの領域分割アプリに戻るには、[ローカルグラフカットを閉じる] をクリックします。

SegmentImageUsingLocalGraphCutGrabcutInImageSegmenterExample_09.png

イメージのセグメント化が完了したら、[エクスポート] オプションを使用して、バイナリ マスクを保存できます。また、セグメンテーションのために使用したコードを取得することもできます。

参考

|

関連するトピック