【计算机视觉】多视图几何与基础矩阵

实验任务:
1.求解图像之间的基础矩阵 要求:分别用七点、八点、十点(匹配点),计算基础矩阵。
实验图片包含三种情况,即
(1)左右拍摄,极点位于图像平面上
(2)像平面接*行,极点位于无穷远
(3)图像拍摄位置位于前后
2. 针对上述情况,画出极点和极线,其中点坐标要均匀分布于各行,避免只用排在前五特征点的方式。

1. 实验原理

1.1 基础矩阵F

相机矩阵是针对单个相机的,可单个相机图片并不能告诉我们物体的深度信息,这时至少需要两个相机,这样在两视图间内在的射影几何关系就是对极几何,而基本矩阵就是对极几何的代数表示。

1.1.1 对极几何

【计算机视觉】多视图几何与基础矩阵
上图O和O’是两个相机中心,P点是物体所在,如果我们只看左边图像 【计算机视觉】多视图几何与基础矩阵上的点p,我们不能知道物体到底是在哪,点P1、P2或其他地方,可有了右边图像 【计算机视觉】多视图几何与基础矩阵上的p’我们就能得到物体点P

在上图,我们把两相机中心的连线OO’成为基线,把他们与观测物体的平面OO’P成为对极平面,对极平面与两相机图像的交线l和l’称为对极线,而OO’与两图像的交点e,e’就是对极点。

随着观测点P的上下移动,对极平面也会围绕基线旋转
【计算机视觉】多视图几何与基础矩阵
在左图对极平面旋转时对极点是不变的,而在相机图像上所有对极线都会交于对极点,这个对极点就是另一个相机中心在其图像上的像,当然正如右图所示,对极点可以在图像外。

1.1.2 本质矩阵

相机1到相机2是刚体运动,那么观测点P在相机1坐标系的坐标就可以通过刚体转换变成相机2坐标系下:【计算机视觉】多视图几何与基础矩阵
其中R和T分别表示旋转和平移,如果我们将其左叉乘一个T得:
【计算机视觉】多视图几何与基础矩阵
其中 T* P’ 表示对极平面的法线,若再左点乘一个P’得:
【计算机视觉】多视图几何与基础矩阵
由于P’与法线TxP’是垂直的,得:【计算机视觉】多视图几何与基础矩阵
将两向量的叉乘转换为一向量的反对称矩阵与另一向量的点乘,得:【计算机视觉】多视图几何与基础矩阵
[T*] 表示T的反对称矩阵,我们让 E=[T*]R ,得:【计算机视觉】多视图几何与基础矩阵
E即是本质矩阵

1.1.3 基础矩阵

相机矩阵的代数表示为:【计算机视觉】多视图几何与基础矩阵
K和 【计算机视觉】多视图几何与基础矩阵 分别表示内参矩阵和外参矩阵,P_im和P_w分别表示图像点和世界点,如果我们把经外参矩阵转换到相机坐标系的世界点称作P_c,得:
【计算机视觉】多视图几何与基础矩阵
考虑左右两视图,又由于K是可逆的,有:
【计算机视觉】多视图几何与基础矩阵
根据本质矩阵将矩阵相乘,得:【计算机视觉】多视图几何与基础矩阵
化简得:【计算机视觉】多视图几何与基础矩阵
F就是基本矩阵

1.1.4 基础矩阵的性质

F 为 3x3 矩阵,秩为2,对任意匹配点对 x↔x’ 均满足 xTFx’=0

  1. 转置: 如果 F 是表述点对 (x, x’)之间的基础矩阵, 则 FT 是 表述点对 (x’,x)之间的基础矩阵;
  2. 对极线: F 可以将点 x 映射到对应像平面上一条线 l=Fx’ ,同理可得 l’=FTx
  3. 对极点: 对于所有对极线, 有 eTFx’=0, x’ eTF=0, 同理 有 Fe’=0 4. F *度为 7 , i.e. 3x3-1(homogeneous)-1(rank2)。

1.2 基础矩阵的计算

矩阵是对极几何的代数表达方式。

基础矩阵表示的是图像像点p1到另一幅图像对极线l2的映射,有如下公式:
【计算机视觉】多视图几何与基础矩阵
而和像点P1匹配的另一个像点p2必定在对极线l2上,即:【计算机视觉】多视图几何与基础矩阵
这样通过匹配的点对,就可以计算出两视图的基础矩阵F了。

基础矩阵F是一个3×3的矩阵,有9个未知元素。上面的公式中使用的齐次坐标,而齐次坐标在相差一个常数因子下是相等,F也就只有8个未知元素,也就是说,可以只通过8对匹配的点对就求解出两视图的基础矩阵F。

1.2.1 八点法

假设一对匹配的像点p1=[u1,v1,1]T, p2=[u2,v2,1]T,带入式子中,得:【计算机视觉】多视图几何与基础矩阵
把基础矩阵F的各个元素当作一个向量处理。即:【计算机视觉】多视图几何与基础矩阵
计算得:
【计算机视觉】多视图几何与基础矩阵
对于其他的点对也使用同样的表示方法,可以得到一个线性方程组:
【计算机视觉】多视图几何与基础矩阵
求解方程组就可以得到基础矩阵各个元素。

优点: 线性求解,容易实现,运行速度快
缺点:对噪声敏感

