仿射变换和单应矩阵

首先明确:二者的应用场景相同,都是针对二维图片的变换。仿射变换affine是透视变换的子集,透视变换是通过homography单应矩阵实现的。

从数学的角度,homography即H阵,是一个秩为3的可逆矩阵:

仿射矩阵是:

由于第三行没有未知数,仿射矩阵最常用的是两行三列的形式。计算H阵需要4对不共线点,计算仿射阵只需要3对不共线的点。

通常会才用RANSAC方法从多对匹配点中计算得到精确、鲁棒的结果。affine一般比homography更稳定一些,所以可以先计算affine,然后再用affine作为homography的初始值,进行非线性优化。

仿射变换的实际意义

仿射变换在图形中的变换包括:平移、缩放、旋转、斜切及它们的组合形式。这些变换的特点是:平行关系和线段的长度比例保持不变。

平移变换

数学形式:

矩阵形式:

尺度变换

矩阵形式:

旋转变换

矩阵形式:

刚体运动:旋转缩放平移

矩阵形式:

斜切变换

矩阵表示:

这个也是更为一般的仿射变换的形式,xy轴的旋转是两个自由度。

透视投影变换的实际意义

首先,继续上面的示例,透视变换的矩阵形式:

这个变换看似是很随意的,变化的可能性也是非常多。但投影变化具有其明确的意义:共面点成像。

先回顾下摄像机模型:

世界坐标系映射到摄像机坐标系:Pc即上图的Mext

其中Maff表示像素坐标系和单位距离坐标系之间的转化,与硬件设备相关。不考虑像素坐标系,在以米等单位距离为尺度的笛卡尔坐标系中,有:

对于共面点,我们可以另其一个坐标为0(肯定存在一个适当的世界坐标系满足的),不妨设为第三维度,上述矩阵可以得到简化:

最终得到的3*3的矩阵,称之为“Homography矩阵”,该矩阵是可逆的。

研究共面点成像有什么意义呢?两个不同位置的相机,共面点对应有两个单应矩阵H1和H2。

两个角度拍摄的一堆共面点,可以通过H1和H2以及C阵(上面的Mext)得到变换矩阵H。矩阵的形式:

求解上述方程,有两种方式,一种是设:

;两一种是添加约束:。

选择第一种约束:

得到:

写成矩阵的形式:

线性最小二乘为题:

1997年,Hartley发表“In Defense of the Eight Point Algorithm”对原始8点算法进行改进,在构造解的方程之前对输入的数据进行适当的归一化。即在形成8点算法的线性方程组之前,图像点的一个简单变换(平移或变尺度)将使这个问题的条件极大地改善,从而提高结果的稳定性。而且进行这种变换所增加的计算复杂性并不显著。算法具体过程具体如下:

a.对原始图象坐标做一个平移变换,使原来以左上角为原点的图象坐标变成以所有图像点的重心为原点的图像坐标;

b.再对图象坐标做一个尺度变换,使得点到原点的平均距离为

分别对两幅图像进行以上两步变换,然后将变换后的图像坐标作为输入数据计算基础矩阵。计算过程如下:

第二种求解方式:这里可以使用SVD分解

得到:

矩阵的形式:

齐次最小二乘法:Ah=0,h的解是A的SVD分解V的最后一列向量,右奇异向量还是单位向量,正好满足条件。

透视变换的应用主要有两个:消除透视投影导致的失真,校正图像;图像拼接。

仿射变换affine和透视变换相关推荐

  1. 仿射变换 Affine transformation

    这个太重要了,我得再研究研究.并争取搞个code出来.这篇先来理论. 本文属转载. 变换模型是指根据待匹配图像与背景图像之间几何畸变的情况,所选择的能最佳拟合两幅图像之间变化的几何变换模型.可采用的变 ...

  2. OpenCV仿射变换Affine Transformations

    OpenCV仿射变换Affine Transformations 仿射变换Affine Transformations 目标 理论 什么是仿射变换? 我们如何获得仿射变换? 代码 这个程序做什么? 解 ...

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

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

  4. 图像变换:刚性变换(等距变换、欧式变换)、相似变换、仿射变换、射影变换(透视变换、投影变换)

    刚性变换(等距变换.欧式变换).相似变换.仿射变换.射影变换(透视变换.投影变换) 1.刚性变换:只对物体进行 平移 和 旋转,而形状不变 2.相似变换:等距变换 + 均匀缩放,类似相似三角形,比例不 ...

  5. 仿射变换 (Affine transform) 参数估计方法

    仿射变换 (Affine transform) 参数估计方法 最近一个机器视觉课题中的一个小问题.两幅图像中各有一些特征点,我们分别称为 ( x i , y i ) (x_i, y_i) (xi​,y ...

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

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

  7. opencv中很有趣的仿射变换(Affine Transformation)

    在仿射变换中,原图中所有平行的行在变换后的图像中仍然平行.为了构建仿射矩阵,我们需要原图中的三个点和它们在变换后的图像中的对应位置.函数 cv.getAffineTransform 创建一个2*3的矩 ...

  8. 【计算机视觉】完整版复习

    计算机标定 齐次坐标 齐次坐标,将欧氏空间的无穷远点,与投影空间中有实际意义的消失点,建立起映射关系. 把齐次坐标转化为笛卡尔坐标的方法:是前面n-1个坐标分量分别除以最后一个分量即可 一些解释和性质 ...

  9. DIP数字图像处理-知识提纲

    修正补充说明: PPT上的傅里叶变换部分为主要修完善部分(我们补充了正确的答案).因为原来的PPT有较多的数字错误和解题错误. together with Liangxu Zhang 文章目录 综述 ...

最新文章

  1. 神策 2021 数据驱动大会,与“现代营销之父”科特勒的认知同行
  2. 关于数据分析:你想知道的都在这里!
  3. 算法复习——计算几何基础(zoj1081)
  4. ulimit限制 新系统_Linux查看及修改系统的资源限制命令ulimit
  5. spring注解大全
  6. ElasticSearch查询返回信息根据字段排序(英文检索)
  7. 程序员常用的泛型机制究竟怎么玩?
  8. wince车机刷系统刷机包_刷机ROM大全,你刷过几个OS系统
  9. 计算机windows实验原理,Windows上机实验报告
  10. 【Arduino】基础传感器使用
  11. ios 销毁当前页面重新开启_iOS - 切换rootViewController时,销毁之前的控制器
  12. 算法时间复杂度Θ(n2)与 O(n2)
  13. 详解机器学习/深度学习中的梯度消失/梯度爆炸的原因/解决方案
  14. 域名更换是什么意思?
  15. 量化交易的十个知识点
  16. 完整的境外、港澳台、电信、移动、联通、教育网、国内其他ISP的IPv4列表(数据整理日期2022年4月)-IP列表太长只能份2篇发布(1/2)
  17. “七彩”糖果-吕中琪
  18. 怎样防止恶意刷短信验证?
  19. sql sever使用
  20. SEO工作思路怎么写,为什么建站前要设计思路?

热门文章

  1. html、css、js粒子特效——前端
  2. Android .dex、.odex、Dalvik、ART、AOT、OAT
  3. Linux访问外网,有图和命令,简单易懂
  4. 聊聊C++标准库,准标准库中关于时间的概念和用法
  5. android的短信发送全过程源代码分析
  6. 视频编码的守望者--Jason Garrett-Glaser
  7. javascript 数据类型与类型转换
  8. 网络电话除了打电话还能用来做什么?
  9. Edge 浏览器新版来袭,Office 功能首次出现!
  10. 【mysql】mysql查询结果添加固定值