Main Content

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

色のしきい値アプリを使用したイメージのセグメント化およびマスクの作成

この例では、色のしきい値アプリを使用してイメージをセグメント化し、バイナリ マスク イメージを作成する方法を説明します。この例では、色値に基づいて背景 (紫色の布) から前景 (ピーマン) をセグメント化します。

色のしきい値アプリでは、イメージのセグメント化は反復的なプロセスになる場合があります。たとえば、ある色空間では、別の色空間よりも特定の色をよく分離できる場合があるため、アプリのサポートするいくつかの色空間内でイメージのセグメント化を試みます。サポートされているどの色空間においても、前景または背景の領域を選択することで、最初に自動セグメンテーションを実行できます。その後、アプリの提供する色成分のコントロールを使用して、セグメンテーションを調整できます。

この例の最後の部分では、作業結果の保存、マスク イメージの作成、アプリがセグメンテーションの実行に使用した MATLAB® コードの取得を行う方法を示します。

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

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

rgb = imread('peppers.png');

MATLAB ツールストリップから色のしきい値アプリを開きます。[アプリ] タブにある [イメージ処理とコンピューター ビジョン] セクションで [色のしきい値] をクリックします。

イメージを色のしきい値アプリに読み取ります。[イメージの読み込み] をクリックしてから、[ワークスペースからのイメージの読み込み] を選択します。[ワークスペースからインポート] ダイアログ ボックスで、ワークスペースに読み取ったイメージを選択してから [OK] をクリックします。

また、関数 colorThresholder を使用して、イメージの名前 (colorThresholder(rgb);) を指定することで、コマンド ラインからアプリを開くこともできます。また、イメージを取得することもできます (色のしきい値アプリでのライブ イメージの取得参照)。

色のしきい値アプリでは、[色空間を選択] タブにイメージが表示されます。また、次の色空間でイメージを表現する点群も表示されます。RGB、HSV、YCbCr、L*a*b*。色ベースのセグメンテーションの場合は、色分離に最適な色空間を選択します。マウスを使用して点群表現を回転し、個々の色がどのように分離されるかを確認します。色のしきい値アプリを使用するセグメンテーションは反復的なプロセスであるため、要件を満たすセグメンテーションが得られるまでにいくつかの異なる色空間を試します。この例では、YCbCr 色空間を選択することでプロセスを開始します。

色のしきい値アプリでの YCbCr イメージのセグメント化

色空間を選択すると、新しいタブが開き、イメージの表示と共に、色成分ごとの一連のコントロールと点群表現が表示されます。色のコントロールは色空間に応じて異なります。YCbCr 色空間の場合、色のしきい値アプリに 3 つの色成分を表す 3 つのヒストグラムが表示されます。[Y] 成分は輝度を表し、[Cb] 成分は青-黄のスペクトルを表し、[Cr] 成分は赤-緑のスペクトルを表します。

イメージを確認するために、イメージの上にカーソルを移動させ、移動とズームのコントロールにアクセスします。

自動しきい値処理

まず、自動しきい値処理を使用してイメージをセグメント化します。背景色 (紫色の布) はほぼ一様な色であるため、前景にあるオブジェクト (ピーマン) よりもこちらをセグメント化します。マスクについては、[マスクの反転] オプションを使用して後からいつでも変換できます。

フリーハンド ROI ツールを使用して領域を定義します。イメージの左上隅でボタン をクリックし、背景に ROI を描画します。複数の領域を描画できます。

領域の描画が終了すると、色のしきい値アプリが、描画領域内で選択されている色に基づき、自動的にイメージをしきい値処理します。セグメンテーションを反映して [Y][Cb] および [Cr] 色のコントロールが変化します。この自動しきい値処理では、特に前景と背景の間の下側の境界で、両者のセグメンテーションがうまく作成されません。この例の場合では、イメージ下部付近の背景色の方が明るいからです。描画した領域を削除して新たに始める場合は、領域の任意の場所を右クリックして [フリーハンドの削除] を選択します。

色のコントロールを使用した自動しきい値処理の調整

自動しきい値処理を微調整するには、色のコントロールを使用します。[Y][Cb] および [Cr] の色のコントロールごとに、そのヒストグラム内の上限と下限をドラッグして値の範囲を設定できます。これらの色のコントロールを使用すると、前景のセグメンテーションを大幅に改善することができます。

点群を使用したイメージのカラー値のしきい値設定

YCbCr 色空間内のイメージをセグメント化するもう 1 つの方法は、点群に ROI を描画して色の範囲を選択することです。

アプリのツールストリップで、[しきい値のリセット] をクリックして元のイメージに戻ります。アプリの右下にあるペインで、点群をクリックしてドラッグし、しきい値処理対象の色の表示が分離されるまで回転します。点群の左上隅にある ボタンをクリックします。色のしきい値アプリにより、3 次元点群が 2 次元表現に変換され、多角形 ROI ツールが有効になります。セグメント化する色 (紫色) の周りに ROI を描きます。この方法では、最初の自動しきい値処理による方法よりきれいなセグメンテーションを作成できます。

別の色空間のイメージのセグメンテーション

別の色空間にあるイメージをセグメント化するには、アプリのツールストリップで [新規の色空間] をクリックします。[色空間を選択] タブで HSV 色空間を選択します。

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

前回の反復と同様、自動しきい値処理と点群を含めた色成分コントロールの対話的利用というまったく同じ手法を使用できます。セグメンテーションの進行状況を確認しながら、色のコントロールを使用することができます。[H] コントロールのペインで、一度に矢印を 1 つクリックしてドラッグし、色相の範囲を変更します。背景と前景がはっきりと分離できるまで、各コントロールで実験します。モルフォロジー演算子など、ツールボックス関数を使用して、マスク イメージの作成後に小さな欠陥をクリーンアップできます。

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

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

この例では前景のオブジェクト (ピーマン) ではなく背景 (紫色の布) をセグメント化したため、[マスクの反転] をクリックして前景と背景を入れ替えます。

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

マスク イメージをワークスペースに保存します。マスクのツールストリップで、[エクスポート] をクリックして [イメージのエクスポート] を選択します。

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

セグメンテーションを再作成するために必要な 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

参考