本章讲述如何用数值方法在已知若干对应点的情况下求解基本矩阵
F
F
F。
基本矩阵定义如下:
x ′ T F x = 0 x'^{T} F x = 0 x′TFx=0
其中
x
x
x和
x
′
x'
x′为两张图片中的任意一对对应点。
定义
x
=
(
x
,
y
,
1
)
T
\bold{x} = (x,y,1)^{T}
x=(x,y,1)T,
x
′
=
(
x
′
,
y
′
,
1
)
T
\bold{x'} = (x',y',1)^{T}
x′=(x′,y′,1)T。带入基本矩阵的定义并整理可以得到一个方程组,记为
A
f
=
0
Af = 0
Af=0。
解析解:
A
A
A的rank如果是8,那么直接求方程组的特解就可以。但是一般情况下有噪声,所以
A
A
A的rank有可能是9,那么就用SDV分解。可以表达成
A
=
U
D
V
T
A=UDV^{T}
A=UDVT,那么
f
f
f就是
V
V
V的最后一列。
F F F是一个奇异矩阵,rank为2。利用这个性质,我们可以先用解析解求出一个 F F F,然后分解为 F = U D V T F=UDV^{T} F=UDVT,进一步写成 F = U d i a g ( r , s , t ) V T F=Udiag(r,s,t)V^{T} F=Udiag(r,s,t)VT,接着把 t t t换成0就可以了。利用解析解求 F F F的时候需要8组对应点,所以这个方法叫8点法。
求解 A f = 0 Af=0 Af=0,然后选基础解系中的两个特解 f 1 , f 2 f_1,f_2 f1,f2(书中叫零空间null space),然后构造一个方程 α f 1 + ( 1 − α ) f 2 \alpha f_1 + (1-\alpha )f_2 αf1+(1−α)f2,再利用 F F F是奇异矩阵的性质,得到 d e t ( α f 1 + ( 1 − α ) f 2 ) = 0 det(\alpha f_1 + (1-\alpha )f_2) = 0 det(αf1+(1−α)f2)=0,解这个方程就可以得到 α \alpha α。
把8个点的质心平移到原点,把点看成一个向量,然后把向量模长归一化。
优化目标:找到一个 F F F,使得 ∣ ∣ A f ∣ ∣ ||Af|| ∣∣Af∣∣最小,且满足 ∣ ∣ f ∣ ∣ = 1 ||f||=1 ∣∣f∣∣=1且 d e t F = 0 det F=0 detF=0。
步骤如下:
本节主要介绍如何用几何损失函数来计算基本矩阵。
我们假设图像噪声服从高斯分布,那么我们优化下式:
Σ
i
d
(
x
i
,
x
^
)
2
+
d
(
x
i
′
,
x
^
′
)
2
\Sigma_i d(x_i,\hat{x})^2 + d(x_i^{'},\hat{x}^{'})^2
Σid(xi,x^)2+d(xi′,x^′)2
x i ↔ x i ′ x_i \leftrightarrow x^{'}_i xi↔xi′是已知对应点。 x ^ , x ^ ′ \hat{x},\hat{x}^{'} x^,x^′是没有噪声的点。
优化步骤如下:
非线性优化要求把 F F F参数化,下面介绍几种方法:
Sampson distance以
x
′
F
x
i
=
0
x^{'} F x_{i}=0
x′Fxi=0为优化目标,将其写成:
(
x
′
F
x
i
)
2
(
F
x
i
)
1
2
+
(
F
x
i
)
2
2
+
(
F
x
i
′
)
1
2
+
(
F
x
i
′
)
1
2
\frac{(x^{'} F x_{i})^2}{(Fx_i)^2_1 + (Fx_i)^2_2 + (Fx^{'}_i)^2_1 + (Fx^{'}_i)^2_1}
(Fxi)12+(Fxi)22+(Fxi′)12+(Fxi′)12(x′Fxi)2
( F x i ) j 2 (Fx_i)^2_j (Fxi)j2 代表 F x i Fx_i Fxi的第 j j j个元素。
Symmetric epipolar distance
以
x
′
F
x
i
=
0
x^{'} F x_{i}=0
x′Fxi=0为优化目标,那么我们可以让
x
′
x^{'}
x′尽可能靠近
F
x
i
F x_{i}
Fxi.所以就有以下损失函数:
Σ
d
(
x
′
,
F
x
i
)
2
+
d
(
x
,
F
x
i
′
)
2
\Sigma d(x^{'},Fx_i)^2 + d(x,Fx_i^{'})^2
Σd(x′,Fxi)2+d(x,Fxi′)2
本节选用3中不同的算法来进行对比:
我们直接上结论:
使用RANSAC的算法
其步骤如下:
先找出每幅图像中的特征点(SIFT, FAST, ORB)
计算特征点之间的对应
RANSAC采样:
利用m对点,再选一个损失函数(比如说重投影和sampson),用Levenberg–Marquardt algorithm来优化这个损失函数
某些特殊的运动情况或部分已知的相机校准可以简化基本矩阵的计算。在每种情况下,基本矩阵的自由度数均小于一般运动情况下的7。我们举三个例子。
纯旋转情况下
F
=
[
e
′
]
×
F = [e^{'}]_{\times}
F=[e′]×这种情况下2对对应点就可以。
Planar motion意思是一个刚体沿着与某平面平行的方向( l s l_{s} ls)运动。在这种情况下 F F F满足 F = [ e ′ ] × [ l s ] × [ e ] × F=[e^{'}]_{\times} [l_{s}]_{\times} [e]_{\times} F=[e′]×[ls]×[e]×。
如果相机已经标定了,那么我们可以在图像坐标系下计算本质矩阵 E E E,用 E E Ed代替 F F F,依旧是8点法。在E已知的情况下,把 E E E分解成 U D V T UDV^T UDVT,其中 D = d i a g ( a , b , c ) D = diag(a,b,c) D=diag(a,b,c),然后把 D D D换成 D ^ = d i a g ( ( a + b ) / 2 , ( a + b / 2 ) , 0 ) \hat{D} = diag((a+b)/2,(a+b/2),0) D^=diag((a+b)/2,(a+b/2),0),于是答案就是 E ^ = U D ^ V \hat{E} = U\hat{D}V E^=UD^V,知道了 E ^ \hat{E} E^和相机内参,就可以得出两个摄像机矩阵。
上文讲述的是我们用点对应的方法求解 F F F,本节我们介绍如何用其他对应方式来求解 F F F。
线段对应。线段对应不会给基本矩阵 F F F增加任何约束,因为线段重投影回去是平面,三维空间中平面一直会相交。
曲线对应。假设三维空间中有一条和极平面相切的曲线,该曲线投影在图像上的曲线一定和极线相切。这个性质就是一个约束:如果极线与图像中某曲线相切,则第二幅图像中对应的极线一定与某曲线相切。在这个结论里把曲线换成曲面也成立。
退化的情况是指若干对对应点无法唯一确定基本矩阵 F F F,其具体细节如下:
定义 N N N为 A f = 0 Af=0 Af=0中 A A A的零空间,也就是该方程的特解。
补充一点基础知识:零空间的维度就是自由度。比如说解方程组 A f = 0 Af=0 Af=0的时候,方程的解里有3个自由变量,那么零空间的维数就是3( f f f本身是有9个变量)。
几何解释就是 x ′ F x = 0 x'Fx = 0 x′Fx=0定义了四维空间中关于点 ( x , y , x ′ , y ′ ) (x,y,x',y') (x,y,x′,y′)的一个二次曲面。
基本矩阵的一个重要作用就是已知第一幅图中的某一点 x x x,找出第二幅图中该点对应的极线,那么第二幅途中 x x x的对应点 x ′ x^{'} x′肯定在极线上。如果我们考虑到噪声问题,那 x ′ x^{'} x′应该落在极线的附近。所以本节讲述如何用基本矩阵的协方差矩阵来决定 x ′ x^{'} x′的搜索区域。
我们直接上结论。 x x x代表一个点,对于基本矩阵 F F F,记其协方差矩阵 Σ F \Sigma_F ΣF, x x x对应的极线 l = F x l=Fx l=Fx, l l l的均值 m m m记为 l ˉ \bar{l} lˉ。
我们根据以上几项构建似然函数:
(
l
−
m
)
T
Σ
l
(
l
−
m
)
=
k
2
(l-m)^T \Sigma_{l} (l-m) = k^2
(l−m)TΣl(l−m)=k2
k
k
k是某一个常数。同时我们用
F
2
(
x
)
F_2(x)
F2(x)代表
χ
2
2
\chi_2^2
χ22 分布。我们只需要把
k
2
k^2
k2带入
χ
2
2
\chi_2^2
χ22 分布,就可以得到要搜索的点落在 C 代表的区域内的概率。C如下所示:
C
=
l
ˉ
l
ˉ
T
−
k
2
Σ
1
C=\bar{l} {\bar{l}}^T -k^2\Sigma_1
C=lˉlˉT−k2Σ1
本节主要验证一下上一节介绍方法的有效性。先找出一些对应点,当成ground truth。然后给每个点加上高斯噪声,然后再计算一个 F F F,通过 F F F求出极线,并且用上一节方法计算ground truth落在 c c c中的概率。
校正的意思是说把两个图像旋转到同一个平面,这样就是一对双目立体图像,可以做双目立体匹配。校正分为以下几个部分。
把极点映射到无穷远,如果两幅图的极点都映射到了无穷远,那么他们的极线就平行了。极点本来是 ( f , 0 , 1 ) (f,0,1) (f,0,1),无穷远处的点是 ( f , 0 , 1 ) (f,0,1) (f,0,1), 我们有以下矩阵可以做到这一点:
G = [ 1 0 1 0 1 0 − 1 / f 0 1 ] G=\left[ \begin{matrix} 1 & 0 & 1\\ 0 & 1 & 0\\ -1/f & 0 & 1 \\ \end{matrix} \right] G= 10−1/f010101
如果考虑任意一点 x 0 x_0 x0,那么 G G G应该变成 G R T GRT GRT。 T T T把 x 0 x_0 x0转换到原点, R R R把 e ′ e^{'} e′旋转到 ( f , 0 , 1 ) (f,0,1) (f,0,1)。
在上一节我们把一个图像已经转选转了某一个角度 (矩阵 H H H做了这个事),使其极线平行与立体匹配的基线,接下来我们需要把另外一个图像也转一下 (矩阵 H ′ H^{'} H′做这事),使其极线也平行与基线。我们不是对第二幅图像重复上一节,而是寻找 H H H和 H ′ H^{'} H′的关系。该关系描述如下:
如果
l
l
lhe
l
′
l^{'}
l′是两幅图像中对应的极线,那么有下式成立:
H
−
T
l
=
H
′
−
T
l
′
H^{-T}l=H'^{-T}l'
H−Tl=H′−Tl′(
H
H
H如果是点变换
H
−
T
H^{-T}
H−T就是线变换)。根据该式我们有以下优化函数:
Σ
i
d
(
H
x
i
,
H
′
x
i
′
)
2
\Sigma_{i} d(Hx_i,H'x'_{i})^2
Σid(Hxi,H′xi′)2
同时,
H
H
H和
H
′
H^{'}
H′应当满足如下关系:
H
=
(
I
+
H
′
E
′
a
T
)
H
′
M
H=(I+H^{'}E^{'}a^{T})H^{'}M
H=(I+H′E′aT)H′M
其证明参见P306。
如果我们考虑一个特殊的
H
′
H^{'}
H′,它可以把
e
′
e^{'}
e′变换到无穷远点
(
1
,
0
,
0
)
T
(1,0,0)^T
(1,0,0)T,(上文提到的
H
′
H^{'}
H′没有这个性质),那么
H
H
H和
H
′
H^{'}
H′ 应该有如下性质:在已知
F
=
[
e
′
]
×
M
F=[e^{'}]_{\times}M
F=[e′]×M的条件下,
H
=
H
A
H
0
H=H_A H_0
H=HAH0,
H
0
=
H
′
M
H_0=H^{'}M
H0=H′M,
H
A
H_A
HA是一个仿射变换。
利用这个性质,我们做一点改写:
X
^
′
=
H
′
X
i
′
\hat{X}^{'} = H^{'}X_i^{'}
X^′=H′Xi′,
X
i
^
=
H
0
X
i
\hat{X_i} = H_0X_i
Xi^=H0Xi,
则优化目标可以变成:
Σ
i
d
(
H
A
X
i
^
,
X
i
′
^
)
2
\Sigma_i d(H_A\hat{X_i},\hat{X^{'}_i})^2
Σid(HAXi^,Xi′^)2
接下来我们参数化,令 X i ^ = ( x i ^ , y i ^ , 1 ) \hat{X_i}=(\hat{x_i},\hat{y_i},1) Xi^=(xi^,yi^,1), X i ′ ^ = ( x i ′ ^ , y i ′ ^ , 1 ) \hat{X^{'}_i}=(\hat{x^{'}_i},\hat{y^{'}_i},1) Xi′^=(xi′^,yi′^,1),以上优化目标就变成了:
Σ i ( a x i ^ + b y i ^ + c − x i ′ ^ ) 2 + ( y i ^ − y ′ ^ ) \Sigma_i (a\hat{x_i}+b\hat{y_i}+c-\hat{x^{'}_i})^{2} + (\hat{y_i}-\hat{y^{'}}) Σi(axi^+byi^+c−xi′^)2+(yi^−y′^)
本节对算法本身做一个总体的描述:
如果摄像机本身可以本仿射摄像机近似,那么就直接用仿射变换来校正,把上文的基本矩阵换成仿射相机的基本矩阵就可以。