ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

regionprops

イメージ領域のプロパティの計測

構文

stats = regionprops(BW,properties)
stats = regionprops(CC,properties)
stats = regionprops(L,properties)
stats = regionprops(___,I,properties)
stats = regionprops(output,___)
stats = regionprops(gpuarrayImg,___)

説明

stats = regionprops(BW,properties) はバイナリ イメージ BW 内の各連結要素 (オブジェクト) について properties で指定される一連のプロパティの測定値を返します。stats はイメージ内の各オブジェクトごとに 1 つの構造体を格納する構造体配列になります。regionprops は、連続領域と不連続領域で使用できます (アルゴリズムを参照)。

stats = regionprops(CC,properties) は、CC 内の各連結要素 (オブジェクト) について properties で指定される一連のプロパティの測定値を返します。CCbwconncomp によって返される構造体です。

stats = regionprops(L,properties) は、ラベル行列 L にある各ラベル付き領域について properties で指定される一連のプロパティの測定値を返します。

stats = regionprops(___,I,properties) は、イメージ I にある各ラベル付き領域について properties で指定される一連のプロパティの測定値を返します。regionprops への最初の入力 (BWCC または L) は、I にある領域を識別します。最初の入力のサイズはイメージのサイズと同じでなければなりません。つまり、size(I) は、size(BW)CC.ImageSize または size(L) に等しくなければなりません。

stats = regionprops(output,___) は一連のプロパティの測定値を返します。ここで、output は戻り値のタイプを指定します。regionprops はこれらの値を struct または table で返すことができます。

stats = regionprops(gpuarrayImg,___) は GPU で測定を実行します。gpuarrayImg は 2 次元バイナリ イメージ (logical gpuArray) または gpuArray ラベル行列です。bwconncomp で返される連結要素の構造体 (CC) は、GPU ではサポートされません。

GPU で実行する場合、regionprops ではプロパティ 'ConvexArea''ConvexHull''ConvexImage''EulerNumber''FilledArea''FilledImage''Solidity' がサポートされていません。

コード生成 サポート: あり。

MATLAB® Function ブロック サポート: なし。

すべて折りたたむ

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

BW = imread('text.png');

regionprops を使用してイメージ内の連結要素の重心を計算します。

s = regionprops(BW,'centroid');

重心を格納する構造体配列を単一の行列に連結します。

centroids = cat(1, s.Centroid);

重心の位置を重ね合わせたバイナリ イメージを表示します。

imshow(BW)
hold on
plot(centroids(:,1),centroids(:,2), 'b*')
hold off

バイナリ イメージを gpuArray に読み取ります。

BW = gpuArray(imread('text.png'));

イメージ内のオブジェクトの重心を計算します。

s  = regionprops(BW,'centroid');

重心をイメージ上にプロットします。

centroids = cat(1, s.Centroid);
imshow(BW)
hold on
plot(centroids(:,1), centroids(:,2), 'b*')
hold off

イメージ内の円形オブジェクトの中心と半径を推定し、この情報を使用して円をイメージ上にプロットします。この例では、regionprops は計算した情報をテーブルで返します。

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

a = imread('circlesBrightDark.png');

入力イメージをバイナリ イメージに変換します。

bw = a < 100;
imshow(bw)
title('Image with Circles')

イメージ内の領域のプロパティを計算し、データをテーブルで返します。

stats = regionprops('table',bw,'Centroid',...
    'MajorAxisLength','MinorAxisLength')
stats = 

        Centroid        MajorAxisLength    MinorAxisLength
    ________________    _______________    _______________

     256.5     256.5    834.46             834.46         
       300       120    81.759             81.759         
    330.47    369.83    111.78             110.36         
       450       240    101.72             101.72         

円の中心と半径を取得します。

centers = stats.Centroid;
diameters = mean([stats.MajorAxisLength stats.MinorAxisLength],2);
radii = diameters/2;

円をプロットします。

hold on
viscircles(centers,radii);
hold off

入力引数

すべて折りたたむ

入力バイナリ イメージ。任意の次元の論理配列として指定します。

データ型: logical

測定のタイプ。文字ベクトル、文字ベクトルのコンマ区切りリスト、文字ベクトルのセル配列か、'all’ または 'basic’ のいずれかとして指定します。プロパティ名は、大文字と小文字を区別せず、省略形を使用することもできます。コード生成で使用する場合、regionprops では文字ベクトルのセル配列がサポートされません。

