2D射影几何与变换(3)
这篇主要介绍在2D射影几何中的无穷远直线、虚圆点及其对偶二次曲线,以及他们各自对应的图像的仿射和度量性质。
无穷远直线
-
定义
I P 2 IP^2 IP2中的理想点(齐次坐标第三项为0)构成的直线,称为无穷远直线( I ∞ = ( 0 , 0 , 1 ) T I_{\infty}=(0,0,1)^T I∞=(0,0,1)T)。
在2D射影空间中,任意直线都与无穷远直线有交点,所以无穷远直线也可以看作是所有直线方向的集合。
正因为指明了无穷远直线,2D射影空间比2D欧式空间更为完备。 -
图像的仿射性质
对于射影空间中的点变换H,由其对应的直线的变换:
I ∞ ′ = H A − T I ∞ = [ A − T 0 − t T A − T 1 ] ( 0 0 1 ) = ( 0 0 1 ) = I ∞ I'_{\infty}=H_A^{-T}I_{\infty} = \left[ \begin{matrix} A^{-T} & 0 \\ -t^TA^{-T} & 1 \end{matrix} \right] \left( \begin{matrix} 0 \\ 0 \\ 1 \end{matrix} \right) = \left( \begin{matrix} 0 \\ 0 \\ 1 \end{matrix} \right) = I_{\infty} I∞′=HA−TI∞=[A−T−tTA−T01]⎝⎛001⎠⎞=⎝⎛001⎠⎞=I∞
-
恢复图像的仿射性质
可以看到,在仿射变换下,无穷远直线保持不变。
结论:在射影空间中,当且仅当仿射变换下,无穷远直线保持不动。
所以,只要能够指明无穷远直线,就可以从射影变换中恢复仿射性质,也就是利用一个将无穷远直线变回标准位置的反变换,将射影变换变为仿射变换。
具体做法:
假如无穷远直线的像是 l = ( l 1 , l 2 , l 3 ) T , l 3 ≠ 0 l=(l_1,l_2,l_3)^T,l_3 \ne 0 l=(l1,l2,l3)T,l3=0,那么对应恢复仿射性质的反变换则为:
H = H A [ 1 0 0 0 1 0 l 1 l 2 l 3 ] H = H_A \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ l_1 & l_2 & l_3 \end{matrix} \right] H=HA⎣⎡10l101l200l3⎦⎤
其中 H A H_A HA为任意仿射。 -
无穷远直线的确定
如果能够找到一条直线上的三个点,那么就可以利用交比得到该直线的无穷远点,两个这样的无穷远点,就可以确定无穷远直线的像。
虚圆点及其对偶二次曲线
-
虚圆点定义
在无穷远直线上有两个点: I = ( 1 , i , 0 ) T , J = ( 1 , − i , 0 ) T I=(1,i,0)^T, J=(1,-i,0)^T I=(1,i,0)T,J=(1,−i,0)T,称为虚圆点。
这两个点可以验证,在相似变换下不变:
I ′ = H S I = [ a c o s θ − a s i n θ t x a s i n θ a c o s θ t y 0 0 1 ] ( 1 i 0 ) = a e − i θ ( 1 i 0 ) = I I' = H_S I = \left[ \begin{matrix} acos\theta & -asin\theta & t_x \\ asin\theta & acos\theta & t_y \\ 0 & 0 & 1 \end{matrix} \right] \left( \begin{matrix} 1 \\ i \\ 0 \end{matrix} \right) = ae^{-i\theta} \left( \begin{matrix} 1 \\ i \\ 0 \end{matrix} \right) = I I′=HSI=⎣⎡acosθasinθ0−asinθacosθ0txty1⎦⎤⎝⎛1i0⎠⎞=ae−iθ⎝⎛1i0⎠⎞=I
结论:在射影空间中,当且仅当(保向)相似变换下,虚圆点保持不动。(逆向则I,J交换位置) -
虚圆点的来源
对于任意圆: x 2 + y 2 + d x z + e y z + f z 2 = 0 x^2+y^2+dxz+eyz+fz^2=0 x2+y2+dxz+eyz+fz2=0,它与无穷远直线相交(z=0): x 2 + y 2 = 0 x^2+y^2=0 x2+y2=0,解得虚圆点I,J。
也就是说,任意圆都与无穷远直线相交于虚圆点,也就解释了为什么欧式几何中,圆是三个自由度而射影几何中圆和椭圆等价有五个自由度:圆是三个点加两个虚圆点。 -
虚圆点的对偶二次曲线
虚圆点可以看作方程 x 2 + y 2 = 0 x^2+y^2=0 x2+y2=0,是一条退化二次曲线。它有对偶二次曲线 C ∞ ∗ = I J T + J I T C^*_{\infty}=IJ^T+JI^T C∞∗=IJT+JIT ,是由以虚圆点为中心的两条平行直线束构成的。同样的,在相似变换下,该对偶二次曲线不变。 -
图像的度量性质
在射影几何中,两直线的欧式夹角可以用下式表示:
c o s θ = I T C ∞ ∗ m ( I T C ∞ ∗ I ) ( m T C ∞ ∗ m ) cos\theta = \frac{I^TC^*_{\infty}m}{\sqrt{(I^TC^*_{\infty}I)(m^TC^*_{\infty}m)}} cosθ=(ITC∞∗I)(mTC∞∗m)ITC∞∗m
这个式子说明,一旦确认了射影平面上的对偶二次曲线 C ∞ ∗ C^*_{\infty} C∞∗,就可以测量欧式角,也就是恢复了射影变换对于夹角的失真,恢复了仿射性质。 -
用 C ∞ ∗ C^*_{\infty} C∞∗进行度量校正
对于一个射影变换H,根据其链式分解,对于 C ∞ ∗ C^*_{\infty} C∞∗的像为:
C ∞ ∗ ′ = ( H P H A H S ) C ∞ ∗ ′ ( H P H A H S ) T = [ K K T K K T v v T K K T v T K K T v ] C^{*'}_{\infty} = (H_PH_AH_S)C^{*'}_{\infty}(H_PH_AH_S)^T = \left[ \begin{matrix} KK^T & KK^Tv \\ v^TKK^T & v^T KK^T v \end{matrix} \right] C∞∗′=(HPHAHS)C∞∗′(HPHAHS)T=[KKTvTKKTKKTvvTKKTv]
其中射影成分(v)和仿射成分(K)可以由该像直接确定,但相似成分未知。
一个简单的反变换方法,是对 C ∞ ∗ ′ C^{*'}_{\infty} C∞∗′做SVD分解:
C ∞ ∗ ′ = U [ 1 0 0 0 1 0 0 0 0 ] U T C^{*'}_{\infty} = U \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{matrix} \right]U^T C∞∗′=U⎣⎡100010000⎦⎤UT
U就是对应的校正射影变换。
总结
一般来说,两个平面之间的单应变换,可以通过平面上四组对应点的位置计算得到,事实上,他超定了该几何,因为射影变换(8dof)和相似变换(4dof)只差4个自由度。
也就是说假如要测量图像中的相似不变量(角度、长度比),只需要指定4个自由度。
那么这四个自由度就对应于上文所说的无穷远直线(2dof)和虚圆点(2dof)。
所以对于2D测量问题来说,无穷远直线和虚圆点及其对偶就十分重要,在3D上,则是绝对二次曲线。