イメージの領域解析アプリを使用した、プロパティに基づくイメージのフィルター処理
この例では、既存のバイナリ イメージの領域のプロパティを条件にしてそのイメージをフィルター処理することで、新しいバイナリ イメージを作成する方法を説明します。
バイナリ イメージをワークスペースに読み取ります。
BW = imread("text.png");
ツールストリップから "イメージの領域解析" アプリを開きます。[アプリ] タブの [イメージ処理とコンピューター ビジョン] セクションで [イメージの領域解析] をクリックします。
アプリのツールストリップで、[イメージの読み込み] をクリックしてから [ワークスペースからのイメージの読み込み] を選択し、ワークスペースからアプリにイメージを読み込みます。[ワークスペースからインポート] ダイアログ ボックスで、ワークスペースに読み取ったイメージを選択してから [OK] をクリックします。
また、以下のように、関数 imageRegionAnalyzer
を使用して、分析したいイメージを指定することで、コマンド ラインからアプリを開くこともできます。
imageRegionAnalyzer(BW)
"イメージの領域解析" に、バイナリ イメージと、領域プロパティを含むテーブルが表示されます。このテーブルは、イメージで識別された領域を示す行と、領域の面積、周囲の長さ、方向などのプロパティを示す列からなります。
領域プロパティの値でフィルター処理するには、アプリのツールストリップで [フィルター] をクリックします。フィルター処理の条件とするプロパティを選択し、フィルター条件を指定します。たとえば、大きい領域だけを残して他はすべて削除したイメージを作成するには、Area
プロパティを選択し、"より大きいまたは等しい" の記号 (>=) を選んで最小値を指定します。
別のプロパティでフィルター処理するには、[追加] をクリックします。プロパティの選択とフィルター条件の指定ができる別の行が表示されます。結果は 2 つのフィルター処理の共通部分 (論理 AND) です。
プロパティにフィルターを適用すると、バイナリ イメージとテーブルが自動的に更新されます。
マスク イメージを作成する場合は、境界に接しているすべての前景ピクセルの削除や、オブジェクト内の穴の塗りつぶしなど、マスクのクリーンアップ操作をオプションで実行できます。穴を塗りつぶすと領域の面積が変わるので、結果として、フィルター処理後のイメージに現れる領域も変わります。この例の場合、"b"、"d"、"g" などの文字の面積は、穴を塗りつぶすと大きくなります。面積が 105 ピクセルの新しい領域 (文字 "o") がフィルター処理後のイメージに現れています。これは、塗りつぶされた領域の面積がしきい値を超えたためです。
イメージのフィルター処理が完了したら結果を保存できます。[エクスポート]、[イメージのエクスポート] をクリックします。[ワークスペースにエクスポート] ダイアログ ボックスでマスク イメージの既定の名前を使うか、別の名前を指定します。[OK] をクリックします。
プロパティのリストは、構造体またはテーブルとして保存できます。[エクスポート]、[プロパティのエクスポート] をクリックします。
また、指定しているものと同じフィルターとクリーンアップ操作を使用してバイナリ イメージをフィルター処理する関数をエクスポートすることもできます。この関数は、フィルター処理されたバイナリ イメージと、プロパティ測定値のテーブルを返します。[エクスポート]、[関数のエクスポート] をクリックして、関数を 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'});
参考
イメージの領域解析 | bwpropfilt
| bwareafilt
| regionprops