首先,先简单介绍下仿射变换的基本原理。
如下图,matlab中通过定义一个3×3的矩阵实现仿射变换(平移、缩放、旋转等)。注意到,变换矩阵的第三列恒为【0,0,1】,实际上,确定一个仿射变换只需要一个2×3的变换矩阵即可。
matlab 仿射变换主要有三种常用形式。
一:自定义变换矩阵
xform = [ 1 0 0 ; 0 1 0 ; 40 40 1]; 在这个矩阵中,xform(3, 1)定义了图像在水平方向上平移的像素数,
xform(3, 2)定义了图像在垂直方向上平移的像素数。 创建TFORM结构体: tform_translate =
maketform(‘affine’, xform);
执行变换: [cb_trans xdata ydata]= imtransform(cb, tform_translate);
二:已知变换图像坐标,求变换矩阵
要对一个仿射变换使用此方法,需要在输入、输出图像上拾取3对非线性的点,而对于投影变换,则需要指定四对点。
in_points = [11 11;21 11; 21 21];
out_points = [51 51;61 51;61 61];
tform2 = maketform(‘affine’, in_points, out_points)
三:已知匹配的特征对,求变换矩阵
图像的特征点匹配运用十分广泛,如SIFT、SURFF,当我们对图像特征点匹配成功后,可利用estimateGeometricTransform函数,实现几何变换求解。同样,可以得到一个3×3的变换矩阵tform。
[tform,inlierPtsDistorted,inlierPtsOriginal]=estimateGeometricTransform(matchedPtsDistorted,matchedPtsOriginal,’similarity’);
另外,imtransform函数还支持几个可选输入参数来控制转换的不同效果,如输出图像的大小、填充值等。详情自行help。