在图像匹配研究领域中,仿射变换图像是一个重要的研究对象,因此需要对仿射变换在图像中的操作有基本认识。学习了网上一些博客和教程,简单记录了一下:
图像的仿射变换主要包含以下一系列操作:翻转(Flip)、旋转(Rotation)、平移(Translation)、缩放(Scale)和错切(Shear)。
AffineTransform类描述了一种二维仿射变换的功能,它是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直性”(straightness)即变换后直线依然保持直线,圆弧还是圆弧;“平行性”(parallelness),即二维像素之间的相对位置关系不变,平行线还是平行线,相交直线的交角不变。
此类变换可以用一个3×3的矩阵来表示,其最后一行为(0, 0, 1)。该变换矩阵将原坐标(x, y, 1)变换为新坐标(x’, y’, 1),这里原坐标和新坐标皆视为最末一行为1的三维列向量,原列向量左乘变换矩阵得到新的列向量:
以下是几种仿射变换的函数调用形式:
public static AffineTransform getTranslateInstance(double tx, double ty)
平移变换是一种“刚体变换”,即变换前后不改变图像的局部形状,该函数将图像中每个点从原坐标(x, y)移动到(x+tx, y+ty),变换矩阵为:
public static AffineTransform getScaleInstance(double sx, double sy)
缩放变换也是一种典型的刚体变换,以上函数将每一点的横坐标放大(缩小)至sx倍,纵坐标放大(缩小)至sy倍,变换矩阵为:
public static AffineTransform getShearInstance(double shx, double shy)
错切变换与以上刚体变换不同,一个简单的错切变换是将正方形转变成平行四边形。每次的错切变换都会引起图像的形变,函数代表了以下的变换矩阵:
该函数的作用相当于对图像加上一个横向剪切加上一个纵向剪切:
public static AffineTransform getRotateInstance(double theta)
旋转变换也属于非刚体变换,目标图形以原点(0, 0)为圆心,顺时针旋转theta弧度,该函数等效的变换矩阵为:
public static AffineTransform getRotateInstance(double theta, double x, double y)
另一个推广的旋转变换函数,即对图像以(x, y)为轴心,顺时针旋转theta弧度,变换矩阵为:
该函数的作用相当于两次平移变换与一次原点旋转变换的复合:
http://blog.csdn.net/hitwengqi/article/details/6888783