以下の表に、形状測定を提供するすべてのプロパティを示します。ピクセル値測定の表に示すプロパティは、グレースケール イメージを指定する場合のみ有効です。'all' を指定した場合、regionprops はすべての形状測定を計算し、グレースケール イメージを指定した場合は、ピクセル値測定を計算します。'basic’ を指定した場合、または properties 引数を指定しない場合、regionprops'Area''Centroid' および 'BoundingBox' の測定のみを計算します。N 次元入力の次のプロパティを計算できます。'Area''BoundingBox''Centroid''FilledArea''FilledImage''Image''PixelIdxList''PixelList''SubarrayIdx' の詳細は、以下のようなコマンドを参照してください。

形状測定

プロパティ名説明N 次元サポートGPU サポートコード生成
'Area'領域内の実際のピクセル数を指定するスカラーを返します 領域内のピクセルの実際の数 (この値は、ピクセル パターンの重み付け方法が異なる bwarea によって返される値とわずかに異なる可能性があります)。ありありあり
'BoundingBox'1 行 Q*2 列のベクトルで指定された、領域を含む最小の四角形を返します。ここで、Q はイメージ次元数です。たとえば、[ul_corner width] では、ul_corner は境界ボックスの左上コーナーを [x y z ...] の形式で指定します。width は各次元の境界ボックスの幅を [x_width y_width ...] 形式で指定します。regionpropsndims を使用してラベル行列またはバイナリ イメージの次元 ndims(L) を取得し、numel を使用して連結要素の次元 numel(CC.ImageSize) を取得します。ありありあり
'Centroid'

領域の重心を示す 1 行 Q 列のベクトルを返します。Centroid の最初の要素は重心の水平座標 (または x 座標) で、2 番目の要素は垂直座標 (または y 座標) です。Centroid の他のすべての要素は、次元の順序になります。この図は、「discontiguous」領域の重心と境界ボックスを示しています。領域は白いピクセルで構成され、緑色のボックスは境界ボックス、赤い点は重心です。

ありありあり
'ConvexArea''ConvexImage' のピクセル数を指定するスカラーを返します。2 次元のみなしなし
'ConvexHull'領域を含むことができる最小の凸多角形を指定する p 行 2 列の行列を返します。行列の各行には、多角形の 1 頂点の x 座標と y 座標が含まれています。2 次元のみなしなし
'ConvexImage'凸包内のピクセルがすべて塗りつぶされた状態 (on に設定) の凸包を指定するバイナリ イメージ (logical) を返します。イメージは、領域の境界ボックスのサイズです。凸包の境界が通過するピクセルについては、regionpropsroipoly と同じロジックを使用して、ピクセルが凸包の内側にあるか外側にあるかを判断します。2 次元のみなしなし
'Eccentricity'領域と同じ 2 次モーメントをもつ楕円の離心率を指定するスカラーを返します。離心率とは、楕円の焦点間の距離と長軸の長さの割合です。この値は 0 ~ 1 になります (0 と 1 は変性した場合です。実際には、離心率が 0 の楕円は円で、離心率が 1 の楕円は線分です)。2 次元のみありあり
'EquivDiameter'領域と同じ面積をもつ円の直径を指定するスカラーを返します。sqrt(4*Area/pi) と同様に計算します。2 次元のみありあり
'EulerNumber'領域内のオブジェクトの数からそれらのオブジェクトにある穴の数を差し引いた数を指定するスカラーを返します。このプロパティは、2 次元ラベル行列のみでサポートされています。regionprops は 8 連結性を使用して、オイラー数の測定を計算します。詳細は、「ピクセルの連結性」を参照してください。ありなしあり
'Extent'境界ボックス全体のピクセル数に対する領域内ピクセル数の割合を指定するスカラーを返します。境界ボックスの領域で除算された Area として計算されます。2 次元のみありあり
'Extrema'

領域の極値点を指定する 8 行 2 列の行列を返します。行列の各行には、1 点の x 座標と y 座標が含まれています。ベクトルの形式は [top-left top-right right-top right-bottom bottom-right bottom-left left-bottom left-top] です。この図は、2 つの異なる領域の極値を示しています。左側の領域では、各極値点は別々になります。右側の領域では、特定の極値点 (top-leftleft-top など) は同一です。

2 次元のみありあり
'FilledArea'FilledImage 内の on ピクセルの数を指定するスカラーを返します。ありなしあり
'FilledImage'

領域の境界ボックスと同じサイズのバイナリ イメージ (logical) を返します。この図に示すように、on ピクセルは、すべての穴が塗りつぶされた領域に対応しています。

ありなしあり
'Image'領域の境界ボックスと同じサイズのバイナリ イメージ (logical) を返します。on ピクセルは領域に対応しており、他のすべてのピクセルは off です。ありありあり
'MajorAxisLength'領域と同じ正規化された 2 次中心モーメントをもつ楕円の長軸の長さ (ピクセル単位) を指定するスカラーを返します。2 次元のみありあり
'MinorAxisLength'領域と同じ正規化された 2 次中心モーメントをもつ楕円の短軸の長さ (ピクセル単位) を指定するスカラーを返します。2 次元のみありあり
'Orientation'

