ドキュメンテーション

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

色のしきい値アプリを使用したイメージのセグメンテーション

この例では、色のしきい値アプリを使用してイメージをセグメント化し、バイナリ マスク イメージを作成する方法を説明します。この例はいくつかの部分から構成されています。まず、色のしきい値アプリでイメージを開く方法を説明します。次に、色の選択オプションを使用して自動的にイメージをセグメント化する方法を説明します。次に、色成分のコントロールを使用する反復型のしきい値処理を説明します。色のしきい値処理によるセグメンテーションはひとつの反復プロセスです。つまり、色選択を使用して初期セグメンテーションを行い、その後色成分のコントロールを使用してそのセグメンテーションをより正確にできます。この例では、最後にセグメンテーションが終了した後に実行できる処理を説明します。たとえば、マスク イメージの作成、元のイメージをセグメント化したバージョンの保存、セグメンテーションに使用した MATLAB® コードの取得などです。

色のしきい値アプリでイメージを開く

この例では、色のしきい値アプリでイメージを開く方法を説明します。このアプリをはじめて開くときにイメージの色成分を表現する色空間を選択しなければなりません。セグメント化する一連の色がカラー モデル内で互いの近くにある色空間を選択します。[新規の色空間] を使用すると、選択した色空間を後からいつでも変更することができます。

色のしきい値アプリを開きます。MATLAB ツール ストリップで [アプリ] タブを開き、[画像処理とコンピューター ビジョン] の下にある をクリックします。colorThresholder コマンドを使用して、このアプリを開くこともできます。

イメージを色のしきい値アプリに読み取ります。[イメージの読み込み] をクリックします。ファイル名を指定してイメージを読み込むことも、ワークスペースにイメージを読み取ってから変数を読み込むこともできます。また、カメラからイメージを取得することもできます (色のしきい値アプリでのライブ イメージの取得を参照してください)。

この例では、カラー イメージを MATLAB ワークスペースに読み取り、表示します。

rgb = imread('peppers.png');

imshow(rgb)

アプリの [イメージの読み込み] メニューで、[ワークスペースからのイメージの読み込み] をクリックします。[ワークスペースからインポート] ダイアログ ボックスで、作成した変数を選択し、[OK] をクリックします。

イメージの色成分を表現する色空間を選択します。開くと、[色空間を選択] タブにイメージが表示されます。また、よく使われるいくつかの色空間 (RGB、HSV、YCbCr、L*a*b*) でイメージを表現する点群も表示されます。セグメンテーションの色分離に最適な色空間を選択します。マウスを使用して点群表現を回転し、色がどのように表示されるかを確認します。この例では、YCbCr 色空間をクリックします。

色のしきい値アプリが開き、イメージと各色成分のコントロール一式が表示されます。YCbCr 色空間の場合、イメージの色成分を表す 3 つのヒストグラムが表示されます。この色空間で、[Y] 成分は輝度を表し、[Cb] 成分は青-黄のスペクトルを表し、[Cr] 成分は赤-緑のスペクトルを表します。他の色空間では、異なるタイプのコントロールが使用されます。さらに、色のしきい値アプリには、YCbCr 色空間でのイメージの色の点群表現が表示されます。ヒストグラムの両端にあるハンドルをつかんで値のスペクトル上を移動することによって、セグメンテーションを実行できます。また、セグメント化する色の分離に最適な場所を見つけるために、色の点群を回転することもできます。

色のしきい値アプリのカラー セレクターを使用したイメージのセグメント化

この例の部分では、イメージ内の色を選択して自動的にイメージをセグメント化する方法を説明します。このオプションでは、フリーハンドでイメージ内に領域を描画して前景または背景の色を選択します。この例では、紫の背景に領域を描画し、背景から野菜をセグメント化します。複数の領域を描画できます。色の選択を使用してイメージをセグメント化した後、個々の色成分コントロールを使用して結果を微調整できます。色のしきい値アプリの色成分のコントロールを使用したイメージのセグメント化を参照してください。

色の選択に基づいて自動的にイメージをセグメント化するには、ボタンをクリックしてイメージ上で領域を描画します。イメージの上にカーソルを移動するとカーソルが十字形に変わります。領域を描画するイメージの上にカーソルをドラッグして、セグメント化する色を指定します。複数の領域を描画できます。描画した領域を削除して新たに始める場合は、描画した線を右クリックして [削除] を選択します。

領域の描画が終了すると、色のしきい値アプリが、描画領域内で選択されている色に基づき、自動的にイメージをしきい値処理します。セグメンテーションを反映して色のコントロールが変化します。この自動セグメンテーションでは、前景と背景の間に明確なエッジが作成されませんでした。イメージ下部付近の背景色の方が明るいからです。コントロールを移動させると、しきい値処理をより正確にできます。

色のしきい値アプリの色成分のコントロールを使用したイメージのセグメント化

この例の部分では、色のしきい値アプリで色成分のコントロールを使用して対話的にイメージをセグメント化する方法を説明します。色のしきい値アプリを使用するセグメンテーションは反復的なプロセスであるため、要件を満たすセグメンテーションが得られるまでにいくつかの異なる色空間を試さなければならない場合もあります。また、[色の選択] オプションを使用して自動的に初期セグメンテーションを行って、後からその結果を色成分のコントロールで微調整することもできます。色のしきい値アプリのカラー セレクターを使用したイメージのセグメント化を参照してください。

