文章目录

  • 射影变换的初步了解
    • 逆命题
    • 平面间的映射
    • 消除平面透视图像的射影失真
    • 直线与二次曲线的变换
      • 直线的变换
      • 二次曲线的变换
  • 博文内容总结和概览
    • 知识
    • 定理

射影变换的初步了解

  2D射影几何研究的是关于射影平面IP2{\rm IP}^2IP2在所谓射影映射的变换群下保持不变的性质。

定义1  射影映射是把IP2{\rm IP}^2IP2到自身的一种满足下列条件的可逆映射hhh:三点x1,x2,x3{\rm x}_1,{\rm x}_2,{\rm x}_3x1​,x2​,x3​共线当且仅当h(x1),h(x2),h(x3)h({\rm x}_1),h({\rm x}_2),h({\rm x}_3)h(x1​),h(x2​),h(x3​)也共线。

  射影映射组成一个群,因为其逆和复合运算符合群性质。又称为保线变换,射影变换或单应(homography)。下面给出其等价代数定义。

定理1  映射h:IP2→IP3h:{\rm IP^2 \rightarrow IP^3}h:IP2→IP3是射影映射的充要条件是:存在一个3×33\times 33×3非奇异矩阵HHH,使得IP2{\rm IP}^2IP2的任何一个用矢量x\rm xx表示的点都满足h(x)=Hxh({\rm x})={\rm H}{\rm x}h(x)=Hx。

定理表明射影映射都是以这样一次齐次坐标的线性变换出现,反之这样的映射是射影映射。

  使用x{\rm x}x表示IP2{\rm IP}^2IP2中的点,而用Hx{\rm Hx}Hx表示齐次坐标的线性映射。我们证明下面的命题成立,用来不全面证明定理1。

齐次坐标的任何可逆线性变换是射影映射

证明

  令x1,x2{\rm x}_1,{\rm x_2}x1​,x2​和x3{\rm x}_3x3​都在同一条直线 l{\rm l}l 上。因此

lTxi=0,i=1,⋯ ,3{\rm l}^T{\rm x}_i=0,i=1,\cdots,3lTxi​=0,i=1,⋯,3

  令H\rm HH是非奇异3×33\times 33×3的矩阵,又上面式子可以得到

lTH−1Hxi=0→(H−Tl)T(Hxi)=0{\rm l^TH^{-1}Hx}_i=0 \rightarrow ({\rm H}^{-T}{\rm l})^T({\rm Hx}_i)=0lTH−1Hxi​=0→(H−Tl)T(Hxi​)=0

  因此点Hxi{\rm Hx}_iHxi​都在直线H−Tl\rm H^{-T}lH−Tl上。因而该变换保持共线性。

逆命题

  每个射影映射都以这种方式出现。

  给出另一个射影变换(保线变换)的定义。

定义2   射影变换。平面射影变换是关于齐次三维矢量的一种线性变换,并可用一个非奇异3×33\times 33×3矩阵H{\rm H}H表示为:

(1)(x1′x2′x3′)=[h11h12h13h21h22h23h31h32h33](x1x2x3)\begin{pmatrix}x^\prime_1\\x^\prime_2\\x^\prime_3\end{pmatrix}=\begin{bmatrix}h_{11}&h_{12}&h_{13}\\h_{21}&h_{22}&h_{23}\\h_{31}&h_{32}&h_{33}\end{bmatrix}\begin{pmatrix}x_1\\x_2\\x_3\end{pmatrix}\tag{1}⎝⎛​x1′​x2′​x3′​​⎠⎞​=⎣⎡​h11​h21​h31​​h12​h22​h32​​h13​h23​h33​​⎦⎤​⎝⎛​x1​x2​x3​​⎠⎞​(1)

  或更简洁表示为x′=Hx\rm x^\prime=Hxx′=Hx。

  注意,可以通过乘以任意非零比例因子来改变在该等式中出现的矩阵HHH而不改变射影变换。 因此,我们说HHH是一个齐次矩阵,因为在点的齐次表示中,只有矩阵元素的比例是有意义的。 在HHH的九个元素中有八个独立的比率,因此射影变换具有八个自由度(减掉一个比例因子)。

  射影变换将每个图形投影为射影等价的图形中,使其所有射影属性保持不变。 在前一篇博文中我们描述的射线模型中,射影变换仅仅是IR3{\rm IR}^3IR3的线性变换。

平面间的映射

  图1给出了定理1的一个例子。

