摄影几何、变换、估计
点 直线 二次曲线
x = ( x 1 , x 2 , 1 ) \mathbf{x}=(x_1,x_2,1) x=(x1,x2,1) 表示点 x ~ = ( x 1 , x 2 ) \widetilde{\mathbf{x}}=(x_1,x_2) x =(x1,x2) 的齐次
I = ( a , b , c ) T \mathbf{I}=(a,b,c)^{T} I=(a,b,c)T 表示方程 a x + b y + c = 0 ax+by+c=0 ax+by+c=0,
描述 | 点表示 | 线表示 |
---|---|---|
点在直线 | x T I = 0 x^{T}I=0 xTI=0 | |
过两点的线 / 两直线交点 | I = x × x ′ I=x \times x^{'} I=x×x′ | x = I × I ′ x=I \times I^{'} x=I×I′ |
二次曲线 | x T C x = 0 x^TCx= \mathbf{0} xTCx=0 | I T C ∗ I = 0 I^TC^{*}I= \mathbf{0} ITC∗I=0 |
(非退化) | C = [ a b / 2 d / 2 b / 2 c e / 2 d / 2 e / 2 f ] C=\begin{bmatrix}a&b/2&d/2\\ b/2&c&e/2\\ d/2&e/2&f\end{bmatrix} C= ab/2d/2b/2ce/2d/2e/2f | |
退化 | C = I m T + m l T \mathbf{C}=\mathbf{Im^T}+\mathbf{ml^T} C=ImT+mlT | C ∗ = x y T + y x T \mathbf{C}^{*}=\mathbf{x}\mathbf{y}^{\mathsf{T}}+\mathbf{y}\mathbf{x}^{\mathsf{T}} C∗=xyT+yxT |
过(非退化)二次曲线C上点x的切线I | I = C x I=Cx I=Cx |
理想点 : x = ( x 1 , x 2 , 0 ) \mathbf{x}=(x_1,x_2,0) x=(x1,x2,0)
两平行线 I = ( a , b , c ) T , I ′ = ( a , b , c ′ ) T I=(a, b,c)^T,\quad I^{'}=(a, b,c^{'}) ^T I=(a,b,c)T,I′=(a,b,c′)T 的交点 x = I × I ′ = ( b , − a , 0 ) x=I \times I^{'}=(b,-a,0) x=I×I′=(b,−a,0)
无穷远线 : I ∞ = ( 0 , 0 , 1 ) T \mathbf{I}_{\infty}=(0,0,1)^{T} I∞=(0,0,1)T
对非奇异对称矩阵C 有 C ∗ = C − 1 C^{*} = C^{-1} C∗=C−1 (相差一个尺度因子)
退化二次曲线
非满秩矩阵C所定义的二次曲线称作退化二次曲线,退化的点二次曲线包含两条线(秩2)或 一条重线(秩1).
退化的线二次曲线包含 两个点(秩2),或一个重点(秩1)
两直线的夹角 I = ( l 1 , l 2 , l 3 ) T , m = ( m 1 , m 2 , m 3 ) T \mathbf I=(l_1, l_2,l_3)^T, \quad \mathbf m=(m_1, m_2,m_3)^T I=(l1,l2,l3)T,m=(m1,m2,m3)T
cos θ = l 1 m 1 + l 2 m 2 ( l 1 2 + l 2 2 ) ( m 1 2 + m 2 2 ) \cos\theta=\frac{l_1\:m_1+l_2\:m_2}{\sqrt{\left(l_1^2+l_2^2\right)\left(m_1^2+m_2^2\right)}} cosθ=(l12+l22)(m12+m22)l1m1+l2m2
射影变换
或称 单应 (homography) 保线变换
是一个平面到另一个平面的点的映射关系
定理 :映射 h : I P 2 → I P 2 h:\mathrm{IP}^{2}\rightarrow\mathrm{IP}^{2} h:IP2→IP2 是射影映射的充要条件是:存在一个3×3非奇异矩阵H,使得 I P 2 \mathrm{IP}^{2} IP2 的任何一个用矢量x表示的点都满足 h ( x ) = H x h(x)=Hx h(x)=Hx
在下图的射线模型中,一个射影变换就是 I P 3 \mathrm{IP}^{3} IP3 的一种线性变换,
如果在两平面上建立的**都是欧氏(角角)坐标系(下图),那么这样一种由中心投影定义的映射比一般射影变换有更多的约束.我们称它为透视映射而不是完全的射影映射*,它可由一个六自由度的变换来表示.*
两个射影映射的复合是射影映射; 两个透视映射的复合是射影映射而不是透射映射.
直线与二次曲线的变换
直线 I I I 经过变换 I → x ′ = H x I ′ = H − T I I \xrightarrow[]{x^{'}=Hx} I^{'}=H^{-T}I Ix′=HxI′=H−TI
- 验证过SE3,I 为 4x1 取前三个,(无需让第四位为1 ,否则会改变向量方向)
- 先将向量的终点 原点 经过H变换,在终点‘ - 原点’得到新向量
- 这两种方式计算的结果有一定误差,以谁的为准?
二次曲线 C C C 经过变换 C → x ′ = H x C ′ = H − T C H − 1 C \xrightarrow[]{x^{'}=Hx} C^{\prime}=H^{-T}C H^{-1} Cx′=HxC′=H−TCH−1 C ∗ → x ′ = H x C ∗ ′ = H C ∗ H T C^{*}\xrightarrow[]{x^{'}=Hx} C^{* \prime}=HC^{*} H^{T} C∗x′=HxC∗′=HC∗HT
极点 与 极线关系
点 x \mathbf x x 和 二次曲线 C \mathbf C C 定义一条直线 I = C x \mathbf{I}=\mathbf{C}\mathbf{x} I=Cx. I \mathbf{I} I 称为 x \mathbf x x 关于 C \mathbf C C 的极线; x \mathbf x x 称为 I \mathbf{I} I 关于 C \mathbf C C 的极点
对射是P点到P线的可逆映射并用一个3×3非奇异矩阵A表示为I=Ax
对射提供了点与直线关系对偶化的一种系统方法,对射不要求一定要用对称矩阵表示,但因为讨论二次曲线,在这里我们只限于考虑对称的对射.
共轭点: 如果点 y \mathbf y y 在极线 I = C x \mathbf{I}=\mathbf{C}\mathbf{x} I=Cx 上,则 y T l = y T C x = 0 \mathbf{y}^{T}\mathbf{l}=\mathbf{y}^{T}\mathbf{C}\mathbf{x}=0 yTl=yTCx=0 .满足 y T C x = 0 \mathbf{y}^{T}\mathbf{C}\mathbf{x}=0 yTCx=0 的任何两点 y , x \mathbf y ,\mathbf x y,x 称为关于二次曲线C共轭
如果x在y的极线上,那么y也在x的极线上.
二次曲线的 射影分类 与 仿射分类
因为二次曲线 C C C 是对称矩阵,
C = U T D U C=U^{T}D U C=UTDU
以射影变换 U U U (正交矩阵)作用于二次曲线 C C C
C → x ′ = U x C ′ = U − T C U − 1 = U − T U T D U U − 1 = D C \xrightarrow[]{x^{'}=Ux} C^{\prime}=U^{-T}C U^{-1} = U^{-T}U^{T}D U U^{-1} = D Cx′=UxC′=U−TCU−1=U−TUTDUU−1=D
令 D = d i a g ( ϵ 1 d 1 , ϵ 2 d 2 , ϵ 3 d 3 ) , D=diag\left(\epsilon_{1}d_{1},\epsilon_{2}d_{2},\epsilon_{3}d_{3}\right), D=diag(ϵ1d1,ϵ2d2,ϵ3d3), ϵ i = ± 1 或 0 且 d i > 0 \epsilon_{i} = \pm1 或 0 且 d_i > 0 ϵi=±1或0且di>0
D = d i a g ( s 1 , s 2 , s 3 ) T d i a g ( ε 1 , ε 2 , ε 3 ) d i a g ( s 1 , s 2 , s 3 ) D=\mathrm{diag}(s_1,s_2,s_3)^T\mathrm{diag}(\varepsilon_1,\varepsilon_2,\varepsilon_3)\mathrm{diag}(s_1,s_2,s_3) D=diag(s1,s2,s3)Tdiag(ε1,ε2,ε3)diag(s1,s2,s3)
其中 s i 2 = d i s_i^2 = d_i si2=di , 注意 d i a g ( s 1 , s 2 , s 3 ) T = d i a g ( s 1 , s 2 , s 3 ) \mathrm{diag}(s_1,s_2,s_3)^T=\mathrm{diag}(s_1,s_2,s_3) diag(s1,s2,s3)T=diag(s1,s2,s3)
以射影变换 U d i a g ( s 1 , s 2 , s 3 ) U\mathrm{diag}(s_1,s_2,s_3) Udiag(s1,s2,s3) 作用于二次曲线 C ′ C^{\prime} C′
C ′ → x ′ ′ = d i a g ( s 1 , s 2 , s 3 ) x ′ C ′ ′ = d i a g ( s 1 , s 2 , s 3 ) − T C ′ d i a g ( s 1 , s 2 , s 3 ) − 1 = d i a g ( ε 1 , ε 2 , ε 3 ) C^{\prime} \xrightarrow[]{x^{''}=\mathrm{diag}(s_1,s_2,s_3)x^{'}} C^{\prime\prime}=\mathrm{diag}(s_1,s_2,s_3)^{-T}C^{\prime} \mathrm{diag}(s_1,s_2,s_3)^{-1} = \mathrm{diag}(\varepsilon_1,\varepsilon_2,\varepsilon_3) C′x′′=diag(s1,s2,s3)x′C′′=diag(s1,s2,s3)−TC′diag(s1,s2,s3)−1=diag(ε1,ε2,ε3)
二次曲线的仿射分类
在欧氏几何中,非退化二次曲线可以分为双曲线、椭圆和抛物线.
在射影几何中这三种类型的二次曲线却都射影等价于圆.(上文)
在仿射几何中,上述欧氏分类仍有效(还是能分辨双曲线、椭圆和抛物线),因为它仅取决于 I ∞ \mathbf{I}_{\infty} I∞与二次曲线的关系
不动点与直线
由 I ∞ \mathbf{I}_{\infty} I∞ 和虚圆点,我们已经知道点和直线在射影变换下可能是不动的
H 3 × 3 e = λ e H_{3 \times 3}e=\lambda e H3×3e=λe
关键思想是变换的一个特征矢量对应一个不动点 e 与 λ e e 与 \lambda e e与λe 表示同一点
- 如果特征值互不相同,则一个平面射影变换最多有3个不动点
- 如果有两个特征值相等(
λ
2
=
λ
3
\lambda_2=\lambda_3
λ2=λ3)
- 对应于 λ 2 = λ 3 \lambda_2=\lambda_3 λ2=λ3 存在两个不同的特征矢量 e 2 , e 3 e_2,e_3 e2,e3 那么包含特征矢量 e 2 , e 3 e_2,e_3 e2,e3 的直线将是点点不动的
- 对应于 λ 2 = λ 3 \lambda_2=\lambda_3 λ2=λ3 只有一个特征矢量,在这种情况下,特征矢量的代数维数为二,而几何维数为一.其不动点少了一个(2个而不是3个)
变化层次
欧式变换
相似变换
仿射变换
[ x ′ y ′ 1 ] = [ a 11 a 12 t x a 21 a 22 t y 0 0 1 ] [ x y 1 ] \begin{bmatrix}x^{\prime}\\ y^{\prime}\\ 1\end{bmatrix}=\begin{bmatrix}a_{11}&a_{12}&t_{x}\\ a_{21}&a_{22}&t_{y}\\ 0&0&1\end{bmatrix}\begin{bmatrix}x\\y\\ 1\end{bmatrix} x′y′1 = a11a210a12a220txty1 xy1 或 x ′ = H A x = [ A t 0 T 1 ] x \mathbf{x}^{\prime}=H_{A}\mathbf{x}=\begin{bmatrix}A&\mathbf{t}\\ \mathbf{0}^{T}&1\end{bmatrix}\mathbf{x} x′=HAx=[A0Tt1]x
理解仿射变换中线性成分 A \mathbf A A 的几何效应的一个有益方法是把它看作两个基本变换旋转和非均匀缩放的复合,仿射矩阵 A \mathbf A A 总能分解为
A = U D V T = ( U V T ) ( V D V T ) = R ( θ ) ( R ( − ϕ ) D R ( ϕ ) ) \mathbf{A}=UDV^{T}=(UV^T)(VDV^T)={R}(\theta)({R}(-\phi){DR}(\phi)) A=UDVT=(UVT)(VDVT)=R(θ)(R(−ϕ)DR(ϕ))
D = [ λ 1 0 0 λ 2 ] D=\begin{bmatrix}\lambda_1&0\\ 0&\lambda_2\end{bmatrix} D=[λ100λ2]
因此,仿射矩阵 A \mathbf A A 被看成是一个 旋转 ( ϕ ) (\phi) (ϕ)加上在(已旋转)的x和y方向分别进行按比例因子 λ 1 , λ 2 \lambda_1,\lambda_2 λ1,λ2* 的缩放,再加上一个回转* ( − ϕ ) (-\phi) (−ϕ)与 最后一个旋转 ( θ ) (\theta) (θ)* *的复合变换.
与相似变换相比,“新”几何仅仅是非均匀缩放,它使仿射变换比相似变换多了两个自由度,它们是缩放方向的角度 ( ϕ ) (\phi) (ϕ) 和缩放参数比率 λ 1 : λ 2 \lambda_1:\lambda_2 λ1:λ2 ,仿射变换的本质是在一个特定角的两个垂直方向上进行缩放,图给出两个示意性例子,
射影变换
x ′ = H p x = [ A t v T v ] x \mathbf{x}^{\prime}=H_{p}\mathbf{x}=\begin{bmatrix}A&\mathbf{t}\\ \mathbf{v}^{T}&v\end{bmatrix}\mathbf{x} x′=Hpx=[AvTtv]x
v T = ( v 1 , v 2 ) T \mathbf{v}^{T} = (v_1,v_2)^T vT=(v1,v2)T
射影与仿射变换的根本区别在于:射影变换中矢量 v \mathbf{v} v不是零,由它引起射影变换的非线性效应。把理想点 ( x 1 , x 2 , 0 ) T (x_1,x_2,0)^T (x1,x2,0)T 在仿射和射影变换下的映射做一个对比
- 经过仿射变换,理想点仍是理想点,但不是点点不动
[ A t 0 T 1 ] [ x 1 x 2 0 ] = [ A [ x 1 x 2 ] 0 ] \begin{bmatrix}\mathbf{A}&\mathbf{t}\\ \mathbf{0}^T&1\end{bmatrix} \begin{bmatrix}x_1\\ x_2\\ 0\end{bmatrix}=\begin{bmatrix}\mathbf{A}\begin{bmatrix}x_1\\ x_2\end{bmatrix}\\0\end{bmatrix} [A0Tt1] x1x20 = A[x1x2]0
- 或 经过仿射变换,无穷远线仍是无穷远线
I ∞ ′ = H A − T I ∞ = [ A − T 0 − t T A − T 1 ] [ 0 0 1 ] = [ 0 0 1 ] = I ∞ \mathbf{I}^{'}_{\infty}=\mathbf{H}_{A}^{-T}\mathbf{I}_{\infty}=\left[\begin{array}{c c}A^{-T}&\mathbf{0}\\ -\mathbf{t}^T A^{-T}&1\end{array}\right]\left[\begin{array}{c}0\\ 0\\ 1\end{array}\right]=\left[\begin{array}{c}0\\ 0\\ 1\end{array}\right]=\mathbf{I}_{\infty} I∞′=HA−TI∞=[A−T−tTA−T01] 001 = 001 =I∞
- 经过射射变换,理想点不是理想点,正是因为具有这种能力,射影变换能对消影点建模,
[ A t v T v ] [ x 1 x 2 0 ] = [ A [ x 1 x 2 ] v 1 x 1 + v 2 x 2 ] \begin{bmatrix}A&\mathbf{t}\\\mathbf{v}^{T}&v\end{bmatrix} \begin{bmatrix}x_1\\ x_2\\ 0\end{bmatrix}=\begin{bmatrix}\mathbf{A}\begin{bmatrix}x_1\\ x_2\end{bmatrix}\\v_1x_1+v_2x_2\end{bmatrix} [AvTtv] x1x20 = A[x1x2]v1x1+v2x2
射影变换的分解
KaTeX parse error: \tag works only in display equations
其中 A = s R K + t v T / v \mathbf{A}=s\mathbf{RK}+\mathbf{t}\mathbf{v}^{T}/v A=sRK+tvT/v ,而 K \mathbf{K} K 是满足 d e t ( K ) = 1 det (\mathbf{K}) = 1 det(K)=1 的归一化上三角矩阵,如果 v ≠ 0 v≠0 v=0 上述分解是有效的,而且如果s取正值,它还是唯一的.矩阵 H S , H A , H P \mathbf{H_S}, \mathbf{H_A},\mathbf{H_P} HS,HA,HP分别是相似变换、仿射变换和射影变换
H = [ 1.707 0.586 1.0 2.707 8.242 2.0 1.0 2.0 1.0 ] = [ 2 c o s 4 5 ∘ − 2 s i n 4 5 ∘ 1 2 s i n 4 5 ∘ 2 c o s 4 5 ∘ 2 0 0 1 ] [ 0.5 1 0 0 2 0 0 0 1 ] [ 1 0 0 0 1 0 1 2 1 ] \mathbf{H} = \begin{bmatrix}1.707&0.586&1.0\\ 2.707&8.242&2.0\\ 1.0&2.0&1.0\end{bmatrix}=\begin{bmatrix} 2cos45^{\circ } & -2sin45^{\circ } &1 \\ 2sin45^{\circ} &2cos45^{\circ} & 2 \\ 0 & 0 &1\end{bmatrix} \begin{bmatrix}0.5&1&0\\ 0&2&0\\ 0&0&1\end{bmatrix} \begin{bmatrix}1&0&0\\ 0&1&0\\ 1&2&1\end{bmatrix} H= 1.7072.7071.00.5868.2422.01.02.01.0 = 2cos45∘2sin45∘0−2sin45∘2cos45∘0121 0.500120001 101012001
不变量
交比不变性( 1 D 或 I P 1 1D 或 \mathbf{IP} ^1 1D或IP1 )
x ‾ ′ = H 2 × 2 x ‾ \overline{\mathbf{x}}'=H_{2\times2}\overline{\mathbf{x}} x′=H2×2x
交比: 交比是 I P 1 \mathbf{IP} ^1 IP1 的基本射影不变量
Cross ( x ˉ 1 , x ˉ 2 , x ˉ 3 , x ˉ 4 ) = ∣ x ˉ 1 x ˉ 2 ∣ ∣ x ˉ 3 x ˉ 4 ∣ ∣ x ˉ 1 x ˉ 3 ∣ ∣ x ˉ 2 x ˉ 4 ∣ \text{Cross}(\bar{\mathbf{x}}_1,\bar{\mathbf{x}}_2,\bar{\mathbf{x}}_3,\bar{\mathbf{x}}_4)= \frac{|\bar{\mathbf{x}}_1\bar{\mathbf{x}}_2| \space |\bar{\mathbf{x}}_3\bar{\mathbf{x}}_4|}{|\bar{\mathbf{x}}_1\bar{\mathbf{x}}_3| \space |\bar{\mathbf{x}}_2\bar{\mathbf{x}}_4|} Cross(xˉ1,xˉ2,xˉ3,xˉ4)=∣xˉ1xˉ3∣ ∣xˉ2xˉ4∣∣xˉ1xˉ2∣ ∣xˉ3xˉ4∣
∣ x ˉ i x ˉ j ∣ = [ x i 1 x i 2 x j 1 x j 2 ] |\bar{\mathbf{x}}_i\bar{\mathbf{x}}_j| = \begin{bmatrix} x_{i1} & x_{i2} \\ x_{j1} & x_{j2} \end{bmatrix} ∣xˉixˉj∣=[xi1xj1xi2xj2]
关于交比的几点注释如下:
(1)交比的值与各点 x ˉ i \bar{\mathbf{x}}_i xˉi ,所用的具体的齐次表示无关,因为分子和分母的缩放因子在它们之间抵消。
(2)如果每点 x ˉ i \bar{\mathbf{x}}_i xˉi ,都是有限点,并在齐次表示中均选择 x 2 = 1 x_2=1 x2=1 ,那么 ∣ x ˉ i x ˉ j ∣ |\bar{\mathbf{x}}_i\bar{\mathbf{x}}_j| ∣xˉixˉj∣ 就表示由 x ˉ i \bar{\mathbf{x}}_i xˉi 到 x ˉ j \bar{\mathbf{x}}_j xˉj 的带符号的距离.
(3)如果点 x ˉ i \bar{\mathbf{x}}_i xˉi 中有一个理想点,交比的定义仍然有效,
(4)在任何直线的射影变换下,交比的值不变 x ‾ 1 ′ = H 2 × 2 x ‾ 1 \overline{ \mathbf{x}}_{1}^{\prime} = \mathbf{H}_{2 \times 2} \overline{ \mathbf{x}}_{1} x1′=H2×2x1 :如果,则
C
r
o
s
s
(
x
‾
1
′
,
x
‾
2
′
,
x
‾
3
′
,
x
‾
4
′
)
=
c
r
o
s
s
(
x
‾
1
,
x
‾
2
,
x
‾
3
,
x
‾
4
)
\mathrm{Cross}(\overline{{\mathbf{x}}}_{1}^{\prime},\:\overline{{\mathbf{x}}}_{2}^{\prime},\:\overline{{\mathbf{x}}}_{3}^{\prime},\:\overline{{\mathbf{x}}}_{4}^{\prime}) = \mathrm{cross}(\overline{{\mathbf{x}}}_{1}\:,\:\:\overline{{\mathbf{x}}}_{2}\:,\:\:\overline{{\mathbf{x}}}_{3}\:,\:\:\overline{{\mathbf{x}}}_{4})
Cross(x1′,x2′,x3′,x4′)=cross(x1,x2,x3,x4)
共点线: 共点线 是 直线上共线点(1D) 的 对偶.这意味着平面上的共点线也有几何 I P 1 \mathbf{IP} ^1 IP1 ,特别是,任何四条共点线都有一个确定的交比,如图19a所示
消除失真
消除影射失真时,图像中可能含有多个平面(墙面和地面),因此对图像中墙面消除影射失真,得到 H − 1 H^{-1} H−1再用此变换作用于整幅图像时, 会导致地面出现部分失真,需要通过另一个射影变换加以消除
KaTeX parse error: \tag works only in display equations
自由度
- 欧式(3) : 旋转角度 ( θ ) (\theta) (θ) + 平移 ( t x , t y ) (t_x,t_y) (tx,ty)
- 相似(1): 比例因子 s s s
- 仿射(2):缩放方向的角度 ( ϕ ) (\phi) (ϕ) 和 缩放参数 比率 λ 1 : λ 2 \lambda_1:\lambda_2 λ1:λ2
- 影射(2): v T = ( v 1 , v 2 ) T \mathbf{v}^{T} = (v_1,v_2)^T vT=(v1,v2)T
影射 → 2 d o f I ∞ 仿射 → 2 d o f 2 个虚圆点 相似 → 欧式 影射 \xrightarrow[2dof]{\mathbf{I}_{\infty}} 仿射\xrightarrow[2dof]{2个虚圆点} 相似 \xrightarrow[]{} 欧式 影射I∞2dof仿射2个虚圆点2dof相似欧式
- 辨认 I ∞ \mathbf{I}_{\infty} I∞** 就能恢复仿射性质**
一条直线上有已知长度比的两个线段
- 辨认 C ∞ ∗ C_{\infty}^{*} C∞∗** ,就能恢复相似性质**
世界平面上两个直角 或
一个圆的影像(其像在仿射矫正过的图像中是椭圆,该椭圆和的 I ∞ \mathbf{I}_{\infty} I∞ 交点直接确定被影像的虚圆点) 或
两个已知的长度比
辨认 I ∞ \mathbf{I}_{\infty} I∞** 就能恢复仿射性质**
在射影变换 H \mathbf{H} H 下,无穷远直线 I ∞ \mathbf{I}_{\infty} I∞ 为不动直线的充要条件是 H \mathbf{H} H 是仿射变换。但是,在仿射变换下, I ∞ \mathbf{I}_{\infty} I∞ 不是点点不动的: 在仿射变换下的理想点被映射为 I ∞ \mathbf{I}_{\infty} I∞ 的点 . 辨认 I ∞ \mathbf{I}_{\infty} I∞** 就能恢复仿射性质**(平行,面积比)
一个转弯不大却更适合于计算机算法的途径是直接把已辨认的 I ∞ \mathbf{I}_{\infty} I∞ 变换到它的规范位置 I ∞ = ( 0 , 0 , 1 ) T \mathbf{I}_{\infty}=(0,0,1)^{T} I∞=(0,0,1)T 。把实现此变换的(射影)矩阵应用于图像中的每一点以达到对图像进行仿射矫正
- 获得消影线 I ∞ \mathbf{I}_{\infty} I∞
消影线 I ∞ \mathbf{I}_{\infty} I∞ 可以由平行线的影像的交点来计算,通过确定两个消影点 确定一条直线,消影点通过如下计算
直线上的距离比: 给定一条直线上有已知长度比的两个线段,该直线上的无穷远点便可以确定;
典型的情况是已知
-
在图像直线上的三个点 a ′ , b ′ , c ′ a',b',c' a′,b′,c′ .
-
a,b,c是世界直线上对应的三个点 a , b , c a,b,c a,b,c,长度比 d ( a , b ) : d ( b , c ) = a : b d(a,b):d(b,c)=a:b d(a,b):d(b,c)=a:b
求解过程: -
在图像中计算直线距离比: d ( a ′ , b ′ ) : d ( b ′ , c ′ ) = a ′ : b ′ d(a^{'},b^{'}):d(b^{'},c^{'})=a^{'}:b^{'} d(a′,b′):d(b′,c′)=a′:b′
-
在世界直线 ⟨ a , b , c ⟩ \left \langle a,b,c \right \rangle ⟨a,b,c⟩ 上建立坐标系, a , b , c a,b,c a,b,c 坐标分别为 0 , a , a + b 0,a,a+b 0,a,a+b ,把这些点表示为齐次坐标 ( 0 , 1 ) (0,1) (0,1) ( a , 1 ) (a,1) (a,1) ( a + b , 1 ) (a+b,1) (a+b,1)
-
同理,图像直线 ⟨ a ′ , b ′ , c ′ ⟩ \left \langle a',b',c' \right \rangle ⟨a′,b′,c′⟩ 为齐次坐标 ( 0 , 1 ) (0,1) (0,1) ( a ′ , 1 ) (a^{'},1) (a′,1) ( a ′ + b ′ , 1 ) (a^{'}+b^{'},1) (a′+b′,1)
-
相对于这些坐标系,计算使 a → a ′ , b → b ′ , c → c ′ a\rightarrow a^{'},b\rightarrow b^{'},c\rightarrow c^{'} a→a′,b→b′,c→c′ 的1D射影变换 H 2 × 2 H_{2 \times 2} H2×2
-
世界直线 ⟨ a , b , c ⟩ \left \langle a,b,c \right \rangle ⟨a,b,c⟩的无穷远点 ( 1 , 0 ) (1 , 0) (1,0) 经过变换 H 2 × 2 H_{2 \times 2} H2×2 ,得到图像直线 ⟨ a ′ , b ′ , c ′ ⟩ \left \langle a',b',c' \right \rangle ⟨a′,b′,c′⟩ 的消影点
-
计算矫正矩阵 H H H
如果无穷远直线的像是 I = ( l 1 , l 2 , l 3 ) T \mathbf{I}=\left(l_{1},l_{2},l_{3}\right)^{T} I=(l1,l2,l3)T ,假定 l 3 ≠ 0 l_3 \neq 0 l3=0, 那么把 I \mathbf{I} I 映射回的一个合适的射影点变换是
H = H A [ 1 0 0 0 1 0 l 1 l 2 l 3 ] H=H_A \begin{bmatrix}1&0&0\\ 0&1&0\\ l_1&l_2&l_3\end{bmatrix} H=HA 10l101l200l3
其中 H H H 可取为任何仿射变换( H H H 的最后一行是 I T \mathbf{I}^{T} IT )
辨认 C ∞ ∗ C_{\infty}^{*} C∞∗** ,就能恢复相似性质**
虚圆点及其对偶
在相似变换下 I ∞ \mathbf{I}_{\infty} I∞ 上有两个不动点。它们是虚圆点(也称绝对点) I , J \mathbf{I},\mathbf{J} I,J
在射影变换 H \mathbf{H} H 下,虚圆点 I , J \mathbf{I},\mathbf{J} I,J 为不动点充要条件是 H \mathbf{H} H 是相似变换。
- 虚圆点
I = [ 1 i 0 ] \mathbf{I}=\left[\begin{matrix}1\\ i\\ 0\end{matrix}\right] I= 1i0 J = [ 1 − i 0 ] \mathbf{J}=\left[\begin{matrix}1\\ -i\\ 0\end{matrix}\right] J= 1−i0
I ′ = H s I = [ s cos θ − s sin θ t x s sin θ − s cos θ t y 0 0 1 ] = s e − i θ [ 1 i 0 ] = I \mathbf{I}^{\prime} = \mathbf{H_s}\mathbf{I} = \begin{bmatrix} s\cos\theta & -s\sin\theta & t_x \\ s\sin\theta & -s\cos\theta & t_y \\ 0 & 0 & 1 \end{bmatrix} = s e^{-i\theta}\left[\begin{matrix}1\\ i\\ 0\end{matrix}\right] = \mathbf{I} I′=HsI= scosθssinθ0−ssinθ−scosθ0txty1 =se−iθ 1i0 =I
代数上,虚圆点是把欧氏几何中两正交方向合并到一个复共轭中,即 I = ( 1 , 0 , 0 ) ⊺ + i ( 0 , 1 , 0 ) ⊺ \mathbf{I}=(1,0,0)^{\intercal}+i(0,1,0)^{\intercal} I=(1,0,0)⊺+i(0,1,0)⊺ , 因此,不足为奇,一旦虚圆点被辨认,正交性和其他的度量性质就可以被确定
- 与虚圆点对偶的二次曲线
C ∞ ∗ = I J ⊺ + J I ⊺ = [ 1 0 0 0 1 0 0 0 0 ] \mathbf{C}_{\infty}^{*}=\mathbf{I}\mathbf{J}^{\intercal}+\mathbf{J}\mathbf{I}^{\intercal}=\begin{bmatrix}1&0&0\\ 0&1&0\\ 0&0&0\end{bmatrix} C∞∗=IJ⊺+JI⊺= 100010000
在射影变换 H \mathbf{H} H 下,对偶的二次曲线 C ∞ ∗ \mathbf{C}_{\infty}^{*} C∞∗ 为不动点充要条件是 H \mathbf{H} H 是相似变换。
在射影平面上,一旦 C ∞ ∗ C_{\infty}^{*} C∞∗** 被辨认,那么射影失真可以矫正到相差一个相似变换**
射影变换下两直线的夹角 I = ( l 1 , l 2 , l 3 ) T , m = ( m 1 , m 2 , m 3 ) T \mathbf I=(l_1, l_2,l_3)^T, \quad \mathbf m=(m_1, m_2,m_3)^T I=(l1,l2,l3)T,m=(m1,m2,m3)T
cos θ = I T C ∞ ∗ m ( I T C ∞ ∗ I ) ( m T C ∞ ∗ m ) \cos\theta=\frac{\mathbf{I}^{T}\mathbf{C}_{\infty}^{*}\mathbf{m}}{\sqrt{\left(\mathbf{I}^{T}\mathbf{C}_{\infty}^{*}\mathbf{I}\right)\left(\mathbf{m}^{T}\mathbf{C}_{\infty}^{*}\mathbf{m}\right)}} cosθ=(ITC∞∗I)(mTC∞∗m)ITC∞∗m I T C ∞ ∗ m = 0 ⇒ θ = 9 0 ∘ \mathbf{I}^{T}\mathbf{C}_{\infty}^{*}\mathbf{m} = 0 \Rightarrow \theta = 90^{\circ } ITC∞∗m=0⇒θ=90∘
- 在已矫正为仿射的图像(辨认
I
∞
\mathbf{I}_{\infty}
I∞)上, 为了确定度量矫正,我们需要两个约束以便能够确定虚圆点的两个自由度,这两个约束可以由以下条件获得
- 世界平面上两个直角 或
- 一个圆的影像(其像在仿射矫正过的图像中是椭圆,该椭圆和的 I ∞ \mathbf{I}_{\infty} I∞ 交点直接确定被影像的虚圆点) 或
- 两个已知的长度比
- 直接在一幅透视图像中辨认
C
∞
∗
C_{\infty}^{*}
C∞∗** ,**不用辨认先
I
∞
\mathbf{I}_{\infty}
I∞
- 世界平面上五个正交的直线对的图像确定(线性方程组)