在Matlab中旋转边界框

克里斯·帕里

我在图像上绘制了一个边界框:

bbox = [50 20 200 50];
figure; imshow('coins.png'); 
hold on; 
rectangle('Position', bbox, 'EdgeColor','r', 'LineWidth', 3);
hold off;

如何将边界框绕形心旋转bbox30度,然后获取新框的坐标,因此可以将其用于inpolygon

更新:请使用定义为[xy width height]的边框。

hai

要旋转边界框的坐标,只需定义适当的旋转矩阵

首先定义四个角的坐标:

X = [bbox(1), bbox(1), bbox(1)+bbox(3), bbox(1)+bbox(3), bbox(1)];
Y = [bbox(2), bbox(2)+bbox(4), bbox(2)+bbox(4), bbox(2), bbox(2)];

旋转总是围绕原点旋转时(0,0),如果你想绕盒子的中心,你需要调整XY前后旋转后

Cx = bbox(1)+0.5*bbox(3);
Cy = bbox(2)+0.5*bbox(4);

旋转中

Xr = X-Xc; %// subtract center
Yr = Y-Cy;
Xr = cosd(30)*Xr-sind(30)*Yr; %// rotate
Yr = sind(30)*Xr+cosd(30)*Yr;
Xr = Xr+Xc; %// add center back
Yr = Yr+Yc;

现在您可以绘制旋转框

plot( Xr, Yr );

您可以使用XrYr作为xvyv论据inpolygon


所有这些代数运算都可以使用齐次坐标更优雅地完成,从而可以将平移(减去/加上rect的中心)表示为矩阵乘法。

H = [X;Y;ones(1,5)]; %// points as 3D homogeneous coordinates
Tc = [1 0 -Cx; 0 1 -Cy; 0 0 1]; %// translation as a matrix
Tr = [cosd(30) -sind(30) 0; sind(30) cosd(30) 0; 0 0 1]; %// rotation
Hr = inv(Tc) * Tr * Tc * H; %// all transformations as matrix products

plot( Hr(1,:), Hr(2,:) ); %// the rotated rect

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章