图1。 中心投影将一个平面上的点映射到另一个平面上的点。 过投影中心作一张与两平面π\piπ和π′\pi^\primeπ′相交的平面,可以看到中心投影也将线映射到线。 由于线被映射到线,因此中心投影是射影的,并且可以通过齐次坐标的线性映射x′=Hx\rm x^\prime=Hxx′=Hx来表示。

  沿着通过公共点(投影中心)的射线的投影定义了从一个平面到另一个平面的映射。 很明显,这种点到点的映射保留了直线不变,其中一个平面中的线被映射到另一个平面中的线。

  如果在每个平面中定义坐标系并且以齐次坐标表示点,则中心投影映射可以用x′=Hx\rm x^\prime=Hxx′=Hx表示,其中HHH是非奇异3×33\times33×3矩阵。 实际上,如果在两个平面中定义的两个坐标系都是欧氏(直角)坐标系,那么由中心投影定义的映射比一般射影变换更受限制。 它被称为透视映射而不是完全的射影映射,并且可以用具有六个自由度的变换来表示。

消除平面透视图像的射影失真

  在透视成像下形状会失真(变形)。 例如,在图2中,窗口在图像中不是矩形,尽管原有窗子是。 通常,场景平面上的平行线在图像中不平行,而是收敛到有限点。 我们已经看到平面(或平面的一部分)的中心投影图像通过投影变换与原始平面相关,因此图像是原始的射影失真。 通过计算逆变换并将其应用于图像,可以“撤销”该投影变换。 结果将是一个新的合成图像,其中平面中的物体以其正确的几何形状显示。 这将在图2 a的建筑物的前墙解释。 注意,由于地面和大楼的前墙不在同一平面上,因此必须用于矫正前墙的投影变换与用于地面的投影变换不同。

图2.消除透视失真。 (a)具有透视失真的原始图像 - 窗口的线明显地收敛于有限点(延长后相交)。(b)合成得到的前墙的正视图。 墙的图像(a)通过射影变换与墙的真实几何形状相关联。 通过将四个成像窗口角点映射到适当大小的矩形顶点来计算逆变换。 由四点对应确定变换。 然后将变换应用于整个图像。 注意,地面图像的部分受到进一步的射影失真。 这也可以通过射影变换来消除。

  首先,选择平面与图像想对应的部分。然后选择图像平面的2D局部坐标和景物的世界坐标,如图1所示。

  设世界与图像平面上一对匹配点x\rm xx和x′\rm x^\primex′。 我们在这里使用点的非齐次坐标而不是齐次坐标,因为这些非齐次坐标可以直接从图像和世界平面得到。式(1)的射影变换可以用非齐次形式写成

x′=x1′x3′=h11x+h12y+h13h31x+h32y+h33,y′=x2′x3′=h21x+h22y+h23h31x+h32y+h33x^\prime=\frac{x_1^\prime}{x^\prime_3}=\frac{h_{11}x+h_{12}y+h_{13}}{h_{31}x+h_{32}y+h_{33}},y^\prime=\frac{x_2^\prime}{x^\prime_3}=\frac{h_{21}x+h_{22}y+h_{23}}{h_{31}x+h_{32}y+h_{33}}x′=x3′​x1′​​=h31​x+h32​y+h33​h11​x+h12​y+h13​​,y′=x3′​x2′​​=h31​x+h32​y+h33​h21​x+h22​y+h23​​

  每个点对应关系为HHH元素的两个方程,将其乘出简化后是

x′(h31x+h32y+h33)=h11x+h12y+h13x^\prime(h_{31}x + h_{32}y + h_{33}) = h_{11}x + h_{12}y + h_{13}x′(h31​x+h32​y+h33​)=h11​x+h12​y+h13​

y′(h31x+h32y+h33)=h21x+h22y+h23y^\prime(h_{31}x + h_{32}y + h_{33}) = h_{21}x + h_{22}y + h_{23}y′(h31​x+h32​y+h33​)=h21​x+h22​y+h23​

  这些方程在HHH的元素中是线性的。四点对应在H的元素中导致八个这样的线性方程,这足以求出HHH,只差不重要的乘法因子。 唯一的限制是四个点必须处于“一般位置”,这意味着没有三个点是共线的。 然后将以这种方式计算的变换HHH的逆应用于整个图像,以消除透视失真对所选平面的影响。 结果如图2 b所示。

  说明:首先,以这种方式计算矫正变换HHH不需要知道任何相机的参数或平面的位姿; 第二,并不总是需要知道四点的坐标以消除投影失真。

  射影变换是代表比世界平面的透视成像更多情况的重要映射。 许多其他例子如图3所示。

图3.在透视图像中射影变换x′=Hx\rm x^\prime=Hxx′=Hx的例子。 (a)由世界平面引起的两个图像之间的射影变换(两个射影变换的复合是射影变换); (b)具有相同摄像机中心的两个图像之间的射影变换(例如,摄像机围绕其中心旋转或变焦其焦距); (c)平面图像(建筑物的后墙)与其阴影图像到另一个平面(地平面)之间的射影变换。

