主要内容

本页采用了机器翻译。点击此处可查看英文原文。

bboxwarp

对边界框应用几何变换

说明

bboxB = bboxwarp(bboxA,tform,ref) 根据 tform 定义的几何变换,对 bboxA 中的边界框进行变换。边界框可以是与坐标轴平行的矩形、旋转后的矩形或长方体。空间参考对象 ref 定义了用于对这些框进行变换的输出视图。该函数支持二维和三维边界框。

示例

bboxB = bboxwarp(bboxA,tform,ref,"OverlapThreshold",overlapThreshold) 还指定了正向重叠阈值。

[bboxB,indices] = bboxwarp(___) 还会返回一个索引向量,该向量指示 bboxA 中的哪些边界框对应于输出 bboxB 中的变换后版本。您可以指定上述任意一组参量。

示例

全部折叠

读取一个图像。

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"
    ];

定义一个仿射变换,用于对图像进行水平翻转和平移。

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

imwarp 创建一个输出视图。

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

对图像进行变换。

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

对边界框进行变换。

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

显示结果。

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

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

输入参数

全部折叠

边界框,指定为一个 M 行 × 4 列、M 行 × 5 列 或 M 行 × 9 列的非稀疏数值矩阵,其中包含 M 个边界框。矩阵的每一行 (M) 都定义了一个边界框,该边界框可以是轴对齐矩形、旋转矩形或长方体。下表介绍了边界框的格式。

边界框描述
与轴对齐的矩形

在空间坐标中定义为 M×4 数值矩阵,其行的形式为 [x y w h],其中:

  • M 是轴对齐矩形的数量。

  • xy 指定矩形的左上角。

  • w 指定矩形的宽度,即矩形沿 x 轴的长度。

  • h 指定矩形的高度,即矩形沿 y 轴的长度。

旋转矩形

在空间坐标中定义为 M×5 数值矩阵,其行的形式为 [xctr yctr xlen ylen yaw],其中:

  • M 是旋转矩形的数量。

  • xctryctr 指定矩形的中心。

  • xlen 指定矩形的宽度,即旋转前矩形沿 x 轴的长度。

  • ylen 指定矩形的高度,即旋转前矩形沿 y 轴的长度。

  • yaw 指定旋转角度(以度为单位)。围绕边界框的中心顺时针旋转。

Square rectangle rotated by -30 degrees.

长方体

在空间坐标系中,其定义为一个 M×9 的数值矩阵,其行形式为 [xctr yctr zctr xlen ylen zlen xrot yrot zrot],其中:

  • M 表示长方体的个数。

  • xctryctrzctr 指定了长方体的中心。

  • xlenylenzlen 分别指定了旋转前该长方体沿 x 轴、y 轴和 z 轴的方向长度。

  • xrotyrotzrot 分别指定了长方体绕 x 轴、y 轴和 z 轴的旋转角度。旋转角 xrotyrotzrot 是以长方体中心为基准的度数。每次旋转相对于相关空间轴的正方向而言均为顺时针正向旋转。该函数在假设欧拉角采用 ZYX 顺序 [xrot yrot zrot] 的情况下计算旋转矩阵。

该图窗展示了这些值如何决定长方体的位置。

几何变换,对于矩形输入,指定为 affinetform2d 对象;对于长方体输入,指定为 affinetform3d 对象。bboxwarp 函数支持仅包含缩放、旋转和平移的仿射变换。

注意

旋转后的矩形不支持镜像或剪切变换。

空间参考,对于矩形输入,指定为 imref2d 对象;对于长方体输入,指定为 imref3d 对象。要获取此类对象之一,可以使用 imwarpaffineOutputView 函数。该对象定义了用于转换框的输出视图。完全在 ref 定义的输出视图之外进行变换的变换器将被丢弃。

[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);

重叠阈值,指定为一个小于或等于 1 的正标量。变换后的框与由输出视图定义的区域 W 之间的重叠程度定义为:

area(intersect(bboxA,W))/area(bboxB,W)

如果计算出的重叠值大于 threshold 属性的值,则变换后的框会被裁剪至边界矩形的边界。否则,这些边界框将被丢弃。降低阈值可能会导致对象的部分区域被舍弃。

输出参量

全部折叠

变换后的边界框,以 M2 行、N 列的矩阵形式返回,该矩阵包含 M2 个边界框。返回的边界框数量少于输入中的边界框数量。矩阵的每一行 (M2) 都定义了一个与输入 (bboxA) 类型相同的边界框。当 bboxB 包含浮点数据时,该函数会将其以与 bboxA 相同的类型返回。否则,该函数将 bboxB 作为 single 类型返回。

索引,以整数向量的形式返回。这些索引指示了输入数据 bboxA 中哪些边界框对应于输出数据 bboxB 中的变形版本。

扩展功能

全部展开

版本历史记录

在 R2019b 中推出

全部展开