1. 基本概念
1.1 对极几何
对极几何是指空间中的某一点和它的投影在不同坐标系下的表示。

两个白色平面为相机成像的像平面,x为空间中的任意一点,从图中可以看出,X 在左边像平面的投影为x1,在右边像平面的投影为x2,C1和C1分别是两个相机的光心,而且C1,C2,x1,x,x2在同一平面上,将该平面命名为π,该平面有一条基线,为线C1e1e2C2。包含基线的平面叫做对极平面,基线与像平面的交点为对极点(e1,e2),对极平面和像平面的交点称为对极线(l1,l2)。
1.2 基础矩阵

基础矩阵所包含的参数由相机内参(K),两个相机外参(R,T),可以用来描述图像的对应关系,也就是说我们知道了某个点在一个像平面的坐标,可以知道它在另一个像平面的坐标。
p,p′是x在C,C′两个像平面的相对坐标,则:
p=Rp′+T
其中,
x=Kpx′=K′p′p=K−1xp′=K′−1x′
根据三线共面,有:
(p−T)T(T×p)=0
→(RTp′)T(T×p)=0
令T×p=Sp
S=⎣⎡0Tz−Ty−Tz0TxTy−Tx0⎦⎤
→(RTp′)T(Sp)=0(p′TR)(Sp)=0p′TEp=0
其中E为本质矩阵,描述的是空间中点在两个坐标系中的对应关系。
同理,K,K′分别为两个相机的内参。则
p=K−1x,p′=K′−1x′
→(K′−1x′)TE(K−1x)=0
→x′TK′−TEK−1x=0
→x′TFx=0
F即为基础矩阵,描述了空间中的点在两个像平面中的坐标对应关系。
1.3 8点法求基础矩阵
步骤:
- 导入两幅图像,提取图像的特征;
- 连接两幅图像的特征
- 去除错配点(RANSAC)
- 估算基础矩阵
基础矩阵F定义为 xTFx′=0
设任意两幅图像中的匹配点x,x′,令x=(u,v,1)T,x′=(u′,v′,1)T,基础矩阵是一个3*3秩为2的矩阵,记为
F=⎣⎡f11f21f31f12f22f32f13f23f33⎦⎤
有相应方程:uu′f11+uv′f12+uf13+vu′f21+vv′f22+vf23+u′f31+v′f32+f33=0
则:

上述求解后F不一定会满足秩=2的约束,因此还需要在F基础上加以约束。
令F=UΣVT,则:
Σ=⎣⎡σ1000σ2000σ3⎦⎤令Σ′=⎣⎡σ1000σ20000⎦⎤
则最终解为F′=UΣ′VT
八点算法估算基础矩阵的优缺点:
- 优点: 线性求解,容易实现,运行速度快
- 缺点:对噪声敏感
2. 实验内容
2.1 8点法
实验结果如下:
1. 左右拍摄
使用图片如下:


基本矩阵为:

2. 像平面接近平行
所用图像如下:


基本矩阵如下:

3. 远近不同
使用图片如下:


基本矩阵为:

2.2 7点法
1. 左右拍摄


2. 像平面大小接近平行

基本矩阵如下:

3. 远近不同

基本矩阵如下:

3.实验总结
8点法计算基本矩阵时,受噪声影响较大,所以要先将坐标点归一化,减少噪声影响。但是我使用的是opencv自带的findFundamentalMat(points1, points2, method, ransacReprojThreshold, confidence, mask)函数,这里只用到了前三个参数。
points1:从第一张图片开始的N个点的数组。点坐标应该是浮点数(单精度或双精度)。
points2:与点1大小和格式相同的第二图像点的数组。
method:当method=cv.FM_8POINT时为8点算法,cv.FM_7POINT时为7点算法。
用这个函数的问题就是获得的图像的极点极线矩阵等精度较低。
遇到的问题:

这个错误是图片的问题,可以修改F_from_ransac函数的match_threshold值来使其能运行。
不足:
没有将10点法的方法做出。