Apply geometric transformation to bounding boxes



bboxB = bboxwarp(bboxA,tform,ref) transforms bounding boxes in bboxA according to the geometric transformation defined by tform. The spatial reference object, ref, defines the output view into which the boxes are transformed.

[bboxB,indices] = bboxwarp(bboxA,tform,ref) additionally returns a vector of indices that indicate which bounding boxes in bboxA correspond to the warped versions in the output, bboxB.

[___] = bboxwarp(___,'OverlapThreshold',threshold) additionally sets an overlap threshold.


collapse all

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 = [

Define a transform to horizontally flip and translate the image.

tform = affine2d([-1 0 0; 0 1 0; 50 50 1]);

Create an output view for imwarp.

rout = affineOutputView(size(I),tform);

Warp the image.

J = imwarp(I,tform,'OutputView',rout);

Warp the boxes.

[bboxB,indices] = bboxwarp(bboxA,tform,rout);
labelsB = labelsA(indices);

Display the results.

annotatedI = insertObjectAnnotation(I,'Rectangle',bboxA,labelsA);
annotatedJ = insertObjectAnnotation(J,'Rectangle',bboxB,labelsB);
montage({annotatedI, annotatedJ})

Input Arguments

collapse all

Bounding boxes, specified as an M-by-4 matrix of M bounding boxes. Each row, M, of the matrix defines a bounding box as a four-element vector [x,y,width,height] in pixel coordinates.

Geometric transformation, specified in an affine2d object.

Spatial reference, specified as an imref2d object returned by the imwarp or affineOutputView function. The object defines the output view to transform boxes. Boxes that are transformed completely outside of the output view defined by ref are discarded.

[J,rout] = imwarp(I,tform);
[bboxB,indices] = bboxwarp(bboxA,tform,rout);
rout = affineOutputView(size(I),tform)
J = imwarp(I,tform,'OutputView',rout);
[bboxB,indices] = bboxwarp(bboxA,tform,rout);

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.

Output Arguments

collapse all

Warped bounding boxes, returned as an N-by-4 matrix of N bounding boxes. The number of bounding boxes returned is less than the number of bounding boxes in the input. Each row, N, of the matrix defines one axis-aligned bounding box in pixels coordinates, as a four-element vector [x,y,width,height] in pixel coordinates.

Indices, returned as a vector of integers. The indices indicate which bounding boxes in the input, bboxA, that correspond to the warped versions in the output, bboxB.

Introduced in R2019b