主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

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

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

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

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

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

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

rgb = imread (“peppers.png”);

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

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

また,関数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]は色相(色调),[S]は彩度(饱和度),[V]は明度(值)を意味します。HSV色空間では,[H]成分には双方向ノブ,[S]成分および[V]成分には2つのヒストグラムスライダーが使用されます。また,タブにはイメージの色の点群表現も表示されます。

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

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

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

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

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

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

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

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

函数[BW, maskedRGBImage] = createMask (RGB)%createMask阈值RGB图像使用自动生成的代码从colorThresholder应用程序。% [BW,MASKEDRGBIMAGE] = createMask(RGB)阈值图像RGB使用%从colorThresholder应用程序自动生成的代码中设置的每个颜色空间通道的最小/最大值% App,得到二进制掩码BW和合成图像maskedRGBImage,%表示掩码BW下的原始RGB图像值。%自动生成由colorThresholder应用于2016年6月22日%------------------------------------------------------%转换RGB图像到选择的颜色空间I = rgb2hsv (RGB);%根据直方图设置为通道1定义阈值channel1Min = 0.713;channel1Max = 0.911;%根据直方图设置定义通道2的阈值channel2Min = 0.049;channel2Max = 0.971;%根据直方图设置定义通道3的阈值channel3Min = 0.005;channel3Max = 1.000;%根据选择的直方图阈值创建掩码sliderBW =(我(::1)> = channel1Min) &(我(:,:1)< = channel1Max) &...(我(::2)> = channel2Min) &(我(:,:2)< = channel2Max) &...(我(::3)> = channel3Min) &(我(:,:,3)< = channel3Max);BW = sliderBW;%反掩码BW = ~ BW;基于输入图像初始化输出屏蔽图像。maskedRGBImage = RGB;将BW为假的背景像素设置为0。maskedRGBImage(repmat(~BW,[1 1 3])) = 0;结束

参考