Main Content

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

イメージの領域解析アプリを使用した、プロパティに基づくイメージのフィルター処理

この例では、既存のバイナリ イメージの領域のプロパティを条件にしてそのイメージをフィルター処理することで、新しいバイナリ イメージを作成する方法を説明します。

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

BW = imread("text.png");

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

imageRegionAnalyzer_00_downsize_800px.png

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

また、以下のように、関数 imageRegionAnalyzer を使用して、分析したいイメージを指定することで、コマンド ラインからアプリを開くこともできます。

imageRegionAnalyzer(BW)

"イメージの領域解析" に、バイナリ イメージと、領域プロパティを含むテーブルが表示されます。このテーブルは、イメージで識別された領域を示す行と、領域の面積、周囲の長さ、方向などのプロパティを示す列からなります。

imageRegionAnalyzer_00_downsize_600px.png

領域プロパティの値でフィルター処理するには、アプリのツールストリップで [フィルター] をクリックします。フィルター処理の条件とするプロパティを選択し、フィルター条件を指定します。たとえば、大きい領域だけを残して他はすべて削除したイメージを作成するには、Area プロパティを選択し、"より大きいまたは等しい" の記号 (>=) を選んで最小値を指定します。

imageRegionAnalyzer_FilterRegions_dialog.png

別のプロパティでフィルター処理するには、[追加] をクリックします。プロパティの選択とフィルター条件の指定ができる別の行が表示されます。結果は 2 つのフィルター処理の共通部分 (論理 AND) です。

プロパティにフィルターを適用すると、バイナリ イメージとテーブルが自動的に更新されます。

imageRegionAnalyzer_Filtered.png

マスク イメージを作成する場合は、境界に接しているすべての前景ピクセルの削除や、オブジェクト内の穴の塗りつぶしなど、マスクのクリーンアップ操作をオプションで実行できます。穴を塗りつぶすと領域の面積が変わるので、結果として、フィルター処理後のイメージに現れる領域も変わります。この例の場合、"b"、"d"、"g" などの文字の面積は、穴を塗りつぶすと大きくなります。面積が 105 ピクセルの新しい領域 (文字 "o") がフィルター処理後のイメージに現れています。これは、塗りつぶされた領域の面積がしきい値を超えたためです。

imageRegionAnalyzer_Filled.png

イメージのフィルター処理が完了したら結果を保存できます。[エクスポート][イメージのエクスポート] をクリックします。[ワークスペースにエクスポート] ダイアログ ボックスでマスク イメージの既定の名前を使うか、別の名前を指定します。[OK] をクリックします。

imageRegionAnalyzer_ExportImage_dialog.png

プロパティのリストは、構造体またはテーブルとして保存できます。[エクスポート][プロパティのエクスポート] をクリックします。

また、指定しているものと同じフィルターとクリーンアップ操作を使用してバイナリ イメージをフィルター処理する関数をエクスポートすることもできます。この関数は、フィルター処理されたバイナリ イメージと、プロパティ測定値のテーブルを返します。[エクスポート][関数のエクスポート] をクリックして、関数を M ファイルとして保存します。

function [BW_out,properties] = filterRegions(BW_in)
%filterRegions Filter BW image using auto-generated code from imageRegionAnalyzer app.

% Auto-generated by imageRegionAnalyzer app on 31-Oct-2021
%---------------------------------------------------------

BW_out = BW_in;

% Fill holes in regions.
BW_out = imfill(BW_out, 'holes');

% Filter image based on image properties.
BW_out = bwpropfilt(BW_out,'Area',[85, 124]);

% Get properties.
properties = regionprops(BW_out, {'Area', 'ConvexArea', 'EulerNumber', 'FilledArea', 'MajorAxisLength', 'MinorAxisLength', 'Orientation', 'Perimeter'});

参考

| | |

関連するトピック