一、对极几何(2D-2D)

  考虑一个SLAM中一个常见的问题:如果两个相机在不同位置拍摄同一个物体,或者一个运动的相机在不同时刻拍摄同一物体,我们有理由相信两张图片中各点存在着某种几何关系,这种关系可以用对极几何来描述。对极几何描述了两帧图像中各像素的射影关系(或者说是各匹配点的几何关系),其与外部的场景本身无关,只与相机的内参以及两图像的拍摄位置有关。



图1 对极几何

  如图所示,对于给定的两帧图像 I_1I_2 ,两个相机中心分别为O_1O_2,两帧图像之间的运动为Rt。对于空间中的点P,在图像I_1中对应像素p_1,对应图像I_2中的像素p_2。为了描述p_1p_2的几何关系,首先,连线Q_1p_1和连线Q_2p_2在三维空间中会相交于空间点P,这时候点O_1O_2P三个点可以确定一个平面,称为极平面(Epipolar plane)。O_1 O_2 连线与像平面I_1,I_2 的交点分别为e_1,e_2e_1,e_2,称为极点(Epipoles),O_1 O_2 被称为基线(Baseline)。称极平面与两个像平面I_1,I_2之间的相交线 l_1,l_2 为极线(Epipolar line)。

  仅由第一帧图像我们无法得知空间点P 的具体位置,因为射线O_1 p_1 上空间点都会投影到点p_1 上,所以我们由像素p_1 可以得知空间点p 在射线O_1 p_1 上;由于不知道空间点P的位置,便不能知道其在第二帧图像上的对应位置,但是点p 是在射线O_1 p_1 上的,所以我们可以得知p_2 一定在直线e_2 p_2上。

  也就是说,对于第一帧图像上的一像素,其在第二帧图像上的投影为一条直线。
  令P的空间坐标为P=[X,Y,Z]^T。两个像素p_1,p_2的像素位置为:

s_1p_1=KP

s_2p_2=K(RP+t)

  其中K为相机内参,Rt为相机运动的旋转和平移矩阵。
  通过推导(详见slam十四讲),我们可以得到:

x_2^Tt Rx_1 = 0

p_2^TK^{-T}t R K^{-1}x_1 = 0

  这两个公式称为对极约束,描绘的是两帧图像对应特征点的几何关系。
  用opencv可以很容易计算得到极线


二、 本质矩阵E与基础矩阵F

  对极约束中同时包含了平移和旋转。我们把中间部分记作两个矩阵:基础矩阵(Fundamental Matrix)F和本质矩阵(Essential Matrix)E,可以进一步简化对极约束:

E=t R

F=K^{-T}EK{-1}

x_2^T E x_1 = p_2^T F p_1 = 0

  可以通过多对匹配的特征点计算基础矩阵F或者本质矩阵E,然后恢复出相机的运动R,t。由于在SLAM问题中相机内参一般是已知的,所以在计算本质矩阵E和基础矩阵F是可以相互转换的,实际应用时一般采用八点法计算本质矩阵E

  对于上式,Ex_1计算的物理意义是第一帧图像的像素p_1投影至第二帧图像中的直线e_2p_2的参数,而p_2TEp_1=0的物理意义便是p_2在该直线上。在实际应用中由于误差的存在,该等式对于每一个特征点并不完全成立,可以通过p_2到直线e_2p_2的距离来衡量该匹配点的质量。这种极线约束的外点检测方法在动态场景下的SLAM中尤为常见,可以有效地检测出运动物体上的外点,具体做法为:

  • 1) 用RANSAC算法计算两帧图像的基础矩阵F
  • 2) 对于第一帧图像每一特征点p1,利用基础矩阵计算其投影后的极线e2p2所在直线的参数;
  • 3) 计算对应特征点p2到该极线的距离,若过大,则为外点。

  当然这种算法也有不足之处,当物体沿着极线运动时,p_2到该极线的距离始终为0,无法反映出其真是误差。这种弊端在检测高速公路上行驶的汽车时尤为明突出。

三、单应矩阵H

  当相机发生纯旋转,或者若场景中的特征点都落在同一平面上(比如墙,地面等)时,计算基础矩阵F或者本质矩阵E往往会有很大的误差(因为此时平移量t特别小,t就会特别大),此时需要用到单应矩阵H

3.1单应性变换

  使用单应矩阵 H 时假设所有像素都在一个平面上,单应矩阵H直接描绘了图像坐标之间的关系,也就是第一帧图像是怎么线性扭曲到第二帧图像的。具体的,图像1中的像素 p_1与图像二中对应的像素p2满足:

p_2=Hp_1

  将单应矩阵H展开:(公式编辑太难搞了)


  由公式可以看到,就是将像素p_1经过线性变换得到像素p_2

3.2单应矩阵H与基础矩阵F的关系

  有人可能会疑惑单应矩阵H与单应矩阵E同为3×3的矩阵,都可以采用直接线性变换的方法进行求解,他们有什么关系呢?本质矩阵E由相机平移和旋转运动得到

E=t R

  而相机的运动是有约束的,具体反应在E的内在性质:本质矩阵E的奇异值必定是[σ; σ; 0]^T 的形式,求解时会有专门的处理过程。而单应矩阵H是图像像素间的线性变换,没有此约束。二者并没有绝对的孰优孰劣,应用场景不同,在相机做纯旋转运动或者环境大致在同一平面时使用单应矩阵H,否则使用本质矩阵E。

3.3单应变换与仿射变化的关系

  仿射变换是一种二维坐标到二维坐标之间的线性变换(相同平面),它保持了二维图形的“平直性”(直线经过变换之后依然是直线)和“平行性”(二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变),但是角度会改变。任意的仿射变换都能表示为乘以一个矩阵(线性变换),再加上一个向量 (平移) 的形式。



  单应变换也称透视变换或者投影映射,是将图片投影到一个新的视平面,它是二维(x,y)到三维(X,Y,Z),再到另一个二维(x′,y′)空间的映射.相对于仿射变换,它提供了更大的灵活性,将一个四边形区域映射到另一个四边形区域(不一定是平行四边形)

  具体情况如下,可以看到单应变换的形式更加灵活,自由度更高

  原图:


  单应变换后的图像:


  仿射变换后的图像


参考博文:
https://blog.csdn.net/tina_ttl/article/details/52749542
https://blog.csdn.net/qq_29462849/article/details/80728757
 https://blog.csdn.net/update7/article/details/105927842
   高博slam十四讲