色成分のコントロールを使用して対話的にイメージをセグメント化します。たとえば、ヒストグラム スライダーを使用して各ヒストグラムに関連付けられた色を選択します。セグメンテーションの進行状況を確認できます。この例では、[Y] 成分でスライダーを移動すると、イメージのセグメンテーションに最も大きな効果があります。この場合、前景をセグメント化しますが、完了後にセグメンテーションを反転できます。次の図に示すように、このコントロールを使用すると、前景イメージの部分を含めずに背景のクリーンなセグメンテーションを得ることは困難です。別の色空間を使ってセグメンテーションをやり直します。

別の色空間を使用するには [新規の色空間] をクリックします。[色空間を選択] ダイアログ ボックスが再度表示されます。

[色空間を選択] ダイアログ ボックスで新しい色空間を選択します。この例では、[HSV] 色空間を選択します。新しいタブが作成され、イメージと色空間の色成分コントロールが表示されます。HSV 色空間では、[H] 成分には双方向ノブ、[S] 成分および [V] 成分には 2 つのヒストグラム スライダーが使用されます。この色空間では、[H] は色相 (hue)、[S] は彩度 (saturation)、[V] は値 (value) を意味します。また、タブにはイメージの色の点群表現も表示されます。

YCbCr 色空間で行ったのと同様に、色成分コントロールを使用して対話的にイメージをセグメント化します。セグメンテーションを確認しながら、コントロールを使用することができます。マウスを使用して [H] コントロールのハンドルの 1 つをドラッグし、矢印の方向に動かします。背景と前景がはっきりと分離できるまで、各コントロールで実験します。この色空間では、次の図に示すように [H] コントロールを使用して良好なセグメンテーションが達成できました。モルフォロジー演算子など、その他のツールボックス関数を使用して、マスク イメージの作成後に小さな欠陥をクリーンアップできます。セグメント化したイメージの保存については、色のしきい値アプリを使用したイメージ マスクの作成を参照してください。

色のしきい値アプリを使用したイメージ マスクの作成

この例の部分では、セグメンテーションの後でマスク イメージを作成する方法を説明します。また、マスク イメージの作成に使用した MATLAB コードとセグメント化したイメージを取得することもできます。

前景をセグメント化した後で [マスクの反転] をクリックすると、前景と背景を入れ替えることができます。たとえば、前景を処理してクリーンなセグメンテーションを得るほうが簡単であるものの、前景のマスクを必要とする場合は、マスクの反転が役立ちます。前景のセグメンテーションを実行してから、マスクを反転します。

[バイナリの表示] をクリックして、作成したバイナリ マスク イメージを表示します。

セグメンテーションが達成されたら、マスク イメージをワークスペースに保存するために、[エクスポート] をクリックし、[イメージのエクスポート] オプションを選択します。

[ワークスペースにエクスポート] ダイアログ ボックスで、バイナリ マスク イメージの変数名を指定します。また、元のイメージと、元のイメージをセグメント化したバージョンを保存することもできます。

ここで実行したセグメンテーションを再作成するために必要な MATLAB コードを保存するには、[エクスポート] をクリックし、[関数のエクスポート] を選択します。色のしきい値アプリで MATLAB エディターが開き、セグメンテーションを作成するコードが表示されます。コードを保存するには、MATLAB エディターで [保存] をクリックします。RGB イメージを渡してこのコードを実行すると、同じマスク イメージをプログラムによって作成できます。

function [BW,maskedRGBImage] = createMask(RGB)
%createMask  Threshold RGB image using auto-generated code from colorThresholder app.
%  [BW,MASKEDRGBIMAGE] = createMask(RGB) thresholds image RGB using
%  auto-generated code from the colorThresholder App. The colorspace and
%  minimum/maximum values for each channel of the colorspace were set in the
%  App and result in a binary mask BW and a composite image maskedRGBImage,
%  which shows the original RGB image values under the mask BW.

% Auto-generated by colorThresholder app on 22-Jun-2016
%------------------------------------------------------


% Convert RGB image to chosen color space
I = rgb2hsv(RGB);

% Define thresholds for channel 1 based on histogram settings
channel1Min = 0.713;
channel1Max = 0.911;

% Define thresholds for channel 2 based on histogram settings
channel2Min = 0.049;
channel2Max = 0.971;

% Define thresholds for channel 3 based on histogram settings
channel3Min = 0.005;
channel3Max = 1.000;

% Create mask based on chosen histogram thresholds
sliderBW = (I(:,:,1) >= channel1Min ) & (I(:,:,1) <= channel1Max) & ...
    (I(:,:,2) >= channel2Min ) & (I(:,:,2) <= channel2Max) & ...
    (I(:,:,3) >= channel3Min ) & (I(:,:,3) <= channel3Max);
BW = sliderBW;

% Invert mask
BW = ~BW;

% Initialize output masked image based on input image.
maskedRGBImage = RGB;

% Set background pixels where BW is false to zero.
maskedRGBImage(repmat(~BW,[1 1 3])) = 0;

end