1.2.2 改进与优化

  1. 归一化八点法
    (1)对点进行平移使其形心位于原点。
    (2)对点进行缩放,使它们到原点的平均距离为
    (3)对两幅图像独立进行上述变换
    【计算机视觉】多视图几何与基础矩阵
    左边是原始图像的坐标,右边是归一化后的坐标,H是归一化的变换矩阵,可记为如下形式:【计算机视觉】多视图几何与基础矩阵
    【计算机视觉】多视图几何与基础矩阵
    尺度S的表达式为:【计算机视觉】多视图几何与基础矩阵

  2. 最小二乘法估算
    使用归一化的坐标虽然能够在一定程度上消除噪声、错误匹配带来的影响,但还是不够的。8点法中,只使用8对匹配的点对估计基础矩阵,但通常两幅图像的匹配的点对远远多于8对,可以利用更多匹配的点对来求解上面的方程。
    由于基础矩阵F在一个常量因子下是等价的,这样可以给基础矩阵F的元素组成的向量f施加一个约束条件:
    【计算机视觉】多视图几何与基础矩阵
    这样由K≥8K≥8K≥8个匹配的点对,组合成一个矩阵K>=8,求解方程就变成了求解问题的最小二乘解:【计算机视觉】多视图几何与基础矩阵
    其中,矩阵Q的每一行来自一对匹配点;f是基础矩阵F元素构成的待求解的向量,根据2-范数的定义:
    【计算机视觉】多视图几何与基础矩阵
    对Q进行奇异值分解:
    【计算机视觉】多视图几何与基础矩阵
    也就是可由向量f=V9构造基础矩阵F。
    基础矩阵F还有一个重要的性质,可以作为进一步的约束条件。就是基础矩阵F的秩为2,上述使用列向量V9构造的基础矩阵的秩通常不为2,需要进一步的优化。
    在估计基础矩阵时,设其最小奇异值为0,对上面方法取得的基础矩阵进行SVD分解:
    【计算机视觉】多视图几何与基础矩阵
    将最小特征值v3被设为0,以使得F的秩为2.得:
    【计算机视觉】多视图几何与基础矩阵
    F就是最终得到的基础矩阵。

1.3 极点与极线

【计算机视觉】多视图几何与基础矩阵
极平面(Epipolar Plane):两个相机坐标原点O、O’和物体P三点组成的平面。

对极平面束(epipolar pencil):以基线为轴的平面束

极线(Epipolar Lines):极平面和两个像平面的交线

极点(Epipoles):相机原点在左右像平面的投影

2. 实验

2.1 代码

2.2 实验结果

  1. 左右拍摄,极点位于图像平面上
    输入数据:
    【计算机视觉】多视图几何与基础矩阵
    输出:
    (1)sift特征匹配:
    【计算机视觉】多视图几何与基础矩阵
    (2)处理后:
    【计算机视觉】多视图几何与基础矩阵
    (3)基础矩阵:
    【计算机视觉】多视图几何与基础矩阵
    (4)极点与极线
    【计算机视觉】多视图几何与基础矩阵
  2. 像平面接*行,极点位于无穷远
    输入:
    【计算机视觉】多视图几何与基础矩阵
    输出:
    (1)sift特征匹配:【计算机视觉】多视图几何与基础矩阵
    (2)处理后:
    【计算机视觉】多视图几何与基础矩阵
    (3)基础矩阵:
    【计算机视觉】多视图几何与基础矩阵
    (4)极点与极限
    【计算机视觉】多视图几何与基础矩阵
  3. 图像拍摄位置位于前后
    输入数据:
    【计算机视觉】多视图几何与基础矩阵
    输出:
    (1)sift特征匹配:
    【计算机视觉】多视图几何与基础矩阵
    (2)处理后:
    【计算机视觉】多视图几何与基础矩阵
    (3)基础矩阵:
    【计算机视觉】多视图几何与基础矩阵
    (4)极点与极线
    【计算机视觉】多视图几何与基础矩阵

2.3 结论

  1. 对图片进行适当的压缩可以提高运行速度
  2. 相机左右方位关系时,极线应当会交于图片外的一点,可以看出我的结果是存在误差的。因此我另外设置了一组数据:【计算机视觉】多视图几何与基础矩阵但结果还是有误差,猜测是选取的观察物不够合适。
  3. 相机平行方位关系时,极线也会是平行关系。而我的参照物因为在sift特征匹配的时候大部分的匹配点落在了零食盒上,会使照片看起来略微像是从一个点发散出来。
  4. 相机前后方位关系时,极线会从一点发散出来,这组数据算比较成功的。
  5. 极点大多会落在极线上,当然也不排除误差。

3. 问题及解决方案

  1. 错误 :OSError: [Errno 22] Invalid argument: ‘C:/Users\yangyang\Desktop\image1\t.jpg’
    解决:图片的命名方式不能只有数字
  2. 问题:ValueError: did not meet fit acceptance criteria
    解决:重新输入一组图片
  3. 问题:error: (-5) image is empty or has incorrect depth (!=CV_8U) in function cv::xfeatures2d::SIFT_Impl::detectAndCompute
    解决:图片的存储位置需在当前项目所在的文件夹中

参考博客:
https://www.cnblogs.com/yuanlibin/p/9462180.html
https://blog.csdn.net/weixin_43842653/article/details/89362617
https://blog.csdn.net/xueluowutong/article/details/80893677