图像的仿射变换与AffineTransform类

在图像匹配研究领域中,仿射变换图像是一个重要的研究对象,因此需要对仿射变换在图像中的操作有基本认识。学习了网上一些博客和教程,简单记录了一下:

图像的仿射变换主要包含以下一系列操作:翻转(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弧度,变换矩阵为:

该函数的作用相当于两次平移变换与一次原点旋转变换的复合:

参考链接:?url=1soBhJJ5n1AqKmXybLT37kE427lzRpKVq5-3pHLYaH96nWjy_4vYyMWvJuaDvT4iNPTICrOk20nIqx6qGxjM3_

走过的路成为背后的风景,不能回头不能停留,若此刻停留,

图像的仿射变换与AffineTransform类

相关文章:

你感兴趣的文章:

标签云: