java仿射变换_仿射变换和透射变换
参考链接:
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仿射变换_仿射变换和透射变换相关推荐
- 单应性矩阵和仿射变换_仿射变换透射变换单应性矩阵
答:使用perspectiveTransform(). findHomography 函数是求两幅图像的单应性矩阵,它是一个3*3的矩阵,但这里的单应性矩阵和3D重建中的单应性矩阵(透视矩阵3*4)是 ...
- (三) OpenCV仿射变换与透射变换(Affine and Perspective Transform)
图像最基本的变换即仿射变换(Affine Transform)和透射变换(Perspective Transform).仿射变换是对一个向量空间进行一次线性变换并接上一次平移.透射变换是中心投影的射影 ...
- 变换模型——仿射变换和透射变换
仿射变换是投射变换的一个特例 仿射变换:6参数 投射变换:8参数 仿射变换:包括线性变换(旋转.剪切.缩放)及平移:特点:平行的线变换后依然保持平行.任意的仿射变换都能表示为乘一个矩阵(线性变换),再 ...
- OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔
1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小. API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参 ...
- Python+OpenCV:仿射变换和透射变换
Python+OpenCV:仿射变换和透射变换 仿射变换 ####################################################################### ...
- [图像几何变换]——图像的仿射变换、透射变换及图像金字塔
一.仿射变换 [图像预处理] 1.介绍 图像的仿射变换涉及到图像的形状位置角度的变化,是深度学习预处理中常用的功能,仿射变换主要是对图像的缩放.旋转.翻转和平移等操作的组合.注意:变换矩阵中是6个点, ...
- 图像仿射变换原理4:组合变换及对应变换矩阵
☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 仿射变换博文传送门(带星号的为付费专栏文章): *图像仿射变换原理1:齐次坐标来龙去脉详解 ...
- 离散余弦变换java实现_离散余弦变换(含源码)
图像处理中常用的正交变换除了傅里叶变换外,还有其他一些有用的正交变换,其中离散余弦就是一种.离散余弦变换表示为DCT( Discrete Cosine Transformation),常用于图像处理和 ...
- [图片校准(矫正)]——透射变换应用
如果想要对图像进行校准,那么透射变换是非常有效的变换方法. 透射变换的定义如下:将图像投影到一个新的视平面,通常也成为投影映射. 详情参考链接:透射变换介绍 1.举例说明 直观的来看,透视变换的作用就 ...
最新文章
- CSS核心内容整理 - (中)
- robot framework 使用三:他们主动浏览器的兼容性
- 2020 我的C++学习之路 C++PrimerPlus第六章课后习题
- java编程石头剪刀布_java 开发的石头,剪刀,布的游戏 demo
- python变量的使用_python – 如何在变量中使用冒号(:)
- android学习笔记---31_多线程断点下载器,下载原理实现
- java 哈希表入门
- mysql 常用函数总计
- 最新手机号码归属地数据库(2017年4月1日)
- 真好玩python教孩子学编程_Python真好玩:教孩子学编程(全彩印刷))简介,目录书摘...
- 超强媒体阵容护航,第一届区块链技术及应用峰会(BTA)·中国引爆开年狂潮
- 为什么新网站上线一个月都没有收录?
- 便携式三星mysql_三星折叠手机终于来了!9 月 18 日正式发售
- 星星泪用计算机怎么弹,星星泪简谱
- 计算机网络常见的面试题(牛客网总结)
- python从入门到弃坑中子弹部分的问题
- 解决电脑搜不到WiFi6无线路由信号问题
- 连续型随机变量的分布(均匀分布、指数分布、正态分布)
- 深度学习图像超分辨率开山之作SRCNN——原理分析及代码(效果基本可以达到论文中的效果)
- C++ 多继承(有多个父亲)
热门文章
- Linux安装tomcat、无法启动的解决方案
- Nginx虚拟主机与域名解析
- win7 网络打印机 未授予用户在此计算机上的请求登录类型,如何解决Win7“未授予用户在此计算机上的请求登录类型quot;问题 - Win10专业版官网...
- mysql视图的创建查询和删除
- linux加密压缩文件命令,linux 系统下 zip 的加密压缩与解压缩命令
- 询盘还盘等国际贸易(转)
- HTML鼠标悬停显示隐藏div,JQ实现鼠标悬停显示或隐藏DIV层
- Android SQLIte 介绍 及 导入db文件到app的/data目录时手机需要root
- 顶级大神Linux,Python,Go,PHP之父谁是夜猫子?用Python揭秘!
- buildroot arm linux,Buildroot 构建文件系统