计算机视觉——多视图几何

原理

对极几何

如果有一个场景的两个视图以及视图中的对应图像点,那么根据照相机间的空间相对位置关系、照相机的性质以及三维场景点的位置,可以得到对这些图像点的一些几何关系约束。我们通过对极几何来描述这些几何关系。
通俗的说,对极几何实际上是“两幅图像之间的对极几何”,它是图像平面与以基线为轴的平面束的交的几何(这里的基线是指连接摄像机中心的直线)。如下图,对极几何描述的是左右两幅图像(点x和x’对应的图像)与以C1C2为轴的平面束的交的几何.
外极几何

外极几何的几个相关概念

对极平面(epipolar plane):任何包含基线的平面都称为对极平面,或者说是对极平面束中的平面;例如,下图中的平面π就是一个对极平面
对极点(epipole):摄像机的基线与每幅图像的交点;对于所有对极线, 有 eTFx’=0, 对任意的x’有eTF=0, 同理 有 Fe’=0。即下图中的点e和e’(红色圈出的点)
对极线(epipolar line):对极平面与图像的交线;:F 可以将点 x 映射到对应像平面上一条线 l=Fx’ ,同理可得 l’=FTx。例如,下图中的直线l和l’
对极平面

基础矩阵

基础矩阵(Fundamental matrix)F是一个3×3的矩阵,表达了立体像对的像点之间的对应关系。在对极几何中,对于立体像对中的一对同名点,它们的齐次化图像坐标分别为p与 p’,Fp表示一条必定经过p’的直线(极线)。这意味着立体像对的所有同名点对都满足:
基础矩阵
F矩阵中蕴含了立体像对的两幅图像在拍摄时相互之间的空间几何关系(外参数)以及相机检校参数(内参数),包括旋转、位移、像主点坐标和焦距。因为F矩阵的秩为2,并且可以自由缩放(尺度化),所以只需7对同名点即可估算出F的值。
通俗的说,就是,基本矩阵提供了三维点到二维的一个约束条件。举个例子,现在假设我们不知道空间点X的位置,只知道X在左边图上的投影x的坐标位置,也知道基本矩阵,首先我们知道的是X一定在射线Cx上,到底在哪一点是没法知道的,也就是X可能是Cx上的任意一点(也就是轨迹的意思),那么X在右图上的投影肯定也是一条直线。也就是说,如果我们知道一幅图像中的某一点和两幅图的基本矩阵,那么就能知道其对应的右图上的点一定是在一条直线上,这样就约束了两视角下的图像中的空间位置一定是有约束的,不是任意的。

本质矩阵

本质矩阵E (Essential-Matrix)是一个包含了对极几何(epipolar geometry)关系
的3x3大小的矩阵,给出一幅图像中的一个点,乘以本质矩阵就可以得到图像中对应的极线l’。(Ex’=l’)
本质矩阵
本质矩阵就是在归一化图像坐标下的基本矩阵。不仅具有基本矩阵的所有性质,而且还可以估计两相机的相对位置关系。本质矩阵是特殊的基础矩阵。
对比本质矩阵和基础矩阵可以发现,本质矩阵E反映的是空间一点P的像点在不同同视角摄像机下在摄像机坐标系中的表示之间的关系。而基础矩阵F反映的是空间一点P的像素点在不同视角摄像机下在图像坐标系中的表示之间的关系。两个矩阵所处坐标系不同,但是也可以通过归一化进行转换。具体步骤如下:
由公式内参矩阵 x 相机坐标系 =图像坐标系,转到相机坐标系下:内参矩阵逆x图像坐标系 = 相机坐标系
公式(p,p’为相机坐标系下参数),公式公式(x是图像坐标系下坐标,K 和 K’ 分别为两个相机的内参矩阵)进行本质矩阵向基础矩阵的转化:公式公式公式
就完成了本质矩阵向基础矩阵的转化。

极线约束

