文章目录
第四章:三维重建基础与极几何
由于从单幅视图恢复场景三维结构比较困难,并且,单视图2D到3D的映射具有多义性,如下图所示,从单视图中很难辨别塔是模型还是实物;
1. 双视图与三角化
只要已知直线 l l l和 l ′ l' l′,则三维点P就是两条直线的交点。因此,只要将直线 l l l和 l ′ l' l′映射到同一坐标系下,就可以通过 P = l × l ′ P=l \times l' P=l×l′求出点 P P P的三维坐标。
此时,问题演变成了:
已知二维像素坐标 p p p 和 p ′ p' p′, K K K 和 K ′ K' K′,以及两视图之间的变换矩阵 R R R、 T T T,
求解P点的三维坐标?
此时存在两种解法:线性解和非线性解;
1.1 线性解
1.2 非线性解
最小化重投影误差
1.3 实际情况中的问题定义
- 在实际情况中,由于噪声的存在,两条直线通常不相交;
- 且上述的线性解和非线性解都需要已知 K K K 和 K ′ K' K′, R R R、 T T T;
- 然而,实际情况中,摄像机的内参 K K K 和 K ′ K' K′和两视图之间的变换矩阵 R R R、 T T T通常不可知,那么实际情况就变成了如下的问题:
- 问题1:已知 p p p和 p ′ p' p′,摄像机内参数 K K K和 K ′ K' K′,
- 求解:摄像机的 R R R、 T T T以及P点的三维坐标?
- 问题2:已知 p p p和 p ′ p' p′
- 求解:摄像机内参数 K K K和 K ′ K' K′,摄像机的 R R R、 T T T以及P点的三维坐标?
1.4 多视图几何的关键问题
- 摄像机几何:从一张或者多张图像中求解摄像机的内、外参数;
- 场景几何:通过二至多幅图寻找3D场景坐标;
- 对应关系:已知一个图像中的 p p p点,如何在另外一个图像中找到 p ′ p' p′点;
2. 极几何与基础矩阵
2.1 极几何
极几何描述了同一场景或者物体的两个视点图像间的几何关系;
极几何可以将对应点搜索范围缩小到对应的极线上;
(1)极几何特例——平行视图
(2)极几何特例——前向平移(无旋转)
2.2 本质矩阵
本质矩阵对规范化摄像机拍摄的两个视点图像间的极几何关系进行代数描述;
p ′ p' p′和 O 2 O_2 O2在 O 1 O_1 O1坐标系下的坐标为:
p ′ = R p ′ ∗ + T p ′ ∗ = R T ( p ′ − T ) = R T p ′ − R T T \begin{aligned} p' & =Rp^{'*} +T \\ p^{'*} & =R^T(p'-T) \\ & =R^Tp'-R^TT \\ \end{aligned} p′p′∗=Rp′∗+T=RT(p′−T)=RTp′−RTT
∵ O 2 = [ 0 0 0 ] T O 2 ∗ = − R T T \begin{aligned} \because O_2 & =[0 \quad 0 \quad 0 ]^T \\ O^{*}_{2} & =-R^TT \\ \end{aligned} ∵O2O2∗=[000]T=−RTT
对两个向量进行叉乘:
O 1 p ′ ∗ → × O 1 O 2 ∗ → = ( R T p ′ − R T T ) × ( − R T T ) = R T T × R T p ′ \begin{aligned} \overrightarrow{O_1 p^{'*}} \times \overrightarrow{O_1 O^{*}_2} & = (R^Tp'-R^TT) \times (-R^TT) \\ & = R^TT \times R^T p' \\ \end{aligned} O1p′∗×O1O2∗=(RTp′−RTT)×(−RTT)=RTT×RTp′
得到的向量垂直于 O 1 O 2 P O_1O_2P O1O2P 极平面,因此可得:
[ R T T × R T p ′ ] T ⋅ p = 0 [ R T ⋅ ( T × p ′ ) ] T ⋅ p = 0 ( T × p ′ ) T ⋅ R ⋅ p = 0 ( [ T × ] ⋅ p ′ ) T ⋅ R ⋅ p = 0 p ′ T ⋅ [ T × ] ⋅ R ⋅ p = 0 p ′ T ⋅ [ T × R ] ⋅ p = 0 p ′ T ⋅ E ⋅ p = 0 \begin{aligned} & [R^TT \times R^T p']^T \cdot p=0 \\ & [R^T \cdot (T \times p')]^T \cdot p=0\\ & (T \times p')^T \cdot R \cdot p=0\\ & ([T_{\times}] \cdot p')^T \cdot R \cdot p=0\\ & p^{'T} \cdot [T_{\times}] \cdot R \cdot p=0\\ & p^{'T} \cdot [T \times R] \cdot p=0\\ & p^{'T} \cdot E \cdot p=0\\ \end{aligned} [RTT×RTp′]T⋅p=0[RT⋅(T×p′)]T⋅p=0(T×p′)T⋅R⋅p=0([T×]⋅p′)T⋅R⋅p=0p′T⋅[T×]⋅R⋅p=0p′T⋅[T×R]⋅p=0p′T⋅E⋅p=0
最终,本质矩阵 E = T × R = [ T × ] R E=T \times R = [T_{\times}] R E=T×R=[T×]R
2.3 基础矩阵
基础矩阵对一般的透视摄像机拍摄的两个视点的图像间的极几何关系进行代数描述。
推导思路:将一般相机变换到规范化相机,用本质矩阵来表达;
p = K [ I 0 ] P K − 1 p = [ I 0 ] P \begin{aligned} p & = K[I \quad 0]P \\ K^{-1}p & = [I \quad 0]P \end{aligned} pK−1p=K[I0]P=[I0]P
则规范化相机下左右两视图的像素点坐标演变为:
p c = K − 1 p p c ′ = K ′ − 1 p ′ \begin{aligned} p_c & = K^{-1}p \\ p_c^{'} & = K^{'-1}p' \\ \end{aligned} pcpc′=K−1p=K′−1p′
带入本质矩阵:
p c ′ T E p c = p c ′ T ⋅ [ T × ] R ⋅ p c = ( K ′ − 1 p ′ ) T ⋅ [ T × ] R ⋅ K − 1 p = p ′ T K ′ − T [ T × ] R K − 1 p = p ′ T F p \begin{aligned} p_c^{'T}Ep_c & = p_c^{'T} \cdot [T_{\times}] R \cdot p_c \\ & =(K^{'-1}p')^T \cdot [T_{\times}] R \cdot K^{-1}p \\ & = p^{'T}K^{'-T} [T_{\times}] R K^{-1}p \\ & = p^{'T}Fp \end{aligned} pc′TEpc=pc′T⋅[T×]R⋅pc=(K′−1p′)T⋅[T×]R⋅K−1p=p′TK′−T[T×]RK−1p=p′TFp
最终基础矩阵F为:
F = K ′ − T [ T × ] R K − 1 F=K^{'-T} [T_{\times}] R K^{-1} F=K′−T[T×]RK−1
3. 基础矩阵估计
3.1 八点法
p ′ T F p = 0 p^{'T}Fp=0 p′TFp=0
F有7个自由度,理论上7点可以解出F,但计算比较复杂;
(1)单点方程矩阵形式展开:
(2)选取八个点,列出齐次线性方程:
(3)最小二乘求解:
通常 N > 8 N>8 N>8,为超定方程组,采用最小二乘求解:
(4)满秩矩阵分解:
上述经过最小二乘估计得到的 F ^ \hat F F^通常秩为3,为满秩矩阵,但基础矩阵 F F F的秩为2。
(5)八点法求解总结
(6)八点法存在的问题
- W矩阵中各个元素的数值差异过大;
- SVD分解有数值计算问题
- 导致求解结果通常有10+pixel左右的误差;
3.2 归一化八点法
对每幅图像施加变换T(平移与缩放),让其满足如下条件:
- 原点 = 图像上点的重心;
- 各个像点到坐标原点的均方根距离等于 2 \sqrt 2 2;
归一化八点法的计算步骤如下:
归一化八点法的精度高,推荐使用;
4. 单应矩阵
单应矩阵描述空间中的平面在两个摄像机下的投影几何;