本文主要是介绍射影几何基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
射影几何基础
文章目录
- 射影几何基础
- 2D
- 2D点
- 2D直线
- 二次曲线
- 3D
- 3D点
- 3D 平面
- 3D直线
2D
2D点
欧氏空间中的笛卡尔坐标,缩放、旋转和仿射变换能表示成矩阵运算(线性) ; 但平移变换和透视投影不能表示成矩阵相乘。所以为了解决这个问题引入齐次坐标,其中齐次坐标有如下特性:
- 所有2D/3D几何变换可表示成矩阵运算/线性变换 X ′ = H X X'=HX X′=HX
- 可以表示无穷远点
笛卡尔坐标系 | 齐次坐标系 | |
---|---|---|
2D | ( x w , y w ) (\frac{x}{w},\frac{y}{w}) (wx,wy) | ( x , y , w ) (x,y,w) (x,y,w) |
3D | ( x w , y w , z w ) (\frac{x}{w},\frac{y}{w},\frac{z}{w}) (wx,wy,wz) | ( x , y , z , w ) (x,y,z,w) (x,y,z,w) |
射影几何用于 3D世界到2D图像之间的映射
射影空间 I P n IP^n IPn:欧氏空间 I R n IR^n IRn的扩展
齐次坐标 [ x 1 , x 2 , … , x n , x n + 1 ] [x_1,x_2,\dots,x_n,x_{n+1}] [x1,x2,…,xn,xn+1]
无穷远点 x n + 1 = 0 x_{n+1}=0 xn+1=0、无穷远直线、无穷远平面
当 x n + 1 = 0 x_{n+1}=0 xn+1=0,我们成该点为无穷远点(Infinity), 或理想点(Idea Point)
射影空间之间的映射为共线性映射,即保持共线 性(共线的点经过射影映射后还共线)。
从 I P m IP^m IPm到 I P n IP^n IPn的共线映射为 X ′ = H X X'=HX X′=HX,其中 H H H为 ( n + 1 ) × ( m + 1 ) (n+1)\times (m+1) (n+1)×(m+1)的矩阵
其中2D欧氏坐标 I R 2 IR^{2} IR2的点的笛卡尔坐标为 ( x , y ) T (x,y)^{\mathrm{T}} (x,y)T 2D射影空间 I P 2 IP^{2} IP2的点的齐次坐标为 x = ( x , y , w ) T x=(x,y,w)^{\mathrm{T}} x=(x,y,w)T, 对应 I R 2 IR^{2} IR2的点 ( x / w , y / w ) T (x/w,y/w)^{\mathrm{T}} (x/w,y/w)T
可知道在笛卡尔坐标系中(2,1)的点在摄影空间为(2,1,1)
易知在笛卡尔坐标系中直线方程为 A x + B y + C = 0 Ax+By+C=0 Ax+By+C=0
在笛卡尔空间中两条平行线是不可以相交的,但是在射影空间中两条平行线是可以相交的,如火车的铁轨
易知在笛卡尔坐标系中两平行线的交点方程为
{ A x + B y + C = 0 A x + B y + D = 0 \begin{cases} Ax+By+C=0\\ Ax+By+D=0 \end{cases} {Ax+By+C=0Ax+By+D=0
可知此方程无解,因为当且仅当C=D时方程组成立,但是此两条直线重合
但在射影空间中
{ A x w + B y w + C = 0 A x w + B y w + D = 0 \begin{cases} A\frac{x}{w}+B\frac{y}{w}+C=0\\ A\frac{x}{w}+B\frac{y}{w}+D=0\\ \end{cases} {Awx+Bwy+C=0Awx+Bwy+D=0
即
{ A x + B y + C w = 0 A x + B y + D w = 0 \begin{cases} Ax+By+Cw=0\\ Ax+By+Dw=0 \end{cases} {Ax+By+Cw=0Ax+By+Dw=0
所以可知当w=0时,两平行线相交
欧氏空间中的平行线不会相交,但我们可以在齐次坐标下(射影空间)计算其叉乘,得到第3个元素为0,即无穷远点一般形式:给定两条平行线 l 1 = [ a b c 1 ] T , l 2 = [ a b c 2 ] T l_1=[a\quad b\quad c_1]^{\mathrm{T}},\quad l_2=[a\quad b\quad c_2]^{\mathrm{T}} l1=[abc1]T,l2=[abc2]T
则交点为
l 1 × l 2 = [ b c 2 − c 1 b c 1 a − a c 2 a b − b a ] = ( c 2 − c 1 ) [ b − a 0 ] l_1\times l_2=\begin{bmatrix}bc_2-c_1b\\c_1a-ac_2\\ab-ba\end{bmatrix}=(c_2-c_1)\begin{bmatrix}b\\-a\\0\end{bmatrix} l1×l2= bc2−c1bc1a−ac2ab−ba =(c2−c1) b−a0
2D直线
2D射影空间IP2的直线也用3维齐次坐标表示为 l = ( a , b , c ) T l=(a,b,c)^{\mathrm{T}} l=(a,b,c)T
点 x = ( x , y , 1 ) T x=(x,y,1)^{\mathrm{T}} x=(x,y,1)T在直线 l l l上:点到直线的距离为0,可得
a x + b y + c = 0 [ a , b , c ] [ x y 1 ] = 0 l T x = x T l = 0 \begin{aligned} ax + by + c&=0\\ \begin{bmatrix} a,b,c \end{bmatrix} \begin{bmatrix} x\\y\\1 \end{bmatrix} &=0\\ l^Tx=x^Tl&=0 \end{aligned} ax+by+c[a,b,c] xy1 lTx=xTl=0=0=0
易知给定两点 x 1 , x 2 x_1,x_2 x1,x2,可得经过这两点的一条直线 l = x 1 × x 2 l=x_1\times x_2 l=x1×x2
l = x 1 × x 2 = ∣ i j k x 1 , 1 x 1 , 2 x 1 , 3 x 2 , 1 x 2 , 2 x 2 , 3 ∣ = ( x 1 , 2 x 2 , 3 − x 1 , 3 x 2 , 2 ) i + ( x 1 , 3 x 2 , 1 − x 1 , 1 x 2 , 3 ) j + ( x 1 , 1 x 2 , 2 − x 1 , 2 x 2 , 1 ) k = [ x 1 , 2 x 2 , 3 − x 1 , 3 x 2 , 2 x 1 , 3 x 2 , 1 − x 1 , 1 x 2 , 3 x 1 , 1 x 2 , 2 − x 1 , 2 x 2 , 1 ] \begin{aligned} l&=x_1\times x_2\\ &=\left|\begin{matrix} i&j&k\\ x_{1,1}&x_{1,2}&x_{1,3}\\ x_{2,1}&x_{2,2}&x_{2,3} \end{matrix}\right|\\ &=(x_{1,2}x_{2,3}-x_{1,3}x_{2,2})i\\ &+(x_{1,3}x_{2,1}-x_{1,1}x_{2,3})j\\ &+(x_{1,1}x_{2,2}-x_{1,2}x_{2,1})k\\ &=\begin{bmatrix}x_{1,2}x_{2,3}-x_{1,3}x_{2,2}\\x_{1,3}x_{2,1}-x_{1,1}x_{2,3}\\x_{1,1}x_{2,2}-x_{1,2}x_{2,1}\end{bmatrix} \end{aligned} l=x1×x2= ix1,1x2,1jx1,2x2,2kx1,3x2,3 =(x1,2x2,3−x1,3x2,2)i+(x1,3x2,1−x1,1x2,3)j+(x1,1x2,2−x1,2x2,1)k= x1,2x2,3−x1,3x2,2x1,3x2,1−x1,1x2,3x1,1x2,2−x1,2x2,1
同理可得给定两条直线: l 1 ( L 1 ) , l 2 ( L 2 ) l_1(L_1),l_2(L_2) l1(L1),l2(L2) 这两条直线点的交点为: x = l 1 × l 2 x=l_1\times l_2 x=l1×l2
设两条线的齐次坐标分别为:(-1,0,1), (-1,0,2)
则这两条平行线的交点为无穷远点:
x = ( − 1 , 0 , 1 ) T × ( − 1 , 0 , 2 ) T = ( 0 , 1 , 0 ) T x=(-1,0,1)^{\mathrm{T}}\times(-1,0,2)^{\mathrm{T}}=(0,1,0)^{\mathrm{T}} x=(−1,0,1)T×(−1,0,2)T=(0,1,0)T
第3个元素为0表示这是一个无穷远点
前两个元素表示无穷远点的方向:(0,1)表示这是一个竖直方向的无穷远点
综上所述:
- 点在直线上 : 0 = l T x = x T l :0=l^Tx=x^Tl :0=lTx=xTl
- 经过两点 x 1 x_1 x1和 x 2 x_2 x2的直线: l = x 1 × x 2 l=x_1\times x_2 l=x1×x2
- 两条线 l 1 l_1 l1和 l 2 l_2 l2的交点 : x = l 1 × l 2 x=l_1\times l_2 x=l1×l2
因为对于任意无穷远点 x x x存在直线 l = ( 0 , 0 , 1 ) T l=(0,0,1)^T l=(0,0,1)T,使得 l T x = 0 l^Tx=0 lTx=0恒成立,所以 l l l为无穷远直线
二次曲线
平面上的二次曲线:用二阶方程描述
- 非齐次坐标表示: a x 2 + b x y + c y 2 + d x + e y + f = 0 ax^2+bxy+cy^2+dx+ey+f=0 ax2+bxy+cy2+dx+ey+f=0
- 齐次坐标: x → x / w , y → y / w x\to x/w,\quad y\to y/w x→x/w,y→y/w代入,得到 a x 2 + b x y + c y 2 + d x w + e y w + f w 2 = 0 ax^2+bxy+cy^2+dxw+eyw+fw^2=0 ax2+bxy+cy2+dxw+eyw+fw2=0
- 矩阵形式: x T C x = 0 x^{\mathrm{T}}Cx=0 xTCx=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 是对称矩阵,自由度为5
为每个点提供一个约束 a x i 2 + b x i y i + c y i 2 + d x i + e y i + f = 0 ax_i^2+bx_iy_i+cy_i^2+dx_i+ey_i+f=0 axi2+bxiyi+cyi2+dxi+eyi+f=0,即 [ x i 2 , x i y i , y i 2 , x i , y i , 1 ] c = 0 \left[x_i^2,x_iy_i,y_i^2,x_i,y_i,1\right]\boldsymbol{c}=0 [xi2,xiyi,yi2,xi,yi,1]c=0,其中 c = [ a , b , c , d , e , f ] T c=[a,b,c,d,e,f]^{\mathrm{T}} c=[a,b,c,d,e,f]T,可得
[ x 1 2 x 1 y 1 y 1 2 x 1 y 1 1 x 2 2 x 2 y 2 y 2 2 x 2 y 2 1 x 3 2 x 3 y 3 y 3 2 x 3 y 3 1 x 4 2 x 4 y 4 y 4 2 x 4 y 4 1 x 5 2 x 5 y 5 y 5 2 x 5 y 5 1 ] c = 0 \begin{bmatrix}x_1^2&x_1y_1&y_1^2&x_1&y_1&1\\x_2^2&x_2y_2&y_2^2&x_2&y_2&1\\x_3^2&x_3y_3&y_3^2&x_3&y_3&1\\x_4^2&x_4y_4&y_4^2&x_4&y_4&1\\x_5^2&x_5y_5&y_5^2&x_5&y_5&1\end{bmatrix}\mathbf{c}=\mathbf{0} x12x22x32x42x52x1y1x2y2x3y3x4y4x5y5y12y22y32y42y52x1x2x3x4x5y1y2y3y4y511111 c=0
3D
3D点
欧氏空间的3D点: ( X 1 , X 2 , X 3 ) T (X_1,X_2,X_3)^{\mathrm{T}} (X1,X2,X3)T
3D射影空间IP 3 ^{3} 3的点的齐次坐标为 x = ( X 1 , X 2 , X 3 , X 4 ) T x=(X_1,X_2,X_3,X_4)^{\mathrm{T}} x=(X1,X2,X3,X4)T
当 X 4 ≠ 0 X_4\neq0 X4=0时, X = ( X 1 X 4 , X 2 X 4 , X 3 X 4 , 1 ) T = ( X , Y , Z , 1 ) T X=(\frac{X_1}{X_4},\frac{X_2}{X_4},\frac{X_3}{X_4},1)^{\mathrm{T}}=(X,Y,Z,1)^{\mathrm{T}} X=(X4X1,X4X2,X4X3,1)T=(X,Y,Z,1)T
当 X 4 = 0 X_4=0 X4=0时, ( X 1 , X 2 , X 3 , 0 ) (X_1,X_2,X_3,0) (X1,X2,X3,0)表示无穷远点。
3D射影空间中的点的射影变换为:
X ′ = H X X'=HX X′=HX
其中 H H H为4×4的非奇异矩阵,自由度为15
3D 平面
可知3D点的形式如下
X = [ X 1 X 2 X 3 X 4 ] X=\begin{bmatrix}X_1\\X_2\\X_3\\X_4\end{bmatrix} X= X1X2X3X4
设3D平面的形式如下
π = [ π 1 π 2 π 3 π 4 ] \pi=\begin{bmatrix}\pi_1\\\pi_2\\\pi_3\\\pi_4\end{bmatrix} π= π1π2π3π4
所以点在平面上可以表示为
X 1 π 1 + X 2 π 2 + X 3 π 3 + X 4 π 4 = 0 X_1\pi_1+X_2\pi_2+X_3\pi_3+X_4\pi_4=0 X1π1+X2π2+X3π3+X4π4=0
若使用矩阵表示,则为
0 = π T X = X T π 0=\pi^\mathrm{T}X=X^\mathrm{T}\pi 0=πTX=XTπ
同理可得,平面的射影变换为
π ′ = H − T π \pi^{\prime}=H^{-T}\pi π′=H−Tπ
可知无穷远平面为 π ∞ = ( 0 , 0 , 0 , 1 ) T \pi_{\infty}=(0,0,0,1)^T π∞=(0,0,0,1)T
因为三个点可以确定一个平面,则有三个点满足 X 1 π 1 + X 2 π 2 + X 3 π 3 + X 4 π 4 = 0 X_1\pi_1+X_2\pi_2+X_3\pi_3+X_4\pi_4=0 X1π1+X2π2+X3π3+X4π4=0
所以存在方程组
点 X X X 在由3点 ( X 1 , X 2 , X 3 ) (X_1, X_2, X_3) (X1,X2,X3)在一个平面上,有三点共面条件可得
det [ X 1 X 11 X 21 X 31 X 2 X 12 X 22 X 32 X 3 X 13 X 23 X 33 X 4 X 14 X 24 X 34 ] = 0 \det \begin{bmatrix} X_1&X_{11}&X_{21}&X_{31}\\ X_2&X_{12}&X_{22}&X_{32}\\ X_3&X_{13}&X_{23}&X_{33}\\ X_4&X_{14}&X_{24}&X_{34}\\ \end{bmatrix} =0 det X1X2X3X4X11X12X13X14X21X22X23X24X31X32X33X34 =0
解得: X 1 D 234 − X 2 D 134 + X 3 D 124 − X 4 D 123 = 0 X_1D_{234}-X_2D_{134}+X_3D_{124}-X_4D_{123}=0 X1D234−X2D134+X3D124−X4D123=0
π = ( D 234 , − D 123 , D 124 , − D 123 ) T \boldsymbol{\pi}=(D_{234},-D_{123},D_{124},-D_{123})^\mathrm{T} π=(D234,−D123,D124,−D123)T
可知3点 ( X 1 , X 2 , X 3 ) (X_1,X_2,X_3) (X1,X2,X3) 确定的一个平面为: ( D 234 , − D 123 , D 124 , − D 123 ) T (D_{234},-D_{123},D_{124},-D_{123})^{\mathrm{T}} (D234,−D123,D124,−D123)T ,因为 [ X 1 T X 2 T X 3 T ] π = 0 \begin{bmatrix} X_1^T\\ X_2^T\\ X_3^T \end{bmatrix} \pi=0 X1TX2TX3T π=0,即 π \pi π是 [ X 1 T X 2 T X 3 T ] \begin{bmatrix} X_1^T\\ X_2^T\\ X_3^T \end{bmatrix} X1TX2TX3T 的零空间。
因为三个平面可以确定一个点,所以可得3个平面 ( π 1 , π 2 , π 3 ) (\pi_1,\pi_2,\pi_3) (π1,π2,π3) 确定一个交点 X X X,存在 [ π 1 T π 2 T π 3 T ] X = 0 \begin{bmatrix} \pi_1^T\\ \pi_2^T\\ \pi_3^T \end{bmatrix} X=0 π1Tπ2Tπ3T X=0,即 X X X是 [ π 1 T π 2 T π 3 T ] \begin{bmatrix} \pi_1^T\\ \pi_2^T\\ \pi_3^T \end{bmatrix} π1Tπ2Tπ3T 的零空间。
3D直线
两点的连线:给定两个不重合的点A、B,连接这两个点的直 线有一个2×4的矩阵W的行的生成子空间表示:
W = [ A T B T ] W=\begin{bmatrix}A^T\\B^T\end{bmatrix} W=[ATBT]
其中 λ A + μ B = 0 \lambda A+\mu B=0 λA+μB=0表示直线上的点簇
这篇关于射影几何基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!