图像处理-仿射变换 AffineTransform
转自: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 ...
- JsCV Core v0.2发布 Javascript图像处理系列目录
JsCV Core是一个开源的Javascript图像处理核心库,其在MIT许可下发布. 简介 本质上JsCV是旨在:用Javascript做一些Computer Vision(计算机视觉)的事情的. ...
- [Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- 图像处理之基础---仿射变换
几种典型的仿射变换: public static AffineTransform getTranslateInstance(doubl 仿射变换-例 e tx, double ty) 平移变换,将每一 ...
- python图像处理(十)——图像仿射变换、图像透视变换和图像校正
一.图像仿射变换 1.原理 仿射变换(Affine Transformation 或Affine Map)是一种二维坐标(x, y)到二维坐标(u, v)的线性变换,转换过程坐标点的相对位置和属性不发 ...
- 【数字图像处理】-- 弄懂等距变换(刚性变换)、相似变换、仿射变换、透视变换(投影变换)
目录 概述(Introduction) 等距变换(Euclidean Transformation) 平移变换(Translation Transformation) 旋转变换(Rotation Tr ...
- OpenCV-Python图像处理:仿射变换详解及案例
仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 *图像仿射变换原理2:矩阵变换.线性变换和图像线性变换矩阵 *图像仿射变换原理3:仿射变换类型及变换矩阵详解 ...
- 仿射变换(AffineTransform)与仿射矩阵
前言 仿射变换(Affine transformation),又称仿射映射,是指在几何中,对一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间. 它是一种二维坐标到二维坐标间的线性变换, ...
- OpenCV之imgproc 模块. 图像处理(3)霍夫线变换 霍夫圆变换 Remapping 重映射 仿射变换
霍夫线变换 目标 在这个部分您将学习到: 使用OpenCV的以下函数 HoughLines 和 HoughLinesP 来检测图像中的直线. 原理 Note 以下原理的说明来自书籍 学习OpenCV ...
最新文章
- 【iOS 开发】iOS 10.3 如何更换 app 图标
- linux下安装cmake
- python 字符串可以直接连接吗_如何连接字符串。。。在?(Python)
- 执行在一行中组合多个Linux命令
- 更改Visual Studio 2010/2012/2008的主题设置
- boost::mpl模块实现eval_if相关的测试程序
- 2011年2月--2011年7月数据库性能优化过程
- web前端开发---弃Hbuilder编辑器到Atom插件推荐,快捷键,快速编辑html 使用
- 蓝桥杯单片机:12届省赛
- 【安装包】gcc编译器
- Android EditText 常见问题总结
- 网卡变慢_解Bug之路记一次线上请求偶尔变慢的排查
- SAP Smartform转成PDF方法汇总
- 格式化日期为xxxx-xx-xx hh:mm:ss
- CnPack 自动完成 回车时替换整个标识符
- 4个小时实现一个HTML5音乐播放器
- adf4351_配置MySQL以进行ADF开发
- PyConChina 2019 深圳站之行
- google的搜索技巧(很全的)
- C# SolidWorks 二次开发 API ---创建异型孔特征
热门文章
- 3. 5种常见卷积论文、解读、使用方法、实现代码整理(conv)
- 【camera-radar】相机-毫米波雷达联合标定方案介绍+实现
- CV算法复现(分类算法3/6):VGG(2014年 牛津大学)
- Vue.js框架简单读取数据库信息并渲染完成news新闻文章列表以及detail详情页功能(小试牛刀)
- 实验一 编程 Hello World
- SketchUp Pro 2021基础入门学习视频教程
- Blender2.9全流程创建逼真未来科幻蝙蝠汽车视频教程
- 分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论
- 小程序全局状态管理,在页面中获取globalData和使用globalSetData
- 漫画:禅道程序员的一天