上一篇文章介绍了基础矩阵F和本质矩阵E1,下面主要介绍如何求解F矩阵。F的自由度为5,理论上5对点就可以求解,但是考虑到非线性的关系和约束问题,并且具有尺度不变性, 常用的是8点法。
假设有一组匹配的图像点,可以通过特征点匹配获得。
p
i
=
[
u
i
v
i
1
]
p
i
′
=
[
u
i
′
v
i
′
1
]
p_i = \left[\begin{matrix} u_i \\ v_i \\ 1 \end{matrix}\right] p^{'}_i = \left[\begin{matrix} u^{'}_i \\ v^{'}_i \\ 1 \end{matrix}\right]
pi=⎣⎡uivi1⎦⎤pi′=⎣⎡ui′vi′1⎦⎤
根据方程:
p
i
′
T
F
p
i
=
0
p^{'T}_{i}Fp_i = 0
pi′TFpi=0
[
u
i
′
v
i
′
1
]
[
F
11
F
12
F
13
F
21
F
22
F
23
F
31
F
32
F
33
]
[
u
i
v
i
1
]
=
0
\left[\begin{matrix} u^{'}_i & v^{'}_i &1 \end{matrix}\right] \left[\begin{matrix} F_{11}& F_{12}&F_{13} \\F_{21}& F_{22}&F_{23}\\F_{31}&F_{32}&F_{33}\end{matrix}\right] \left[\begin{matrix} u_i \\ v_i \\ 1 \end{matrix}\right] =0
[ui′vi′1]⎣⎡F11F21F31F12F22F32F13F23F33⎦⎤⎣⎡uivi1⎦⎤=0
展开成Af=0 的形式
[
u
i
′
u
i
u
i
′
v
i
u
i
′
v
i
′
u
i
v
i
′
v
i
v
i
′
u
i
v
i
1
]
[
F
11
F
12
F
13
F
21
F
22
F
23
F
31
F
32
F
33
]
=
0
\left[\begin{matrix} u^{'}_i u_i& u^{'}_iv_i &u^{'}_i &v^{'}_iu_i&v^{'}_iv_i&v^{'}_i&u_i & v_i&1\end{matrix}\right]\left[\begin{matrix} F_{11} \\ F_{12} \\F_{13}\\F_{21}\\F_{22}\\F_{23}\\F_{31}\\F_{32}\\F_{33}\end{matrix}\right] =0
[ui′uiui′viui′vi′uivi′vivi′uivi1]⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡F11F12F13F21F22F23F31F32F33⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=0
每一对点一个方程,8对点8个方程:
[ u 1 ′ u 1 u 1 ′ v 1 u 1 ′ v 1 ′ u 1 v 1 ′ v 1 v 1 ′ u 1 v 1 1 u 2 ′ u 2 u 2 ′ v 2 u 2 ′ v 2 ′ u 2 v 2 ′ v 2 v 2 ′ u 2 v 2 1 u 3 ′ u 3 u 3 ′ v 3 u 3 ′ v 3 ′ u 3 v 3 ′ v 3 v 3 ′ u 3 v 3 1 u 4 ′ u 4 u 4 ′ v 4 u 4 ′ v 4 ′ u 4 v 4 ′ v 4 v 4 ′ u 4 v 4 1 u 5 ′ u 5 u 5 ′ v 5 u 5 ′ v 5 ′ u 5 v 5 ′ v 5 v 5 ′ u 5 v 5 1 u 6 ′ u 6 u 6 ′ v 6 u 6 ′ v 6 ′ u 6 v 6 ′ v 6 v 6 ′ u 6 v 6 1 u 7 ′ u 7 u 7 ′ v 7 u 7 ′ v 7 ′ u 7 v 7 ′ v 7 v 7 ′ u 7 v 7 1 u 8 ′ u 8 u 8 ′ v 8 u 8 ′ v 8 ′ u 8 v 8 ′ v 8 v 8 ′ u 8 v 8 1 ] [ F 11 F 12 F 13 F 21 F 22 F 23 F 31 F 32 F 33 ] = 0 \left[\begin{matrix} u^{'}_1 u_1& u^{'}_1v_1 &u^{'}_1 &v^{'}_1u_1&v^{'}_1v_1&v^{'}_1&u_1 & v_1& 1\\ u^{'}_2 u_2& u^{'}_2v_2 &u^{'}_2 &v^{'}_2u_2&v^{'}_2v_2&v^{'}_2&u_2& v_2& 1\\ u^{'}_3 u_3& u^{'}_3v_3 &u^{'}_3 &v^{'}_3u_3&v^{'}_3v_3&v^{'}_3&u_3 & v_3& 1\\ u^{'}_4 u_4& u^{'}_4v_4 &u^{'}_4 &v^{'}_4u_4&v^{'}_4v_4&v^{'}_4&u_4& v_4& 1\\ u^{'}_5u_5& u^{'}_5v_5&u^{'}_5 &v^{'}_5u_5&v^{'}_5v_5&v^{'}_5&u_5 & v_5& 1\\ u^{'}_6u_6& u^{'}_6v_6 &u^{'}_6&v^{'}_6u_6&v^{'}_6v_6&v^{'}_6&u_6& v_6& 1\\ u^{'}_7u_7& u^{'}_7v_7&u^{'}_7&v^{'}_7u_7&v^{'}_7v_7&v^{'}_7&u_7 & v_7& 1\\ u^{'}_8u_8& u^{'}_8v_8 &u^{'}_8 &v^{'}_8u_8&v^{'}_8v_8&v^{'}_8&u_8& v_8& 1 \end{matrix}\right]\left[\begin{matrix} F_{11} \\ F_{12} \\F_{13}\\F_{21}\\F_{22}\\F_{23}\\F_{31}\\F_{32}\\F_{33}\end{matrix}\right] =0 ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡u1′u1u2′u2u3′u3u4′u4u5′u5u6′u6u7′u7u8′u8u1′v1u2′v2u3′v3u4′v4u5′v5u6′v6u7′v7u8′v8u1′u2′u3′u4′u5′u6′u7′u8′v1′u1v2′u2v3′u3v4′u4v5′u5v6′u6v7′u7v8′u8v1′v1v2′v2v3′v3v4′v4v5′v5v6′v6v7′v7v8′v8v1′v2′v3′v4′v5′v6′v7′v8′u1u2u3u4u5u6u7u8v1v2v3v4v5v6v7v811111111⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡F11F12F13F21F22F23F31F32F33⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=0
A矩阵Nx9, N=8 如果满秩,有唯一不为零的解。当N>8,A为超定方程,需要最小化二乘法,求最优解。
这里的解法和单应性矩阵求法一样,SVD分解。但是求的结果
F
^
\hat{F}
F^不满足秩为2的约束,因而需要求一个近似的F,使得:
m
i
n
∣
∣
F
−
F
^
∣
∣
d
e
t
(
F
)
=
0
min||F-\hat{F}||\\ det(F) = 0
min∣∣F−F^∣∣det(F)=0
可以把
F
^
\hat{F}
F^通过SVD分解,令奇异矩阵E的第三个特征值为0,然后再反求出F矩阵。
F
^
=
U
E
V
T
F
=
U
[
E
11
0
0
0
E
22
0
0
0
0
]
V
T
\hat{F}= UEV^T \\ F = U\left[\begin{matrix} E11 &0 & 0 \\0&E22&0\\0 &0&0\end{matrix}\right]V^T
F^=UEVTF=U⎣⎡E11000E220000⎦⎤VT
虽然这样也能求出F矩阵,但是误差有可能较大,主要是由于匹配的点的数值可能相差比较大,因而可以先对样本点做归一化,然后求解,这种解法叫做Normalized Eight-Point Algorithm归一化8点法。
具体做法,就是先计算每组像素点的相似变换矩阵(包含平移和缩放)。
q
i
=
T
p
i
q
i
′
=
T
′
p
i
′
q_i = Tp_i \\ q^{'}_i = T^{'}p^{'}_i
qi=Tpiqi′=T′pi′
计算T包括两步(具体可参考单应性矩阵优化求解):
- 先分别计算u和v的平均值 u0和v0
- 然后所有的像素分别减去u0和v0,也就是平移到(0, 0)为中心的坐标系
- 计算像素点到中心的距离的平方和最大为2。
然后利用SVD分解,求得Fq, 最后转换为原始的F:
F
=
T
′
T
F
q
T
F = T^{'T}F_qT
F=T′TFqT
思考:
实际情况我们会通过特征点匹配出很多点对,会存在异常点和噪声数据,常用的方法是通过RANSAC方法,随机选择8对不共线的点,然后通过上述的8点法,计算出F矩阵,然后通过设定阈值,计算内点个数,当内点个数满足一定条件时,就可以把所有的内点,通过最小二乘法或这LM算法优化求解,作为最后的结果。
那么距离误差用什么来衡量呢,根据多视觉立体几何一书中可以采用Sampson距离,
下一篇会讲解如何求解E,并对E进行分解R和T。