Main Content

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

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

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

BW = imread("text.png");

関数 imageRegionAnalyzer を使用して、イメージの領域解析アプリでイメージを開きます。

imageRegionAnalyzer(BW)

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

Binary region displayed in the Analyze Regions tab on the right, and a table with region properties on the left.

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

Filter Regions dialog box with a single specified filter criteria, of area greater than or equal to 85 pixels.

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

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

Only regions that meet the filter criteria appear in the binary image and the table of region properties.

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

Only filled regions that meet the filter criteria appear in the binary image and the table of region properties.

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

Export to Workspace dialog box has a field to enter the name for the binary mask.

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

また、指定しているものと同じフィルターとクリーンアップ操作を使用してバイナリ イメージをフィルター処理する関数をエクスポートすることもできます。この関数は、フィルター処理されたバイナリ イメージと、プロパティ測定値のテーブルを返します。[エクスポート][関数のエクスポート] をクリックして、関数を 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 10-Oct-2023
%---------------------------------------------------------

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, Inf]);

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

参考

| | |

関連するトピック