三角化、极几何、本质矩阵、基础矩阵和单应矩阵都是三维视觉和多视图几何里的核心概念,用来解决同一个大问题:如何通过不同角度拍摄的图像,还原出相机之间的几何关系,以及场景中的三维结构 。不过它们各自适用的前提、解决的问题和数学形式有所不同。本质矩阵 和 基础矩阵 用来描述
两张照片之间,像素点满足的几何约束"一个点在左图的像素,在右图上对应的那条"可能匹配线"在哪里。单应矩阵 则是在一个更特殊的条件下,直接把左图的一个点"映射"到右图的精确点,而不是一条线。
1、三角化
三角化解决单视图无法确定深度的问题,如下图所示通过求两个视图中视线的交点就可以确定物体的远近了。

1.1 理想情况下
理想情况下,两条视线正好相交,在这里P=l×l′P = l \times l'P=l×l′,这里有两个需要注意的点:
- 此时假设两条直线共面,异面的话交点一般是公垂线的中点
- 这里叉乘得到交点是用的齐次坐标,否则叉乘的结果是垂直于两条直线的向量
- lll和l′l'l′通常不在一个坐标系下,还需要转换到一个坐标系下才能做运算
在平面几何中,一条直线可以用方程 ax+by+c=0ax + by + c = 0ax+by+c=0 表示。
把系数 (a,b,c)(a, b, c)(a,b,c) 看作一个向量(称为直线的齐次坐标)。
点 (x,y)(x, y)(x,y) 也写成齐次形式 (x,y,1)(x, y, 1)(x,y,1)。
点 PPP 在直线 LLL 上,就满足 ax+by+c⋅1=0a x + b y + c \cdot 1 = 0ax+by+c⋅1=0,也就是两个向量的点积为零:
L⋅P=0L \cdot P = 0L⋅P=0
现在有两条直线 L1L_1L1 和 L2L_2L2,它们的交点 PPP 必须同时满足:
L1⋅P=0,L2⋅P=0L_1 \cdot P = 0,\quad L_2 \cdot P = 0L1⋅P=0,L2⋅P=0
也就是说,PPP 这个向量与 L1L_1L1 和 L2L_2L2 都垂直(点积为0)。
在三维空间中,与两个向量都垂直的向量,就是它们的叉乘。
所以:
P=L1×L2P = L_1 \times L_2P=L1×L2
得到的 PPP 就是交点的齐次坐标(再除以第三个分量就得到普通坐标)。
通俗比喻:把直线想象成"法向量",交点就是同时垂直于这两个法向量的方向,叉乘正好给出这个方向。
1.2 实际工程中
在实际工程中,在左右视图中找到匹配点对,然后通过给自相机光心和特征点的射线通常都不能相交,两条直线异面,这种情况下一般将两条直线的公垂线的中点作为交点。
1.2.1 线性解法
线性解法如下,通过三维空间点到图像坐标系的关系,以及双相机关系可列出如下公式:
{p=MP=K[I 0]Pp′=M′P=K′[R T]P \begin{cases} p = MP = K[I \ 0]P \\ p' = M'P = K'[R \ T]P \end{cases} {p=MP=K[I 0]Pp′=M′P=K′[R T]P
上述公式可以转换成:
u=m1Pm3P→m1P−u(m3P)=0v=m2Pm3P→m2P−v(m3P)=0u′=m1′Pm3′P→m1′P−u′(m3′P)=0v′=m2′Pm3′P→m2′P−v′(m3′P)=0 \begin{aligned} u &= \frac{m_1 P}{m_3 P} \quad &&\rightarrow \quad m_1 P - u(m_3 P) = 0 \\ v &= \frac{m_2 P}{m_3 P} \quad &&\rightarrow \quad m_2 P - v(m_3 P) = 0 \\ u' &= \frac{m'_1 P}{m'_3 P} \quad &&\rightarrow \quad m'_1 P - u'(m'_3 P) = 0 \\ v' &= \frac{m'_2 P}{m'_3 P} \quad &&\rightarrow \quad m'_2 P - v'(m'_3 P) = 0 \end{aligned} uvu′v′=m3Pm1P=m3Pm2P=m3′Pm1′P=m3′Pm2′P→m1P−u(m3P)=0→m2P−v(m3P)=0→m1′P−u′(m3′P)=0→m2′P−v′(m3′P)=0
可以转换成AP=0的形式,其中:
A=[um3−m1vm3−m2u′m3′−m1′v′m3′−m2′] A = \begin{bmatrix} u m_3 - m_1 \\ v m_3 - m_2 \\ u' m'_3 - m'_1 \\ v' m'_3 - m'_2 \end{bmatrix} A= um3−m1vm3−m2u′m3′−m1′v′m3′−m2′
得到4个方程3个未知数的超定齐次线性方程组,可以求出最小二乘解:
1.矩阵A进行奇异值分解 A=UDVTA=UDV^TA=UDVT
2.P为V矩阵的最后一列
1.2.2 非线性解法
非线性解法的核心思想是定义一个损失函数,将设有一空间点,分别在两张图像上的投影点到真实投影点的距离越小越好。
L=d(p,MP)+d(p′,M′P) L= d(p, MP) + d(p', M'P) L=d(p,MP)+d(p′,M′P)
求解方法一般是牛顿法或者列文伯格马卡尔特(L-M方法)。

