转自:http://fairywangyutang.blog.sohu.com/146834554.html

AffineTransform类描述了一种二维仿射变换的功能,它是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直性”(译注:straightness,即变换后直线还是直线不会打弯,圆弧还是圆弧)和“平行性”(译注:parallelness,其实是指保二维图形间的相对位置关系不变,平行线还是平行线,相交直线的交角不变。大二学过的复变,“保形变换/保角变换”都还记得吧,数学就是王道啊!)。仿射变换可以通过一系列的原子变换的复合来实现,包括:平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)。

此类变换可以用一个3×3的矩阵来表示,其最后一行为(0, 0, 1)。该变换矩阵将原坐标(x, y)变换为新坐标(x', y'),这里原坐标和新坐标皆视为最末一行为(1)的三维列向量,原列向量左乘变换矩阵得到新的列向量:

[x']    [m00 m01 m02] [x]    [m00*x+m01*y+m02]
[y'] = [m10 m11 m12] [y] = [m10*x+m11*y+m12]
[1 ]   [ 0      0      1   ] [1]    [              1             ]

几种典型的仿射变换:

public static AffineTransform getTranslateInstance(double tx, double ty)

平移变换,将每一点移动到(x+tx, y+ty),变换矩阵为:
[   1    0    tx ]
[   0    1    ty ]
[   0    0    1   ]
(译注:平移变换是一种“刚体变换”,rigid-body transformation,中学学过的物理,都知道啥叫“刚体”吧,就是不会产生形变的理想物体,平移当然不会改变二维图形的形状。同理,下面的“旋转变换”也是刚体变换,而“缩放”、“错切”都是会改变图形形状的。)

public static AffineTransform getScaleInstance(double sx, double sy)

缩放变换,将每一点的横坐标放大(缩小)至sx倍,纵坐标放大(缩小)至sy倍,变换矩阵为:
[   sx   0    0   ]
[   0    sy   0   ]
[   0    0    1   ]

public static AffineTransform getShearInstance(double shx, double shy)

剪切变换,变换矩阵为:
[   1   shx   0   ]
[ shy   1    0   ]
[   0     0    1   ]
相当于一个横向剪切与一个纵向剪切的复合
[   1      0    0   ][   1   shx   0   ]
[ shy   1    0   ][   0     1     0   ]
[   0      0    1   ][   0    0     1   ]
(译注:“剪切变换”又称“错切变换”,指的是类似于四边形不稳定性那种性质,街边小商店那种铁拉门都见过吧?想象一下上面铁条构成的菱形拉动的过程,那就是“错切”的过程。)

public static AffineTransform getRotateInstance(double theta)

旋转变换,目标图形围绕原点顺时针旋转theta弧度,变换矩阵为:
[   cos(theta)    -sin(theta)    0   ]
[   sin(theta)     cos(theta)    0   ]
[       0                0             1   ]

public static AffineTransform getRotateInstance(double theta, double x, double y)

旋转变换,目标图形以(x, y)为轴心顺时针旋转theta弧度,变换矩阵为:
[   cos(theta)    -sin(theta)    x-x*cos+y*sin]
[   sin(theta)     cos(theta)    y-x*sin-y*cos ]
[       0                 0                  1             ]
相当于两次平移变换与一次原点旋转变换的复合:
[1 0 -x][cos(theta) -sin(theta) 0][1 0 x]
[0 1 -y][sin(theta)   cos(theta) 0][0 1 y]
[0 0 1 ][     0                0        1 ][0 0 1]

图像处理-仿射变换 AffineTransform相关推荐

  1. 数字图像处理 - 仿射变换

    几何变换 几何变换 = 坐标的空间变换(最常用的就是 仿射变换) + 插值 仿射变换 设  为原图像中的坐标, 为变换后图像中的坐标,图像的仿射变换可以表示为: 对应的矩阵表示为: [注]:添加 1 ...

  2. JsCV Core v0.2发布 Javascript图像处理系列目录

    JsCV Core是一个开源的Javascript图像处理核心库,其在MIT许可下发布. 简介 本质上JsCV是旨在:用Javascript做一些Computer Vision(计算机视觉)的事情的. ...

  3. [Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  4. 图像处理之基础---仿射变换

    几种典型的仿射变换: public static AffineTransform getTranslateInstance(doubl 仿射变换-例 e tx, double ty) 平移变换,将每一 ...

  5. python图像处理(十)——图像仿射变换、图像透视变换和图像校正

    一.图像仿射变换 1.原理 仿射变换(Affine Transformation 或Affine Map)是一种二维坐标(x, y)到二维坐标(u, v)的线性变换,转换过程坐标点的相对位置和属性不发 ...

  6. 【数字图像处理】-- 弄懂等距变换(刚性变换)、相似变换、仿射变换、透视变换(投影变换)

    目录 概述(Introduction) 等距变换(Euclidean Transformation) 平移变换(Translation Transformation) 旋转变换(Rotation Tr ...

  7. OpenCV-Python图像处理:仿射变换详解及案例

    仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 *图像仿射变换原理2:矩阵变换.线性变换和图像线性变换矩阵 *图像仿射变换原理3:仿射变换类型及变换矩阵详解 ...

  8. 仿射变换(AffineTransform)与仿射矩阵

    前言 仿射变换(Affine transformation),又称仿射映射,是指在几何中,对一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间. 它是一种二维坐标到二维坐标间的线性变换, ...

  9. OpenCV之imgproc 模块. 图像处理(3)霍夫线变换 霍夫圆变换 Remapping 重映射 仿射变换

    霍夫线变换 目标 在这个部分您将学习到: 使用OpenCV的以下函数 HoughLines 和 HoughLinesP 来检测图像中的直线. 原理 Note 以下原理的说明来自书籍 学习OpenCV  ...

最新文章

  1. 【iOS 开发】iOS 10.3 如何更换 app 图标
  2. linux下安装cmake
  3. python 字符串可以直接连接吗_如何连接字符串。。。在?(Python)
  4. 执行在一行中组合多个Linux命令
  5. 更改Visual Studio 2010/2012/2008的主题设置
  6. boost::mpl模块实现eval_if相关的测试程序
  7. 2011年2月--2011年7月数据库性能优化过程
  8. web前端开发---弃Hbuilder编辑器到Atom插件推荐,快捷键,快速编辑html 使用
  9. 蓝桥杯单片机:12届省赛
  10. 【安装包】gcc编译器
  11. Android EditText 常见问题总结
  12. 网卡变慢_解Bug之路记一次线上请求偶尔变慢的排查
  13. SAP Smartform转成PDF方法汇总
  14. 格式化日期为xxxx-xx-xx hh:mm:ss
  15. CnPack 自动完成 回车时替换整个标识符
  16. 4个小时实现一个HTML5音乐播放器
  17. adf4351_配置MySQL以进行ADF开发
  18. PyConChina 2019 深圳站之行
  19. google的搜索技巧(很全的)
  20. C# SolidWorks 二次开发 API ---创建异型孔特征

热门文章

  1. 3. 5种常见卷积论文、解读、使用方法、实现代码整理(conv)
  2. 【camera-radar】相机-毫米波雷达联合标定方案介绍+实现
  3. CV算法复现(分类算法3/6):VGG(2014年 牛津大学)
  4. Vue.js框架简单读取数据库信息并渲染完成news新闻文章列表以及detail详情页功能(小试牛刀)
  5. 实验一 编程 Hello World
  6. SketchUp Pro 2021基础入门学习视频教程
  7. Blender2.9全流程创建逼真未来科幻蝙蝠汽车视频教程
  8. 分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论
  9. 小程序全局状态管理,在页面中获取globalData和使用globalSetData
  10. 漫画:禅道程序员的一天