イメージの領域解析アプリを使用した、プロパティに基づくイメージのフィルター処理
この例では、既存のバイナリ イメージの領域のプロパティを条件にしてそのイメージをフィルター処理することで、新しいバイナリ イメージを作成する方法を説明します。
バイナリ イメージをワークスペースに読み取ります。
BW = imread("text.png");関数 imageRegionAnalyzer を使用して、イメージの領域解析アプリでイメージを開きます。
imageRegionAnalyzer(BW)
イメージの領域解析に、バイナリ イメージと、領域プロパティを含むテーブルが表示されます。このテーブルは、イメージで識別された領域を示す行と、領域の面積、周囲の長さ、方向などのプロパティを示す列からなります。

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

5 つを超えるフィルターを追加するには、5 つ目のフィルターを指定した後、新しいフィルターごとに [フィルターの追加] を選択します。プロパティの選択とフィルター条件の指定ができる別の行が表示されます。結果はすべてのフィルタリング演算の共通部分 (論理 AND) です。
プロパティにフィルターを適用すると、バイナリ イメージとテーブルが自動的に更新されます。

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

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

選択したプロパティのリストは、構造体またはテーブルとして保存できます。[エクスポート]、[プロパティのエクスポート] を選択します。
また、指定しているものと同じフィルターとクリーンアップ操作を使用してバイナリ イメージをフィルター処理する関数をエクスポートすることもできます。この関数は、フィルター処理されたバイナリ イメージと、プロパティ測定値の構造体およびテーブルを返します。[エクスポート]、[関数のエクスポート] を選択して、関数を M ファイルとして保存します。
function [BW_out,propertiesStruct,propertiesTable] = filterRegions(BW_in) %filterRegions Filter BW image using auto-generated code from imageRegionAnalyzer app. % Auto-generated by imageRegionAnalyzer app on 11-Nov-2025 %--------------------------------------------------------- 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. propertiesStruct = regionprops(BW_out, {'Area', 'Centroid', 'Circularity', 'ConvexArea', 'Eccentricity', 'EquivDiameter', 'EulerNumber', 'Extent', 'FilledArea', 'MajorAxisLength', 'MinorAxisLength', 'Orientation', 'Perimeter', 'Solidity'}); propertiesTable = struct2table(propertiesStruct); end
参考
イメージの領域解析 | bwpropfilt | bwareafilt | regionprops