メインコンテンツ

bwferet

フェレ プロパティの測定

説明

out = bwferet(BW,properties) は、イメージ内のオブジェクトのフェレ プロパティを測定し、測定値を table で返します。入力 properties は、入力バイナリ イメージ BW 内の各オブジェクトで測定するフェレ プロパティを指定します。測定されるフェレ プロパティには、最小および最大フェレ径、フェレ角、フェレ径の端点座標が含まれます。

out = bwferet(CC,properties) は、構造体 CC 内の各連結要素のフェレ プロパティを測定します。

out = bwferet(L,properties) は、入力ラベル行列 L 内の各オブジェクトのフェレ プロパティを測定します。

out = bwferet(input) は、最大フェレ径、その相対角度、input から測定された座標値を測定します。この関数は測定値を table で返します。input は、バイナリ イメージ BW、連結要素 CC、またはラベル行列 L です。

[out,LM] = bwferet(___) は、table out の行インデックスを表すラベル値を含むラベル行列も返します。前の構文の入力引数のいずれも使用できます。out の各行エントリは、ラベル行列 LM のラベル付き領域 (オブジェクト) に対応します。

すべて折りたたむ

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

I = imread("toyobjects.png");

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

bw = imbinarize(I,"adaptive");

バイナリ イメージから最初の 2 つの最も大きいオブジェクトを抽出します。

bw = bwareafilt(bw,2);

抽出したオブジェクト領域の穴を塗りつぶします。

bw = imfill(bw,"holes");

抽出したオブジェクトの最小フェレ プロパティとラベル行列を計算します。

[out,LM] = bwferet(bw,"MinFeretProperties");

出力ラベル行列にあるオブジェクトの最大数を取得します。

maxLabel = max(LM(:));

最小フェレ プロパティの table を含む出力を表示します。

out
out=2×3 table
    MinDiameter    MinAngle    MinCoordinates
    ___________    ________    ______________

      116.23        99.462      {2×2 double} 
      132.08       -159.27      {2×2 double} 

出力ラベル行列から、ラベル値 1 のオブジェクトの最小フェレ プロパティを表示します。

out.MinDiameter(1)
ans = 
116.2301
out.MinAngle(1)
ans = 
99.4623
out.MinCoordinates{1}
ans = 2×2

  120.5000  311.5000
  139.6081  196.8514

出力ラベル行列から、ラベル値 2 のオブジェクトの最小フェレ プロパティを表示します。

out.MinDiameter(2)
ans = 
132.0776
out.MinAngle(2)
ans = 
-159.2744
out.MinCoordinates{2}
ans = 2×2

  215.5000  197.5000
  339.0304  244.2412

出力ラベル行列を表示します。出力ラベル行列から、ラベル値が異なるオブジェクトの端点座標と最小フェレ径をプロットします。

h = imshow(LM,[]);
axis = h.Parent;
for labelvalues = 1:maxLabel
    linePoints = out.MinCoordinates{labelvalues};
    lineLength = norm(diff(linePoints));
    drawline(axis, Position=linePoints, Label=string(lineLength));
end
title(axis,"Minimum Feret Diameter of Objects");
colorbar(Ticks=1:maxLabel)

Figure contains an axes object. The hidden axes object with title Minimum Feret Diameter of Objects contains 3 objects of type image, images.roi.line.

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

I = imread("toyobjects.png");

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

bw = imbinarize(I,"adaptive");

入力バイナリ イメージのオブジェクト領域にある穴を塗りつぶします。

bw = imfill(bw,"holes");

関数 bwconncomp を使用して、結果のイメージから連結要素を生成します。

cc = bwconncomp(bw);

連結要素の最大フェレ プロパティを測定します。

[out,LM] = bwferet(cc,"MaxFeretProperties");

出力ラベル行列にあるオブジェクトの最大数を取得します。

maxLabel = max(LM(:));

table を検査し、測定された最大フェレ プロパティを検証します。

out
out=4×3 table
    MaxDiameter    MaxAngle    MaxCoordinates
    ___________    ________    ______________

       162.6       -175.06      {2×2 double} 
      156.21       -127.46      {2×2 double} 
      187.96        121.07      {2×2 double} 
      63.781       -131.19      {2×2 double} 

出力ラベル行列から、ラベル値が異なるオブジェクトの最大フェレ径を表示します。

out.MaxDiameter(1:maxLabel)
ans = 4×1

  162.6038
  156.2082
  187.9628
   63.7809

出力ラベル行列から、ラベル値が異なるオブジェクトに固有の最大フェレ径の方向角を表示します。

out.MaxAngle(1:maxLabel)
ans = 4×1

 -175.0608
 -127.4568
  121.0683
 -131.1859

出力ラベル行列から、ラベル値が異なるオブジェクトに固有の最大フェレ径の端点座標を表示します。

out.MaxCoordinates{1:maxLabel}
ans = 2×2

  186.5000  113.5000
   24.5000   99.5000

ans = 2×2

  156.5000  315.5000
   61.5000  191.5000

