三维重建【0-D】3D Gaussian Splatting:相机标定原理与步骤

三维重建【0-D】3D Gaussian Splatting:相机标定原理与步骤

前言

基于前面的学习,通过相机成像几何模型,我们知道了如何将世界坐标系中的三维坐标和像素坐标系中的二维坐标联系起来。此外,根据标定棋盘图纸及其对应的照片已经得到了单应性矩阵H(H是内参矩阵和外参矩阵的混合体)。

张正友相机标定法数学推导求解

首先不考虑镜头畸变,求解思路是利用旋转向量的约束关系,先将单应性矩阵H化为3个列向量 H = h 1 h 2 h 3 H=h_1 \\space h_2 \\space h_3 H=h1 h2 h3
H = h 1 h 2 h 3 = s M r 1 r 2 t H=h_1 \\space h_2 \\space h_3=sMr_1 \\space r_2 \\space t H=h1 h2 h3=sMr1 r2 t

则可以得到:

r 1 r_1 r1和 r 2 r_2 r2相互正交,由此可以利用""正交的两个含义,得出每个单应矩阵提供的两个约束条件:

  • 约束条件1: 旋转向量点积为0(两垂直平面上的旋转向量互相垂直),即:
  • 约束条件2: 旋转向量长度相等(旋转不改变尺度),即:

那么如何利用上述两个约束条件求解内参或者外参呢?我们一步一步来看,由前面可知内参矩阵M:

根据前面的公式,令 B = ( M − 1 ) T M − 1 B=(M^{-1})^{T}M^{-1} B=(M−1)TM−1,则:

由于 M = f x γ u 0 0 f y v 0 0 0 1 M=\begin{bmatrix} f_x & \gamma & u_0\\ 0 & f_y & v_0\\ 0 & 0 & 1 \end{bmatrix} M= fx00γfy0u0v01 ,则 ∣ M ∣ = f x f y |M|=f_xf_y ∣M∣=fxfy,则:
A d j ( M ) = f y − γ γ v 0 − f y u 0 0 f x − f x v 0 0 0 f x f y Adj(M)=\begin{bmatrix} f_y & -\gamma & \gamma v_0-f_yu_0\\ 0 & f_x & -f_xv_0\\ 0 & 0 & f_xf_y \end{bmatrix} Adj(M)= fy00−γfx0γv0−fyu0−fxv0fxfy

则有:
M − 1 = 1 f x f y f y − γ γ v 0 − f y u 0 0 f x − f x v 0 0 0 f x f y M^{-1}=\frac{1}{f_xf_y}\begin{bmatrix} f_y & -\gamma & \gamma v_0-f_yu_0\\ 0 & f_x & -f_xv_0\\ 0 & 0 & f_xf_y \end{bmatrix} M−1=fxfy1 fy00−γfx0γv0−fyu0−fxv0fxfy

则有:
( M − 1 ) T = 1 f x 0 0 − γ f x f y 1 f y 0 γ v 0 − f y u 0 f x f y − v 0 f y 1 (M^{-1})^{T}=\begin{bmatrix} \frac{1}{f_x} & 0 & 0\\ \frac{-\gamma}{f_xf_y} & \frac{1}{f_y} & 0\\ \frac{\gamma v_0-f_yu_0}{f_xf_y} & \frac{-v_0}{f_y} & 1 \end{bmatrix} (M−1)T= fx1fxfy−γfxfyγv0−fyu00fy1fy−v0001

则有:
M − 1 = 1 f x − γ f x f y γ v 0 − f y u 0 f x f y 0 1 f y − v 0 f y 0 0 1 M^{-1}=\begin{bmatrix} \frac{1}{f_x} & \frac{-\gamma}{f_xf_y} & \frac{\gamma v_0-f_yu_0}{f_xf_y}\\ 0 & \frac{1}{f_y} & \frac{-v_0}{f_y}\\ 0 & 0 & 1 \end{bmatrix} M−1= fx100fxfy−γfy10fxfyγv0−fyu0fy−v01

