Skip to content

Latest commit

 

History

History
492 lines (366 loc) · 16.4 KB

chapter-2.md

File metadata and controls

492 lines (366 loc) · 16.4 KB

投影几何与二维空间变换

本章主要介绍本书必要的几何知识与符号

2.2 2D投影平面

行向量与列向量 本书默认所有向量的都是列向量, 比如$x$, 那么$x^T$就是行向量. 对于一个行向量$(x,y)$, 我们就有$x=(x,y)^T$.

2.2.1 点和线

线段的齐次坐标 线是由方程$ax+by+c=0$组成的, 所以我们就用$(a,b,c)^T$来表示线段. 但是$(a,b,c)^T$不能唯一表示一条线段, 因为$(a,b,c)^T$与$k(a,b,c)^T$表示一样的线段 ($k$不能为0). 那么$k(a,b,c)^T$其实就是一类向量的表达. 这个类中所有的向量都是其次向量. 那么我们把所有的类都放在一起, 就形成了投影空间. 空间中有一个特殊点$(0,0,0)^T$, 它不属于任何直线.

点的其次坐标 直线方程是$ax+by+c=0$, 那么可以写成$(x,y,1)(a,b,c)^T$, 那么这个$(x,y,1)$就是点的齐次坐标.

结论2.1 点在直线上当且仅当$x^T l = 0$

自由度 自由度就是这个几何体可以由几个自由变化的变量来表达, 比如点的自由度就是2, 因为指定$x,y$就够了, 线的自由度也是2, 这是因为虽然线有三个变量, 但是他们之间的比例是$a:b:c$. 类似线性无关的变量的个数.

直线的交点 两个直线$l=(a,b,c), l'=(a',b',c')$, 他们的交点就是$l \times l'$

两个点确定的直线 两个点$x,x'$, 他们确定的直线就是$x \times x'$

2.2.2 理想点(ideal point)和无穷远处的直线

