好的!
第一步:
计算矩形的大小
width = sqrt( sum( (b-a).^2 ) );
height = sqrt( sum( (c-b).^2 ) );
第二步:
计算从…到正面图像的仿射变换
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
请注意,尽管我们允许f H是仿射的,角的选择(取决于宽度和高度)将确定H不会扭曲裁剪的矩形.
H2 = cp2tform( [Xin;Yin]', [Xout;Yout]', 'nonreflectivesimilarity' );
第三步
使用变换获取相关图像部分
thumb = tformarray( img, maketform( 'affine', H' ), ... %//'
makeresampler( 'cubic', 'fill' ), ...
1:2, 1:2, ceil( [height width] ), [], 0 );
thumb = imtransform( img, H2, 'bicubic' );
关于矢量化的说明:
取决于如何存储角的坐标(a … d)前两个步骤可以很容易地进行矢量化.