x 軸と、領域と同じ 2 次モーメントをもつ楕円の長軸との角度を指定するスカラーを返します。この値の単位は度で、範囲は-90 ~ 90 度になります。この図は、楕円の軸と方向を示しています。図の左側は、イメージ領域とその対応する楕円を示しています。右側は同じ楕円を示し、青の実線で軸を表しています。赤い点は焦点で、方向は水平の点線と長軸の角度になります。

2 次元のみありあり
'Perimeter'

領域の境界の周囲長を指定するスカラーを返します。regionprops は、領域の境界の周りで隣接するピクセルの組の距離を計算することによって、周囲を計算します。イメージに不連続領域が含まれている場合、regionprops は予期しない結果を返します。次の図は、このオブジェクトの周囲の計算に含まれるピクセルを示しています。

2 次元のみありあり
'PixelIdxList'領域内のピクセルの線形インデックスを含む p 要素ベクトルを返します。ありありあり
'PixelList'領域内のピクセルの位置を指定する pQ 列の行列を返します 行列の各行は [x y z ...] の形式で、領域内の 1 ピクセルの座標を指定します。ありありあり
'Solidity'領域内にもある凸包のピクセルの比率を指定するスカラーを返します。Area/ConvexArea と同様に計算します。2 次元のみなしなし
'SubarrayIdx'L(idx{:}) によってオブジェクト境界ボックスの内側にある L の要素が抽出されるようなインデックスを含んでいるセル配列を返します。ありありなし

以下の表に示すピクセル値測定プロパティは、グレースケール イメージ I を指定する場合のみ有効です。

ピクセル値測定

プロパティ名説明N 次元サポートGPU サポートコード生成
'MaxIntensity'領域内で最大の強度をもつピクセルの値を指定するスカラーを返します。2 次元のみありあり
'MeanIntensity'領域内のすべての強度値の平均値を指定するスカラーを返します。2 次元のみありあり
'MinIntensity'領域内で最小の強度をもつピクセルの値を指定するスカラーを返します。2 次元のみありあり
'PixelValues'p 行 1 列ベクトルを返します。ここで、p は領域内のピクセル数です。ベクトルの各要素には、領域内のピクセルの値が含まれています。2 次元のみありあり
'WeightedCentroid'位置と強度値に基づいて領域の中心を指定する座標の pQ 列のベクトルを返します。WeightedCentroid の最初の要素は、重み付き重心の水平座標 (または x 座標) です。2 番目の要素は、垂直座標 (または y 座標) です。WeightedCentroid の他のすべての要素は、次元の順序になります。2 次元のみありあり

データ型: char

連結要素。bwconncomp によって返される構造体として指定します。

データ型: struct

ラベル付き領域。ラベル行列として指定します。L は任意の数値クラスと任意の次元に設定できます。regionprops は負の値のピクセルを背景として扱い、整数でない入力ピクセルを丸めます。L の正の整数要素は、さまざまな領域に対応します。たとえば、1 に等しい L の要素の集合は、領域 1 に対応します。2 に等しい L の要素の集合は、領域 2 に対応します。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

測定するイメージ。グレースケール イメージとして指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32

戻り値のデータ型。以下のいずれかの値に指定します。

説明
'struct’BWCC.NumObjects または max(L(:)) のオブジェクトの数と長さが等しい構造体の配列を返します。構造体配列のフィールドは、properties で指定されているように、各領域のさまざまなプロパティを示します。この引数を指定しない場合、regionprops は、既定の設定で構造体を返します。
'table’BWCC.NumObjects または max(L(:)) のオブジェクトの数と高さ (行数) が等しい MATLAB テーブルを返します。変数 (列) は、properties で指定された、各領域のさまざまなプロパティを示します。MATLAB テーブルの詳細は、tableを参照してください。

GPU ではサポートされていません。

データ型: char

入力イメージ。2 次元 logical gpuArray またはラベル行列 gpuArray として指定します。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

出力引数

すべて折りたたむ

測定値。構造体の配列またはテーブルとして返されます。配列の構造体の数またはテーブルの行数は、BWCC.NumObjects または max(L(:)) のオブジェクトの数と一致します。各構造体のフィールドまたは各行の変数は、properties で指定された、各領域で計算されるプロパティを示します。

GPU で実行する場合、regionprops は構造体配列のみを返すことができます。

詳細

すべて折りたたむ

コード生成

この関数では MATLAB Coder™ を使用した C コードの生成がサポートされています。汎用の MATLAB Host Computer ターゲット プラットフォームを選択した場合、プリコンパイルされたプラットフォーム固有の共有ライブラリを使用するコードが、この関数によって生成されます。共有ライブラリを使用するとパフォーマンスの最適化は維持されますが、コードを生成できるターゲット プラットフォームが限定されます。詳細は、「Image Processing Toolbox のコード生成について」を参照してください。