平行线的交点 如果我们考虑两个平行线的交点$ax+by+c=0,ax+by+c'=$, 做叉乘, 我们会得到$(c'-c)(b,-a,0)$, 如果我们忽略尺度因子$(c'-c)$, 那么平行线的交点就在$(b,-a,0)$, 我们再把这个齐次坐标变成非齐次, 那么就得到$(b/0,-a/0)$, 这点就在无穷远处, 所以我们说平行线就是在无穷远处相交.

理想点与无穷远的直线 我们考虑任一个点$(x_1,x_2,x_3)$, 把$x_3=0$, 那么$(x_1,x_2,0)$就是无穷远处的所有点, 这些点都落在一个直线上, 那就是$l_{\infty}=(0,0,1)$.

我们紧接着考虑任意一条直线$l=(a,b,c)$, $l$与$l_{\infty}$的交点就是$(-b,a)$, $(-b,a)$和直线的法向量$(a,b)$是垂直的, 所以他就是直线的方向. 注意$(a,b)$不是直线的方向, $(a,b)$和直线是垂直的. $(-b,a,0)$这个点在无穷远直线上, 那么无穷远处的直线就可以被看做是直线方向的集合.

二维投影平面的几何模型 (可以先把书翻到p29 看fig2.1) 投影平面可以想象为三维空间中射线的集合. 可以从三个射线上挑出三个点, 并且让他们共面, 那么其他的射线都与该平面有交点. 所以该平面就是由射线上的点组成的. 射影平面上的线就是过原点的平面和射影平面的交点. 任意两个不同射线处于同一平面上, 任意两个不同的平面相较于一个射线. 可以类比两直线交于一点,两点确定一直线.

最后一点, 无穷远处的理想点和直线平行于平面$x_3=1$

线段与点的对偶性 点与线段的角色其实可以是互换的. 比如说$l^T x=0$ 可以写成$x^T l = 0$

2.2.3 圆锥和对偶圆锥

圆锥描述了平面上的二次方程. 欧氏几何主要三种:抛物线, 双曲线, 椭圆. 在二维摄影几何里, 这三种都是等价的.

我们首先把圆锥写成其次表达式 $x=(x_1,x_2,x_3)$

$$ \left[ \begin{matrix} a & b/2 & d/2 \\ b/2& c & e/2 \\ d/2 & e/2 & f \end{matrix} \right] $$

圆锥就可以写成$x^TCx=0$ 圆锥有五个自由度

五个点确定一个圆锥 我们把圆锥换一个方式写,用$x=x_1/x_3,y=x_2/x_3$, 可以得到: $$ (x_i^2, x_i y_i y_i^2 x_i y_i 1)c=0\ c=(a,b,c,e,d,f) $$

需要五个方程解出$c$,因为$c$的自由度是5

和椭圆相切的直线, 直线就是$l=cx$

对偶圆锥 在前文中$c$定义的圆锥是点组成的圆锥. 我们可以定义一个由直线组成的圆锥$c^$, 这个圆锥就是由所有和$c$相切的直线组成的. $c^=c^{-1}$

2.3 投影变换

定义2.9 投影变换$h$是一个从二维投影空间到二维投影空间的变换, 它满足一个性质: 如果$x_1,x_2,x_3$变换前在一条直线上当且仅当变换后的他们$(h(x_1),h(x_2),h(x_3))$还在一条直线上.

根据这个定义, 投影变换也叫共线性. 投影变换和单应性是同一个意思

书中还介绍了另外一种从代数角度来定义的办法. 我觉得原书中写的比较拗口, 通俗来说就是任何一个$3 \times 3$的非奇异矩阵$H$都定义了一个投影变换

从几何角度来解释, 投影变换其实定义了一个平面到平面的映射, 因为我们知道,投影几何的就是由平面定义的. 而且前文也说了, 投影变换保持了共线性. 如果说这两个平面上的坐标系都是欧式坐标系. 那么这个投影变换就变成了6个自由度的透视变换.

2.3.1 线段和圆锥的变换

我们直接上结果: 一个点有如下变换$x'=Hx$,那么线变换就是$l'=H^{-T} l$, 圆锥变换就是$x^TCx = x'^T H^{-T}CH^{-1}x'$, 所以$C=H^{-T}CH^{-1}$, 其对偶圆变换就是$C*'=HC^{*}H^T$

2.4 投影变换的种类

本节时一个重点章节

2.4.1 刚体变换

其形式如下 $$ \left( \begin{matrix} x' \ y' \ 1 \end{matrix} \right)

\left[ \begin{matrix} \epsilon \cos \theta & -\sin & t_x \ \epsilon \sin \theta & -\cos & t_y \ 0 & 0 & 1 \end{matrix}

\right]

\left( \begin{matrix} x\ y\ 1 \end{matrix}

\right)

$$

可以简写成 $$ x'

\left[ \begin{matrix} R & t \ 0^T & 1 \ \end{matrix} \right] x $$

$R$是一个$2 \times 2$的正交矩阵, 整个大矩阵有三个自由度, 旋转一个, 平移两个. 不变量是: 线段长度, 线段之间角度, 图形的面积

2.4.2 相似变换

其形式如下:

$$ \left( \begin{matrix} x' \ y' \ 1 \end{matrix} \right)

\left[ \begin{matrix} s \cos \theta & -s \sin & t_x \ s \sin \theta & s \cos & t_y \ 0 & 0 & 1 \end{matrix}

\right]

\left( \begin{matrix} x\ y\ 1 \end{matrix}

\right) $$

可以简写成 $$ x'

\left[ \begin{matrix} sR & t \ 0^T & 1 \ \end{matrix} \right] x $$

整个矩阵四个自由度:缩放因子一个,旋转一个,平移两个. 其不变量是: 线段之间角度, 平行线还是平行的, 线段之间的比例不变, 因为是对整个图形进行缩放. 不同区域之间的面积也不变.

2.4.3 仿射变换

$$ \left( \begin{matrix} x' \ y' \ 1 \end{matrix} \right)

\left[ \begin{matrix} a_{11} & a_{12} & t_x \ a_{21} & a_{22} & t_y \ 0 & 0 & 1 \end{matrix}

\right]

\left( \begin{matrix} x\ y\ 1 \end{matrix}

\right) $$

可以简写成 $$ x'

\left[ \begin{matrix} A & t \ 0^T & 1 \ \end{matrix} \right] x $$ 整个矩阵六个自由度. 左上角$A$四个, 平移两个.

$A$可以被分解成如下形式: $$ A=R(\theta) R(-\phi) D R(\phi) $$

$$ \left[ \begin{matrix} \lambda_1 & 0 \\ 0 & \lambda_2 \end{matrix} \right] $$

所以$A$可以被解释为先旋转一个角度$\phi$, 再从$x,y$两个方向进行缩放,其比例因子为$\lambda_1, \lambda_2$, 再按$-\phi$旋转回去, 再转一个$\theta$

由于进行了压缩, 那么线段之间的角度就变了, 只能是保持直线之间的平行性, 直线之间比例, 面积的比例.

投影变换

$$ x'

\left[ \begin{matrix} A & t \ v^T & v \ \end{matrix} \right] x $$

整个大矩阵8个自由度. 其不变量只能是直线变换以后还是直线.

对投影变换的分解

整个投影变换矩阵可以分解成三个小矩阵的乘机 $$ H = H_S H_A H_P \ = \left[ \begin{matrix} sR & t \ 0^T & 1 \ \end{matrix} \right]

\left[ \begin{matrix} K & 0 \ 0^T & 1 \ \end{matrix} \right]

\left[ \begin{matrix} I & 0 \ v^T & v \ \end{matrix} \right]

\left[ \begin{matrix} A & t \ v^T & v \ \end{matrix} \right] $$

$H_P$移动无穷远处的直线, $H_A$是一个仿射变换, $H_S$是一个广义的相似变换

2.4.7 几何体的不变量

前文我们讨论了在某某变换下, 几何体有多少不变量. 那么这个不变量到底怎么计算? 我们有以下结论

结论2.16 几何体的不变量大于等于几何体的自由度减去变换的自由度.

举个例子, 空间中四个点,有8个自由度, 因为每个点2个. 那么几何体的不变量就是: 几何体的自由度8, 减去变换的自由度. 如果我们假设变换是相似变换, 那么答案就是8-4=4 (相似变换4个自由度). 假设变换时仿射变换, 答案就是8-6=2 (仿射变换6个自由度)

一维空间的投影几何

一维空间投影几何那就是点$bar{x}=(x_1,x_2)$,其中$x_2=0$, 一维空间单应矩阵就是 $$ \bar{x}'=H_{2 \times x} \bar{x} $$

$H_{2 \times x} $有三个自由度

交叉比 给定一维平面4个点, 我们定义一个交叉比 $$ Cross(\bar{x_1}, \bar{x_2},\bar{x_3},\bar{x_4})

\frac{|\bar{x_1} \bar{x_2}| |\bar{x_3} \bar{x_4}|} {|\bar{x_1} \bar{x_3}| |\bar{x_2} \bar{x_4}|} $$

其中 $$ |\bar{x_i} \bar{x_j}|= \det \left[ \begin{matrix} x_{i1} & x_{j1} \ x_{i2} & x_{j2} \end{matrix} \right] $$

交叉比有这么几个性质:

  1. 交叉比和用什么坐标系表示无关
  2. 交叉比中的点都是$x_2=1$, 他们不是无穷远处的点
  3. 交叉比对理想点也成立
  4. 交叉比在任何投影变换下都是不变的

共点线

共点线就是有共同起点的线,然后多找一条线, 和所有共点线相交, 这样就可以的定义交叉比了

2.7 从图像中恢复仿射性质

本节主要是为了移除投影变换带来的性质丢失, 把图像从投影变换恢复到相似变换, 所以平行线, 线段和面积的比例等等性质得以保留.

因为我们知道投影变换只比相似变换多4个自由度, 那么我们只需要恢复4个自由度就好了. 这四个自由度从哪里来? 无穷远处的线提供2个, 还有两个无穷远处的绝对点, 因为在相似变换下他们是不变的. 也可以叫圆锥点, 因为任何一个圆锥都和无穷远处的线相交于这两点

2.7.1 无穷远处的线

在投影变换下, 无穷远处的线会被投影到非无穷远处. 无穷远处的线在仿射变换下是不变的, 也就是说经过仿射变换, 它还在无穷远处. 但是线上点的位置变了, 只不过点都在无穷远处.

2.7.2 恢复仿射性质

经过上一节, 我们知道要恢复仿射性质就要找出无穷远处的线. 那么, 我们首先明确, 摄像机是一个投影变换, 那么该线就会被映射到图像坐标系的某一个地方. 我们先找到这个地方, 然后利用2.7.1的性质, 建立一个方程.

假设无穷远处的线被映射到了$l=(l_1,l_2,l_3)$, 我们已知无穷远处线的坐标是$(0,0,1)$ 而且该线在仿射变换下不变, 那么我们就构造一个矩阵 $$ H=H_A \left[ \begin{matrix} 1 & 0 & 0 \ 0 & 1 & 0 \ l_1 & l_2 & l_3 \end{matrix} \right] $$

$H_A$是任一个仿射变换. $H$可以把$l$变换到$(0,0,1)$, 那么我们就把$H$和整个图像相乘, 这样整个图像就恢复了仿射性质.

那么接下来的问题就是说怎么找$l$, 我们从图像中找出两个平行线, 将其延长, 他们肯定相交,这样就是一个点. 再重复一遍.这样就有两个点, 这两个点就确定了$l$. 书上还有另外一个办法, 在P51, Example 2.20

2.7.3 椭圆点和它的对偶

什么是椭圆点我们已经介绍了, 所以现在我们来看一下它长什么样 我们用$I,J$来表示,$I=(1,i,0),J=(1,-i,0)$, 这个点为啥不变呢? 因为有如下式子 $$ I' = H_s I \

\left[ \begin{matrix} s \cos \theta & -s \sin \theta & t_x \ s \sin \theta & s \cos \theta & t_x \ s 0 & 0 & 1 \ \end{matrix} \right]

\left( \begin{matrix} 1 \ i \ 0 \end{matrix} \right) \ = s e^{-i \theta} \left( \begin{matrix} 1 \ i \ 0 \end{matrix} \right) \ = I $$

根据上式 我们有如下结论: 结论2.21 椭圆点$I,J$在投影变换下保持不变当且仅当投影变换是相似变换.

这两个点是怎么找出来的? 是圆锥方程与$l_{\infty}$的交点

由圆锥点定义的对偶圆锥 我们可以利用$I,J$来定义一个圆锥 $$ C^_{\infty} = IJ^T+JI^T $$

这个$C^*_{\infty}$是由直线组成的圆锥, 是2.2.3节线圆锥的退化情况. 那么它关于谁对偶呢? 它是圆锥点的对偶.

$C^_{\infty}$在相似变换下也是不变的. 所以我们可以有以下结论: 结论2.22 圆锥点$C^_{\infty}$在投影变换下保持不变当且仅当投影变换是相似变换.

$C^{\infty}$还有两个性质, 第一, 他有四个自由度, 第二,$l{\infty}$是$C^_{\infty}$的零向量

2.7.4 投影平面之间的角度

假设有两条直线$l=(l_1,l_2,l_3)^T$, $m=(m_1,m_2,m_3)^T$, 他们之间的夹角就是 $$ \cos \theta = \frac{l_1 m_1 + l_2 m_2}{\sqrt{(l_1 ^2+l_2^2)(m_1^2+m_2^2)}} $$

如果对$l,m$施加投影变换, 上式就不适用了, 为了在投影变换之后还可以计算角度, 我们有以下式子存在 $$ \cos \theta = \frac{l^T C^_{\infty} m}{\sqrt{(l^T C^{\infty} l)(m^T C^*{\infty} m)}} $$

所以说我们知道了$C^*_{\infty}$就可以计算出线段或者平面之间的角度 (结论2.23).

书中还有一个很明显的结论: 如果$l^T C^*_{\infty} m=0$,那么 $l,m$垂直

2.7.5 恢复图像的度量性质

度量性质就是指角度, 线段之间的比例等等. 主要是用$C^_{\infty}$, 这是因为在投影变换之下, 有下式存在 $$ C^{'}{\infty} = (H_P H_A H_S) C^*{\infty} (H_P H_A H_S)^T \

\left[ \begin{matrix} KK^T & KK^Tv \ v^TKK^T & v^TKK^Tv \end{matrix} \right] $$

$K$是仿射变换左上角的分量,$v$是投影变换的分量. 从上式我们可以看出, 只要知道$C^_{\infty}$就可以求出$C^{'}_{\infty}$, 然后做SVD分解,就可以求出$K,v$

具体细节可以参考p56, 例子2.26

2.8圆锥的性质

本章是重点章节, 介绍了点,线,圆锥之间的关系, 是对极几何的基础.

2.8.1 极点与极线

一个点$x$ 和一个圆锥$C$ 可以确定一条直线$l=Cx$, 这条$l$就叫极线. 注意, 这个点$x$并不在圆锥$C$上,而是在$C$的外边. 过$x$可以向$C$做出两条线 (注意,这个线不是极线,为了区分我把它叫切线). 每一条切线都和圆锥相切. 可以参见书中图p58, 图2.19. 我们可以想象$x$逐渐向圆锥移动, 所以两条切线之间的角度逐渐增大, 当$x$位于圆锥之上, 两条切线就变成了一条切线.

下面介绍另一个概念:点和线的相关性 定义2.29 相关性是从二维投影空间中的点, 到二维投影空间中的线的一个可逆映射. 它是一个$3 \times 3$的非奇异矩阵(非奇异所以可逆), 我们把它表示为$A$, 那么整个相关性就可以表示为$l=Ax$.

这个$A$提供了点和线的关系, 但是$A$不是对称的. 那么如果$A$是对称的, 会是什么情况? 这就引出了共轭点的概念:

共轭点 点$y$在由$x$确定的极线上, 那么$y$和$x$就是共轭点, 表示为$y^T l = y^T Cx=0$,

所以$C$描述的就是点和线之间的关系. 另外共轭点有一个性质:$x$如果在$y$的极线上, $y$也会在$x$的极线上.

2.8.2 圆锥的不同类别

我们先从欧氏几何开始回忆, 圆锥可以确定双曲线, 抛物线, 椭圆这三种类别. 他们分别是用平面和圆锥相交形成的. 那么我们如果从投影几何的角度考虑, 用无穷远处的直线来和一个椭圆相交, 如果没有实交点, 那就形成了椭圆, 如果有一个交点, 那就是抛物线, 如果有两个交点, 那就是抛物线.

如果我们从代数的角度考虑, 将$C$用SVD分解,得到$C=U^TDU$,其中$D$就是矩阵的特征值, 把$D$再次SVD分解, 保证$D$的特征值是-1 或1或0, 这样根据$D$特征值的不同, 就得到不同类型的圆锥, 详见P60 表2.2

2.9 固定点和线

前文我们知道$l_{\infty}$和椭圆点在投影变换下是不变的. 本章我们来详细讨论一下. 如果把一个变换看成矩阵, 点和线看成向量. 那么什么样的向量在矩阵的作用下不变? 特征值对应的向量. 所以说那些不变的点和线就是投影矩阵的特征向量.

下面分别介绍不同变换中的固定点

欧式变换(刚体变换) 其特征值是{$e^{i \theta}, e^{-i \theta}$}, 固定点是前文提到的椭圆点.

相似变换 其特征值是{1, $e^{i \theta}, e^{-i \theta}$} 固定点是前文提到的椭圆点.

仿射变换固定点可以是实点或者复数点, 但是固定线经过的点$l_{\infty}$是实点