参考链接:

http://blog.csdn.net/u012380663/article/details/43273527

http://blog.csdn.net/xiaowei_cqu/article/details/26471527

序言

在图像处理中,对图像进行二维变换有仿射变换(Affine Transformation),透视变换(Perspective Transformation)(应该还有其他变换,但是我用到的比较多的是这两种变换)。

一、仿射变换

1、概念

仿射变换(Affine Transformation)是空间直角坐标系的变换,从一个二维坐标变换到另一个二维坐标,仿射变换是一个线性变换,他保持了图像的“平行性”和“平直性”,即图像中原来的直线和平行线,变换后仍然保持原来的直线和平行线,仿射变换比较常用的特殊变换有平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)。

图1.仿射变换

2、仿射变换的变换公式推导

在opencv提供的仿射变换中,变换的公式是一个2*3的矩阵,如下:

A是仿射变换2*3矩阵,M是2*2矩阵,表示坐标轴的旋转和缩放,B是2*1矩阵,是坐标轴平移矩阵。

坐标变换如下:

可以看出,A矩阵只有6个参数,所以只要知道3个点之间的仿射变换,就可以求出A矩阵。

二、透视变换

透视变换(Perspective Transformation)是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。

图2.透视变换

透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。通用的变换公式为:

u,v是原始图片左边,对应得到变换后的图片坐标x,y,其中

变换矩阵

可以拆成4部分,

表示线性变换,比如scaling,shearing和ratotion。

用于平移,

产生透视变换。所以可以理解成仿射等是透视变换的特殊形式。经过透视变换之后的图片通常不是平行四边形(除非映射视平面和原来平面平行的情况)。

重写之前的变换公式可以得到:

所以,已知变换对应的几个点就可以求取变换公式。反之,特定的变换公式也能新的变换后的图片。简单的看一个正方形到四边形的变换:

变换的4组对应点可以表示成:

根据变换公式得到:

定义几个辅助变量:

都为0时变换平面与原来是平行的,可以得到:

不为0时,得到:

求解出的变换矩阵就可以将一个正方形变换到四边形。反之,四边形变换到正方形也是一样的。于是,我们通过两次变换:四边形变换到正方形+正方形变换到四边形就可以将任意一个四边形变换到另一个四边形。

所以,我们可以发现仿射变换就是特殊的透射变换,这里我们在理解它们的变换矩阵时一定要将矩阵分部分析,比如之前的一部分是用来旋转和缩放,一部分是用来平移,还有一部分是用来透射;

之前的(x , y , w)中,w的意义我觉得它就是指投影点到面上的“距离”,这里之所以打引号我个人认为它不是物理距离,更多的带有一种数学上的“单位1”的意义;

两者异同:

所以对于仿射变换,一般地w = w' , 也就是依然是这个平面,所以就相当于一个2D平面变换(忽略了投影点);

对于透射变换,一般的w' = f(w) , f即相应的透射变换,所以这里就是投影点通过这个面投射到另一个承影面,这里投影点就显示了它的功能,所以我们说仿射变换是特殊的透射变换;

java仿射变换_仿射变换和透射变换相关推荐

  1. 单应性矩阵和仿射变换_仿射变换透射变换单应性矩阵

    答:使用perspectiveTransform(). findHomography 函数是求两幅图像的单应性矩阵,它是一个3*3的矩阵,但这里的单应性矩阵和3D重建中的单应性矩阵(透视矩阵3*4)是 ...

  2. (三) OpenCV仿射变换与透射变换(Affine and Perspective Transform)

    图像最基本的变换即仿射变换(Affine Transform)和透射变换(Perspective Transform).仿射变换是对一个向量空间进行一次线性变换并接上一次平移.透射变换是中心投影的射影 ...

  3. 变换模型——仿射变换和透射变换

    仿射变换是投射变换的一个特例 仿射变换:6参数 投射变换:8参数 仿射变换:包括线性变换(旋转.剪切.缩放)及平移:特点:平行的线变换后依然保持平行.任意的仿射变换都能表示为乘一个矩阵(线性变换),再 ...

  4. OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔

    1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小. API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参 ...

  5. Python+OpenCV:仿射变换和透射变换

    Python+OpenCV:仿射变换和透射变换 仿射变换 ####################################################################### ...

  6. [图像几何变换]——图像的仿射变换、透射变换及图像金字塔

    一.仿射变换 [图像预处理] 1.介绍 图像的仿射变换涉及到图像的形状位置角度的变化,是深度学习预处理中常用的功能,仿射变换主要是对图像的缩放.旋转.翻转和平移等操作的组合.注意:变换矩阵中是6个点, ...

  7. 图像仿射变换原理4:组合变换及对应变换矩阵

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 ...

  8. 离散余弦变换java实现_离散余弦变换(含源码)

    图像处理中常用的正交变换除了傅里叶变换外,还有其他一些有用的正交变换,其中离散余弦就是一种.离散余弦变换表示为DCT( Discrete Cosine Transformation),常用于图像处理和 ...

  9. [图片校准(矫正)]——透射变换应用

    如果想要对图像进行校准,那么透射变换是非常有效的变换方法. 透射变换的定义如下:将图像投影到一个新的视平面,通常也成为投影映射. 详情参考链接:透射变换介绍 1.举例说明 直观的来看,透视变换的作用就 ...

最新文章

  1. CSS核心内容整理 - (中)
  2. robot framework 使用三:他们主动浏览器的兼容性
  3. 2020 我的C++学习之路 C++PrimerPlus第六章课后习题
  4. java编程石头剪刀布_java 开发的石头,剪刀,布的游戏 demo
  5. python变量的使用_python – 如何在变量中使用冒号(:)
  6. android学习笔记---31_多线程断点下载器,下载原理实现
  7. java 哈希表入门
  8. mysql 常用函数总计
  9. 最新手机号码归属地数据库(2017年4月1日)
  10. 真好玩python教孩子学编程_Python真好玩:教孩子学编程(全彩印刷))简介,目录书摘...
  11. 超强媒体阵容护航,第一届区块链技术及应用峰会(BTA)·中国引爆开年狂潮
  12. 为什么新网站上线一个月都没有收录?
  13. 便携式三星mysql_三星折叠手机终于来了!9 月 18 日正式发售
  14. 星星泪用计算机怎么弹,星星泪简谱
  15. 计算机网络常见的面试题(牛客网总结)
  16. python从入门到弃坑中子弹部分的问题
  17. 解决电脑搜不到WiFi6无线路由信号问题
  18. 连续型随机变量的分布(均匀分布、指数分布、正态分布)
  19. 深度学习图像超分辨率开山之作SRCNN——原理分析及代码(效果基本可以达到论文中的效果)
  20. C++ 多继承(有多个父亲)

热门文章

  1. Linux安装tomcat、无法启动的解决方案
  2. Nginx虚拟主机与域名解析
  3. win7 网络打印机 未授予用户在此计算机上的请求登录类型,如何解决Win7“未授予用户在此计算机上的请求登录类型quot;问题 - Win10专业版官网...
  4. mysql视图的创建查询和删除
  5. linux加密压缩文件命令,linux 系统下 zip 的加密压缩与解压缩命令
  6. 询盘还盘等国际贸易(转)
  7. HTML鼠标悬停显示隐藏div,JQ实现鼠标悬停显示或隐藏DIV层
  8. Android SQLIte 介绍 及 导入db文件到app的/data目录时手机需要root
  9. 顶级大神Linux,Python,Go,PHP之父谁是夜猫子?用Python揭秘!
  10. buildroot arm linux,Buildroot 构建文件系统