Crop bounding boxes
Read an image.
I = imread('peppers.png');
Define bounding boxes and labels.
bboxA = [ 410 230 100 90 186 78 80 60 ]
bboxA = 2×4
410 230 100 90
186 78 80 60
labelsA = [ "garlic" "onion" ];
Create a center cropping window.
targetSize = [256 256]; win = centerCropWindow2d(size(I),targetSize);
Center crop the image.
[r,c] = deal(win.YLimits(1):win.YLimits(2),win.XLimits(1):win.XLimits(2)); J = I(r,c,:);
Center crop boxes and labels. Boxes outside the cropping window are removed.
[bboxB,indices] = bboxcrop(bboxA,win); labelsB = labelsA(indices);
Display the results.
figure I = insertObjectAnnotation(I,'Rectangle',bboxA,labelsA); J = insertObjectAnnotation(J,'Rectangle',bboxB,labelsB); imshowpair(I,J,'montage')
bboxA
— Bounding boxesBounding boxes, specified as an M-by-4, M-by-5, or M-by-9 nonsparse numeric matrix. M is the number of bounding boxes. Each row of the matrix defines a bounding box as either an axis-aligned rectangle, a rotate rectangle, or a cuboid. This table describes the format for each bounding box.
Bounding Box | Row | Description |
---|---|---|
Axis-aligned rectangle | [xmin, ymin, width, height] | This type of bounding box is defined in pixel coordinates as an M-by-4 matrix representing M bounding boxes |
Rotated rectangle | [xcenter, ycenter, width, height, yaw] | This type of bounding box is defined in spatial coordinates as an M-by-5 matrix representing M bounding boxes. The xcenter and ycenter coordinates represent the center of the bounding box. The width and height elements represent the length of the box along the x and y axes, respectively. The yaw represents the rotation angle in degrees. The amount of rotation about the center of the bounding box is measured in the clockwise direction. |
Cuboid | [xcenter, ycenter, zcenter, width, height, depth, rx, ry, rz] | Defined in spatial coordinates as an M-by-9 matrix
representing M bounding boxes. The
xcenter,
ycenter, and
ycenter coordinates represent the
center of the bounding box. The width and
height elements represent the length of the box along
the x and y axes, respectively. The
rx,ry, and rz
rotation angles are in degrees about the cuboid center. The rotation is
positive in the clockwise direction, with respect to the positive direction of
the axis. Rotation matrices are computed assuming ZYX order Euler angles [rx, ry, rz]. |
window
— Crop windowimages.spatialref.Cuboid
| numeric | imageCrop window, specified as a four-element vector or an images.spatialref.Cuboid
object.
When you specify bboxA
as a rectangular input, the cropping
window must be a four-element vector in the format
[x,y,width,height].
When you specify bboxA
as a cuboid, the cropping window must be
an images.spatialref.Cuboid
object.
threshold
— Overlap threshold1
Overlap threshold, specified positive scalar less than or equal to
1
. The amount of overlap between transformed boxes and the area
defined by the output view is defined as:
area(bbox intersect bounding rectangle) / area(bbox)
bounding rectangle — Defined by the input spatial reference
object, ref
.
bbox — Result of transforming boxes in
bboxA
.
If the computed overlap value is greater than the value of the
threshold
property, then the transformed boxes are clipped to the
bounding rectangle border. Otherwise, the boxes are discarded. Lowering the threshold
can result in parts of the object getting discarded.
bboxB
— Warped bounding boxesWarped bounding boxes, returned as an M2-by-N
matrix of M2 bounding boxes. The number of bounding boxes returned is
less than the number of bounding boxes in the input. Each row, M2, of
the matrix defines one bounding box of the same type as the input
bboxA
.
indices
— IndicesIndices, returned as a vector of integers. The indices indicate which bounding boxes
in the input, bboxA
, are within the cropping window.
bboxresize
| bboxwarp
| imcrop
You have a modified version of this example. Do you want to open this example with your edits?