MATLAB 仿射变换

时间:2024-03-15 15:56:44

首先,先简单介绍下仿射变换的基本原理。

MATLAB 仿射变换

如下图,matlab中通过定义一个3×3的矩阵实现仿射变换(平移、缩放、旋转等)。注意到,变换矩阵的第三列恒为【0,0,1】,实际上,确定一个仿射变换只需要一个2×3的变换矩阵即可。

MATLAB 仿射变换

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);

MATLAB 仿射变换

二:已知变换图像坐标,求变换矩阵

要对一个仿射变换使用此方法,需要在输入、输出图像上拾取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。

参考文献:http://blog.sina.com.cn/s/blog_6163bdeb0102du23.html