北邮鲁鹏老师的课程《计算机视觉之三维重建(深入浅出sfm和SLAM核心算法)》 笔记
4,三维重建基础
4.1,点重建问题
- P1:已知: p , p ′ , K , R , T p, p', K, R, T p,p′,K,R,T,求 P P P
- P2:已知: p , p ′ , K p, p', K p,p′,K,求 P , R , T P, R, T P,R,T
- P3:已知:
p
,
p
′
p, p'
p,p′,求
P
,
K
,
R
,
T
P, K, R, T
P,K,R,T
P1求解,三角化:
方法1:求解线性方程组
{
p
=
K
[
I
,
0
]
P
p
′
=
K
[
R
,
T
]
P
\left\{ \begin{array}{l} p=K[I,0]P \\ p'=K[R,T]P \end{array}\right.
{p=K[I,0]Pp′=K[R,T]P
方法2:求解优化问题
P
∗
=
arg min
P
d
(
p
,
M
P
)
+
d
(
p
′
,
M
′
P
)
P^*=\argmin_P d(p, MP) + d(p', M'P)
P∗=Pargmind(p,MP)+d(p′,M′P)
4.2,多视几何关键问题
- 摄像机几何:从一或多张图像中求解摄像机内外参数K,R,T
- 场景几何:通过两至多幅图像中求解场景坐标P
- 对应关系:已知一幅图像中p点,求另外一张图像中的对应点p’
4.3,极几何
极几何描述两个视图的几何关系
定义
- 极平面:过 P , O 1 , O 2 P,O_1,O_2 P,O1,O2的平面
- 基线:直线 O 1 O 2 O_1O_2 O1O2
- 极线:极平面与像平面交线 l , l ′ l,l' l,l′
- 极点:基线与像平面交点 e , e ′ e,e' e,e′
性质
- 所有的极平面相交于基线
- 像平面上所有的极线相交于极点
- p p p的对应点在极线 l ′ l' l′上
特殊视图:
- 平行试图
- 前向平移
4.4,本质矩阵
先讨论规范相机情况:
K
=
K
′
=
I
K=K'=I
K=K′=I,坐标系
O
2
O_2
O2到
O
1
O_1
O1的变换为
R
,
T
R,T
R,T,定义本质矩阵
E
=
T
×
R
E=T\times R
E=T×R,有:
p
′
T
E
p
=
0
p'^TEp=0
p′TEp=0
证明:
根据1.4节可知: p ′ , O 2 p',O_2 p′,O2在坐标系 O 1 O_1 O1的坐标分别为 R T p ′ − R T T , − R T T R^Tp'-R^TT,-R^TT RTp′−RTT,−RTT
即: O 1 p ′ → = R T p ′ − R T T , O 1 O 2 → = − R T T \overrightarrow{O_1p'}=R^Tp'-R^TT,\overrightarrow{O_1O_2}=-R^TT O1p′=RTp′−RTT,O1O2=−RTT
可得: O 1 p ′ → × O 1 O 2 → = R T T × R T p ′ \overrightarrow{O_1p'}\times\overrightarrow{O_1O_2}=R^TT\times R^Tp' O1p′×O1O2=RTT×RTp′
由于: O 1 p ′ → × O 1 O 2 → ⊥ O 1 p → \overrightarrow{O_1p'}\times\overrightarrow{O_1O_2}\ \perp\ \overrightarrow{O_1p} O1p′×O1O2 ⊥ O1p
得: ( R T T × R T p ′ ) T p = 0 (R^TT\times R^Tp')^Tp=0 (RTT×RTp′)Tp=0
( R T T × R T p ′ ) T p = ( R T ( T × p ′ ) ) T p = ( R T [ T × ] p ′ ) T p = p ′ T [ T × ] T R p = − p ′ [ T × ] R p = − p ′ T ( T × R ) p = − p ′ T E p □ (R^TT\times R^Tp')^Tp=(R^T(T\times p'))^Tp=(R^T[T_\times]p')^Tp=p'^T[T_\times]^TRp=-p'[T_\times]Rp=-p'^T(T\times R)p=-p'^TEp\square (RTT×RTp′)Tp=(RT(T×p′))Tp=(RT[T×]p′)Tp=p′T[T×]TRp=−p′[T×]Rp=−p′T(T×R)p=−p′TEp□
推论:
1, E e = 0 Ee=0 Ee=0
证明:
O 1 , e O_1,e O1,e在 O 2 O_2 O2下的坐标分别为 T , R e + T T,Re+T T,Re+T
O 2 e → × O 2 O 1 → = 0 \overrightarrow{O_2e}\times\overrightarrow{O_2O_1}=0 O2e×O2O1=0
得: T × ( R e + T ) = 0 T\times (Re+T)=0 T×(Re+T)=0
∴ T × R e + T × T = 0 \therefore T\times Re+T\times T=0 ∴T×Re+T×T=0
∴ T × R e = 0 \therefore T\times Re=0 ∴T×Re=0,即 E e = 0 □ Ee=0\square Ee=0□
2, e ′ T E = 0 e'^TE=0 e′TE=0
证明:
O 2 , e ’ O_2,e’ O2,e’在 O 1 O_1 O1下的坐标分别为 − R T T , R T e ′ − R T T -R^TT,R^Te'-R^TT −RTT,RTe′−RTT
O 1 e ′ → × O 1 O 2 → = 0 \overrightarrow{O_1e'}\times\overrightarrow{O_1O_2}=0 O1e′×O1O2=0
得: − R T T × ( R T e ′ − R T T ) = 0 -R^TT\times(R^Te'-R^TT)=0 −RTT×(RTe′−RTT)=0
∴ R T ( T × e ′ ) = 0 \therefore R^T(T\times e')=0 ∴RT(T×e′)=0
R T ( T × e ′ ) = R T [ T × ] e ′ = − R T [ T × ] T e ′ = − ( [ T × ] R ) T e ′ R^T(T\times e')=R^T[T\times]e'=-R^T[T\times]^Te'=-([T\times]R)^Te' RT(T×e′)=RT[T×]e′=−RT[T×]Te′=−([T×]R)Te′,即 E T e ′ = 0 □ E^Te'=0\square ETe′=0□
3,极线: l ′ = E p , l = E T p ′ l'=Ep,l=E^Tp' l′=Ep,l=ETp′
证明:
根据推论1可得: p ′ T E e = 0 p'^TEe=0 p′TEe=0,又 p ′ T E p = 0 p'^TEp=0 p′TEp=0
所以直线 p ′ T E p'^TE p′TE过点 e e e和点 p p p,即极线 l l l
∴ l = E T p ′ \therefore l=E^Tp' ∴l=ETp′
同理: l ′ = E p □ l'=Ep\square l′=Ep□
4.5,基础矩阵
拓展到一般相机情形,定义基础矩阵
F
=
K
′
−
T
[
T
×
]
R
K
−
1
F=K'^{-T}[T_\times] RK^{-1}
F=K′−T[T×]RK−1,有
p
′
T
F
p
=
0
p'^TFp=0
p′TFp=0
证明:
将一般相机的像平面映射到规范相机像平面上: p c = K − 1 p , p c ′ = K − 1 p ′ p_c=K^{-1}p,p_c'=K^{-1}p' pc=K−1p,pc′=K−1p′即可得证.
推论:
同本质矩阵一样,有:
1,
F
e
=
0
Fe=0
Fe=0
2,
e
′
T
F
=
0
e'^TF=0
e′TF=0
3,极线:
l
′
=
F
p
,
l
=
F
T
p
′
l'=Fp,l=F^Tp'
l′=Fp,l=FTp′
基础矩阵估计
获得N对匹配点 < p i ( u i , v i ) , p i ′ ( u i ′ , v i ′ ) > <p_i(u_i,v_i),p_i'(u_i',v_i')> <pi(ui,vi),pi′(ui′,vi′)>,带入基础矩阵公式得到关于基础矩阵的线性方程组 W f = 0 Wf=0 Wf=0,其中 W W W是关于点的信息的已知矩阵, f f f是将 F F F按行排成一个列向量。
第一步
初步求解
F
F
F的估计
F
^
\hat F
F^
解法一,8点算法:由于
F
F
F的自由度为7,选取8个点,求解线性方程组得到
F
^
\hat F
F^
W
f
^
=
0
W\hat f=0
Wf^=0解法二,约束优化问题:
f
^
=
arg min
f
∣
∣
W
f
∣
∣
,
s
.
t
∣
∣
f
∣
∣
=
1
\hat f=\argmin_f ||Wf||,\quad s.t ||f||=1
f^=fargmin∣∣Wf∣∣,s.t∣∣f∣∣=1
第二步
第一步中求得的
F
^
\hat F
F^秩为3,实际
F
F
F的秩为2,可求解优化问题:
F
=
arg min
F
∥
F
−
F
^
∥
F
,
s
t
.
d
e
t
(
F
)
=
0
F=\argmin_F\ \lVert F-\hat{F}\rVert_F,\quad st.det(F)=0
F=Fargmin ∥F−F^∥F,st.det(F)=0
对
F
^
\hat F
F^进行SVD分解:
F
^
=
U
[
s
1
0
0
0
s
2
0
0
0
s
3
]
V
T
⇒
F
=
U
[
s
1
0
0
0
s
2
0
0
0
0
]
V
T
\hat{F}=U\left[ \begin{array}{lll} s_1&0&0 \\ 0&s_2&0 \\ 0&0&s_3 \end{array}\right]V^T \Rightarrow F=U\left[ \begin{array}{lll} s_1&0&0 \\ 0&s_2&0 \\ 0&0&0 \end{array}\right]V^T
F^=U⎣⎡s1000s2000s3⎦⎤VT⇒F=U⎣⎡s1000s20000⎦⎤VT
归一化8点法
问题:精度较低,10+像素点误差,因为
W
W
W矩阵中涉及像素点坐标的乘积,会比较大,导致整个计算的误差较大。
解决办法是对像素点进行归一化。
4.6,单应矩阵
场景中的点位于同一平面
π
\pi
π,平面单位法向量为
n
n
n,定义单应矩阵
H
=
K
′
(
R
+
t
n
d
T
)
K
−
1
H=K'(R+tn_d^T)K^{-1}
H=K′(R+tndT)K−1,其中
n
d
=
n
/
d
n_d=n/d
nd=n/d,则有点对应关系:
p
′
=
H
p
p'=Hp
p′=Hp
证明:
O 1 P → ⋅ n = d \overrightarrow{O_1P}\cdot n=d O1P⋅n=d,令点P在 O 1 O_1 O1坐标系下的三维坐标为 P P P
则有 n T ⋅ P = d n^T\cdot P=d nT⋅P=d
相机模型: p = K P , p ′ = K ′ ( R P + t ) p=KP,p'=K'(RP+t) p=KP,p′=K′(RP+t)
p ′ = K ′ ( R P + t ) = K ′ ( R P + t ⋅ 1 ) = K ′ ( R P + t ⋅ n T P d ) = K ′ ( R P + t ⋅ n d T ⋅ P ) = K ′ ( R + t n d T ) P = K ′ ( R + t n d T ) K − 1 K P = H p □ p'=K'(RP+t)=K'(RP+t\cdot 1)=K'(RP+t\cdot \frac{n^TP}{d})=K'(RP+t\cdot n_d^T\cdot P)=K'(R+tn_d^T)P=K'(R+tn_d^T)K^{-1}KP=Hp\square p′=K′(RP+t)=K′(RP+t⋅1)=K′(RP+t⋅dnTP)=K′(RP+t⋅ndT⋅P)=K′(R+tndT)P=K′(R+tndT)K−1KP=Hp□
单应矩阵估计
一对点对应贡献两个方程,所以只需4个对应点,就可以通过线性方程估计出单应矩阵。
基础矩阵建立点与极线的关系,单应矩阵建立点与点的关系。