因为在剖析单目初始化的过程中,需要用到基础矩阵F和单应矩阵H,所以想从基础上推导一下,但是发现几何推导自己没太理解,而且比较抽象,不方便从理论出发落实到实际代码,但是又不想浪费这一过程的总结,于是自己另外开了个篇章来记录自己的思考和理解。
这里是继承了ORB-SLAM3 学习笔记 单目初始化过程剖析3 TrackMonocular->GrabImageMonocular->Track的《2-2-1 对极约束》部分的,有了极限约束,我们尝试用数学公式描述极点、极线和极平面之间的关系。
T是平移矩阵部分,是从点
O
l
O_l
Ol到
O
r
O_r
Or的距离。
P
l
P_l
Pl是点
O
l
O_l
Ol到点
P
P
P的向量,也记作
P
⃗
l
\vec P_l
Pl。
P
r
P_r
Pr是点
O
r
O_r
Or到点
P
P
P的向量,也记作
P
⃗
r
\vec P_r
Pr。R是旋转矩阵部分。可得下面的关系式:
根据向量的减法,可得:
P
⃗
r
′
=
P
⃗
l
−
T
⃗
(1)
\vec P_r'=\vec P_l - \vec T \tag{1}
Pr′=Pl−T(1)
把向量
P
⃗
r
′
\vec P_r'
Pr′进行旋转,可得
P
⃗
r
=
R
P
⃗
r
′
=
R
(
P
⃗
l
−
T
⃗
)
(2)
\vec P_r= R\vec P_r'=R(\vec P_l - \vec T)\tag{2}
Pr=RPr′=R(Pl−T)(2)
∵
\because
∵ R是正交矩阵,则R可逆:
R
−
1
P
⃗
r
=
P
⃗
r
′
=
(
P
⃗
l
−
T
⃗
)
=
R
T
P
⃗
r
(3)
R^{-1}\vec P_r= \vec P_r'=(\vec P_l - \vec T)=R^T\vec P_r\tag{3}
R−1Pr=Pr′=(Pl−T)=RTPr(3)
三向量
P
⃗
r
,
P
⃗
r
′
,
P
⃗
l
−
T
⃗
\vec P_r ,\vec P_r',\vec P_l - \vec T
Pr,Pr′,Pl−T共面,由
定理:三个向量 a , b , c 共面的充分必要条件是 (a,b,c)=0
可知它们的混合积为零(混合积对应于有向体积),参考下图:
为了便于理解混合积,用图说话。可以看到,混合积的结果可以表示为底面积S乘以高h,很容易理解:混合积就是有方向的体积。
所以结合定理,因为三向量
P
⃗
r
,
P
⃗
r
′
,
P
⃗
l
−
T
⃗
\vec P_r ,\vec P_r',\vec P_l - \vec T
Pr,Pr′,Pl−T共面
∴
\therefore
∴
(
P
⃗
l
−
T
⃗
)
T
⋅
T
×
P
⃗
l
=
0
(4)
(\vec P_l - \vec T)^T \cdot T\times\vec P_l=0\tag{4}
(Pl−T)T⋅T×Pl=0(4)
(
R
T
P
r
)
T
⋅
T
×
P
⃗
l
=
0
(5)
(R^TP_r)^T \cdot T\times\vec P_l=0\tag{5}
(RTPr)T⋅T×Pl=0(5)
P
r
T
R
⋅
T
×
P
⃗
l
=
0
(6)
P_r^TR \cdot T\times\vec P_l=0\tag{6}
PrTR⋅T×Pl=0(6)
P
r
T
R
⋅
S
P
⃗
l
=
0
(7)
P_r^TR \cdot S\vec P_l=0\tag{7}
PrTR⋅SPl=0(7)
P
r
T
R
S
P
⃗
l
=
0
(8)
P_r^TR S\vec P_l=0\tag{8}
PrTRSPl=0(8)
E
=
R
S
(9)
E=RS\tag{9}
E=RS(9)
其实这里 ( P ⃗ l − T ⃗ ) T (\vec P_l - \vec T)^T (Pl−T)T看的有点不太明白,后来翻了下资料,感觉这里就是用列向量的转置矩阵表示行向量,至于对不对希望大家可以一起讨论下。
其中 ,S 的含义见下图:
总结来说,Essential矩阵的几何推导是基于三向量共面推导出来:
Fundamental 和 Essential 的关系
由上面的式子可以看到,本质矩阵E只能描述摄像机坐标系下两个视图间的约束关系(描述的是
p
p
p和
p
′
p'
p′之间的关系),所以它只依赖摄像机的外部参数(R & T)。
如果需要描述像素坐标系下两个图像间的约束关系,它必须在基本矩阵的基础上再进行仿射变换,即依赖内部参数和外部参数。
可以说,F是E的推广,把假设"校准的摄像机"去掉了。本质矩阵(E)+基本矩阵(F):用于描述2个视图间的对极几何关系。
本质矩阵(E)表示的是(1)透视变换:world
→
\rightarrow
→camera
基本矩阵(F)表示的是(2)射影变换:image
→
\rightarrow
→image
其相互关系是:
F
=
K
−
T
E
K
−
1
(10)
F=K^{-T}EK^{-1}\tag{10}
F=K−TEK−1(10)
总结来说,Fundamental 矩阵带入的是像素点坐标,所以需要内参转换成相机坐标,这也描述了F和E之间的关系:
Fundamental 矩阵代数推导
看了好几篇文章,感觉还是视觉十四讲里面的代数推导比较明晰,我就直接参考过来,当做记录了。
设以第一个相机作为坐标系三维空间的点:
根据针孔相机模型,我们知道两个像素点
p
1
,
p
2
p_1,p_2
p1,p2的像素位置为
这里 K 为相机内参矩阵,R, t 为两个坐标系的相机运动(如果我们愿意,也可以写成李代数形式)。如果使用齐次坐标,我们也可以把上式写成在乘以非零常数下成立的(up to a scale)等式
现在,取:
这里的
x
1
,
x
2
x_1,x_2
x1,x2 是两个像素点的归一化平面上的坐标。代入上式,得:
Homography 几何推导
由于是假设特征点处于同一平面,因此首先设平面在第一个相机系下的法向量为 N,深度为 d。
则平面方程为:
即
X1,X2分别为点在两个相机系下的坐标,因此
将上面两式子结合可得
因此单应矩阵为
可以看到其同样含有旋转和平移信息。
对极约束和单应性的区别和联系
- 两幅图像之间的对极约束和场景的结构无关,即对于任意场景结构的图像都是成立的,他不能给出两幅图像上的点的一一对应关系,只能将点映射到线。而单应矩阵可以将点对应到点。
- 单应矩阵,不像对极约束那样完全不限制场景的结构,单应矩阵要求场景中的点都在同一平面上。
- 当相机只有旋转没有平移时,可使用单应矩阵估计运动,因为此时平移为0,计算得到的本质矩阵也为0,进而旋转也为0,得到了错误的解,而使用单应性依然能够正确计算。