NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
Pipeline
NeRF 使用一个 MLP 来感知隐式表示(Latent representation),它的假设函数(Hypothesis funtion)定义为 H : ( x , d ) → ( c , σ ) H:(\mathbf{x},\mathbf{d})\to(\mathbf{c},\sigma) H:(x,d)→(c,σ)。其中 x = ( x , y , z ) \mathbf{x}=(x,y,z) x=(x,y,z) 表示观察位置(归一化), d = ( θ , ϕ ) \mathbf{d}=(\theta,\phi) d=(θ,ϕ) 表示观察方向, c = ( r , g , b ) \mathbf{c}=(r,g,b) c=(r,g,b) 表示发光颜色, σ \sigma σ 表示体素密度。
这里只需要两个角度
θ
\theta
θ 和
ϕ
\phi
ϕ 就能表示方向,因为球坐标下:
{
x
=
r
sin
θ
cos
ϕ
y
=
r
sin
θ
sin
ϕ
z
=
r
cos
θ
\begin{cases} x=r\sin\theta\cos\phi\\ y=r\sin\theta\sin\phi\\ z=r\cos\theta \end{cases}
⎩⎪⎨⎪⎧x=rsinθcosϕy=rsinθsinϕz=rcosθ
在表示方向时令
r
≡
1
r\equiv1
r≡1,此时
d
\mathbf{d}
d 只需要
2
2
2 个自由度即可表示任意方向。
MLP
作者采信了 Rahaman 等人的结论,即神经网络倾向于学习低频信号。为了提高神经网络学习高频部分的能力,可以利用高频的映射函数将输入映射到高维空间。NeRF 延续了这种思想,作者设计了作用于 MLP 输入的位置编码(Positional encoding)函数
γ
:
R
→
R
2
L
\gamma:\mathbb{R}\to\mathbb{R}^{2L}
γ:R→R2L,其中
L
L
L 控制了位置编码的频率:
γ
(
p
)
=
(
sin
2
0
π
p
cos
2
0
π
p
sin
2
1
π
p
cos
2
1
π
p
⋯
sin
2
L
−
1
π
p
cos
2
L
−
1
π
p
)
\gamma(p)= \begin{pmatrix} \sin{2^0\pi p}\\ \cos{2^0\pi p}\\ \sin{2^1\pi p}\\ \cos{2^1\pi p}\\ \cdots\\ \sin{2^{L-1}\pi p}\\ \cos{2^{L-1}\pi p}\\ \end{pmatrix}
γ(p)=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛sin20πpcos20πpsin21πpcos21πp⋯sin2L−1πpcos2L−1πp⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞
实验显示,对
x
\mathbf{x}
x 取
L
=
10
L=10
L=10、
d
\mathbf{d}
d 取
L
=
4
L=4
L=4 能够得到相对优秀的结果。
上图中,位置编码维度 dim γ ( x ) = 3 × 2 × 10 = 60 \dim\gamma(\mathbf{x})=3\times2\times10=60 dimγ(x)=3×2×10=60, dim γ ( d ) = 3 × 2 × 4 = 24 \dim\gamma(\mathbf{d})=3\times2\times4=24 dimγ(d)=3×2×4=24。
γ ( x ) \gamma(\mathbf{x}) γ(x) 经过 8 8 8 层 P o s _ E n c i \mathrm{Pos\_Enc}_i Pos_Enci 后产生 256 256 256 维的特征向量。特别地,NeRF 引入了 DeepSDF 架构中的 Skip connection, P o s _ E n c 4 \mathrm{Pos\_Enc}_4 Pos_Enc4 的输出会先与 γ ( x ) \gamma(\mathbf{x}) γ(x) 进行拼接,再进入 P o s _ E n c 5 \mathrm{Pos\_Enc}_5 Pos_Enc5。
256
256
256 维的特征向量经过
1
1
1 层
S
i
g
m
a
_
O
u
t
\mathrm{Sigma\_Out}
Sigma_Out 产生体素密度
σ
\sigma
σ;此外,该特征向量送入
1
1
1 层
P
o
s
_
E
n
c
_
F
i
n
\mathrm{Pos\_Enc\_Fin}
Pos_Enc_Fin 后与
γ
(
d
)
\gamma(\mathbf{d})
γ(d) 拼接,依次送入
1
1
1 层
D
i
r
_
E
n
c
\mathrm{Dir\_Enc}
Dir_Enc 和
1
1
1 层
R
G
B
_
O
u
t
\mathrm{RGB\_Out}
RGB_Out,产生发光颜色
c
\mathbf{c}
c。
P
o
s
_
E
n
c
i
(
x
)
=
R
e
L
U
(
W
T
x
)
,
W
∈
R
⋅
×
256
\mathrm{Pos\_Enc}_i(x)=\mathrm{ReLU}(W^Tx),W\in\mathbb{R}^{\cdot\times256}
Pos_Enci(x)=ReLU(WTx),W∈R⋅×256
P
o
s
_
E
n
c
_
F
i
n
(
x
)
=
R
e
L
U
(
W
T
x
)
,
W
∈
R
256
×
256
\mathrm{Pos\_Enc\_Fin}(x)=\mathrm{ReLU}(W^Tx),W\in\mathbb{R}^{256\times256}
Pos_Enc_Fin(x)=ReLU(WTx),W∈R256×256
D
i
r
_
E
n
c
(
x
)
=
R
e
L
U
(
W
T
x
)
,
W
∈
R
280
×
128
\mathrm{Dir\_Enc}(x)=\mathrm{ReLU}(W^Tx),W\in\mathbb{R}^{280\times128}
Dir_Enc(x)=ReLU(WTx),W∈R280×128
S
i
g
m
a
_
O
u
t
(
x
)
=
R
e
L
U
(
W
T
x
)
,
W
∈
R
256
×
1
\mathrm{Sigma\_Out}(x)=\mathrm{ReLU}(W^Tx),W\in\mathbb{R}^{256\times1}
Sigma_Out(x)=ReLU(WTx),W∈R256×1
R
G
B
_
O
u
t
(
x
)
=
s
i
g
m
o
i
d
(
W
T
x
)
,
W
∈
R
128
×
3
\mathrm{RGB\_Out}(x)=\mathrm{sigmoid}(W^Tx),W\in\mathbb{R}^{128\times3}
RGB_Out(x)=sigmoid(WTx),W∈R128×3
Volume Rendering
观察射线可以参数化为
t
t
t 的函数(从
o
r
i
g
i
n
\mathbf{o}\mathrm{rigin}
origin 沿
d
i
r
e
c
t
i
o
n
\mathbf{d}\mathrm{irection}
direction 前进)
r
(
t
)
=
o
+
t
d
\mathbf{r}(t)=\mathbf{o}+t\mathbf{d}
r(t)=o+td。渲染时,通过在观察射线上不断对 MLP 进行查询
H
(
r
,
d
)
=
(
c
,
σ
)
H(\mathbf{r},\mathbf{d})=(\mathbf{c},\sigma)
H(r,d)=(c,σ) 得到体素颜色和密度。给定视锥近点
t
n
t_n
tn 和远点
t
f
t_f
tf,理想的渲染颜色为:
C
(
r
)
=
∫
t
n
t
f
T
(
t
)
σ
(
r
)
c
(
r
,
d
)
d
t
C(\mathbf{r})=\int_{t_n}^{t_f}{T(t)\sigma(\mathbf{r})\mathbf{c}(\mathbf{r},\mathbf{d})\mathrm{d}t}
C(r)=∫tntfT(t)σ(r)c(r,d)dt
其中
T
(
t
)
T(t)
T(t) 为累积透射比系数(体素从无穷远到视锥近点的积分贡献):
T
(
s
)
=
exp
(
−
∫
t
n
t
σ
(
r
)
d
s
)
T(s)=\exp\left(-\int_{t_n}^t{\sigma(\mathbf{r})\mathrm{d}s}\right)
T(s)=exp(−∫tntσ(r)ds)
使用黎曼和进行离散化,将
[
t
n
,
t
f
]
[t_n,t_f]
[tn,tf] 划分为
N
N
N 个均匀子区间,在这些子区间内各自均匀采样
t
i
t_i
ti(其中
1
≤
i
≤
N
1\le i\le N
1≤i≤N):
t
i
∼
U
[
t
n
+
(
i
−
1
)
⋅
t
f
−
t
n
N
,
t
n
+
i
⋅
t
f
−
t
n
N
]
t_i\sim\mathcal{U}\left[t_n+(i-1)\cdot\frac{t_f-t_n}{N},t_n+i\cdot\frac{t_f-t_n}{N}\right]
ti∼U[tn+(i−1)⋅Ntf−tn,tn+i⋅Ntf−tn]
当
N
N
N 足够大时,不妨认为每段区间内各数值函数为定值,可以使用矩形面积计算积分。记区间长度
δ
i
=
t
i
+
1
−
t
i
\delta_i=t_{i+1}-t_i
δi=ti+1−ti,此时累积透射比系数为:
T
i
=
exp
(
−
∫
t
1
t
i
σ
(
r
)
d
s
)
=
exp
(
−
∑
j
=
1
i
−
1
σ
j
δ
j
)
T_i=\exp\left(-\int_{t_1}^{t_i}{\sigma(\mathbf{r})\mathrm{d}s}\right)=\exp\left(-\sum_{j=1}^{i-1}{\sigma_j\delta_j}\right)
Ti=exp(−∫t1tiσ(r)ds)=exp(−j=1∑i−1σjδj)
类似地,渲染颜色的离散化过程:
C
^
(
r
)
=
∑
i
=
1
N
∫
t
i
t
i
+
1
T
(
t
)
σ
(
r
)
c
(
r
,
d
)
d
t
=
∑
i
=
1
N
σ
i
c
i
∫
t
i
t
i
+
1
exp
(
−
∫
t
1
t
i
σ
(
r
)
d
s
−
∫
t
i
t
σ
(
r
)
d
s
)
d
t
=
∑
i
=
1
N
T
i
σ
i
c
i
∫
t
i
t
i
+
1
exp
(
−
σ
i
∫
t
i
t
d
s
)
d
t
=
∑
i
=
1
N
T
i
σ
i
c
i
∫
t
i
t
i
+
1
e
−
σ
i
(
t
−
t
i
)
d
t
=
∑
i
=
1
N
T
i
σ
i
c
i
⋅
e
−
σ
i
(
t
−
t
i
)
−
σ
i
∣
t
i
t
i
+
1
=
−
∑
i
=
1
N
T
i
(
e
−
σ
i
(
t
i
+
1
−
t
i
)
−
1
)
c
i
=
∑
i
=
1
N
T
i
(
1
−
e
−
σ
i
δ
i
)
c
i
\begin{aligned} \hat{C}(\mathbf{r}) &=\sum_{i=1}^{N}{\int_{t_i}^{t_{i+1}}{T(t)\sigma(\mathbf{r})\mathbf{c}(\mathbf{r},\mathbf{d})\mathrm{d}t}}\\ &=\sum_{i=1}^{N}{\sigma_i\mathbf{c}_i\int_{t_i}^{t_{i+1}}{\exp\left(-\int_{t_1}^{t_i}{\sigma(\mathbf{r})\mathrm{d}s}-\int_{t_i}^t{\sigma(\mathbf{r})\mathrm{d}s}\right)\mathrm{d}t}}\\ &=\sum_{i=1}^{N}{T_i\sigma_i\mathbf{c}_i\int_{t_i}^{t_{i+1}}{\exp\left(-\sigma_i\int_{t_i}^t{\mathrm{d}s}\right)\mathrm{d}t}}\\ &=\sum_{i=1}^{N}{T_i\sigma_i\mathbf{c}_i\int_{t_i}^{t_{i+1}}{e^{\displaystyle{-\sigma_i(t-t_i)}}\mathrm{d}t}}\\ &=\sum_{i=1}^{N}{T_i\sigma_i\mathbf{c}_i\cdot\left.\frac{e^{\displaystyle{-\sigma_i(t-t_i)}}}{-\sigma_i}\right|_{t_i}^{t_{i+1}}}\\ &=-\sum_{i=1}^{N}{T_i\left(e^{\displaystyle{-\sigma_i(t_{i+1}-t_i)}}-1\right)\mathbf{c}_i}\\ &=\sum_{i=1}^{N}{T_i\left(1-e^{\displaystyle{-\sigma_i\delta_i}}\right)\mathbf{c}_i}\\ \end{aligned}
C^(r)=i=1∑N∫titi+1T(t)σ(r)c(r,d)dt=i=1∑Nσici∫titi+1exp(−∫t1tiσ(r)ds−∫titσ(r)ds)dt=i=1∑NTiσici∫titi+1exp(−σi∫titds)dt=i=1∑NTiσici∫titi+1e−σi(t−ti)dt=i=1∑NTiσici⋅−σie−σi(t−ti)∣∣∣∣∣titi+1=−i=1∑NTi(e−σi(ti+1−ti)−1)ci=i=1∑NTi(1−e−σiδi)ci
Hierarchical volume sampling
为了改变 NeRF 的低效性,排除无关空间和遮挡区域这些对渲染没有贡献的部分,采用两级粒度的分层采样(即采用粗粒度和细粒度两个 MLP)。
粗粒度渲染中,采样
N
c
N_c
Nc 个点,记
c
i
\mathbf{c}_i
ci 的加权系数
w
i
=
T
i
(
1
−
e
−
σ
i
δ
i
)
w_i=T_i\left(1-e^{\displaystyle{-\sigma_i\delta_i}}\right)
wi=Ti(1−e−σiδi):
C
^
c
(
r
)
=
∑
i
=
1
N
c
w
i
c
i
\hat{C}_c(\mathbf{r})=\sum_{i=1}^{N_c}{w_i\mathbf{c}_i}
C^c(r)=i=1∑Ncwici
归一化的系数
w
^
i
=
w
i
∑
j
=
1
N
c
w
j
∈
[
0
,
1
]
\hat{w}_i=\cfrac{w_i}{\displaystyle\sum_{j=1}^{N_c}{w_j}}\in[0,1]
w^i=j=1∑Ncwjwi∈[0,1] 可以理解为概率密度函数(PDF)。通过逆变换采样(Inverse transform sampling)采样
N
f
N_f
Nf 个点,总共
N
c
+
N
f
N_c+N_f
Nc+Nf 个点用于细粒度渲染:
C
^
f
(
r
)
=
∑
i
=
1
N
c
+
N
f
w
i
c
i
\hat{C}_f(\mathbf{r})=\sum_{i=1}^{N_c+N_f}{w_i\mathbf{c}_i}
C^f(r)=i=1∑Nc+Nfwici
不难发现,这
N
f
N_f
Nf 个点会更多落在
w
^
i
\hat{w}_i
w^i 较大的区间,也就是对颜色计算贡献更大的体素,因此能够提升 NeRF 对细节的表现。
Loss function
采用两级粒度 MLP 的二范数损失的平方和:
L
=
∑
r
∈
R
[
∥
C
^
c
(
r
)
−
C
(
r
)
∥
2
2
+
∥
C
^
f
(
r
)
−
C
(
r
)
∥
2
2
]
\mathcal{L}=\sum_{\mathbf{r}\in\mathcal{R}}\left[\left\|\hat{C}_c(\mathbf{r})-C(\mathbf{r})\right\|^2_2+\left\|\hat{C}_f(\mathbf{r})-C(\mathbf{r})\right\|^2_2\right]
L=r∈R∑[∥∥∥C^c(r)−C(r)∥∥∥22+∥∥∥C^f(r)−C(r)∥∥∥22]
其中
R
\mathcal{R}
R 为一个 batch 中采样光线的集合。
Camera intrinsics & extrinsics
相机的外参矩阵用于将世界坐标系变换到相机坐标系;而内参矩阵用于将相机坐标系变换到像素坐标系。
给定世界坐标系
P
w
=
(
X
w
,
Y
w
,
Z
w
)
\mathbf{P}_w=(X_w,Y_w,Z_w)
Pw=(Xw,Yw,Zw) ,相机坐标系
P
c
=
(
X
c
,
Y
c
,
Z
c
)
\mathbf{P}_c=(X_c,Y_c,Z_c)
Pc=(Xc,Yc,Zc) 一般取世界坐标系下相机的位置作为原点、相机的朝向作为
Z
Z
Z 轴的方向。
P
c
\mathbf{P}_c
Pc 可以由
P
w
\mathbf{P}_w
Pw 经过旋转和平移变换得到,为了方便引入平移变换,后面的变换矩阵使用四元数表示:
(
x
,
y
,
z
,
w
)
≡
(
x
w
,
y
w
,
z
w
)
(x,y,z,w)\equiv\left(\frac{x}{w},\frac{y}{w},\frac{z}{w}\right)
(x,y,z,w)≡(wx,wy,wz)
旋转矩阵(绕
x
x
x、
y
y
y、
z
z
z 三轴):
R
x
=
(
1
0
0
0
0
cos
θ
−
sin
θ
0
0
sin
θ
cos
θ
0
0
0
0
1
)
\mathbf{R}_x= \begin{pmatrix} 1 & 0 & 0 & 0\\ 0 & \cos\theta & -\sin\theta & 0\\ 0 & \sin\theta & \cos\theta & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}
Rx=⎝⎜⎜⎛10000cosθsinθ00−sinθcosθ00001⎠⎟⎟⎞
R
y
=
(
cos
θ
0
sin
θ
0
0
1
0
0
−
sin
θ
0
cos
θ
0
0
0
0
1
)
\mathbf{R}_y= \begin{pmatrix} \cos\theta & 0 & \sin\theta & 0\\ 0 & 1 & 0 & 0\\ -\sin\theta & 0 & \cos\theta & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}
Ry=⎝⎜⎜⎛cosθ0−sinθ00100sinθ0cosθ00001⎠⎟⎟⎞
R
z
=
(
cos
θ
−
sin
θ
0
0
sin
θ
cos
θ
0
0
0
0
1
0
0
0
0
1
)
\mathbf{R}_z= \begin{pmatrix} \cos\theta & -\sin\theta & 0 & 0\\ \sin\theta & \cos\theta & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix}
Rz=⎝⎜⎜⎛cosθsinθ00−sinθcosθ0000100001⎠⎟⎟⎞
平移矩阵:
T
=
(
0
0
0
t
x
0
0
0
t
y
0
0
0
t
z
0
0
0
1
)
\mathbf{T}= \begin{pmatrix} 0 & 0 & 0 & t_x\\ 0 & 0 & 0 & t_y\\ 0 & 0 & 0 & t_z\\ 0 & 0 & 0 & 1 \end{pmatrix}
T=⎝⎜⎜⎛000000000000txtytz1⎠⎟⎟⎞
世界坐标到相机坐标的变换:
P
c
=
(
X
c
Y
c
Z
c
1
)
=
R
x
R
y
R
z
T
(
X
w
Y
w
Z
w
1
)
=
(
R
3
×
3
t
3
×
1
0
1
×
3
1
1
×
1
)
4
×
4
P
w
\mathbf{P}_c=\begin{pmatrix}X_c\\Y_c\\Z_c\\1\end{pmatrix}= \mathbf{R}_x\mathbf{R}_y\mathbf{R}_z\mathbf{T}\begin{pmatrix}X_w\\Y_w\\Z_w\\1\end{pmatrix}= \begin{pmatrix}\mathbf{R}_{3\times3} & \mathbf{t}_{3\times1}\\\mathbf{0}_{1\times3} & \mathbf{1}_{1\times1}\end{pmatrix}_{4\times4}\mathbf{P}_w
Pc=⎝⎜⎜⎛XcYcZc1⎠⎟⎟⎞=RxRyRzT⎝⎜⎜⎛XwYwZw1⎠⎟⎟⎞=(R3×301×3t3×111×1)4×4Pw
其中,
R
\mathbf{R}
R 和
t
\mathbf{t}
t 就是相机的外参:
R
3
×
3
=
(
1
0
0
0
cos
θ
x
−
sin
θ
x
0
sin
θ
x
cos
θ
x
)
(
cos
θ
y
0
sin
θ
y
0
1
0
−
sin
θ
y
0
cos
θ
y
)
(
cos
θ
z
−
sin
θ
z
0
sin
θ
z
cos
θ
z
0
0
0
1
)
\mathbf{R}_{3\times3}= \begin{pmatrix} 1 & 0 & 0\\ 0 & \cos\theta_x & -\sin\theta_x\\ 0 & \sin\theta_x & \cos\theta_x \end{pmatrix} \begin{pmatrix} \cos\theta_y & 0 & \sin\theta_y\\ 0 & 1 & 0\\ -\sin\theta_y & 0 & \cos\theta_y \end{pmatrix} \begin{pmatrix} \cos\theta_z & -\sin\theta_z & 0\\ \sin\theta_z & \cos\theta_z & 0\\ 0 & 0 & 1 \end{pmatrix}
R3×3=⎝⎛1000cosθxsinθx0−sinθxcosθx⎠⎞⎝⎛cosθy0−sinθy010sinθy0cosθy⎠⎞⎝⎛cosθzsinθz0−sinθzcosθz0001⎠⎞
t
3
×
1
=
(
t
x
t
y
t
z
)
\mathbf{t}_{3\times1}=\begin{pmatrix}t_x\\t_y\\t_z\end{pmatrix}
t3×1=⎝⎛txtytz⎠⎞
对于理想光学系统,平行于光轴的入射光线过像方焦点,过主点的入射光线不改变方向,根据这两条光线的交点可以找到成像位置。当物距足够大,也不考虑景深时,认为始终清晰、完整成像,物距可以近似为焦距,这就是针孔假设(Pinhole approximation)。
在计算机视觉中,相机一般采用上述假设下的针孔模型(Pinhole model)。为了保持符号一致性(针孔模型成倒像),选取像平面的共轭。像面坐标系
P
i
=
(
X
i
,
Y
i
)
\mathbf{P}_i=(X_i,Y_i)
Pi=(Xi,Yi) 可以由相机坐标系
P
c
\mathbf{P}_c
Pc 得到:
X
c
X
i
=
Y
c
Y
i
=
Z
c
f
⟹
{
X
i
=
X
c
Z
c
f
Y
i
=
Y
c
Z
c
f
\frac{X_c}{X_i}=\frac{Y_c}{Y_i}=\frac{Z_c}{f} \Longrightarrow \begin{cases} X_i=\dfrac{X_c}{Z_c}f\\ Y_i=\dfrac{Y_c}{Z_c}f \end{cases}
XiXc=YiYc=fZc⟹⎩⎪⎨⎪⎧Xi=ZcXcfYi=ZcYcf
写成矩阵形式:
P
i
=
(
X
i
Y
i
Z
c
)
=
(
f
0
0
0
0
f
0
0
0
0
1
0
)
(
X
c
Y
c
Z
c
1
)
=
(
f
0
0
0
0
f
0
0
0
0
1
0
)
P
c
\mathbf{P}_i=\begin{pmatrix}X_i\\Y_i\\Z_c\end{pmatrix}= \begin{pmatrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{pmatrix} \begin{pmatrix}X_c\\Y_c\\Z_c\\1\end{pmatrix}= \begin{pmatrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{pmatrix} \mathbf{P}_c
Pi=⎝⎛XiYiZc⎠⎞=⎝⎛f000f0001000⎠⎞⎝⎜⎜⎛XcYcZc1⎠⎟⎟⎞=⎝⎛f000f0001000⎠⎞Pc
像素坐标系
P
p
=
(
u
,
v
)
\mathbf{P}_p=(u,v)
Pp=(u,v) 与像面坐标系共享同一个平面,区别在于一个连续、一个离散。此外,像素坐标系具有有限坐标,并且它的原点在画面的左上方。为了从像面坐标系(米)变换到像素坐标系(像素),假设缩放系数为
ρ
u
×
ρ
v
\rho_u\times\rho_v
ρu×ρv、平移量为
(
c
x
,
c
y
)
(c_x,c_y)
(cx,cy),则像素坐标:
P
p
=
(
u
v
w
)
=
(
ρ
u
0
c
x
0
ρ
v
c
y
0
0
1
)
P
i
=
(
ρ
u
0
c
x
0
ρ
v
c
y
0
0
1
)
(
f
0
0
0
0
f
0
0
0
0
1
0
)
P
c
=
(
f
ρ
u
0
c
x
0
0
f
ρ
v
c
y
0
0
0
1
0
)
P
c
=
(
K
3
×
3
0
3
×
1
)
3
×
4
(
R
3
×
3
t
3
×
1
0
1
×
3
1
1
×
1
)
4
×
4
P
w
\begin{aligned} \mathbf{P}_p=\begin{pmatrix}u\\v\\w\end{pmatrix} &=\begin{pmatrix} \rho_u & 0 & c_x\\ 0 & \rho_v & c_y\\ 0 & 0 & 1 \end{pmatrix} \mathbf{P}_i\\ &=\begin{pmatrix} \rho_u & 0 & c_x\\ 0 & \rho_v & c_y\\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{pmatrix} \mathbf{P}_c\\ &=\begin{pmatrix} f\rho_u & 0 & c_x & 0\\ 0 & f\rho_v & c_y & 0\\ 0 & 0 & 1 & 0 \end{pmatrix} \mathbf{P}_c\\ &=\begin{pmatrix}\mathbf{K}_{3\times3} & \mathbf{0}_{3\times1}\end{pmatrix}_{3\times4} \begin{pmatrix} \mathbf{R}_{3\times3} & \mathbf{t}_{3\times1}\\ \mathbf{0}_{1\times3} & \mathbf{1}_{1\times1} \end{pmatrix}_{4\times4}\mathbf{P}_w \end{aligned}
Pp=⎝⎛uvw⎠⎞=⎝⎛ρu000ρv0cxcy1⎠⎞Pi=⎝⎛ρu000ρv0cxcy1⎠⎞⎝⎛f000f0001000⎠⎞Pc=⎝⎛fρu000fρv0cxcy1000⎠⎞Pc=(K3×303×1)3×4(R3×301×3t3×111×1)4×4Pw
其中,
K
\mathbf{K}
K 就是相机的内参:
K
3
×
3
=
(
f
ρ
u
0
c
x
0
f
ρ
v
c
y
0
0
1
)
\mathbf{K}_{3\times3}= \begin{pmatrix} f\rho_u & 0 & c_x\\ 0 & f\rho_v & c_y\\ 0 & 0 & 1 \end{pmatrix}
K3×3=⎝⎛fρu000fρv0cxcy1⎠⎞
References
B. Mildenhall, P. P. Srinivasan, M. Tancik, et al. NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis. ECCV’20. https://arxiv.org/abs/2003.08934
https://towardsdatascience.com/what-are-intrinsic-and-extrinsic-camera-parameters-in-computer-vision-7071b72fb8ec