【MVG】(一)2D射影几何
参考:计算机视觉中的多视图几何、中科院模重所-视觉基础介绍
视觉SLAM中常用的射影变换有:2D欧式变换(如,平面内运动的机器人)、2D仿射变换(SVO中用来恢复图像块用的)、2D射影变换(我们平常说的单应矩阵就是它,对它分解可得到R
和t
)、3D欧式变换(SLAM中主要解决的问题之一,估计相机的3维运动)、3D相似变换(单目SLAM中会遇到,由尺度漂移造成)等
文章目录
- 1、2D射影几何
- 2、射影变换
- 3、消除射影失真
- 4、变换的层次
1、2D射影几何
照相机的成像过程不保持欧氏性质,例如:平行线不再平行,如下图所示
世界坐标系(景物平面)下两条平行的车道线,在相机拍出的图片中居然交于了一点,我们称这种现象为射影失真,这种现象非常常见,如,原来窗子是矩形的,可能你拍出的图片却是梯形的。那我们怎么还原图像呢,这就是射影变换要解决的问题,在此之前我们先要了解射影几何是什么玩意.
1.1 点和线的齐次坐标表示
假设有一条直线:ax+by+c=0ax+by+c=0ax+by+c=0,那么直线可以用一矢量表示,即它的齐次坐标是 l=(a,b,c)T\boldsymbol l = (a, b, c)^Tl=(a,b,c)T,点的齐次坐标是 x=(x,y,1)T\boldsymbol x = (x, y, 1)^Tx=(x,y,1)T.
- 结论1: 点在直线上的充要条件是二者内积为0:xTl=0\boldsymbol x^T \boldsymbol l=0xTl=0.
- 结论2: 两直线 l\boldsymbol ll 和 l′\boldsymbol l'l′ 的交点是二者的外积:x=l×l′\boldsymbol x = \boldsymbol l \times \boldsymbol l'x=l×l′.
- 结论3: 过两点 x\boldsymbol xx 和 x′\boldsymbol x'x′ 和直线是:l=x×x′\boldsymbol l = \boldsymbol x \times \boldsymbol x'l=x×x′.
1.2 无穷远点
虽然齐次坐标 (x,y,1)(x, y, 1)(x,y,1) 与非齐次坐标 (x,y)(x, y)(x,y) 表示相同的点,但没有对应于三元坐标 (x,y,0)(x, y, 0)(x,y,0) 的非齐次点,如果我们试着用最后一个坐标来划分,我们得到了无穷的点 (x/0,y/0)(x/0, y/0)(x/0,y/0),即(∞,∞)(\infty, \infty)(∞,∞),无穷远点就是这样产生的!它们是齐次坐标最后那个坐标为零的点.
如下图所示,世界坐标系下车道线应该是左图这样(想象你拿着相机飞到空中俯拍一张马路的图片),然而我们拍出来的车道线是右图这样的(你站在马路中央拍摄的),对于第一幅图,这两条平行的车道线分别为 l=(a,b,c)T\boldsymbol l=(a, b, c)^Tl=(a,b,c)T 和 l′=(a,b,c′)T\boldsymbol l'=(a, b, c')^Tl′=(a,b,c′)T,其中它们的前两个坐标是一样的,使用上面的结论2得到两直线的交点为 l×l′=(c′−c)(b,−a,0)T\boldsymbol l \times \boldsymbol l' = (c'-c)(b, -a, 0)^Tl×l′=(c′−c)(b,−a,0)T,忽略标量因子 (c′−c)(c'-c)(c′−c),得到点 (b,−a,0)T(b, -a, 0)^T(b,−a,0)T,如果转换到非齐次坐标系下,毫无疑问我们得到的是无穷远点,对于第二幅图,车道线的交点我们设为 (a1,b1)(a_1, b_1)(a1,b1),那么它对应的齐次坐标将是 (a1,b1,1)(a_1, b_1, 1)(a1,b1,1),图一中的无穷远点会映射到图二中的有限点,这种现象叫做消影点,只有射影变换有这种特性,仿射变换相似变换都不具备. 究竟这两幅图之间是经过怎样的位姿变换才能变成这样的呢,这就是射影变换要做的事情了!
1.3 射影空间
齐次矢量 (x1,x2,x3)T(x_1,x_2,x_3)^T(x1,x2,x3)T 对应于 IR2IR^2IR2 (二维平面空间)中的有限点,现在将最后一维 x3=0x_3=0x3=0 的点加入 IR2IR^2IR2 空间,那么所扩展区间的所有齐次3维矢量的集合,称为射影空间 IP2IP^2IP2.
1.4 无穷远线
我们已经知道 IR2IR^2IR2 空间的平行线交于一个无穷远点,这个无穷远点在射影空间是齐次坐标最后那个坐标为零的点.
所有理想点集合在一条直线上,称无穷远线,用 I∞=(0,0,1)TI_∞=(0,0,1)^TI∞=(0,0,1)T 表示. 因为I∞I_∞I∞ 与任何一条直线 l=(a,b,c)T\boldsymbol l = (a, b, c)^Tl=(a,b,c)T相交与理想点 (b,−a,0)T(b, -a, 0)^T(b,−a,0)T,所以无穷远线可以看成平面内
所有直线方向
的集合.
所以,射影空间不存在平行线,平行线无意义(因为即使实在原非齐次坐标系下平行的线在齐次坐标系下也会相交于一点,所以两条线都相交了,还能叫做平行吗,所以射影空间不存在平行线),因为任何两条相异直线必然交于一点.
1.5 归一化坐标
slambook中提到的归一化坐标(P87),其实它是2维的齐次坐标,只不过最后一维是1
,如果去掉最后一维的1
得到的就是非齐次坐标.
2、射影变换
射影变换别名有:射影映射、保线变换(Collineation)、单应变换(Homography)、中心射影变换等
类似特殊正交群(SO3)、特殊欧式群(SE3),射影变换也组成了一个群.
映射 hhh :IP2→IP2IP^2\rightarrow IP^2IP2→IP2 是射影映射的充要条件是:存在一个3X3非奇异矩阵H,使得 IP2IP^2IP2 的任何一个用矢量 x\boldsymbol xx 表示的点都满足 h(x)=Hxh(\boldsymbol x)=H \boldsymbol xh(x)=Hx.
平面射影变换
是关于齐次 3 维矢量
的一种线性变换,并可用一个非奇异 3x3
矩阵H
表示为
(x1′x2′x3′)=[h11h12h13h21h22h23h31h32h33](x1x2x3)\begin{pmatrix} x_{1}'\\ x_{2}'\\ x_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} ⎝⎛x1′x2′x3′⎠⎞=⎣⎡h11h21h31h12h22h32h13h23h33⎦⎤⎝⎛x1x2x3⎠⎞
更简洁地表示为 x′=Hx\boldsymbol x′=H \boldsymbol xx′=Hx.
注意,上面方程中的矩阵H
乘以任意非零比例因子不会使射影变换改变,就是说H
是一个齐次矩阵,它只有8个DOF.
3、消除射影失真
如下图所示,左图中平面
(墙面)的中心投影的图像与原平面
通过射影变换相关,因而左图是原景物的一种射影失真,通过求该射影变换的逆变换并把它应用于图像就可以撤销此射影变换了.
因为H
具备8个DOF,因此使用4点法求解即可.
注意,因为地面和大楼的前墙不在同一个平面上,所以用于矫正大楼前墙的射影变换必然与用于地面的射影变换不一样. 有没有一种射影变换能同时矫正二者? 有,3D射影变换!
4、变换的层次
4.1 2D欧式变换
又叫等距变换,是平面 IR2IR^2IR2 的变换
不变量:欧式距离不变,推导一下也很简单,就是变换前有平面上的两点(还是想象你飞在空中俯视大地) ,分别为 x1\boldsymbol x_1x1 和 x2\boldsymbol x_2x2,平面上的点都经过了相同的位姿变换,所以有,x1′=Rx1+t\boldsymbol x_1'=R \boldsymbol x_1+tx1′=Rx1+t,x2′=Rx2+t\boldsymbol x_2'=R \boldsymbol x_2+tx2′=Rx2+t,两式相减,取模即相等.
平面欧式变换有三个自由度,一个旋转、两个平移
4.2 相似变换
又叫等形变换,不变量是长度或者面积的比率
x′=HAx=[sRt0T1]x\boldsymbol x'=H_Ax=\begin{bmatrix} s \boldsymbol R& \boldsymbol t\\ \boldsymbol 0^T &1 \end{bmatrix}\boldsymbol x x′=HAx=[sR0Tt1]x
为了与下面的仿射变换形成对比,这里可以将 sRsRsR 分开,这样很容易比较二者的差别在哪里了.
sR=R[s00s]s \boldsymbol R=\boldsymbol R \begin{bmatrix} s & 0 \\ 0 & s \end{bmatrix} sR=R[s00s]
注意,相似变换的缩放因子在两个轴上是相同的.
4.3 仿射变换
仿射变换是一个非奇异线性变换与一个平移变换的复合,具备6个自由度,因此可以使用三组点对应来计算.
x′=HAx=[At0T1]x\boldsymbol x'=H_Ax=\begin{bmatrix} \boldsymbol A& \boldsymbol t\\ \boldsymbol 0^T &1 \end{bmatrix}\boldsymbol x x′=HAx=[A0Tt1]x
为了更好地理解仿射变换,一般将 A\boldsymbol AA 看作两个基本变换:旋转和非均匀缩放的复合
A=UDVT=(UVT)(VDVT)=R(θ)R(−ϕ)DR(ϕ)\boldsymbol A=UDV^T=(UV^T)(VDV^T)=R(\theta)R(-\phi)DR(\phi) A=UDVT=(UVT)(VDVT)=R(θ)R(−ϕ)DR(ϕ)
其中 R(θ)R(\theta)R(θ) 和 R(ϕ)R(\phi)R(ϕ) 分别表示转角为 θ\thetaθ 和 ϕ\phiϕ 和旋转,DDD 为对角矩阵:
D=[λ100λ2]D=\begin{bmatrix} \lambda_1 &0\\ 0& \lambda_2 \end{bmatrix} D=[λ100λ2]
4.4 下面是这几种平面变换的几何不变性质
下一篇:MVG(二)RANSAC计算单应矩阵
【MVG】(一)2D射影几何相关推荐
- 计算机视觉中的多视图几何 -- 2D射影几何与变换 --无穷远直线、虚圆点及其对偶以及恢复图像的仿射性质
2D射影几何与变换(3) 这篇主要介绍在2D射影几何中的无穷远直线.虚圆点及其对偶二次曲线,以及他们各自对应的图像的仿射和度量性质. 无穷远直线 定义 IP2IP^2IP2中的理想点(齐次坐标第三项为 ...
- 计算机视觉中的多视图几何 -- 2D射影几何与变换 -- 相似、仿射与射影变换的层次
2D射影几何与变换(2) 这篇主要介绍在2D射影空间中的变换,以及各种变换的层次. 几何研究的重点在于各种变换群下,不变的性质,对应于Gibson生态视觉中的环境不变量,是计算机视觉研究的重点. 射影 ...
- MVG读书笔记——射影几何下的二次曲线
双曲线.椭圆.抛物线等统称为二次曲线(或圆锥曲线),它其实是三维空间中圆锥在截面上的投影,如图 齐次坐标下的二次曲线表示 二次曲线的在欧氏空间的方程为 ax2+bxy+cy2+dx+ey+f=0ax^ ...
- MVG学习笔记(10) --射影变换的初步了解
文章目录 射影变换的初步了解 逆命题 平面间的映射 消除平面透视图像的射影失真 直线与二次曲线的变换 直线的变换 二次曲线的变换 博文内容总结和概览 知识 定理 射影变换的初步了解 2D射影几何研 ...
- 计算机视觉中的多视图几何 --3D射影几何中的面与直线
3D射影几何与变换(1) 这篇主要介绍在3D射影几何中的基本元素,包括平面和直线,以及他们各自的性质. 3D射影几何的许多内容是2D射影几何的直接推广,但也有许多不一样的地方,比如这篇要介绍的一个重要 ...
- 第一课 射影几何与变换
感谢百川同学.总结的东西都比较精炼,自己去看多视图几何,可能效率不太高. 所以在百川同学整理得基础上走一走. 1. 2D射影几何与变换. 1.1 点与直线的非齐次与其次表达 平面 R2 上的点表示为列 ...
- MVG(second)读书笔记-2D射影几何和变换
最近刚买到Multiple View Geometry in Computer Vision 计算机中的多视几何,它是三维重建和视觉SLAM的入门基础的经典教材,内容比较丰富,自己看过一遍,挑一些自己 ...
- MVG学习笔记(1) --无处不在的射影几何
文章目录 前言 无处不在的射影几何 坐标 齐次性 仿射和欧几里得几何 仿射几何 欧几里得几何 3D欧几里得几何 前言 关于计算机视觉圣经的学习笔记.本次此系列的博文除了本次博文,基本不会包含前言了 ...
- MVG读书笔记——三维空间中的射影几何(二)
直线 通常三维空间中的直线可以由两点的连线或者两平面的相交线确定,但它的表示却比较麻烦. 三维空间中的直线有4个自由度.一个简单的解释是想象在两个正交平面上各取一个点,从而得到一条直线,这两个点各有两 ...
最新文章
- Alibaba Cloud Linux 2.1903 LTS 64位服务器yum源下载404,Alibaba Cloud Linux 2实例中使用docker-ce、epel等YUM源安装软件失败
- scrollTo与smoothScrollTo的区别
- java 数据存储到什么地方?
- hive 分区_Hive下数据仓库历史拉链表如何加工,分区键该如何选择
- 深入理解Spark 2.1 Core (六):Standalone模式运行的原理与源码分析
- bzoj 4551[Tjoi2016Heoi2016]树
- [hdu1242]优先队列
- GitLab访问403问题
- ISP图像调试工程师——3D和2D降噪(熟悉图像预处理和后处理技术)
- mac下载站,这个可以收藏看看
- C#控制Bartender自动列印的2种方法(附源码)
- NATAPP使用教程(内网穿透)
- Kylo 0.8.3 安装
- Windows下cwRsync搭建步骤
- 白底图片转换为蓝底图片
- 深入 AXI4总线 (四):RAM 读取实战
- 最好的3个iOS苹果手机上的txt阅读器
- .net spit 用法
- VIVO手机语音对话翻译怎么做?轻松和外国人交谈,绝对是“骚操作”
- 寻找黑科技?ITValue在三亚举办了一场“尖货市场”