直线与二次曲线的变换

直线的变换

  在定理1的证明中指出,如果点xi{\rm x}_ixi​位于线 l\rm ll 上,那么变换点x′=Hx\rm x^\prime=Hxx′=Hx在射影变换下位于线l′=H−Tl\rm l^\prime=H^{-T}ll′=H−Tl。 通过这种方式保持了点在线上的性质,因为l′Txi′=lTH−1Hxi{\rm l^{\prime T}x}^\prime_i={\rm l^TH^{-1}Hx}_il′Txi′​=lTH−1Hxi​。这给出了线的变换规则:在点变换x′=Hx\rm x^\prime=Hxx′=Hx下,直线 l\rm ll 变换为

l′=H−Tl\rm l^\prime=H^{- T}ll′=H−Tl

  或者可以写l′T=lTH−1\rm l^{\prime T}=l^TH^{-1}l′T=lTH−1。

  注意线和点变换的根本区别。 点根据HHH变换,而线(作为行向量)根据H−1H^{-1}H−1变换。 这可以用“协变”或“逆变”行为来解释。 有人说,点变换是逆变,线变换是协变

二次曲线的变换

  我们知道在前面博文讲述二次曲线和对偶二次曲线时,说过点在二次曲线上的方程为xTCx=0x^TCx=0xTCx=0,那么射影变换中,即在点变换x′=Hx\rm x^\prime=Hxx′=Hx下,该式变为:

xTCx=x′T[H−1]TCH−1x′=x′TH−TCH−1x′\begin{aligned}\rm x^TCx&=\rm x^{\prime T}[H^{-1}]^TCH^{-1}x^\prime\\&=\rm x^{\prime T}H^{-T}CH^{-1}x^\prime\end{aligned}xTCx​=x′T[H−1]TCH−1x′=x′TH−TCH−1x′​

  这是二次形式x′TC′x′\rm x^{\prime T}C^\prime x^\primex′TC′x′,其中C′=H−TCH−1\rm C^\prime=H^{-T}CH^{-1}C′=H−TCH−1。 这给出了二次曲线的变换规则:

结论1  在点变换x′=Hx\rm x^\prime=Hxx′=Hx下,二次曲线C\rm CC变换为C′=H−TCH−1\rm C^\prime=H^{-T}CH^{-1}C′=H−TCH−1

H−1\rm H^{-1}H−1在方程中,所以二次曲线变换称为协变

结论2  在点变换x′=Hx\rm x^\prime=Hxx′=Hx下,对偶二次曲线C∗\rm C^*C∗变换为C′∗=HC∗HT\rm C^{\prime*}=HC^*H^{T}C′∗=HC∗HT

  我们知道在前面博文讲述二次曲线和对偶二次曲线时,说过对偶二次曲线的方程为lTC∗l=0\rm l^TC^*l=0lTC∗l=0。

  在点变换x′=Hx\rm x^\prime=Hxx′=Hx下,我们得到l′=H−Tl\rm l^\prime=H^{-T}ll′=H−Tl,可以得到:

l=HTl′\rm l=H^Tl^\primel=HTl′

  所以我们可以得到

lTC∗l=(HTl)TC∗HTl′=l′THC∗HTl′=l′TC′∗l′\begin{aligned}\rm l^TC^*l&=\rm (H^Tl)^TC^*H^Tl^\prime\\&=\rm l^{\prime T}HC^*H^Tl^\prime \\&=\rm l^{\prime T}C^{\prime*}l^\prime\end{aligned}lTC∗l​=(HTl)TC∗HTl′=l′THC∗HTl′=l′TC′∗l′​

  所以C′∗=HC∗HT\rm C^{\prime*}=HC^*H^TC′∗=HC∗HT

博文内容总结和概览

知识

