UCAS - AI学院 - 计算机视觉专项课 - 第6讲 - 课程笔记
相机标定与稀疏重建
-
由多视角二维图像获得相机位姿以及场景结构
-
多视几何
- 根据各相机的参数,联立成像方程组
- { x 1 = K 1 [ R 1 ∣ t 1 ] X 1 ⋯ x n = K n [ R n ∣ t n ] X n \left \{\begin{array}{rcl} \bold x_1 & = & \bold K_1 [\bold R_1 | \bold t_1] \bold X_1 \\ & \cdots & \\ \bold x_n & = & \bold K_n [\bold R_n | \bold t_n] \bold X_n \end{array} \right. ⎩⎨⎧x1xn=⋯=K1[R1∣t1]X1Kn[Rn∣tn]Xn
- 已知 x \bold x x、 K \bold K K、 R \bold R R、 t \bold t t,求 X \bold X X:三角化(Triangulation)
- 已知 x \bold x x、 K \bold K K、 X \bold X X,求 R \bold R R、 t \bold t t:姿态估计(Pose Estimation)
- 已知 x \bold x x、 X \bold X X,求 R \bold R R、 t \bold t t、 K \bold K K:相机标定(Camera Calibration)
- 已知 x \bold x x,求 R \bold R R、 t \bold t t、 K \bold K K、 X \bold X X:稀疏重建(Sparse Reconstruction,SfM / SME)
-
三角化
- 已知 x \bold x x、 K \bold K K、 R \bold R R、 t \bold t t,求 X \bold X X
- 相对简单,比较鲁棒
- 一幅图像——无法确定景深信息
- 两幅图像——两条空间射线在空间相交确定空间点——三角化
- 问题:理想可相交,但是由于误差存在,射线不一定能在空间相交——近似交点确定
- 近似交点:两条射线公垂线的中点(可解析表达、但只适用于两试图三角化)
- 以重投影误差为目标的三角化问题
- 假设一个空间点,利用小孔相机模型得到各相机的投影平面点
- 评价这个点的好坏——重投影误差
- 空间点 X \bold X X,投影平面点 x i \bold x_i xi,投影矩阵 P i = K i [ R i ∣ t i ] \bold P_i = \bold K_i [\bold R_i | \bold t_i] Pi=Ki[Ri∣ti]
- 误差 P i X − x i \bold P_i \bold X - \bold x_i PiX−xi
- 最小化重投影误差平方和 min ∑ i ∥ P i X − x i ∥ 2 \min \sum_i \|\bold P_i \bold X - \bold x_i\|^2 min∑i∥PiX−xi∥2
- 该误差适用于各种多图像三角化
- 对于投影矩阵 P 3 × 4 \bold P_{3 \times 4} P3×4,表示为 [ P 1 P 2 P 3 ] \left[ \begin{array}{c} P_1 \\ P_2 \\ P_3 \end{array} \right] ⎣⎡P1P2P3⎦⎤
- 对于平面点坐标,投影过程为 x = P X \bold x = \bold {P}\bold X x=PX,有(由于尺度变化下等价,为了求解方程组,需要转换为非齐次坐标,即除以最后一维): x = P 1 [ X Y Z 1 ] ⊤ P 3 [ X Y Z 1 ] ⊤ , y = P 2 [ X Y Z 1 ] ⊤ P 3 [ X Y Z 1 ] ⊤ x = \frac {P_1 \left[\begin{array}{c} X & Y & Z & 1\end{array}\right]^\top}{P_3 \left[\begin{array}{c} X & Y & Z & 1\end{array}\right]^\top}, y = \frac {P_2 \left[\begin{array}{c} X & Y & Z & 1\end{array}\right]^\top}{P_3 \left[\begin{array}{c} X & Y & Z & 1\end{array}\right]^\top} x=P3[XYZ1]⊤P1[XYZ1]⊤,y=P3[XYZ1]⊤P2[XYZ1]⊤
- 一幅图像,可以提供两个约束——需要至少两幅图像构造上述方程组
- n n n幅图像,构造方程组 A 2 n × 3 [ X Y Z ] = b 2 n × 1 \bold A_{2n \times 3} \left[\begin{array}{c} X \\ Y \\ Z\end{array}\right] = b_{2n \times 1} A2n×3⎣⎡XYZ⎦⎤=b2n×1
- 求解:最小二乘法 [ X Y Z ] = ( A ⊤ A ) − 1 A ⊤ b 2 n × 1 \left[\begin{array}{c} X \\ Y \\ Z\end{array}\right] = (\bold A^\top \bold A)^{-1} \bold A^\top b_{2n \times 1} ⎣⎡XYZ⎦⎤=(A⊤A)−1A⊤b2n×1
- 线性方程组求解可得——直接线性变换(DLT)
- 求解过程中,未引入几何意义,只是代数运算——代数误差解
- 由于目标函数具有十分明显的几何意义,希望能够描述解的几何意义以及稳定性——几何误差解
- 以上述线性解(代数误差)为初始值,迭代求解非线性优化问题(几何误差)
-
相机标定
- 已知 x \bold x x、 X \bold X X,求 R \bold R R、 t \bold t t、 K \bold K K
- 三维坐标获取:人工标定物(结构已知、标定特征点易求取)
- 投影方程: [ x i y i 1 ] = [ p 11 p 12 p 13 p 14 p 21 p 22 p 23 p 24 p 31 p 32 p 33 p 34 ] = [ X i Y i Z i 1 ] \left[\begin{array}{c} x_i \\ y_i \\ 1 \end{array}\right] = \left[\begin{array}{cccc} p_{11} & p_{12} & p_{13} & p_{14} \\ p_{21} & p_{22} & p_{23} & p_{24} \\ p_{31} & p_{32} & p_{33} & p_{34} \end{array}\right] = \left[\begin{array}{c} X_i \\ Y_i \\ Z_i \\ 1 \end{array}\right] ⎣⎡xiyi1⎦⎤=⎣⎡p11p21p31p12p22p32p13p23p33p14p24p34⎦⎤=⎣⎢⎢⎡XiYiZi1⎦⎥⎥⎤
- 一组2D-3D对应点的两个线性方程:
[
X
i
Y
i
Z
i
1
0
0
0
0
−
x
i
X
i
−
x
i
Y
i
−
x
i
Z
i
−
x
i
0
0
0
0
X
i
Y
i
Z
i
1
−
y
i
X
i
−
y
i
Y
i
−
y
i
Z
i
−
y
i
]
[
p
11
p
12
p
13
p
14
p
21
p
22
p
23
p
24
p
31
p
32
p
33
p
34
]
=
[
0
0
]
\left[\begin{array}{c} X_i & Y_i & Z_i & 1 & 0 & 0 & 0 & 0 & -x_i X_i & -x_iY_i & -x_i Z_i & -x_i \\ 0 & 0 & 0 & 0 & X_i & Y_i & Z_i & 1 & -y_i X_i & -y_iY_i & -y_i Z_i & -y_i \end{array}\right]\left[\begin{array}{c} p_{11} \\ p_{12} \\ p_{13} \\ p_{14} \\ p_{21} \\ p_{22} \\ p_{23} \\ p_{24} \\ p_{31} \\ p_{32} \\ p_{33} \\ p_{34} \end{array}\right] = \left[\begin{array}{c} 0 \\ 0 \end{array}\right]
[Xi0Yi0Zi0100Xi0Yi0Zi01−xiXi−yiXi−xiYi−yiYi−xiZi−yiZi−xi−yi]⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡p11p12p13p14p21p22p23p24p31p32p33p34⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=[00]
- 一对点对应确定两个约束——12个点,1个尺度齐次——11个自由度,11个方程——6个点
- n ≥ 6 n \ge 6 n≥6时, P \bold P P可以通过DLT解出: A P = 0 \bold A \bold P = \bold 0 AP=0
- 投影矩阵分解出内外参数
- P = K [ R ∣ t ] = [ K R ∣ K t ] \bold P = \bold K [\bold R | \bold t] = [\bold {KR} | \bold {Kt}] P=K[R∣t]=[KR∣Kt]
- 对内参数矩阵,为上三角阵;对旋转矩阵,为正交阵——转置后QR分解在转置回来(因为实际执行的RQ分解)
- t \bold t t可进一步求得( K \bold K K取逆乘第四列)
- 三维标定物优缺点
- 优点:标定精度高,通过一幅图像即可标定
- 缺点:需要高精度的三维标定块
- 更实用方案:平面标定法(
Z
=
0
Z = 0
Z=0)
- 容易制作、标定工具箱成熟
- 精度不如三维标定物,需要多个视角图像
- X = [ X Y 0 1 ] \bold X = \left[\begin{array}{c} X \\ Y \\ 0 \\ 1 \end{array}\right] X=⎣⎢⎢⎡XY01⎦⎥⎥⎤
- 把 R \bold R R表示成 [ r 1 r 2 r 3 ] [\begin{array}{c}r_1 & r_2 & r_3\end{array}] [r1r2r3],则有 [ x y 1 ] = K [ r 1 r 2 r 3 ∣ t ] [ X Y 0 1 ] = K [ r 1 r 2 ∣ t ] [ X Y 1 ] = H 3 × 3 [ X Y 1 ] \left[\begin{array}{c} x \\ y \\ 1 \end{array}\right] = \bold K [\begin{array}{c}r_1 & r_2 & r_3\end{array}| \bold t] \left[\begin{array}{c} X \\ Y \\ 0 \\ 1 \end{array}\right] = \bold K [\begin{array}{c}r_1 & r_2\end{array}| \bold t] \left[\begin{array}{c} X \\ Y \\ 1 \end{array}\right] = \bold H_{3 \times 3} \left[\begin{array}{c} X \\ Y \\ 1 \end{array}\right] ⎣⎡xy1⎦⎤=K[r1r2r3∣t]⎣⎢⎢⎡XY01⎦⎥⎥⎤=K[r1r2∣t]⎣⎡XY1⎦⎤=H3×3⎣⎡XY1⎦⎤
- H \bold H H为单应,8个自由度
- 2D-平面3D:单应变换
- n n n组2D-3D对应点可得到关于 H \bold H H的 2 n 2n 2n个线性方程
- n ≥ 4 n \ge 4 n≥4时,可DLT求解
- 内参数分解:多个图像求解
- H = K [ r 1 r 2 r 3 ∣ t \bold H = \bold K [\begin{array}{c}r_1 & r_2 & r_3\end{array}| \bold t H=K[r1r2r3∣t
- K − 1 [ h 1 h 2 h 3 ] = [ r 1 r 2 ∣ t ] \bold K^{-1} [\begin{array}{c} h_1 & h_2 & h_3\end{array}] = [\begin{array}{c}r_1 & r_2\end{array} | \bold t] K−1[h1h2h3]=[r1r2∣t]
- 由于 r 1 r_1 r1和 r 2 r_2 r2来自正交矩阵,有内积为0,模为1的性质
- h 1 ⊤ K − ⊤ K − 1 h 2 = 0 h_1^\top \bold K^{-\top} \bold K^{-1} h_2 = 0 h1⊤K−⊤K−1h2=0
- h 1 ⊤ K − ⊤ K − 1 h 1 = h 2 ⊤ K − ⊤ K − 1 h 2 h_1^\top \bold K^{-\top} \bold K^{-1} h_1 = h_2^\top \bold K^{-\top} \bold K^{-1} h_2 h1⊤K−⊤K−1h1=h2⊤K−⊤K−1h2
- K \bold K K为5参数, ω = K − ⊤ K − 1 \omega = \bold K^{-\top} \bold K^{-1} ω=K−⊤K−1为对称阵, n ≥ 3 n \ge 3 n≥3时,DLT求解出 ω \omega ω,然后正交分解出 K \bold K K
- 有了内参数,可以进一步确定 [ r 1 r 2 ∣ t ] [\begin{array}{c}r_1 & r_2\end{array}| \bold t] [r1r2∣t],以及 r 3 = r 1 × r 2 r_3 = r_1 \times r_2 r3=r1×r2
- 标定流程
- 打印一张模板并贴于平面
- 从不同(至少三个,一般会更多)角度拍摄若干张模板图像
- 标定问题,不会存在错误样本点,因此可以使用尽可能多的数据
- 板尽量不满整个拍摄区域
- 检测图像中的特征点
- 求解相机内外参数
- 分析重投影误差(半个像素内)
- 输出标定结果
- 利用消影点标定(假设
K
\bold K
K中只有
f
f
f未知)
- 消影点:空间平行线在图像投影线的交点——无穷远点
- 消影点只与三维直线方向有关,与其位置无关
- 寻找两个世界坐标系坐标轴方向的消影点(只剩 R \bold R R的一列)
- 消影点越靠近图像中心, f f f计算越准确
- DLT求解相机标定的优缺点
- 优点:线性求解
- 缺点:不能包含畸变参数、无法添加其他参数、最小化代数误差,无几何意义(作为初始值,迭代非线性最小化重投影误差)
-
姿态估计
- 已知 x \bold x x、 K \bold K K、 X \bold X X,求 R \bold R R、 t \bold t t
- 使用与相机标定相同的DLT方法求解
- 6个2D-3D对应点
- 对 P \bold P P的12个线性方程
- DLT线性求解 P \bold P P
- 分解内外参数 [ R ∣ t ] [\bold R | \bold t] [R∣t]即位姿
-
P
\bold P
P有11个自由度,前者有5个自由度,后二者分别由3个自由度
- 因此只需要3个点就可以求解
- PnP问题
- 输入:n组2D-3D对应点,相机内参数 K \bold K K
- 输出:3D点在相机坐标系下的坐标,由坐标变换得到的$\bold R 和 和 和 \bold t$
- 常用:P3P、P4P、EPnP(不做超过5个点)
-
稀疏重建
- 已知 x \bold x x,求 R \bold R R、 t \bold t t、 K \bold K K、 X \bold X X
- x 1 ⊤ F x 2 = 0 \bold x_1^\top \bold F \bold x_2 = 0 x1⊤Fx2=0,8点法求解基本矩阵 F \bold F F
- 但是 F \bold F F无法唯一分解 K 1 \bold K_1 K1、 K 2 \bold K_2 K2、 R \bold R R、 t \bold t t
- 假设 K 1 \bold K_1 K1、 K 2 \bold K_2 K2已知,求解本质矩阵 E \bold E E,可以唯一地分解 R \bold R R和 t \bold t t
- 本质矩阵分解:SVD分解,假设第一个相机
R
1
=
I
\bold R_1 = \bold I
R1=I,
t
1
=
0
\bold t_1 = \bold 0
t1=0
- E = U diag ( 1 , 1 , 0 ) V ⊤ \bold E = \bold U \operatorname{diag}(1, 1, 0) \bold V^\top E=Udiag(1,1,0)V⊤
- 对第二个相机,有四组解——进一步判定
- 进一步判定: X \bold X X在两个相机前方数量最多的解
- 实践中给定
K
\bold K
K
- 通过EXIF获取相机焦距(物理值)、镜头型号等
- 通过镜头型号确定CCD物理尺寸——计算获得焦距的像素值
- 主点:默认为中心
- 在获得 K 1 \bold K_1 K1、 K 2 \bold K_2 K2、 R \bold R R、 t \bold t t后,三角化计算空间点 X \bold X X(代数误差解)
- 以上述结果为初始值,迭代最小化重投影误差,得到 R \bold R R、 t \bold t t、 K \bold K K、 X \bold X X的几何误差解
-
重投影误差最小化问题的求解
- min ∑ i ∥ P i X i − x i ∥ 2 \min \sum_i \|\bold P_i \bold X_i - \bold x_i\|^2 min∑i∥PiXi−xi∥2
- 转换为非齐次坐标,实现等式处理(直接加减): min ∑ i ∑ j ∥ P 1 : 2 i X j P 3 i X j − [ x i j y i j ] ∥ 2 \min \sum_i \sum_j \left\| \frac{P_{1:2}^i \bold X_j}{P_{3}^i \bold X_j} - \left[\begin{array}{c} x_{ij} \\ y_{ij} \end{array}\right] \right\|^2 min∑i∑j∥∥∥∥P3iXjP1:2iXj−[xijyij]∥∥∥∥2
- 非线性最小二乘问题
- 使用 X ^ \widehat {\bold X} X 统一表示未知量: min ∑ i ∑ j ∥ f i ( X ^ ) − b i j ∥ 2 \min \sum_i \sum_j \left\| f_i(\widehat {\bold X}) - b_{ij} \right\|^2 min∑i∑j∥∥∥fi(X )−bij∥∥∥2
- 针对不同问题, X ^ \widehat {\bold X} X 包含的未知量不同
- 向量化表示: min ∥ F ( X ^ ) − b ∥ 2 \min \left\|F(\widehat {\bold X}) - \bold b\right\|^2 min∥∥∥F(X )−b∥∥∥2,为原有分量的行组合向量表示
- 非线性最小二乘问题求解方法
- (一般非线性优化问题)梯度下降法、牛顿法
- (非线性最小二乘问题)高斯牛顿法、LM法
- 迭代优化的基本思路
- 给定初始值
- 开始迭代优化
- 选择最优移动方向使目标函数值下降最快
- 以一定步长沿最优方向移动当前值
- 若两次迭代间函数值差异小于阈值或迭代次数超出阈值,跳出迭代
- 迭代结束,输出当前值
- 梯度下降法:
δ
(
X
^
)
=
−
J
(
X
^
)
⊤
r
(
X
^
)
\delta(\widehat {\bold X}) = -J(\widehat {\bold X})^\top r(\widehat {\bold X})
δ(X
)=−J(X
)⊤r(X
)
- KaTeX parse error: Undefined control sequence: \part at position 32: …d X}) = \frac {\̲p̲a̲r̲t̲ ̲F(\widehat {\bo…(雅各比矩阵)
- r ( X ^ ) = F ( X ^ ) − b r(\widehat {\bold X}) = F(\widehat {\bold X}) - \bold b r(X )=F(X )−b
- 一阶梯度近似,方向不精准,收敛较慢
- 牛顿法:
δ
(
X
^
)
=
−
(
J
(
X
^
)
⊤
J
(
X
^
)
+
S
(
X
^
)
)
−
1
J
(
X
^
)
⊤
r
(
X
^
)
\delta(\widehat {\bold X}) = -(J(\widehat {\bold X})^\top J(\widehat {\bold X}) + S(\widehat {\bold X}))^{-1} J(\widehat {\bold X})^\top r(\widehat {\bold X})
δ(X
)=−(J(X
)⊤J(X
)+S(X
))−1J(X
)⊤r(X
)
- H ( X ^ ) = J ( X ^ ) ⊤ J ( X ^ ) + S ( X ^ ) H(\widehat {\bold X}) = J(\widehat {\bold X})^\top J(\widehat {\bold X}) + S(\widehat {\bold X}) H(X )=J(X )⊤J(X )+S(X )(黑森矩阵,很难无法解析求解)
- 二阶梯度近似,方向更加精准,收敛更快
- 高斯牛顿法:
δ
(
X
^
)
=
−
(
J
(
X
^
)
⊤
J
(
X
^
)
)
−
1
J
(
X
^
)
⊤
r
(
X
^
)
\delta(\widehat {\bold X}) = -(J(\widehat {\bold X})^\top J(\widehat {\bold X}))^{-1} J(\widehat {\bold X})^\top r(\widehat {\bold X})
δ(X
)=−(J(X
)⊤J(X
))−1J(X
)⊤r(X
)
- 超线性收敛,收敛速度接近牛顿法,且避免黑森矩阵
- 直接丢掉其中一项,会导致可能求导错误方向,不能保证收敛
- 阻尼高斯牛顿法:
δ
(
X
^
)
=
−
(
J
(
X
^
)
⊤
J
(
X
^
)
+
λ
I
)
−
1
J
(
X
^
)
⊤
r
(
X
^
)
\delta(\widehat {\bold X}) = -(J(\widehat {\bold X})^\top J(\widehat {\bold X}) + \lambda \bold I)^{-1} J(\widehat {\bold X})^\top r(\widehat {\bold X})
δ(X
)=−(J(X
)⊤J(X
)+λI)−1J(X
)⊤r(X
)
- 利用参数缓解去除项带来的影响,避免错误的发生
- λ → 0 \lambda \to 0 λ→0,高斯牛顿法
- λ → ∞ \lambda \to \infty λ→∞,梯度下降法(前一项近似为负无穷小单位阵,不影响后面)
- LM法:启发式动态调整
λ
\lambda
λ,
δ
(
X
^
,
λ
)
=
−
(
J
(
X
^
)
⊤
J
(
X
^
)
+
λ
I
)
−
1
J
(
X
^
)
⊤
r
(
X
^
)
\delta(\widehat {\bold X}, \lambda) = -(J(\widehat {\bold X})^\top J(\widehat {\bold X}) + \lambda \bold I)^{-1} J(\widehat {\bold X})^\top r(\widehat {\bold X})
δ(X
,λ)=−(J(X
)⊤J(X
)+λI)−1J(X
)⊤r(X
)
- 误差减少,则 λ ← 0.1 λ \lambda \gets 0.1\lambda λ←0.1λ
- 误差增大,则 λ ← 10 λ \lambda \gets 10 \lambda λ←10λ
- 捆绑调整BA / 光束平差
-
应用:Photo Tourism——增量式SfM
- 输入:网络搜索图像
- 输入特点:设备不同、时间不同、无序
- 特征检测:SIFT
- 特征匹配:相似图像匹配(通过基本矩阵过滤后的匹配点)
- 连接成匹配点序列(Tracks)
- 一个Track对应一个三维空间点,表示同一个特征点在图像间的轨迹
- 可能存在不一致的点,去除之(去除该点或者去除整个Track)
- 通过SfM计算相机位姿和3D点
- 输入:Tracks
- 输出:相机位姿和3D点
- 难点
- 参数数量多
- 高维非线性优化——BA
- 问题
- 有效初始值(防止局部最优)
- 难以同时初始化所有参数
- 解决思路
- 两视图SfM容易
- 逐步添加新的相机比较容易——增量式SfM
- 步骤
- 初始图像对选择(足够多匹配点、基线足够长)
- 通过两视图SfM计算初始模型
- 迭代
- 选择一幅能看到目前模型中最多3D点的图像
- 根据3D-2D点对估计相机位姿
- 三角化新特征点Tracks
- BA,整体优化
- 外点处理
- 外点不可避免
- 产生较大误差,影响优化
- 处理策略
- BA之后去除外点(误差非常大)并重新优化
- 使用鲁棒目标函数(Huber函数)