任务目标
根据图像对复杂动态场景进行密集3D重建。
图1,复杂动态场景的密集3D重建。其中相机和物体都是在运动的,
困难
当场景是静态的、且相机在移动时,可以通过传统的SFM技术,通过几何约束解释相机的运动。但是当观察到多个动态物体时,这种几何约束会失效,任何一个刚性物体都可以以任意尺度进行重建,无法以全局一致的方式确定所有运动物体之间的相对尺度,因此不可能重建整个场景。
我们提出了一种统一的方法,既不执行任何对象级运动分割,也不假设有关场景刚性类型的任何先验知识,但仍然能够恢复复杂动态场景的尺度一致的密集重建。我们提出的公式隐形地解决了SFM中尺度模糊问题。
两个假设
1动态场景可以使用平面几何进行近似,且每个平面都具有自己的刚性运动。
2两帧之间的场景变换,局部刚性,整体尽可能刚性。
局部刚性和全局的尽可能刚性
我们假设每个平面都是刚性变换。图像上的每一个超像素对应空间中的一个平面patch,如果给出帧间的密集光流,我们可以使用刚性重建,从而获得平面patch在空间中的位置。由于无法正确估计平面patch之间的相对尺度,它们就如同超像素汤(superpixel soup)漂浮在3D空间中。如果我们假设,两帧之间,平面patch的变化是平滑的或者有规律的,并且全局场景是尽可能刚性的,那么我们的方法可以为每个超像素找到合适的尺度,在该尺度下,3D超像素几何会被连续地组合起来,形成分段光滑表面。因此我们称该算法为“superPixel soup”算法。
图:从无尺度的3D超像素“汤”,到完整的3D表面。
方法总览
我们首先将参考图像过度分割(over-segment)为超像素,然后将整个场景的变换建模为这些超像素刚性运动的集合。即,我们对每个超像素进行局部重建,然后组装(以全局一致的方式将所有局部重建粘合在一起)。
每个超像素的局部重建无法确定尺度,尺度是在组装过程中确定的。
记号
两张图像帧分别称为参考帧(第一帧),和第二帧。
我们将参考图像
I
I
I分割成超像素集合
ξ
I
=
{
s
1
,
s
2
,
…
,
s
i
,
…
,
s
N
}
\xi_{I}=\left\{\mathbf{s}_{1}, \mathbf{s}_{2}, \ldots, \mathbf{s}_{\mathbf{i}}, \ldots, \mathbf{s}_{\mathrm{N}}\right\}
ξI={s1,s2,…,si,…,sN}。
其中每一个超像素
s
i
s_i
si:边界像素
{
x
b
i
=
[
u
b
i
,
v
b
i
,
1
]
T
∣
b
=
1
,
…
,
B
i
}
\{x_{bi}=\left[u_{\mathbf{b} \mathbf{i}}, v_{\mathbf{b} \mathbf{i}}, 1\right]^{\mathrm{T}} | \mathbf{b}=1, \ldots, \mathbf{B}_{\mathbf{i}}\}
{xbi=[ubi,vbi,1]T∣b=1,…,Bi},锚点anchor point
x
a
i
x_{ai}
xai是该超像素的质心。
超像素集合对应的3D平面:
ξ
W
=
{
s
~
1
,
s
~
2
,
…
s
~
i
,
…
s
~
N
}
\xi_{W}=\left\{\tilde{\mathbf{s}}_{\mathbf{1}}, \tilde{\mathbf{s}}_{\mathbf{2}}, \ldots \tilde{\mathbf{s}}_{\mathbf{i}}, \ldots \tilde{\mathbf{s}}_{\mathbf{N}}\right\}
ξW={s~1,s~2,…s~i,…s~N}。
这些3D表面采用surfel表达最为合理,但是论文仍将其称为“3D超像素”。
我们进一步假设每个3D超像素是一个3D平面patch,
Π
s
i
~
=
{
n
i
,
x
~
a
i
,
{
x
~
b
i
}
}
\Pi_{\tilde{\mathbf{s}{i}}}=\{{n}_i, \tilde{{x}}_{ai},\{\tilde{x}_{bi}\}\}
Πsi~={ni,x~ai,{x~bi}},即,由法向,锚点和3D边界点表达。
刚性变换
M
i
=
(
R
i
λ
i
t
^
i
o
1
)
∈
S
E
(
3
)
\mathbf{M}_{\mathbf{i}}=\left(\begin{array}{cc}\mathbf{R}_{\mathbf{i}} & \lambda_{\mathbf{i}} \hat{\mathbf{t}}_{\mathbf{i}} \\ \mathbf{o} & \mathbf{1}\end{array}\right) \in \mathrm{SE}(3)
Mi=(Rioλit^i1)∈SE(3),其中
λ
i
\lambda_i
λi是未知的尺度。
问题定义
给定一对动态场景透视图 I I I和 I ′ I' I′,及相应的稠密光流场。我们的任务是重建一个由多平面近似的动态场景。
算法
输入:
两帧连续的动态场景图像,包含密集的光流匹配。
输出:
两张图像的3D重建
步骤:
1,将参考图像分割成
N
N
N个超像素,并且构造一个K-NN graph,以将整个场景表示为一个
G
(
V
,
E
)
G(V,E)
G(V,E)的图。
2,采用两视图对极几何恢复每个3D超像素的刚性运动。
3,优化能量函数以对齐所有的超像素。
采用多平面 表达的 连续场景。每个超像素由
(
Π
s
~
i
,
M
i
)
(\Pi_{\tilde{s}{i}},M_i)
(Πs~i,Mi),即由超像素及其变换表达。
建立K-NN graph
我们在图像的像素空间,通过链接每个锚点的最近K个锚点,构建graph G ( V , E ) G(V,E) G(V,E)。graph的顶点是 V V V是锚点,边 E E E是每对锚点间的欧氏距离。
尽可能的刚性 能量函数
我们是通过强制3D超像素(平面patch)满足我们的假设,进而估计出其正确的尺度。
我们要求全局尽可能保持刚性:
E
arap
=
∑
i
=
1
N
∑
k
∈
N
i
w
1
(
x
a
i
,
x
a
k
)
(
∥
R
i
−
R
k
∥
F
+
∥
λ
i
t
^
i
−
λ
k
t
^
k
∥
2
)
+
w
2
(
x
a
i
,
x
a
k
)
⋅
∣
∥
x
~
a
i
−
x
~
a
k
∥
2
−
∣
∣
x
~
a
i
′
−
x
~
a
k
′
∥
2
∣
1
\mathrm{E}_{\text {arap }}= \sum_{\mathbf{i}=1}^{\mathrm{N}} \sum_{\mathbf{k} \in \mathcal{N}_{\mathbf{i}}} w_{1}\left(\mathbf{x}_{\mathbf{a} \mathbf{i}}, \mathbf{x}_{\mathbf{a} \mathbf{k}}\right)\left(\left\|\mathbf{R}_{\mathbf{i}}-\mathbf{R}_{\mathbf{k}}\right\|_{\mathrm{F}}+\left\|\lambda_{\mathbf{i}} \hat{\mathbf{t}}_{\mathbf{i}}-\lambda_{\mathbf{k}} \hat{\mathbf{t}}_{\mathbf{k}}\right\|_{2}\right) \\ +w_{2}\left(\mathbf{x}_{\mathbf{a} \mathbf{i}}, \mathbf{x}_{\mathbf{a} \mathbf{k}}\right) \cdot|\left\|\tilde{\mathbf{x}}_{\mathbf{a} \mathbf{i}}-\tilde{\mathbf{x}}_{\mathbf{a} \mathbf{k}}\right\|_{2}-\left.||\tilde{\mathbf{x}}_{\mathbf{a} \mathbf{i}}^{\prime}-\tilde{\mathbf{x}}_{\mathbf{a} \mathbf{k}}^{\prime}\right\|_{2}|_{1}
Earap =i=1∑Nk∈Ni∑w1(xai,xak)(∥Ri−Rk∥F+∥∥λit^i−λkt^k∥∥2)+w2(xai,xak)⋅∣∥x~ai−x~ak∥2−∣∣x~ai′−x~ak′∥2∣1
上述能量函数有两项,前一项有利于保持局部邻居之间的平滑运动(即某个超像素的变换
M
M
M与其
K
K
K个邻居的变换差距不大),第二项则鼓励保持变换前后锚点之间的距离不变。
两项之间的权
w
w
w定义为:
w
1
(
x
a
i
,
x
a
k
)
=
w
2
(
x
a
i
,
x
a
k
)
=
exp
(
−
β
∥
x
a
i
−
x
a
k
∥
)
w_{1}\left(\mathbf{x}_{\mathbf{a i}}, \mathbf{x}_{\mathbf{a} \mathbf{k}}\right)=w_{2}\left(\mathbf{x}_{\mathbf{a} \mathbf{i}}, \mathbf{x}_{\mathbf{a} \mathbf{k}}\right)=\exp \left(-\beta\left\|\mathbf{x}_{\mathbf{a} \mathbf{i}}-\mathbf{x}_{\mathbf{a} \mathbf{k}}\right\|\right)
w1(xai,xak)=w2(xai,xak)=exp(−β∥xai−xak∥)
即超像素之间距离的反比,两个超像素之间距离越远,这种尽可能刚性的约束越小。
注意:这种约束仅在锚点上,不会对超像素的边界进行强制平滑。
连续3D空间的分段平面会导致每个平面的边界附近产生不连续性。所以我们附加约束修复这种不连续性:
平面重投影能量函数
因为,空间3D平面是由平面超像素反投影获得,因此,3D模型满足平面投影误差。
E
p
r
o
j
=
∑
i
=
1
N
w
3
∣
ψ
(
s
i
)
∣
∑
j
=
1
∣
ψ
(
s
i
)
∣
∥
ψ
(
s
i
j
)
′
−
K
(
R
i
−
t
i
n
i
T
d
i
)
K
−
1
ψ
(
s
i
j
)
∥
2
\begin{aligned} &\mathrm{E}_{\mathrm{proj}}=\\ &\sum_{\mathfrak{i}=1}^{\mathrm{N}} \frac{w_{3}}{\left|\psi\left(\mathbf{s}_{\mathbf{i}}\right)\right|} \sum_{\mathfrak{j}=1}^{\left|\psi\left(\mathbf{s}_{\mathfrak{i}}\right)\right|}\left\|\psi\left(\mathbf{s}_{\mathbf{i}}^{\mathbf{j}}\right)^{\prime}-\mathbf{K}\left(\mathbf{R}_{\mathbf{i}}-\frac{\mathbf{t}_{\mathbf{i}} \mathbf{n}_{\mathbf{i}}^{\mathrm{T}}}{\mathrm{d}_{\mathbf{i}}}\right) \mathbf{K}^{-1} \psi\left(\mathbf{s}_{\mathbf{i}}^{\mathbf{j}}\right)\right\|_{2} \end{aligned}
Eproj=i=1∑N∣ψ(si)∣w3j=1∑∣ψ(si)∣∥∥∥∥ψ(sij)′−K(Ri−ditiniT)K−1ψ(sij)∥∥∥∥2
其中,
ψ
(
s
j
)
\psi(s_j)
ψ(sj)表示超像素
s
j
s_j
sj中的像素。
ψ
(
s
j
i
)
\psi(s_j^i)
ψ(sji)表示超像素
s
j
s_j
sj中的第
i
i
i个像素。而
ψ
(
s
i
j
)
,
ψ
(
s
i
j
)
′
\psi\left(\mathbf{s}_{\mathbf{i}}^{\mathbf{j}}\right), \psi\left(\mathbf{s}_{\mathbf{i}}^{\mathbf{j}}\right)^{\prime}
ψ(sij),ψ(sij)′表示两张图像中由光流获得的匹配。
w
3
w_3
w3是一个经验权值。
3D连续性能量函数
我们希望局部邻居连续,因此,要求相邻的超像素在其边界处具有平滑的深度过度。
E
c
o
n
t
=
∑
i
=
1
N
∑
k
∈
N
i
w
4
(
X
b
i
,
X
b
k
)
(
∥
X
~
b
i
−
X
~
b
k
∥
F
+
ρ
(
∥
X
~
b
i
′
−
X
~
b
k
′
∥
F
)
\begin{aligned} &\mathrm{E}_{\mathrm{cont}}=\\ &\sum_{\mathfrak{i}=1}^{\mathrm{N}} \sum_{\mathbf{k} \in \mathcal{N}_{\mathbf{i}}} w_{4}\left(\mathbf{X}_{\mathbf{b} \mathbf{i}}, \mathbf{X}_{\mathbf{b} \mathbf{k}}\right)\left(\left\|\tilde{\mathbf{X}}_{\mathbf{b} \mathbf{i}}-\tilde{\mathbf{X}}_{\mathbf{b} \mathbf{k}}\right\|_{\mathrm{F}}+\rho\left(\left\|\tilde{\mathbf{X}}_{\mathbf{b} \mathbf{i}}^{\prime}-\tilde{\mathbf{X}}_{\mathbf{b} \mathbf{k}}^{\prime}\right\|_{\mathrm{F}}\right)\right. \end{aligned}
Econt=i=1∑Nk∈Ni∑w4(Xbi,Xbk)(∥∥∥X~bi−X~bk∥∥∥F+ρ(∥∥∥X~bi′−X~bk′∥∥∥F)
其中,
X
b
i
X_{bi}
Xbi是超像素的边界像素点,
X
b
k
X_{bk}
Xbk是对应的空间点。注意:邻居超像素彼此共享边界。为了鼓励局部平滑,对于每个超像素边界像素,我们考虑其四个邻接像素的颜色,来定义其权重:
w
4
(
X
b
i
,
X
b
k
)
=
∑
j
=
1
4
exp
(
−
β
∥
I
(
X
b
i
)
−
I
(
ζ
j
)
∥
F
)
w_{4}\left(\mathbf{X}_{\mathbf{b i}}, \mathbf{X}_{\mathbf{b} \mathbf{k}}\right)=\sum_{j=1}^{4} \exp \left(-\beta\left\|\mathbf{I}\left(\mathbf{X}_{\mathbf{b} \mathbf{i}}\right)-\mathbf{I}\left(\zeta_{j}\right)\right\|_{\mathbf{F}}\right)
w4(Xbi,Xbk)=j=1∑4exp(−β∥I(Xbi)−I(ζj)∥F)
即颜色差异越大,权值越小。
符号
ζ
j
\zeta_{j}
ζj指代第
j
j
j个邻接像素。
3D连续能量函数促使3D平面间(拥有共同的边界点)保持局部连续。边界越平滑、
E
c
o
n
t
E_{cont}
Econt越小。
方向能量函数
为了鼓励相邻平面的方向平滑,我们为边界像素及其邻域添加一个几何约束,
E
orient
=
∑
i
=
1
N
∑
k
∈
N
i
ρ
n
(
1
−
n
i
T
n
k
)
\mathrm{E}_{\text {orient }}=\sum_{\mathrm{i}=1}^{\mathrm{N}} \sum_{\mathbf{k} \in \mathcal{N}_{\mathrm{i}}} \rho_{n}\left(1-\mathbf{n}_{\mathrm{i}}^{\mathrm{T}} \mathbf{n}_{\mathbf{k}}\right)
Eorient =i=1∑Nk∈Ni∑ρn(1−niTnk)
像素索引与3D连续性能量函数相同。
其中
ρ
n
(
x
)
\rho_n(x)
ρn(x)是一个截断函数,设定最大阈值
n
m
a
x
n_{max}
nmax,
ρ
n
(
x
)
=
m
i
n
(
∣
x
∣
,
n
m
a
x
)
\rho_n(x)=min(|x|,n_{max})
ρn(x)=min(∣x∣,nmax)。
联合能量函数
为了获得尺度一致的3D重建,我们组合以上四种约束,
min
λ
i
,
n
i
,
d
i
,
R
i
,
t
i
E
=
E
arap
+
α
1
E
proj
+
α
2
E
cont
+
α
3
E
orient
subject to
∑
i
=
1
N
λ
i
=
1
,
λ
i
>
0
R
i
∈
S
O
(
3
)
,
∥
n
i
∥
2
=
1
\begin{array}{l} \min _{\lambda_{\mathbf{i}}, \mathbf{n}_{\mathbf{i}}, \mathbf{d}_{\mathbf{i}}, \mathbf{R}_{\mathbf{i}}, \mathbf{t}_{\mathbf{i}}} \mathrm{E}=\mathrm{E}_{\text {arap }}+\alpha_{\mathbf{1}} \mathrm{E}_{\text {proj }}+\alpha_{2} \mathrm{E}_{\text {cont }}+\alpha_{3} \mathrm{E}_{\text {orient }} \\ \text { subject to } \sum_{i=1}^{\mathrm{N}} \lambda_{\mathbf{i}}=1, \lambda_{\mathbf{i}}>0 \\ \mathbf{R}_{\mathbf{i}} \in \mathrm{SO}(3),\left\|\mathbf{n}_{\mathbf{i}}\right\|_{2}=1 \end{array}
minλi,ni,di,Ri,tiE=Earap +α1Eproj +α2Econt +α3Eorient subject to ∑i=1Nλi=1,λi>0Ri∈SO(3),∥ni∥2=1
实现
接下来是一些实时细节,如果有机会接触代码的话,在进行补全。