则有:
B = ( M − 1 ) T M − 1 = 1 f x 2 − γ f x 2 f y γ v 0 − f y u 0 f x 2 f y − γ f x 2 f y γ 2 f x 2 f y 2 + 1 f y 2 − γ γ v 0 − f y u 0 f x 2 f y 2 − v 0 f y 2 γ v 0 − f y u 0 f x 2 f y − γ γ v 0 − f y u 0 f x 2 f y 2 − v 0 f y 2 ( γ v 0 − f y u 0 ) 2 f x 2 f y 2 + v 0 f y 2 + 1 = B 11 B 12 B 13 B 21 B 22 B 23 B 31 B 32 B 33 B=(M^{-1})^{T}M^{-1}=\begin{bmatrix} \frac{1}{f_x^{2}} & \frac{-\gamma}{f_x^{2}f_y} & \frac{\gamma v_0-f_yu_0}{f_x^{2}f_y}\\ \frac{-\gamma}{f_x^{2}f_y} & \frac{\gamma ^{2}}{f_x^{2}f_y^{2}} + \frac{1}{f_y^{2}} & -\gamma \frac{\gamma v_0-f_yu_0}{f_x^{2}f_y^{2}}-\frac{v_0}{f_y^{2}}\\ \frac{\gamma v_0-f_yu_0}{f_x^{2}f_y} & -\gamma \frac{\gamma v_0-f_yu_0}{f_x^{2}f_y^{2}}-\frac{v_0}{f_y^{2}} & \frac{(\gamma v_0-f_yu_0)^{2}}{f_x^{2}f_y^{2}}+\frac{v_0}{f_y^{2}}+1 \end{bmatrix}=\begin{bmatrix} B_{11} & B_{12} &B_{13} \\ B_{21} & B_{22} &B_{23} \\ B_{31} & B_{32} &B_{33} \end{bmatrix} B=(M−1)TM−1= fx21fx2fy−γfx2fyγv0−fyu0fx2fy−γfx2fy2γ2+fy21−γfx2fy2γv0−fyu0−fy2v0fx2fyγv0−fyu0−γfx2fy2γv0−fyu0−fy2v0fx2fy2(γv0−fyu0)2+fy2v0+1 = B11B21B31B12B22B32B13B23B33

可以发现 B B B是对称矩阵,真正有用的元素只有6个(主对角线任意一侧的6个元素),则可以将B用一个6D的向量b定义,即:
b = B 11 B 12 B 22 B 13 B 23 B 33 b=\begin{bmatrix} B_{11} \\ B_{12} \\ B_{22} \\ B_{13} \\ B_{23} \\ B_{33} \end{bmatrix} b= B11B12B22B13B23B33