ans = 2×2

  337.5000  174.5000
  240.5000  335.5000

ans = 2×2

  288.5000  129.5000
  246.5000   81.5000

出力ラベル行列を表示します。出力ラベル行列から、ラベル値が異なるオブジェクトの端点座標と最大フェレ径をプロットします。

h = imshow(LM,[]);
axis = h.Parent;
for labelvalues = 1:maxLabel
    linePoints = out.MaxCoordinates{labelvalues};
    lineLength = norm(diff(linePoints));
    drawline(axis, Position=linePoints, Label=string(lineLength));
end
title(axis,"Maximum Feret Diameter of Objects");
colorbar(Ticks=1:maxLabel)

Figure contains an axes object. The hidden axes object with title Maximum Feret Diameter of Objects contains 5 objects of type image, images.roi.line.

入力引数

すべて折りたたむ

バイナリ イメージ。logical 行列または数値行列として指定します。数値入力の場合、非ゼロのピクセルは 1 (true) であると見なされます。

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

連結要素。次の表に示す 4 つのフィールドを持つ構造体として指定します。

フィールド説明
Connectivity連結要素 (オブジェクト) の連結性
ImageSize入力バイナリ イメージのサイズ
NumObjects入力バイナリ イメージ内の連結要素 (オブジェクト) 数
PixelIdxList1 行 NumObjects 列の cell 配列。ここで、k 番目の要素は k 番目のオブジェクトのピクセルの線形インデックスを含むベクトルです。

関数 bwconncomp を使用して、バイナリ イメージから連結要素を生成できます。

データ型: struct

連続領域のラベル行列。非負の整数の行列として指定します。0 とラベル付けされたピクセルは背景です。1 とラベル付けされたピクセルは 1 番目のオブジェクトを構成し、2 とラベル付けされたピクセルは 2 番目のオブジェクトを構成する、というように、次々にオブジェクトを構成します。L で表すオブジェクトの数は、L の最大値に等しくなります。関数 bwlabel を使用して、バイナリ イメージからラベル行列を生成できます。

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

フェレ プロパティのラベル。"MaxFeretProperties""MinFeretProperties"、または "all" として指定します。

データ型: char | string

汎用入力。次のいずれかの値を指定します。

  • 数値行列または logical 行列 — input がバイナリ イメージ BW の場合。

  • 構造体 — input が連結要素 CC の場合。

  • 非負の整数の行列 — input がラベル行列 L の場合。

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

出力引数

すべて折りたたむ

フェレ プロパティの table。mn 列の table として返されます。m は、フェレ プロパティを測定するオブジェクトの数です。n は、properties 入力に応じて 3 または 6 です。

  • properties"MaxFeretProperties" である場合、table out は、サイズが m 行 3 列で、列 MaxDiameterMaxAngle、および MaxCoordinates があります。

  • properties"MinFeretProperties" である場合、table out は、サイズが m 行 3 列で、列 MinDiameterMinAngle、および MinCoordinates があります。

  • properties"all" である場合、table out は、サイズが m 行 6 列で、次の表に示したすべての列があります。

列名説明
MaxDiameterオブジェクトの最大フェレ径。オブジェクトを囲む凸包の対蹠頂点にある任意の 2 つの境界点間の最大距離として測定されます。
MaxAngle

イメージの横軸に対する最大フェレ径の方向角。値の範囲は [–180o,180o] (度単位) です。

MaxCoordinates最大フェレ径の端点座標。[x1y1x2y2] の形式で返されます。
MinDiameterオブジェクトの最小フェレ径。オブジェクトを囲む凸包の対蹠頂点にある任意の 2 つの境界点間の最小距離として測定されます。
MinAngle

イメージの横軸に対する最小フェレ径の方向角。値の範囲は [–180o,180o] (度単位) です。

MinCoordinates最小フェレ径の端点座標。[x1y1x2y2] の形式で返されます。

連続領域のラベル行列。非負の整数の行列として指定します。0 とラベル付けされたピクセルは背景です。1 とラベル付けされたピクセルは 1 番目のオブジェクトを構成し、2 とラベル付けされたピクセルは 2 番目のオブジェクトを構成する、というように、次々にオブジェクトを構成します。outk 番目の行エントリのフェレ プロパティは、値 k を持つ LM 内の k 番目の領域 (オブジェクト) に対応します。LM で表すオブジェクトの数は、LM の最大値に等しくなります。

メモ

bwferet への入力がラベル行列である場合、出力ラベル行列 LM はこの入力ラベル行列と同じになります。

データ型: uint8

アルゴリズム

オブジェクトのフェレ プロパティは、オブジェクトを囲む凸包の対蹠頂点にある境界点を使用して測定されます。

最大 (または最小) フェレ径の端点座標 [x1y1x2y2] が与えられると、最大 (または最小) フェレ角は angle=tan1(y2y1x2x1) として測定されます。

拡張機能

すべて展開する

バージョン履歴

R2019a で導入

すべて展開する