概念 定义
射影映射(保线变换,射影变换或单应(homography)) 射影映射是把IP2{\rm IP}^2IP2到自身的一种满足下列条件的可逆映射hhh:三点x1,x2,x3{\rm x}_1,{\rm x}_2,{\rm x}_3x1​,x2​,x3​共线当且仅当h(x1),h(x2),h(x3)h({\rm x}_1),h({\rm x}_2),h({\rm x}_3)h(x1​),h(x2​),h(x3​)也共线。
射影变换另一定义 平面射影变换是关于齐次三维矢量的一种线性变换,并可用一个非奇异3×33\times 33×3矩阵H{\rm H}H表示为x′=Hx\rm x^\prime=Hxx′=Hx
平面间映射 点对点映射且保持直线不变。若是两平面建立都是欧氏直角坐标系,则为透视映射。
消除透视失真 简单使用四个对应点关系求解出HHH,然后将逆变换应用到失真图像中以消除射影失真。
直线的变换 如果点xi{\rm x}_ixi​位于线 l\rm ll 上,那么变换点x′=Hx\rm x^\prime=Hxx′=Hx在射影变换下位于线l′=H−Tl\rm l^\prime=H^{-T}ll′=H−Tl或l′T=lTH−1\rm l^{\prime T}=l^TH^{-1}l′T=lTH−1。
二次曲线变换 在点变换x′=Hx\rm x^\prime=Hxx′=Hx下,二次曲线C\rm CC变换为C′=H−TCH−1\rm C^\prime=H^{-T}CH^{-1}C′=H−TCH−1
对偶二次曲线变换 在点变换x′=Hx\rm x^\prime=Hxx′=Hx下,对偶二次曲线C∗\rm C^*C∗变换为C′∗=HC∗HT\rm C^{\prime*}=HC^*H^{T}C′∗=HC∗HT

定理

概念 内容
射影映射等价代数定义 映射h:IP2→IP3h:{\rm IP^2 \rightarrow IP^3}h:IP2→IP3是射影映射的充要条件是:存在一个3×33\times 33×3非奇异矩阵HHH,使得IP2{\rm IP}^2IP2的任何一个用矢量x\rm xx表示的点都满足h(x)=Hxh({\rm x})={\rm H}{\rm x}h(x)=Hx

MVG学习笔记(10) --射影变换的初步了解相关推荐

  1. 34.Oracle深度学习笔记——12C的AWR初步解读

    34.Oracle深度学习笔记--12C的AWR初步解读 关于AWR,蛤蟆也经常看.因为经常看别人给出的建议,很难有深刻体会.对此,计划花费几个晚上时间好好体会一把并记录下来.此处以单实例为例.列出目 ...

  2. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  3. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  4. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

  5. Hadoop学习笔记—10.Shuffle过程那点事儿

    Hadoop学习笔记-10.Shuffle过程那点事儿 一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduc ...

  6. Linux学习笔记10

    Linux学习笔记10 Linux学习笔记10 正则表达式 源码包约定目录 Shell脚本约定目录 Shell脚本的创建与执行 date命令 同步时间 Shell脚本预设变量 与用户交互 数学计算 S ...

  7. HALCON 20.11:深度学习笔记(10)---分类

    HALCON 20.11:深度学习笔记(10)---分类 HALCON 20.11.0.0中,实现了深度学习方法. 本章解释了如何在训练和推理阶段使用基于深度学习的分类. 基于深度学习的分类是一种对一 ...

  8. 台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning 注:本博客主要参照 http://blog.csdn.net/xzy_thu ...

  9. Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)

    Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...

最新文章

  1. 第八天-《企业应用架构模式》-通盘考虑
  2. 《sql必知必会》读书笔记
  3. OpenGL创建hello Window你好,窗口
  4. 【HDU - 1533】Going Home(网络流,二分图最优匹配,KM算法)
  5. springboot启动报错LoggerFactory is not a Logback LoggerContext but Logback...
  6. Android中ImageSwitcher结合Gallery展示SD卡中的资源图片
  7. 三角网格表面高斯曲率的计算与可视化
  8. Python基础学习1---函数
  9. yum 源端软件包扩展
  10. 深入浅出mysql笔记
  11. 计算机word表格公开课ppt,word表格制作课件公开课.ppt
  12. 项目:任务清单(Vuex)
  13. Word2013撤销不能使用
  14. C++ 实现小写金额转化为大写金额
  15. ndo2db: mysql_error: ‘Unknown column ‘importance’ in ‘field list”
  16. 创建facebook_我如何重新创建Facebook的微交互以进行功能发现
  17. 金蝶EAS_WFLL2开发记录
  18. 物联网中射频技术的应用
  19. c++primer读书笔记
  20. 工业控制系统安全评估流程物理环境脆弱性

热门文章

  1. 多协议BGP-----MPBGP
  2. rsync实现两台服务器上的实时同步
  3. 计算机课设微程序最大值,计算机组成原理课程设计(微程序设计).doc
  4. 在计算机海洋里摸爬滚打搜集的一些资源
  5. 北京高新技术企业申报新增要求及解决办法
  6. 红外图像处理-基于场景的非均匀矫正
  7. mac os ERROR! The server quit without updating PID file
  8. 韩顺平的php东方航空_韩顺平php视频教程
  9. 爬虫:汽车之家字体反爬
  10. Android平台使用OpenGL实现图形渲染