将B带入前面两个约束条件后转换为:
{ h 1 T B h 2 = 0 h 1 T B h 1 = h 2 T B h 2 \left\{ \begin{aligned} h_1^{T}Bh_2&=0 \\ h_1^{T}Bh_1&=h_2^{T}Bh_2 \end{aligned} \right. {h1TBh2h1TBh1=0=h2TBh2

定义 3 × 3 3 \times 3 3×3的单应矩阵 H = h 1 h 2 h 3 H=h_1 \\space h_2 \\space h_3 H=h1 h2 h3的第 i i i列列向量:
h i = h i 1 , h i 2 , h i 3 T h_i=h_{i1}, h_{i2}, h_{i3}^{T} hi=hi1,hi2,hi3T

为了简化表达,则: h i T B h j = h i 1 h i 2 h i 3 B 11 B 12 B 13 B 21 B 22 B 23 B 31 B 32 B 33 h j 1 h j 2 h j 3 h_i^{T}Bh_j=\begin{bmatrix} h_{i1} & h_{i2} & h_{i3} \end{bmatrix} \begin{bmatrix} B_{11} & B_{12} &B_{13} \\ B_{21} & B_{22} &B_{23} \\ B_{31} & B_{32} &B_{33} \end{bmatrix}\begin{bmatrix} h_{j1} \\ h_{j2} \\ h_{j3} \end{bmatrix} hiTBhj=hi1hi2hi3 B11B21B31B12B22B32B13B23B33 hj1hj2hj3

则有: h i T B h j = h i 1 B 11 + h i 2 B 21 + h i 3 B 31 h i 1 B 12 + h i 2 B 22 + h i 3 B 32 h i 1 B 13 + h i 2 B 23 + h i 3 B 33 T h j 1 h j 2 h j 3 h_i^{T}Bh_j=\begin{bmatrix} h_{i1}B_{11} + h_{i2}B_{21} + h_{i3}B_{31}\\ h_{i1}B_{12} + h_{i2}B_{22} + h_{i3}B_{32}\\ h_{i1}B_{13} + h_{i2}B_{23} + h_{i3}B_{33} \end{bmatrix}^{T}\begin{bmatrix} h_{j1} \\ h_{j2} \\ h_{j3} \end{bmatrix} hiTBhj= hi1B11+hi2B21+hi3B31hi1B12+hi2B22+hi3B32hi1B13+hi2B23+hi3B33 T hj1hj2hj3

其中等式右边第一个式子是一个 1 × 3 1 \times 3 1×3的行向量,则有:
h i T B h j = h i 1 h j 1 B 11 + h i 2 h j 1 B 21 + h i 3 h j 1 B 31 + h i 1 h j 2 B 12 + h i 2 h j 2 B 22 + h i 3 h j 2 B 32 + h i 1 h j 3 B 13 + h i 2 h j 3 B 23 + h i 3 h j 3 B 33 h_i^{T}Bh_j=h_{i1}h_{j1}B_{11} + h_{i2}h_{j1}B_{21} + h_{i3}h_{j1}B_{31} + h_{i1}h_{j2}B_{12} + h_{i2}h_{j2}B_{22} + h_{i3}h_{j2}B_{32} + h_{i1}h_{j3}B_{13} + h_{i2}h_{j3}B_{23} + h_{i3}h_{j3}B_{33} hiTBhj=hi1hj1B11+hi2hj1B21+hi3hj1B31+hi1hj2B12+hi2hj2B22+hi3hj2B32+hi1hj3B13+hi2hj3B23+hi3hj3B33

因为B是对称矩阵,则合并有:
h i 1 h j 1 h i 1 h j 2 + h i 2 h j 1 h i 2 h j 2 h i 1 h j 3 + h i 3 h j 1 h i 3 h j 2 + h i 2 h j 3 h i 3 h j 3 T B 11 B 12 B 22 B 13 B 23 B 33 = v i j T b \begin{bmatrix} h_{i1}h_{j1} \\ h_{i1}h_{j2} + h_{i2}h_{j1} \\ h_{i2}h_{j2} \\ h_{i1}h_{j3} + h_{i3}h_{j1} \\ h_{i3}h_{j2} + h_{i2}h_{j3} \\ h_{i3}h_{j3} \end{bmatrix}^{T}\begin{bmatrix} B_{11} \\ B_{12} \\ B_{22} \\ B_{13} \\ B_{23} \\ B_{33} \end{bmatrix}=v_{ij}^{T}b hi1hj1hi1hj2+hi2hj1hi2hj2hi1hj3+hi3hj1hi3hj2+hi2hj3hi3hj3 T B11B12B22B13B23B33 =vijTb

由此得到:
h i T B h j = v i j T b h_i^{T}Bh_j=v_{ij}^{T}b hiTBhj=vijTb

从而有:
{ h 1 T B h 2 = v 12 T b = 0 v 11 T b − v 22 T b = 0 \left\{ \begin{aligned} h_1^{T}Bh_2 = v_{12}^{T}b &=0 \\ v_{11}^{T}b-v_{22}^{T}b&=0 \end{aligned} \right. {h1TBh2=v12Tbv11Tb−v22Tb=0=0

进一步推导可以将两个约束表达式转化为下面未知数为向量b的齐次方程:
v 12 T ( v 11 − v 22 ) T b = 0 \begin{bmatrix} v_{12}^T \\ (v_{11}-v_{22})^{T} \end{bmatrix}b=0 v12T(v11−v22)Tb=0

如果我们拍摄了n张不同角度的标定图像,因为每张图像我们都可以得到一组(2个)上述的等式。其中, v 11 v_{11} v11、 v 12 v_{12} v12、 v 22 v_{22} v22可以通过前面已经计算好的单应矩阵得到,因此是已知的,而 b b b中的6个元素是代求的未知数。因此,至少要保证图像数量>=3,才可以求解出 b b b。需要注意的是,这里的 b b b是带有比例因子的。

基于此,可以进行内参矩阵的求解,由于之前 B = ( M − 1 ) T M − 1 B=(M^{-1})^{T}M^{-1} B=(M−1)TM−1的推导结论,再加入一个比例因子,则有:
B = λ ( M − 1 ) T M − 1 = λ 1 f x 2 − γ f x 2 f y γ v 0 − f y u 0 f x 2 f y − γ f x 2 f y γ 2 f x 2 f y 2 + 1 f y 2 − γ γ v 0 − f y u 0 f x 2 f y 2 − v 0 f y 2 γ v 0 − f y u 0 f x 2 f y − γ γ v 0 − f y u 0 f x 2 f y 2 − v 0 f y 2 ( γ v 0 − f y u 0 ) 2 f x 2 f y 2 + v 0 f y 2 + 1 = B 11 B 12 B 13 B 21 B 22 B 23 B 31 B 32 B 33 B=\lambda (M^{-1})^{T}M^{-1}=\lambda \begin{bmatrix} \frac{1}{f_x^{2}} & \frac{-\gamma}{f_x^{2}f_y} & \frac{\gamma v_0-f_yu_0}{f_x^{2}f_y}\\ \frac{-\gamma}{f_x^{2}f_y} & \frac{\gamma ^{2}}{f_x^{2}f_y^{2}} + \frac{1}{f_y^{2}} & -\gamma \frac{\gamma v_0-f_yu_0}{f_x^{2}f_y^{2}}-\frac{v_0}{f_y^{2}}\\ \frac{\gamma v_0-f_yu_0}{f_x^{2}f_y} & -\gamma \frac{\gamma v_0-f_yu_0}{f_x^{2}f_y^{2}}-\frac{v_0}{f_y^{2}} & \frac{(\gamma v_0-f_yu_0)^{2}}{f_x^{2}f_y^{2}}+\frac{v_0}{f_y^{2}}+1 \end{bmatrix}=\begin{bmatrix} B_{11} & B_{12} &B_{13} \\ B_{21} & B_{22} &B_{23} \\ B_{31} & B_{32} &B_{33} \end{bmatrix} B=λ(M−1)TM−1=λ fx21fx2fy−γfx2fyγv0−fyu0fx2fy−γfx2fy2γ2+fy21−γfx2fy2γv0−fyu0−fy2v0fx2fyγv0−fyu0−γfx2fy2γv0−fyu0−fy2v0fx2fy2(γv0−fyu0)2+fy2v0+1 = B11B21B31B12B22B32B13B23B33

对等式进行求解得:

得到内参数后,内参矩阵M也已知。单应矩阵H也已知,因此可以继续求得外参数:

又由标准旋转矩阵的性质可以得到 r 3 = r 1 × r 2 r_3=r_1 \times r_2 r3=r1×r2, ∣ ∣ r 1 ∣ ∣ = ∣ ∣ r 2 ∣ ∣ = ∣ ∣ λ M − 1 h 2 ∣ ∣ = ∣ ∣ = λ M − 1 h 1 ∣ ∣ = 1 ||r_1||=||r_2||=||\lambda M^{-1}h_2||=||=\lambda M^{-1}h_1||=1 ∣∣r1∣∣=∣∣r2∣∣=∣∣λM−1h2∣∣=∣∣=λM−1h1∣∣=1得:
s = ∣ ∣ M − 1 h 1 ∣ ∣ = ∣ ∣ M − 1 h 2 ∣ ∣ s=||M^{-1}h_1||=||M^{-1}h_2|| s=∣∣M−1h1∣∣=∣∣M−1h2∣∣

综上所述,有:
{ s = ∣ ∣ M − 1 h 1 ∣ ∣ = ∣ ∣ M − 1 h 2 ∣ ∣ r 1 = λ M − 1 h 1 r 2 = λ M − 1 h 2 r 3 = r 1 × r 2 t = λ M − 1 h 3 \left\{ \begin{aligned} & s = ||M^{-1}h_1||=||M^{-1}h_2|| \\ & r_1 = \lambda M^{-1}h_1 \\ & r_2 = \lambda M^{-1}h_2 \\ & r_3 = r_1 \times r_2 \\ & t = \lambda M^{-1}h_3 \end{aligned} \right. ⎩ ⎨ ⎧s=∣∣M−1h1∣∣=∣∣M−1h2∣∣r1=λM−1h1r2=λM−1h2r3=r1×r2t=λM−1h3

需要注意的是,上述的推导结果是基于理想情况下的解,从理论上证明了张氏标定算法的可行性。

相关推荐
故渊at2 分钟前
第五板块:Android 系统服务与电源管理 | 第十八篇:Battery Service 与 电量统计(Fuel Gauge)算法
android·算法·battery·电源·电池·电源管理·电量统计
The_Ticker5 分钟前
港股量化实测:实时行情接口性能与数据质量深度解析
python·websocket·算法·金融
weisian1515 分钟前
基础篇--概念原理-25-大模型的剪枝是什么?怎么理解?——从原理到实战,一篇讲透
算法·机器学习·大模型·剪枝
fie88899 分钟前
基于有限体积法(FVM)的MATLAB流体力学求解程序
算法·matlab
小欣加油9 小时前
leetcode56 合并区间
c++·算法·leetcode·职场和发展
lqqjuly9 小时前
前沿算法深度解析(二)
人工智能·算法·机器学习
徐小夕10 小时前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
threelab11 小时前
Three.js 物理模拟着色器 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
akunkuntaimei11 小时前
2026年高考数学各省真题及答案(完整版)
算法·高考
Hello:CodeWorld11 小时前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法