极线约束是指两极线上点的对应关系。
说明:直线l是对应于点x’的极线,直线l’是对应于点x的极线。极线约束是指点x’一定在对应于x的极线l’上,点x一定在对应于x’的极线l上。
极线约束有两个重要的实际意义。
  1)在已知摄像机的内在参数和外在参数的情况下,能够相对容易地找到对应点:对于第一幅图像中的某个点,只需要沿着第二幅图像中的极线执行一维搜索,就可以得到该点在第二幅图像中极线上对应点的位置。
  2)对应点的约束是摄像机内在参数和外在参数的函数;在已知摄像机内在参数的情况下,可利用对应点的观测模式来确定摄像机的外在参数,因而确定两台摄像机间的几何关系。

具体操作步骤

  1. sift匹配找到匹配点
  2. 利用FLANN参数和比率测试消除错误匹配点(比值测试,首先获取与 A距离最近的点 B (最近)和 C (次近),只有当 B/C 小于阀值时(0.75)才被认为是匹配,因为假设匹配是一一对应的,真正的匹配的理想距离为0)
  3. 利用归一化8点/7点算法估计基本矩阵:获取的最佳匹配列表之后直接用8点算法估计基本矩阵,然后再找到内点,找到两张图像的本质矩阵(这里就是归一化的操作了)
  4. 绘制极点与极线

运行结果及分析

左右拍摄,极点位于图像平面上

8点:
基础矩阵矩阵
绘制极点极线
画图
7点:
基础矩阵
矩阵
绘制极点极线
画图
当我们将拍摄物体旋转,或者说拍摄时左右改变角度很大,此时极点位于像平面上,我们可以看到,左图的极点在右图相同的对应位置,即使拍摄物体的角度不同。平行于极线的线条所在极面与像面必交于极点(极线必与像面交于极点),故而这些线条在像面上一定会交于极点。

像平面接近平行,极点位于无穷远

8点:
基础矩阵
矩阵
绘制极点极线
画图
7点:
矩阵
绘制极点极线
画图
当两幅图像的旋转角几乎没有(因为手工拍摄所以精度不是很准确),只是平移的时候,两图的像平面就接近了平行。因为极点是对极线与像平面相交点,对极线是对极平面与像平面的交线,而两个像平面接近平行,对极线也是接近平行的状态,那么可推出极点就位于近似无穷远的地方了。

图像拍摄位置位于前后

8点:
基础矩阵
矩阵
绘制极点极线
画图
7点:
基础矩阵
矩阵
绘制极点极线
画图
由于图像拍摄位置位于前后,拍摄出远近不同的图像,极线呈放射状分布。这个时候可以发现,所谓的极点实际上是左右投影平面的投影中心,也就是摄像机的光心在相对的图像坐标系中的投影。所以说极线会呈放射状分布。

遇到的问题

多点算法估计基础矩阵

本次采用opencv里面的自带函数findFundamentalMat来计算基础矩阵,但是根据findFundamentalMat的参数只能进行7点和8点算法计算。试图查找源码尝试用10点进行估计,但是最终还是没找到…

ValueError: did not meet fit acceptance criteria

由SIFT算法计算出两张图像的特征点数目,一般来说计算出基础矩阵前,是通过特征点来计算,两幅图对应点的特征点匹配越多越准确,得到的F矩阵精度就越高;如果所拍摄的两张图像的特征点准确率不高,在通过RANSAC算法计算的时候会出现找不到符合点,例如运行时图二就不能显示出来。如果想找到符合点可以改RABSAC算法的阈值大小,改大阈值可以让特征点尽量计算到拟合直线的范围内,但是这样改大阈值范围,会影响后面的计算结果精确度降低。

总结

通过每一种运行结果7点算法和8点算法的对比,我发现增加了一个点进行计算,会使得F矩阵精度更高,减少受三点共线或者说三点“几乎”共线的影响,这么说的话8点的约束就更严格,因此现在主流的算法都采用8点算法,这样使算出来的方程精度更高。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值