我在图像上绘制了一个边界框:
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]的边界框。
答案 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)
旋转,如果您想围绕框的中心旋转,则需要在旋转前后调整X
和Y
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 );
您可以将Xr
和Yr
用作xv
的{{1}}和yv
个参数。
所有这些代数操作都可以使用homogeneous coordinates更优雅地完成,这允许平移(减去/添加矩形的中心)表示为矩阵乘法。
inpolygon