图像的仿射变换与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弧度,变换矩阵为:

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

参考链接:http://baike.baidu.com/link?url=1soBhJJ5n1AqKmXybLT37kE427lzRpKVq5-3pHLYaH96nWjy_4vYyMWvJuaDvT4iNPTICrOk20nIqx6qGxjM3_

http://blog.csdn.net/hitwengqi/article/details/6888783

时间: 2024-10-31 14:57:58

图像的仿射变换与AffineTransform类的相关文章

对图像的仿射变换

仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间 线性变换包含了平移,缩放,旋转,镜像,斜切,正交投影,线性变换在几何上可能造成拉伸但是不会直线不会出现弯折. 在OpenCV里仿射变换通过一个2x3的矩阵来表示,前面两列表示旋转.缩放.斜切.镜像等,后面两列表示x,y方向平移 下面我们来通过仿射变换来实现图像的平移.缩放.旋转 平移:(向X轴方向平移100像素) 只平移的话,前面两列单位矩阵,后面一列数据(100,0) 缩放:(x轴缩放0.3

十一. 图形、图像与多媒体4.Graphics类的绘图方法

Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力.本节讲解Graphics类,下节讲解Graphics2D. Graphics类提供基本的几何图形绘制方法,主要有:画线段.画矩形.画圆.画带颜色的图形.画椭圆.画圆弧.画多边形等. 1. 画线在窗口画一条线段,可以使用Graphics类的drawLine()方法:    drawLine(int x1,int y1,int x2,int y2)例如,以下代码在点(3,3)与点(50,50)之间画线段,在点(100,1

图像配准建立仿射变换模型并用RANSAC算法评估

当初选方向时就因为从小几何就不好.缺乏空间想像能力才没有选择摄影测量方向而是选择了GIS.昨天同学找我帮他做图像匹配,这我哪里懂啊,无奈我是一个别人有求于我,总是不好意思开口拒绝的人.于是乎就看着他给的一章节内容开始写程序了,今天总算给他完成了.做的比较简单,中间也遇到了不少问题,尤其是计算量大的问题,由于老师给的数据是粗配准过的数据, RANSAC算法评估时就简化了下. 理论内容: 第5章 图像配准建立几何变换模型 特征点建立匹配关系之后,下一步就是求解图像之间的变换关系.仿射变换能够很好的表

第六章 - 图像变换 - 图像拉伸、收缩、扭曲、旋转[1] - 仿射变换(cvWarpAffine)

拉伸.收缩.扭曲.旋转是图像的几何变换,在三维视觉技术中大量应用到这些变换,又分为仿射变换和透视变换.仿射变换通常用单应性建模,利用cvWarpAffine解决密集映射,用cvTransform解决稀疏映射.仿射变换可以将矩形转换成平行四边形,它可以将矩形的边压扁但必须保持边是平行的,也可以将矩形旋转或者按比例变化.透视变换提供了更大的灵活性,一个透视变换可以将矩阵转变成梯形.当然,平行四边形也是梯形,所以仿射变换是透视变换的子集. 本小节实现图像的仿射变换. -----------------

WorldWind源码剖析系列:图像助手类ImageHelper

图像助手类ImageHelper封装了对各种图像的操作.该类类图如下. 提供的主要处理方法基本上都是静态函数,简要描述如下: public static bool IsGdiSupportedImageFormat(string imageFileName) 静态函数用给定的图像文件名称来判断该图像是否是Windows GDI+支持的图像. public static Texture LoadTexture(string textureFileName) 静态函数从指定的图像文件路径加载并返回纹

Qt可显示基本的图像类型,利用QImage、QPxmap类可以实现图像的显示

Qt可显示基本的图像类型,利用QImage.QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放.旋转). 1. Qt可显示的图像类型 参考Qt的帮助文档,可支持的类型,即可以直接读取并显示的格式有BMP.GIF.JPG.JPEG.PNG.TIFF.PBM.PGM.PPM.XBM.XPM. 2. Qt用如何显示图像 通常用QLabel显示图像,QLabel类有setPixmap()函数,可以用来显示图像.也可以直接用QPainter画出图像. 如果图像过大,直接用QL

FilterEngine 类解析——OpenCV图像滤波核心引擎(zz)

<2>FilterEngine 类解析——OpenCV图像滤波核心引擎 FilterEngine类是OpenCV关于图像滤波的主力军类,OpenCV图像滤波功能的核心引擎.各种滤波函数比如blur, GaussianBlur,到头来其实是就是在函数末尾处定义了一个Ptr<FilterEngine>类型的f,然后f->apply( src, dst )了一下而已. 这个类可以把几乎是所有的滤波操作施加到图像上.它包含了所有必要的中间缓存器.有很多和滤波相关的create系函数的

图像仿射变换/旋转

import cv2import numpy as npimg = cv2.imread('../img/zidan.jpg',1)imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]matSrc = np.float32([[0,0],[0,height-1],[width-1,0]])#输入图像对应的三角形的顶点坐标matDst = np.float32([[50,50],[100,height-50],[width-200,100

Java_常用工具类收集

一.日期工具类 package com.ebd.application.common.utils; import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.time.DateFormatUtils;