コード生成時、regionprops には以下の制限があります。

  • 2 次元の入力イメージまたはラベル行列のみがサポートされています。

  • 出力タイプ 'table’ の指定はサポートされていません。

  • セル配列のプロパティを渡すことはサポートされていません。代わりに、コンマ区切りリストを使用します。

  • ‘ConvexArea’‘ConvexHull’'ConvexImage''Solidity''SubarrayIdx' 以外のすべてのプロパティがサポートされています。

ヒント

  • 関数 ismember は、regionpropsbwconncomplabelmatrix と組み合わせると、特定の条件を満たすオブジェクトまたは領域のみを含んでいるバイナリ イメージの作成に役立ちます。たとえば、次のコマンドでは、面積が 80 より大きく、かつ離心率が 0.8 未満の領域のみを含んでいるバイナリ イメージが作成されます。

    cc = bwconncomp(BW); 
    stats = regionprops(cc, 'Area','Eccentricity'); 
    idx = find([stats.Area] > 80 & [stats.Eccentricity] < 0.8); 
    BW2 = ismember(labelmatrix(cc), idx);  
    
  • regionprops の出力を扱う際には、構造体配列のコンマ区切りリスト構文が非常に役立ちます。たとえば、スカラーを含んでいるフィールドでは、この構文を使用して、イメージ内の領域ごとにこのフィールドの値を含んでいるベクトルを作成できます。たとえば、stats がフィールド Area をもつ構造体配列の場合、次の式

    stats(1).Area, stats(2).Area, ..., stats(end).Area
    

    は、以下と等価です。

    stats.Area
    

    したがって、これらの呼び出しを使用して、イメージ内の各領域の面積を含んでいるベクトルを作成できます。allArea は構造体配列 stats と同じ長さのベクトルです。

    stats = regionprops(L, 'Area');
    allArea = [stats.Area];
    
  • 関数 bwlabelbwlabelnbwconncomp はすべて、バイナリ イメージの連結要素を計算します。bwconncomp は、bwlabelbwlabeln を置き換えて使用できます。メモリ使用量が大幅に削減され、他の関数より高速な場合もあります。

    関数入力次元出力形式メモリの使用連結性
    bwlabel2 次元倍精度をもつラベル行列4 または 8
    bwlabelnN 次元倍精度ラベル行列任意
    bwconncompN 次元CC 構造体任意

    bwlabelbwlabeln の出力は、倍精度ラベル行列です。メモリ効率が高いデータ型を使用してラベル行列を計算するには、bwconncomp の出力で関数 labelmatrix を使用します。

    CC = bwconncomp(BW);
    L = labelmatrix(CC);

    既定の連結性でバイナリ イメージの要素を測定する場合に、bwlabel または bwlabeln を呼び出す必要はなくなりました。バイナリ イメージを直接 regionprops に渡すと、メモリ効率の高い関数 bwconncomp を使用して連結要素が自動的に計算されます。既定以外の連結性を使用する必要がある場合は、bwconncomp を呼び出して、その結果を regionprops に渡します。

    CC = bwconncomp(BW, CONN);
    S = regionprops(CC);
  • ほとんどの測定の計算には、非常に短い時間しかかかりません。ただし、これらの測定には L の領域数によっては非常に長い時間がかかる場合もあります。

    • 'ConvexHull'

    • 'ConvexImage'

    • 'ConvexArea'

    • 'FilledImage'

  • ある測定グループの計算は、そのうちの 1 つの測定だけを計算するのとほぼ同じ時間がかかります。これは、いずれの計算にも使用されている中間計算を regionprops が利用するためです。したがって、最も高速なのは、regionprops を 1 回呼び出すだけで目的の計測をすべて計算することです。

アルゴリズム

連続領域は、"オブジェクト"、"連結要素"、"ブロブ" とも呼ばれます。連続領域を含んでいるラベル行列は、次のように表示されることがあります。

1 1 0 2 2 0 3 3
1 1 0 2 2 0 3 3
1 に等しい L の要素は、最初の連続領域または連結要素に属します。2 に等しい L の要素は、2 番目の連結要素に属します。以下同様です。

不連続領域は、複数の連結要素を含んでいる可能性のある領域です。不連続領域を含んでいるラベル行列は、次のように表示されることがあります。

1 1 0 1 1 0 2 2
1 1 0 1 1 0 2 2
1 に等しい L の要素は、2 つの連結要素を含んでいる最初の不連続領域に属します。2 に等しい L の要素は、1 つの連結要素である 2 番目の領域に属します。

R2006a より前に導入

この情報は役に立ちましたか?