MATLAB 帮助中心
本页采用了机器翻译。点击此处可查看英文原文。
对边界框应用几何变换
bboxB = bboxwarp(bboxA,tform,ref)
bboxB = bboxwarp(bboxA,tform,ref,"OverlapThreshold",overlapThreshold)
[bboxB,indices] = bboxwarp(___)
bboxB = bboxwarp(bboxA,tform,ref) 根据 tform 定义的几何变换,对 bboxA 中的边界框进行变换。边界框可以是与坐标轴平行的矩形、旋转后的矩形或长方体。空间参考对象 ref 定义了用于对这些框进行变换的输出视图。该函数支持二维和三维边界框。
bboxB
bboxA
tform
ref
示例
bboxB = bboxwarp(bboxA,tform,ref,"OverlapThreshold",overlapThreshold) 还指定了正向重叠阈值。
overlapThreshold
[bboxB,indices] = bboxwarp(___) 还会返回一个索引向量,该向量指示 bboxA 中的哪些边界框对应于输出 bboxB 中的变换后版本。您可以指定上述任意一组参量。
indices
全部折叠
读取一个图像。
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 创建一个输出视图。
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})
边界框,指定为一个 M 行 × 4 列、M 行 × 5 列 或 M 行 × 9 列的非稀疏数值矩阵,其中包含 M 个边界框。矩阵的每一行 (M) 都定义了一个边界框,该边界框可以是轴对齐矩形、旋转矩形或长方体。下表介绍了边界框的格式。
在空间坐标中定义为 M×4 数值矩阵,其行的形式为 [x y w h],其中:
M 是轴对齐矩形的数量。
x 和 y 指定矩形的左上角。
y
w 指定矩形的宽度,即矩形沿 x 轴的长度。
h 指定矩形的高度,即矩形沿 y 轴的长度。
在空间坐标中定义为 M×5 数值矩阵,其行的形式为 [xctr yctr xlen ylen yaw],其中:
M 是旋转矩形的数量。
xctr 和 yctr 指定矩形的中心。
xlen 指定矩形的宽度,即旋转前矩形沿 x 轴的长度。
ylen 指定矩形的高度,即旋转前矩形沿 y 轴的长度。
yaw 指定旋转角度(以度为单位)。围绕边界框的中心顺时针旋转。
在空间坐标系中,其定义为一个 M×9 的数值矩阵,其行形式为 [xctr yctr zctr xlen ylen zlen xrot yrot zrot],其中:
M 表示长方体的个数。
xctr、yctr 和 zctr 指定了长方体的中心。
xlen、ylen 和 zlen 分别指定了旋转前该长方体沿 x 轴、y 轴和 z 轴的方向长度。
xrot、yrot 和 zrot 分别指定了长方体绕 x 轴、y 轴和 z 轴的旋转角度。旋转角 xrot、yrot 和 zrot 是以长方体中心为基准的度数。每次旋转相对于相关空间轴的正方向而言均为顺时针正向旋转。该函数在假设欧拉角采用 ZYX 顺序 [xrot yrot zrot] 的情况下计算旋转矩阵。
ZYX
该图窗展示了这些值如何决定长方体的位置。
affinetform2d
affinetform3d
几何变换,对于矩形输入,指定为 affinetform2d 对象;对于长方体输入,指定为 affinetform3d 对象。bboxwarp 函数支持仅包含缩放、旋转和平移的仿射变换。
注意
旋转后的矩形不支持镜像或剪切变换。
imref2d
imref3d
空间参考,对于矩形输入,指定为 imref2d 对象;对于长方体输入,指定为 imref3d 对象。要获取此类对象之一,可以使用 imwarp 或 affineOutputView 函数。该对象定义了用于转换框的输出视图。完全在 ref 定义的输出视图之外进行变换的变换器将被丢弃。
affineOutputView
[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
重叠阈值,指定为一个小于或等于 1 的正标量。变换后的框与由输出视图定义的区域 W 之间的重叠程度定义为:
area(intersect(bboxA,W))/area(bboxB,W)。
area
intersect
如果计算出的重叠值大于 threshold 属性的值,则变换后的框会被裁剪至边界矩形的边界。否则,这些边界框将被丢弃。降低阈值可能会导致对象的部分区域被舍弃。
threshold
变换后的边界框,以 M2 行、N 列的矩阵形式返回,该矩阵包含 M2 个边界框。返回的边界框数量少于输入中的边界框数量。矩阵的每一行 (M2) 都定义了一个与输入 (bboxA) 类型相同的边界框。当 bboxB 包含浮点数据时,该函数会将其以与 bboxA 相同的类型返回。否则,该函数将 bboxB 作为 single 类型返回。
single
索引,以整数向量的形式返回。这些索引指示了输入数据 bboxA 中哪些边界框对应于输出数据 bboxB 中的变形版本。
全部展开
backgroundPool
ThreadPool
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
从 R2022b 开始,大多数 Computer Vision Toolbox™ 函数都使用前乘约定来创建和执行几何变换。因此,您现在可以将 tform 指定为 affinetform2d 或 affinetform3d 几何变换对象,这些对象采用前乘约定。
虽然您仍然可以将 tform 指定为 affine2d 或 affine3d 几何变换对象,但不建议使用这些对象,因为它们采用后乘约定。通过切换到新的前乘几何变换对象,可以简化几何变换工作流。有关详细信息,请参阅Migrate Geometric Transformations to Premultiply Convention。
affine2d
affine3d
bboxresize、bboxcrop、bboxwarp 和 showShape 函数假设轴对齐矩形的输入边界框坐标以空间坐标形式指定,并返回以空间坐标表示的变换后边界框。
bboxresize
bboxcrop
bboxwarp
showShape
imcrop | bboxcrop | bboxresize | imwarp | bboxerase
imcrop
bboxerase
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.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
欧洲
亚太
联系您当地的办事处