2D射影几何和变换
阅读《计算机视觉中的多视图集合》
2D射影几何和变换
2D射影平面
本章的关键是理解线和点的对偶性。从射影平面模型出发,IP^2^内的点(a, b ,c)由IP^3^空间中一条过原点的射线k(x1, x2, x3)^T^表示。点采用的是齐次坐标表示,具有相同比例,不同缩放因子的表示都是同一个点,就像射线也可以用同比例,不同缩放因子的向量表示一样。
射影变换projectivity
- 射影映射,也叫保线变换,或者射影变换,或者单应(homography),都是同义词,其性质是保线性,即直线变换之后还是直线。 可以用一个8自由度的三维非奇异矩阵H表示。
- 只需要4个任意三点不共线的点即可以求得射影变换H,然后求得逆矩阵H^-1^即可以消除射影变换H带来的变化。
- 透视变换,也即中心投影,是射影变换的一种,它的特点是:连接对应的直线共点。透视变换的复合不再是透视变换,但还会是射影变换。
如果有一个射影变换H,点x变换之后为Hx,那么在同样的变换下,直线I变换为H^-T^I。我们称点的变换为逆变,线的变换为协变。
变换的层次
如下表,下层的都是上层变化的特例。

另外还有一个透视变换perspectivity,它是射影变换的一个特例,与仿射变换affine的区别:
- 透视变换可以用于把3D变成2D,而仿射变换都是2D平面
- 透视变换可以有切变shareing
- 仿射变换的右下角必须为1,而透视不会
- 如果是两个平面的投射,且都是Euclidean坐标,那么透视变换也只有6个自由度
透视变换与射影变换的区别:
- 多个透视变换的组合还会是射影变换,但一般不会是透视变换
- 透视变换中,连接原始点和透视点的所有连线交于一点,这也即是中心投影的含义。
从图线恢复仿射和度量性质
重要概念
- 理想点:在齐次表示法中,最后坐标为0,比如二维坐标中的\(x_3=0\),的点即为理想点,也即无穷远点,通用表达为\((x_1, x_2, 0)^T\)
- 无穷远线:用符号\(I_{\infty}\)表示,\(I_{\infty}=(0,0,1)^T\),显然,\((0,0,1)(x_1, x_2, 0)^T=0\),即理想点和无穷远线相交
- 消影线:无穷远线被影像到像平面的直线
- 虚圆点:在\(I_{\infty}\)上有两个不动点\(I=(1,i,0)\)和\(J=(1,-i,0)\),这两个点是不动点的冲要条件为相似变换,\(I'=H_SI=I\),\(J'=H_SJ=J\),\(H_S\)表示相似变换矩阵, 即经过相似变换,他们的坐标不变。
与虚圆点对偶的二次曲线:记为\(C^*_{\infty}\),\(C^*_{\infty}=IJ^T+JI^T=\begin{bmatrix} 1 & 0 &0 \\ 0 & 1 & 0\\ 0& 0 & 0 \end{bmatrix}\)。同理,根据对偶定理,二次曲线\(C^*_{\infty}\)为不动曲线的冲要条件为变换为相似变换。
直接从透视图像恢复
对应的书本中的例 1.26。
- 假设有任意射影变换H
- 根据书中结论1.23,找到五组世界平面中相互正交的直线对,找到他们在变换之后的图像中的对应像直线,即可以求得经过变换H之后的\(C^*_{\infty}\)的像\(C^{*'}_{\infty}\)
根据结论1.24,对\(C^{*'}_{\infty}\)进行SVD分解,即可得到一个变换U,用这个U对像进行校正,就会得到一个与H变换之前只相差一个相似变换的结果。这样我们就可以根据相似变换的不动量特性来测量某些数据。
分层法恢复
- 在世界平面中平行的两组平行线,找到他们在像中的对应线,然后找到他们的交点,两组平行线就会有两组交点,根据平行线交于无穷远点的理论,这两个交点的连线就是消影线。然后根据公式1.18就可以得到一个变换H,可以把像变换到和世界平面只差一个仿射变换
在已经只存在仿射变换的图像中,找到两对在世界平面中正交的直线的像,然后根据结论1.23就可以求出仿射变换矩阵K。这个K把一个与世界平面只差一个相似变换的平面变换到当前仿射变换图像。
2D射影几何和变换的更多相关文章
- transform的2D和3D变换
transform取值 none:默认值,即是无转换 matrix(,,,,,): 以一个含六值的(a,b,c,d,e,f)变换矩阵的形式指定一个2D变换,相当于直接应用一个[a,b,c,d,e,f] ...
- CSS3 2D Transform
在 一个二维或三维空间,元素可以被扭曲.移位或旋转.只不过2D变形工作在X轴和Y轴,也就是大家常说的水平轴和垂直轴:而3D变形工作在X轴和Y轴之外, 还有一个Z轴.这些3D变换不仅可以定义元素的长度和 ...
- SVG坐标系统及图形变换
前面的话 前面介绍过SVG视野后,本文将开始介绍SVG坐标系统及图形变换 坐标定位 对于所有元素,SVG使用的坐标系统或者说网格系统,和Canvas用的差不多(所有计算机绘图都差不多).这种坐标系统是 ...
- CSS3总结七:变换(transform)
2D视图模型解析 3D视图模型解析 平移 旋转 伸缩 扭曲 z轴方向平移与perspective的神秘关系 matrix()终极变幻的方法 一.2D视图 2D视图就是默认平面上的每个点都与视线垂直,图 ...
- CS(计算机科学)知识体
附 录 A CS( 计算机科学)知识体 计算教程 2001 报告的这篇附录定义了计算机科学本科教学计划中可能讲授的知识领域.该分类方案的依据及其历史.结构和应用的其 ...
- CSS3变形记(上):千变万化的Div
传统上,css就是用来对网页进行布局和渲染网页样式的.然而,css3的出现彻底打破了这一格局.了解过css3的人都知道,css3不但可以对网页进行布局和渲染样式,还可以绘制一些图形.对元素进行2D和3 ...
- 优化IPOL网站中基于DCT(离散余弦变换)的图像去噪算法(附源代码)。
在您阅读本文前,先需要告诉你的是:即使是本文优化过的算法,DCT去噪的计算量依旧很大,请不要向这个算法提出实时运行的苛刻要求. 言归正传,在IPOL网站中有一篇基于DCT的图像去噪文章,具体的链接地址 ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数017·point点函数
<zw版·Halcon-delphi系列原创教程> Halcon分类函数017·point点函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数015,vector矢量
<zw版·Halcon-delphi系列原创教程> Halcon分类函数015,vector矢量 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
随机推荐
- 关于 JavaScript 中的继承
ES5 之前,继续是这样实现的 function Parent() { this.foo = function() { console.log('foo'); }; } Parent.prototyp ...
- 刨根问底:if 后怎么就可以跟对象,变量交换写法是语法糖吗?
1.万物皆可布尔 一般语言中的 if 语句语法是这样的: if (条件表达式){ 执行语句} 而在 Python 中,if 后面不仅可以是条件表达式,还可以是任意对象.例如: my_list = ...
- 从PRISM开始学WPF,Prism7更新了什么
当时我在搬运Prism6.3的sample代码的时候,就是因为网上的资料太老旧,万万没想到这给自己挖了一个坑,因为我在做笔记的时候,prism已经在更新7.0了 现在已经是7.2了,(lll¬ω¬), ...
- 底部导航栏-----FragmentTabHost
[说明] 1.主界面上添加父容器:FragmentTabHost 属于v4兼容包 需要指定该id为android:id/tabhost,不能修改,表示由android系统来托管这个id. 本身是一个F ...
- android Fragment中使用Toolbar
在Activity中可以直接使用 setSupportActionBar(toolbar); 就可以重写 onCreateOptionsMenu 和 onOptionsItemSelected 方法: ...
- Sql server数据库定时任务,数据库作业,数据库定时任务
当需要周期性的去执行一个方法时,我们可以先写好方法,然后交给数据库去完成就可以的. 步骤:首先打开SQL数据库中SQLServer代理-->右键作业-->新建作业: 如果SQL Serve ...
- SqlServer中的系统数据库
SqlServer中的系统数据库有五个,平时写代码不太关注,今天一时兴起研究了一下. 1. master 记录SQL Server系统的所有系统级信息,例如:登陆账户信息.链接服务器和系统配置设置.记 ...
- Core文件简单介绍及生成设置方法
Core文件简单介绍及生成设置方法 Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试.当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文 ...
- cmd命令重定向到剪切板
Windows下 使用系统自带的 clip 命令. # 位于 C:\Windows\system32\clip.exe. 示例: # 将字符串 Hello 放入 Windows 剪贴板 echo He ...
- 微擎where范围查询in
where sale_time in($todayStart,$todayEnd)