射影几何基础

2024-04-09 06:28
文章标签 基础 几何 射影

本文主要是介绍射影几何基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

射影几何基础

文章目录

  • 射影几何基础
    • 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

在笛卡尔空间中两条平行线是不可以相交的,但是在射影空间中两条平行线是可以相交的,如火车的铁轨

img

易知在笛卡尔坐标系中两平行线的交点方程为
{ 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= bc2c1bc1aac2abba =(c2c1) ba0

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,3x1,3x2,2)i+(x1,3x2,1x1,1x2,3)j+(x1,1x2,2x1,2x2,1)k= x1,2x2,3x1,3x2,2x1,3x2,1x1,1x2,3x1,1x2,2x1,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 xx/w,yy/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 π=HTπ
可知无穷远平面为 π ∞ = ( 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 X1D234X2D134+X3D124X4D123=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表示直线上的点簇

这篇关于射影几何基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887407

相关文章

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

poj 3304 几何

题目大意:给出n条线段两个端点的坐标,问所有线段投影到一条直线上,如果这些所有投影至少相交于一点就输出Yes!,否则输出No!。 解题思路:如果存在这样的直线,过投影相交点(或投影相交区域中的点)作直线的垂线,该垂线(也是直线)必定与每条线段相交,问题转化为问是否存在一条直线和所有线段相交。 若存在一条直线与所有线段相交,此时该直线必定经过这些线段的某两个端点,所以枚举任意两个端点即可。

POJ 2318 几何 POJ 2398

给出0 , 1 , 2 ... n 个盒子, 和m个点, 统计每个盒子里面的点的个数。 const double eps = 1e-10 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;}struct Point{double x , y

poj 2653 几何

按顺序给一系列的线段,问最终哪些线段处在顶端(俯视图是完整的)。 const double eps = 1e-10 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;}struct Point{double x , y ;Point(){}Po