在Matlab

时间:2015-09-30 05:15:48

标签: matlab image-processing plot bounding-box

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

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

如何围绕质心旋转边界框bbox 30度,然后获取新框的坐标,以便我可以将其与inpolygon一起使用?

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

1 个答案:

答案 0 :(得分:2)

要旋转边界框的坐标,您只需要定义正确的rotation matrix

首先定义四个角的坐标:

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用作xv的{​​{1}}和yv个参数。

所有这些代数操作都可以使用homogeneous coordinates更优雅地完成,这允许平移(减去/添加矩形的中心)表示为矩阵乘法。

inpolygon