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 ...
随机推荐
- 服务端预渲染之Nuxt(介绍篇)
现在前端开发一般都是前后端分离,mvvm和mvc的开发框架,如Angular.React和Vue等,虽然写框架能够使我们快速的完成开发,但是由于前后台分离,给项目SEO带来很大的不便,搜索引擎在检索的 ...
- python 生成 1900-2100 的二十四节气文件
[学习笔记] 转载 #!/usr/bin/python3.7# -*- coding:utf-8 -*- '''整体思路1:根据公式算出节气日期 1900 年到 2100 200 年的时间2:特殊的 ...
- HTML 练习实现遮罩层
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用Git将项目托管到码云及从码云导入项目到本地
前言 码云+Git+IntellJ IDEA 欢迎转载,请注明作者和出处哦☺ Git 的安装及使用的教程 最好不要在官网下载,官网下载要vpn而且速度还很慢 . 推荐在 https://gi ...
- ML.NET 发布0.11版本:.NET中的机器学习,为TensorFlow和ONNX添加了新功能
微软发布了其最新版本的机器学习框架:ML.NET 0.11带来了新功能和突破性变化. 新版本的机器学习开源框架为TensorFlow和ONNX添加了新功能,但也包括一些重大变化, 这也是发布RC版本之 ...
- 将博客搬至CSDN https://blog.csdn.net/Fredric_2014
将博客搬至CSDN https://blog.csdn.net/Fredric_2014
- jquery删除内容是动态修改序号
如图,点击删除图标的时候要删除当前的一条记录,同时界面上的序号要动态的排列好 以下是html结构: jquery实现思路: 首先,需要获取到当前要删除盒子的序号$indexCur,然后遍历父盒子,取出 ...
- 大名鼎鼎的红黑树,你get了么?2-3树 绝对平衡 右旋转 左旋转 颜色反转
前言 11.1新的一月加油!这个购物狂欢的季节,一看,已囊中羞涩!赶紧来恶补一下红黑树和2-3树吧!红黑树真的算是大名鼎鼎了吧?即使你不了解它,但一定听过吧?下面跟随我来揭开神秘的面纱吧! 一.2-3 ...
- [个人网站搭建]·Django增加评论功能(Python3)
[个人网站搭建]·Django增加评论功能 个人主页--> https://xiaosongshine.github.io/ 个人网站搭建github地址:https://github.com/ ...
- java内存溢出的情况解决方法
内存溢出虽然很棘手,但也有相应的解决办法,可以按照从易到难,一步步的解决. 第一步,就是修改JVM启动参数,直接增加内存.这一点看上去似乎很简单,但很容易被忽略.JVM默认可以使用的内存为64M,To ...