计算机视觉 --图像多视图几何

1. 基本概念

1.1 对极几何

对极几何是指空间中的某一点和它的投影在不同坐标系下的表示。
计算机视觉 --图像多视图几何
两个白色平面为相机成像的像平面,xx为空间中的任意一点,从图中可以看出,XX 在左边像平面的投影为x1x_{1},在右边像平面的投影为x2x_{2},C1C_{1}C1C_{1}分别是两个相机的光心,而且C1C_{1},C2C_{2},x1x_{1},x,x2x_{2}在同一平面上,将该平面命名为ππ,该平面有一条基线,为线C1C_{1}e1e_{1}e2e_{2}C2C_{2}。包含基线的平面叫做对极平面,基线与像平面的交点为对极点e1e_{1},e2e_{2}),对极平面和像平面的交点称为对极线l1l_{1}l2l_{2})。

1.2 基础矩阵

计算机视觉 --图像多视图几何
基础矩阵所包含的参数由相机内参(K),两个相机外参(R,T),可以用来描述图像的对应关系,也就是说我们知道了某个点在一个像平面的坐标,可以知道它在另一个像平面的坐标。
pp,pp^{'}是x在CC,CC^{'}两个像平面的相对坐标,则:
p=Rp+T p=Rp^{'}+T
其中,
x=Kp x=Kpx=Kp x^{'}=K^{'}p{'}p=K1xp=K^{-1}xp=K1xp^{'}=K^{'-1}x^{'}
根据三线共面,有:
(pT)T(T×p)=0(p-T)^{T}(T×p)=0
(RTp)T(T×p)=0(R^{T}p^{'})^{T}(T×p)=0
T×p=SpT×p=Sp
S=[0TzTyTz0TxTyTx0]S=\begin{bmatrix}0 &-T_{z} &T_{y} \\ T_{z} & 0 &-T_{x} \\ -T_{y} & T_{x} &0 \end{bmatrix}
(RTp)T(Sp)=0(R^{T}p^{'})^{T}(Sp)=0(pTR)(Sp)=0(p^{'T}R)(Sp)=0pTEp=0p^{'T}Ep=0
其中E为本质矩阵,描述的是空间中点在两个坐标系中的对应关系
同理,K,KK,K^{'}分别为两个相机的内参。则

p=K1xp=K^{-1}x,p=K1xp^{'}=K^{'-1}x^{'}

(K1x)TE(K1x)=0(K^{'-1}x^{'})^{T}E(K^{-1}x)=0
xTKTEK1x=0x^{'T}K^{'-T}EK^{-1}x=0
xTFx=0x^{'T}Fx=0
F即为基础矩阵,描述了空间中的点在两个像平面中的坐标对应关系

1.3 8点法求基础矩阵

步骤:

  1. 导入两幅图像,提取图像的特征;
  2. 连接两幅图像的特征
  3. 去除错配点(RANSAC)
  4. 估算基础矩阵

基础矩阵F定义为 xTFx=0x^{T}Fx^{'}=0
设任意两幅图像中的匹配点xxxx^{'},令x=(u,v,1)Tx=(u,v,1)^{T},x=(u,v,1)Tx^{'}=(u^{'},v^{'},1)^{T},基础矩阵是一个3*3秩为2的矩阵,记为
F=[f11f12f13f21f22f23f31f32f33]F=\begin{bmatrix}f_{11} & f_{12} &f_{13} \\ f_{21} & f_{22} &f_{23} \\ f_{31}& f_{32} & f_{33}\end{bmatrix}
有相应方程:uuf11+uvf12+uf13+vuf21+vvf22+vf23+uf31+vf32+f33=0uu^{'}f_{11}+uv^{'}f_{12}+uf_{13}+vu^{'}f_{21}+vv^{'}f_{22}+vf_{23}+u^{'}f_{31}+v^{'}f_{32}+f_{33}=0
则:
计算机视觉 --图像多视图几何
上述求解后F不一定会满足秩=2的约束,因此还需要在F基础上加以约束。
F=UΣVTF=UΣ V^T,则:
Σ=[σ1000σ2000σ3]Σ =\begin{bmatrix}\sigma_1 & 0 & 0\\ 0&\sigma_2 &0 \\ 0&0 & \sigma_3\end{bmatrix}Σ=[σ1000σ20000]Σ^{'}=\begin{bmatrix}\sigma_1 & 0 & 0\\ 0&\sigma_2 &0 \\ 0&0 & 0\end{bmatrix}
则最终解为F=UΣVTF^{'}=UΣ^{'} V^T

八点算法估算基础矩阵的优缺点:

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

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点法的方法做出。