bboxwarp
Apply geometric transformation to bounding boxes
Syntax
Description
transforms bounding boxes in bboxB
= bboxwarp(bboxA
,tform
,ref
)bboxA
according to the geometric
transformation defined by tform
. Bounding boxes can be axisaligned
rectangles, rotated rectangles, or cuboids. The spatial reference object,
ref
, defines the output view into which the boxes are transformed.
This function supports 2D and 3D bounding boxes.
also specifies the positive overlap threshold.bboxB
= bboxwarp(bboxA
,tform
,ref
,"OverlapThreshold",overlapThreshold
)
Examples
Transform Images and Corresponding 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" ];
Define an affine transform to horizontally flip and translate the image.
tform = affinetform2d([1 0 50; 0 1 50; 0 0 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); figure montage({annotatedI,annotatedJ})
Input Arguments
bboxA
— Bounding boxes
Mby4 matrix  Mby5 matrix  Mby9 matrix
Bounding boxes, specified as an Mby4, Mby5, or Mby9 nonsparse numeric matrix of M bounding boxes. Each row, M, of the matrix defines a bounding box as either an axisaligned rectangle, a rotate rectangle, or a cuboid. The table below describes the format of the bounding boxes.
Bounding Box  Description 

Axisaligned rectangle 
Defined in spatial coordinates as an Mby4 numeric matrix with rows of the form [x y w h], where:

Rotated rectangle 
Defined in spatial coordinates as an Mby5 numeric matrix with rows of the form [xctr yctr xlen ylen yaw], where:

Cuboid 
Defined in spatial coordinates as an Mby9 numeric matrix with rows of the form [xctr yctr zctr xlen ylen zlen xrot yrot zrot], where:
The figure shows how these values determine the position of a cuboid. 
tform
— Geometric transformation
affinetform2d
object  affinetform3d
object
Geometric transformation, specified as an affinetform2d
object for rectangular inputs or an affinetform3d
object for cuboid inputs. The bboxwarp function supports affine transformations
consisting only of scale, rotation, and translation.
Note
Rotated rectangles do not support reflection or shear transformations.
ref
— Spatial reference
imref2d
object  imref3d
object
Spatial reference, specified as an imref2d
object for rectangular inputs or imref3d
object for cuboid inputs. To obtain one of these objects, you can
use the imwarp
or the
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);
overlapThreshold
— Overlap threshold
1
(default)  positive scalar less than or equal to 1
Overlap threshold, specified as a positive scalar less than or equal to
1
. The amount of overlap between transformed boxes and the region
W, defined by the output view, is defined as:
area
(intersect
(bboxA
,W))/area
(bboxB
,W).
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
bboxB
— Warped bounding boxes
M2byN matrix
Warped bounding boxes, returned as an M2byN
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
. When bboxB
contains floating point
data, the function returns it with the same type as bboxA
.
Otherwise, the function returns bboxB
as type
single
.
Version History
Introduced in R2019bR2022b: Supports new geometric transformation objects
Starting in R2022b, most Computer Vision Toolbox™ functions create and perform geometric transformations using the premultiply
convention. Accordingly, you can now specify tform
as an affinetform2d
or
affinetform3d
geometric transformation object, which use the premultiply convention.
Although you can still specify tform
as an
affine2d
or affine3d
geometric transformation object,
these objects are not recommended because they use the postmultiply convention. You can
streamline your geometric transformation workflows by switching to the new premultiply
geometric transformation objects. For more information, see Migrate Geometric Transformations to Premultiply Convention.
R2022a: Bounding Box Coordinates: Data augmentation for object detection using spatial coordinates
The bboxresize
,
bboxcrop
,
bboxwarp
, and
showShape
functions assume the input bounding box coordinates for axisaligned rectangles are
specified in spatial coordinates and return the transformed bounding boxes in spatial
coordinates.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
 América Latina (Español)
 Canada (English)
 United States (English)
Europe
 Belgium (English)
 Denmark (English)
 Deutschland (Deutsch)
 España (Español)
 Finland (English)
 France (Français)
 Ireland (English)
 Italia (Italiano)
 Luxembourg (English)
 Netherlands (English)
 Norway (English)
 Österreich (Deutsch)
 Portugal (English)
 Sweden (English)
 Switzerland
 United Kingdom (English)