Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

bboxcrop

境界ボックスのトリミング

R2019b 以降

説明

bboxB = bboxcrop(bboxA,window) は、トリミング領域 window にある、入力の境界ボックスのセット bboxA から境界ボックスをトリミングします。bboxB には、トリミングされた境界ボックスが含まれています。この関数は、2 次元と 3 次元の境界ボックスをサポートします。

[bboxB,indices] = bboxcrop(bboxA,window) は、bboxA 内のどの境界ボックスがトリミング ウィンドウ window 内にあるかを示すインデックスのベクトルも返します。

[___] = bboxcrop(___,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、OverlapThreshold=1 は、正のオーバーラップしきい値を 1 に設定します。

すべて折りたたむ

イメージを読み取ります。

I = imread('peppers.png');

境界ボックスとラベルを定義します。

bboxA = [
    410 230 100 90
    186 78  80  60
    ]
bboxA = 2×4

   410   230   100    90
   186    78    80    60

labelsA = [
    "garlic"
    "onion"
    ];

中央トリミング ウィンドウを作成します。

targetSize = [256 256];
win = centerCropWindow2d(size(I),targetSize);

イメージを中央でトリミングします。

[r,c] = deal(win.YLimits(1):win.YLimits(2),win.XLimits(1):win.XLimits(2));
J = I(r,c,:);

ボックスとラベルを中央でトリミングします。トリミング ウィンドウの外にあるボックスは削除されます。

[bboxB,indices] = bboxcrop(bboxA,win);
labelsB = labelsA(indices);

結果を表示します。

figure
I = insertObjectAnnotation(I,'Rectangle',bboxA,labelsA);
J = insertObjectAnnotation(J,'Rectangle',bboxB,labelsB);
imshowpair(I,J,'montage')

Figure contains an axes object. The axes object contains an object of type image.

入力引数

すべて折りたたむ

境界ボックス。M 行 4 列、M 行 5 列、または M 行 9 列の非スパース数値行列として指定します。M は境界ボックスの数です。行列の各行で、軸に平行な四角形、回転した四角形、または直方体として、境界ボックスを定義します。次の表に、各境界ボックスの形式を示します。

境界ボックス説明
軸に平行な四角形

[x y w h] 形式の行をもつ M 行 4 列の数値行列として、空間座標で定義します。ここで、

  • M は軸に平行な四角形の数です。

  • x と y は四角形の左上隅を指定します。

  • w は四角形の幅、つまり x 軸に沿った長さを指定します。

  • h は四角形の高さ、つまり y 軸に沿った長さを指定します。

回転した四角形

[xctr yctr xlen ylen yaw] 形式の行をもつ M 行 5 列の数値行列として、空間座標で定義します。ここで、

  • M は回転した四角形の数です。

  • xctr および yctr は四角形の中心を指定します。

  • xlen は四角形の幅、つまり、回転前の x 軸に沿った長さを指定します。

  • ylen は四角形の高さ、つまり、回転前の y 軸に沿った長さを指定します。

  • yaw は回転角度 (度単位) を指定します。回転は境界ボックスの中心を軸として時計回りに正となります。

Square rectangle rotated by -30 degrees.

直方体

[xctr yctr zctr xlen ylen zlen xrot yrot zrot] 形式の行をもつ M 行 9 列の数値行列として、空間座標で定義します。ここで、

  • M は直方体の数です。

  • xctr、yctr、および zctr は直方体の中心を指定します。

  • xlen、ylen、および zlen はそれぞれ、回転前の x 軸、y 軸、および z 軸に沿った直方体の長さを指定します。

  • xrot、yrot、および zrot はそれぞれ、x 軸、y 軸、および z 軸周りの直方体の回転角度を指定します。回転角度 xrot、yrot、および zrot は、直方体の中心に対する度数です。各回転は、関連する空間軸の正方向に対して時計回りに正となります。関数は、ZYX の順序のオイラー角 [xrot yrot zrot] を想定して回転行列を計算します。

次の図は、これらの値で直方体の位置がどのように決定されるかを示しています。

トリミング ウィンドウ。4 要素のベクトル、6 要素のベクトル、または Cuboid オブジェクトとして指定します。出力境界ボックスの位置は、トリミング ウィンドウの位置を基準にしています。

bboxA を矩形入力として指定する場合、トリミング ウィンドウは、[x,y,width,height] 形式の 4 要素ベクトル、または Rectangle オブジェクトでなければなりません。

bboxA を直方体として指定する場合、トリミング ウィンドウは、[x,y,z,width,height,depth] 形式の 6 要素ベクトル、または Cuboid オブジェクトでなければなりません。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: OverlapThreshold=1 は、正のオーバーラップしきい値を 1 に設定します。

オーバーラップしきい値。1 以下の正のスカラーとして指定します。入力ボックス bboxA とトリミング領域 window の間のオーバーラップ量は、次のように定義されます。

area(intersect (bboxA,window))/area(union(bboxB,window)).

オーバーラップの計算値が threshold プロパティの値よりも大きい場合、ボックスは bounding rectangle の境界でクリップされます。そうでない場合、ボックスは破棄されます。しきい値を下げると、オブジェクトの一部が破棄されることがあります。

出力引数

すべて折りたたむ

トリミングされた境界ボックス。M2 個の境界ボックスから成る M2 行 N 列の行列として返されます。返される境界ボックスの数は、入力の境界ボックスの数よりも少なくなります。行列の各行 M2 は、入力 bboxA と同じタイプの 1 つの境界ボックスを定義します。出力境界ボックスの位置は、トリミング ウィンドウの位置を基準にしています。

インデックス。整数のベクトルとして返されます。インデックスは、入力 bboxA 内のどの境界ボックスがトリミング ウィンドウ内にあるかを示します。

バージョン履歴

R2019b で導入

すべて展開する