然而,这些边界框的边缘与x& y轴。例如,
我想使用边界框坐标&然后旋转指针,使它们与x或y轴对齐。
编辑:
手牌如下:
但是,请记住矩形不是直的。所以,我必须旋转它才能理顺它。
答案 0 :(得分:6)
好的!
计算矩形的大小
width = sqrt( sum( (b-a).^2 ) );
height = sqrt( sum( (c-b).^2 ) );
计算从a
... d
到正直图像的仿射变换
Xin = [a(2) b(2) c(2) d(2)];
Yin = [a(1) b(1) c(1) d(1)];
Xout = [width 1 1 width];
Yout = [1 1 height height];
A = [Xin;Yin;ones(1,4)]';
B = [Xout; Yout]';
H = B \ A; % affine transformation
请注意,尽管我们允许fo H
为仿射,但角点的选择(取决于width
和height
)将确定H
不会扭曲裁剪的矩形。
可选择使用cp2tform
:
H2 = cp2tform( [Xin;Yin]', [Xout;Yout]', 'nonreflectivesimilarity' );
使用转换来获取相关的图像部分
thumb = tformarray( img, maketform( 'affine', H' ), ... %//'
makeresampler( 'cubic', 'fill' ), ...
1:2, 1:2, ceil( [height width] ), [], 0 );
可选择使用imtransform
:
thumb = imtransform( img, H2, 'bicubic' );
取决于如何存储角点的坐标(a
... d
)前两个步骤可以轻松地进行矢量化。
答案 1 :(得分:0)
您可以使用imrotate
命令旋转图像。
您可以使用索引裁剪图像(正确旋转后)。即
subimg = img( c(1):b(1), c(2):d(2) )
(注意,上面一行是假设,您通过imrotate
命令跟踪了角落,因此c(2)== b(2),c(1)== d(1)等)