1.2.3 相关参数求解
上述求解空间点P的核心参数如下p,p′,K,K′,R,Tp, p',K,K',R,Tp,p′,K,K′,R,T,其中p,p′p, p'p,p′通过SIFT、SuperPoint等特征匹配算法得到,K,K′K,K'K,K′通过相机内参数相关算法解算,R,TR,TR,T通过双相机外参数相关算法求解。
2、对极几何
对极几何(Epipolar Geometry)描述的是两幅视图之间的内在射影关系,与外部场景无关,只依赖于摄像机内参数和这两幅视图之间的相对位姿。

两视图的对极几何可以理解为图像平面与以基线为轴的平面束相交的几何关系,其中主要有几种概念:
(1)基线(base line):两个相机中心的连线O1O2O_1O_2O1O2称为基线。
(2)对极点(epipolar):ee′ee'ee′是对极点,是基线与两个成像平面的交点,也就是两个相机在另一个成像平面上的像点。
(3)对极平面(epipolar plane):过基线的平面都称之为对极平面,其中两个相机的中心OOO和O′O'O′,三维点PPP,以及三维点在两个相机成像点pp′pp'pp′这五点必定在同一对极平面上,当三维点PPP变化时,对极平面绕着基线旋转,形成对极平面束。
(4)对极线(epipolar line):是对极平面和成像平面的交线l,l′l,l'l,l′,所有的对极线都相交于极点。
对极几何的一个作用时已知pPpPpP,求对应点p′p'p′时,只需要在l′l'l′上搜索,不用在全图搜索了。
3、 本质矩阵
本质矩阵对规范化摄像机拍摄的两个视点图像间的极几何关系进行代数描述。所谓的规范化摄像机就是内参数是单位矩阵的理想情况,使用本质矩阵的优点就在于点p在图像坐标系(u, v, 1)与在世界坐标系O1O_1O1的坐标(x,y,z)存在一个缩放的关系。
假设pw′p'_wpw′是p′p'p′在O1O_1O1下的坐标,可得到如下关系:
p′=Rpw′+Tp' = Rp'_w+Tp′=Rpw′+T
p′p'p′在O1O_1O1的坐标为:pw′=RT(p′−T)=RTp′−RTTp'_w=R^T(p'-T)=R^Tp'-R^TTpw′=RT(p′−T)=RTp′−RTT
O2O_2O2在O1O_1O1的坐标为:−RTT-R^TT−RTT
计算垂直于极平面的向量:RTT×(RTp′−RTT)=RTT×RTp′R^TT\times(R^Tp'-R^TT) =R^TT\times R^Tp'RTT×(RTp′−RTT)=RTT×RTp′
RTT×RTp′\]T⋅p=0\[R\^TT\\times R\^Tp'\]\^T\\cdot p =0\[RTT×RTp′\]T⋅p=0 -\> p′T⋅\[T×R\]⋅p=0p\^{'T}\\cdot\[T\\times R\]\\cdot p =0p′T⋅\[T×R\]⋅p=0 叉乘的矩阵表示如下,记住公式就可以了,下面矩阵不是满秩矩阵: a×b=\[0−azayaz0−ax−ayax0\]\[bxbybz\]=\[a×\]b a \\times b = \\begin{bmatrix} 0 \& -a_z \& a_y \\\\ a_z \& 0 \& -a_x \\\\ -a_y \& a_x \& 0 \\end{bmatrix} \\begin{bmatrix} b_x \\\\ b_y \\\\ b_z \\end{bmatrix} = \[a_\\times\] b a×b= 0az−ay−az0axay−ax0 bxbybz =\[a×\]b > 本质矩阵:E=T×RE=T\\times RE=T×R -\> p′TEp=0p\^{'T}Ep =0p′TEp=0 > > 点p对应的极线是:l′=Epl'=Epl′=Ep > > 点p'对应的极线是:l=ETp′l=E\^Tp'l=ETp′ > Ee=0Ee=0Ee=0 > e′TE=0e\^{'T}E=0e′TE=0 > > E是奇异的(秩是2) > > E有5个自由度(三个旋转+三个平移,但是E的行列式=0去掉一个自由度) ## 4、 基础矩阵 基础矩阵是本质矩阵的一般情况,本质矩阵是一种特例。求解思路就是将普通摄像机变换到规范化摄像机上,然后使用本质矩阵中的结论。  > 基础矩阵:F=K′−T\[T×\]RK−1F=K\^{'-T}\[T_\\times\] RK\^{-1}F=K′−T\[T×\]RK−1 -\> p′TFp=0p\^{'T}Fp =0p′TFp=0 > > 点p对应的极线是:l′=Fpl'=Fpl′=Fp > > 点p'对应的极线是:l=FTp′l=F\^Tp'l=FTp′ > Fe=0Fe=0Fe=0 > e′TF=0e\^{'T}F=0e′TF=0 > > E是奇异的(秩是2) > > E有7个自由度(尺度无法确定,但是E的行列式=0去掉一个自由度) > > F矩阵描述了两幅图像的极几何关系,即相同场景在不同视图中的对应关系。只要给了F矩阵就可以根据左相机的特征点求出右相机的极线。F矩阵中包含了摄像机的内外参数。 > > 虽然这里看起来是根据F矩阵求极线,实际应用时一般是根据对应点对求解F矩阵,F矩阵中包含了内参数和外参数,再想办法分离出来。 #### 基础矩阵估计 一般使用八点法,在opensfm和colmap这些算法中都有应用。根据公式p′TFp=0p\^{'T}Fp =0p′TFp=0,已知p和p'估计基础矩阵F。 p=\[uv1\] p = \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} p= uv1 p′=\[u′v′1\] p' = \\begin{bmatrix} u' \\\\ v' \\\\ 1 \\end{bmatrix} p′= u′v′1 (u′,v′,1)\[F11F12F13F21F22F23F31F32F33\]\[uv1\]=0 (u', v', 1) \\begin{bmatrix} F_{11} \& F_{12} \& F_{13} \\\\ F_{21} \& F_{22} \& F_{23} \\\\ F_{31} \& F_{32} \& F_{33} \\end{bmatrix} \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} = 0 (u′,v′,1) F11F21F31F12F22F32F13F23F33 uv1 =0 (uu′,vu′,u′,uv′,vv′,v′,u,v,1)(F11F12F13F21F22F23F31F32F33)=0 (uu', vu', u', uv', vv', v', u, v, 1) \\begin{pmatrix} F_{11} \\\\ F_{12} \\\\ F_{13} \\\\ F_{21} \\\\ F_{22} \\\\ F_{23} \\\\ F_{31} \\\\ F_{32} \\\\ F_{33} \\end{pmatrix} = 0 (uu′,vu′,u′,uv′,vv′,v′,u,v,1) F11F12F13F21F22F23F31F32F33 =0 这里给一个点只能列出一个方程,一般使用8个点: \[u1u1′v1u1′u1′u1v1′v1v1′v1′u1v11u2u2′v2u2′u2′u2v2′v2v2′v2′u2v21u3u3′v3u3′u3′u3v3′v3v3′v3′u3v31u4u4′v4u4′u4′u4v4′v4v4′v4′u4v41u5u5′v5u5′u5′u5v5′v5v5′v5′u5v51u6u6′v6u6′u6′u6v6′v6v6′v6′u6v61u7u7′v7u7′u7′u7v7′v7v7′v7′u7v71u8u8′v8u8′u8′u8v8′v8v8′v8′u8v81\]\[F11F12F13F21F22F23F31F32F33\]=0 \\begin{bmatrix} u_1 u'_1 \& v_1 u'_1 \& u'_1 \& u_1 v'_1 \& v_1 v'_1 \& v'_1 \& u_1 \& v_1 \& 1 \\\\ u_2 u'_2 \& v_2 u'_2 \& u'_2 \& u_2 v'_2 \& v_2 v'_2 \& v'_2 \& u_2 \& v_2 \& 1 \\\\ u_3 u'_3 \& v_3 u'_3 \& u'_3 \& u_3 v'_3 \& v_3 v'_3 \& v'_3 \& u_3 \& v_3 \& 1 \\\\ u_4 u'_4 \& v_4 u'_4 \& u'_4 \& u_4 v'_4 \& v_4 v'_4 \& v'_4 \& u_4 \& v_4 \& 1 \\\\ u_5 u'_5 \& v_5 u'_5 \& u'_5 \& u_5 v'_5 \& v_5 v'_5 \& v'_5 \& u_5 \& v_5 \& 1 \\\\ u_6 u'_6 \& v_6 u'_6 \& u'_6 \& u_6 v'_6 \& v_6 v'_6 \& v'_6 \& u_6 \& v_6 \& 1 \\\\ u_7 u'_7 \& v_7 u'_7 \& u'_7 \& u_7 v'_7 \& v_7 v'_7 \& v'_7 \& u_7 \& v_7 \& 1 \\\\ u_8 u'_8 \& v_8 u'_8 \& u'_8 \& u_8 v'_8 \& v_8 v'_8 \& v'_8 \& u_8 \& v_8 \& 1 \\end{bmatrix} \\begin{bmatrix} F_{11} \\\\ F_{12} \\\\ F_{13} \\\\ F_{21} \\\\ F_{22} \\\\ F_{23} \\\\ F_{31} \\\\ F_{32} \\\\ F_{33} \\end{bmatrix} = 0 u1u1′u2u2′u3u3′u4u4′u5u5′u6u6′u7u7′u8u8′v1u1′v2u2′v3u3′v4u4′v5u5′v6u6′v7u7′v8u8′u1′u2′u3′u4′u5′u6′u7′u8′u1v1′u2v2′u3v3′u4v4′u5v5′u6v6′u7v7′u8v8′v1v1′v2v2′v3v3′v4v4′v5v5′v6v6′v7v7′v8v8′v1′v2′v3′v4′v5′v6′v7′v8′u1u2u3u4u5u6u7u8v1v2v3v4v5v6v7v811111111 F11F12F13F21F22F23F31F32F33 =0 构建:WF=0WF=0WF=0 然后就是一个求解超定齐次方程的问题,使用奇异值分解,用这种方法求解的时候误差一般都会比较大,主要W矩阵中都是像素坐标相乘会导致数据极大,将图像中所有点归一化到直径为2的区域中。 ## 5、 单应矩阵 \*\* 概念:**空间平面在两个摄像机下的投影几何,两个相机对应的匹配点都在** 同一个平面\*\*上  已知:第一个摄像机的内参数矩阵为KKK,第二个摄像机的内参数矩阵为K′K'K′,第二个相机相对于第一个相机的位置为(R,t),n为平面π\\piπ在第一个摄像机坐标系下的单位法向量,d为坐标原点到平面π\\piπ的距离 H=K′(R+tndT)K−1 H = K'(R + tn\^T_d)K\^{-1} H=K′(R+tndT)K−1 其中,nd=nd \\boldsymbol{n}_d = \\frac{\\boldsymbol{n}}{d} nd=dn p=Hp′ p=Hp' p=Hp′ 已知单应矩阵就可以通过一个点直接找到另外一个点,而基础矩阵是点对应线。 ## 参考资料 > https://www.bilibili.com/video/BV186DPYfEJU?vd_source=ba19da1fd9bdf08b09abba58540a564c > > https://cloud.tencent.com/developer/article/1483521 > > https://zhuanlan.zhihu.com/p/645991529