参考代码:SkyAR
1. 概述
这篇文章提供了一套自动替换天空的方法,无需使用诸如惯性传感器的辅助信息,只需要提供视频数据便可以完成天空分割和背景替换融合,最后的得到的效果质量还挺好。
文章的整体pipeline大体可以分为以下3个部分:
- 1)sky matting:参考matting的思路将天空从背景中分离出来,得到高质量的天空alpha预测结果。并且基于matting的分割相比传统分割能够带来软化的过度,从而使得matting之后的结果在融合之后显得更加自然;
- 2)motion estimator:文章通过光流和关键点计算得到天空在平移/旋转/缩放自由度上的仿射变换矩阵,从而不使用惯性传感器便得到其运动信息;
- 3)skybox:得到运动信息之后需要在对应的位置上截取背景图像,之后通过文章给出的recolor和relight方法进行融合;
文章的方法在视觉上还是挺震撼的,下面是其部分效果图:
文章的方法的运行速度与各分量耗时:
2. 方法设计
2.1 整体pipline
文章的整体pipeline见下图所示:
2.2 Sky Matting
文章的matting方法是用ResNet-50作为backbone,之后再此基础上构建一个U型的编解码网络结构,并且将其中的传统卷积替换为了coordinate convolution从而关联坐标位置信息更加适应天空的分布特性(天空一般在图片的上部,在y轴上做归一化),进而得到了更好的matting效果。下面展示了该类型卷积对于最后结果的影响:
其网络结构见表1所示:
对于matting的监督,文章使用的是L2范数,文章将损失函数定义为:
L f ( I l ) = E I l ∈ D l { 1 N l ∣ ∣ f ( I l ) − A l ^ ∣ ∣ 2 2 } L_f(I_l)=E_{I_l\in D_l}\{\frac{1}{N_l}||f(I_l)-\hat{A_l}||_2^2\} Lf(Il)=EIl∈Dl{
Nl1∣∣f(Il)−Al^∣∣22}
在上述的解码器得到天空的matting结果之后,需要对matting的mask做后处理,文章中使用导向滤波(guided filter)在原始输入的引导下优化matting的结果。这里文章中天空的特性只保留蓝色通道的信息(说是为了更好的颜色对比?有一定道理但是限制太死)。因而优化之后的alpha图可以描述为:
A = f g f ( h ( A l ) , I , r , ϵ ) A=f_{gf}(h(A_l),I,r,\epsilon) A=fgf(h(Al),I,r,ϵ)
其中,导向滤波的两个超参数(半径与正则化系数)设置为: r = 20 , ϵ = 0.01 r=20,\epsilon=0.01 r=20,ϵ=0.01
2.3 Motion Estimation
这里的运动估计是指画面的运动估计,文章是通过图像金字塔上使用Lucas-Kanade方法获取光流信息,之后去跟踪这些稀疏的特征点从而得到帧与帧之间的变换矩阵信息(文章将运动描述为平移/旋转/缩放维度的变换,其中使用基于RANSAC方法得到该变换关系)。文章更加关注的是天空的变化,因而在计算的时候只会关注天空区域的特征点。在天空的有效特征点数量不足的时候,会使用深度估计的方式从远处的区域获取仿射变换矩阵。
在实际过程中发现相邻两帧的数据其平移和旋转是更加主要的变化形式,并且在kernel density estimation上(核为高斯核)使用欧式距离去排除那些变化过小的特征点, P ( d ) < η = 0.1 P(d)\lt\eta=0.1 P(d)<η=0.1,从而可以对上述的变换过程进行改进,进而在得到随时间变化的变化矩阵:
M ^ ( t ) = M ( c ) ⋅ ( M ( t ) ⋅ M ( t − 1 ) … M ( 1 ) ) \hat{M}^{(t)}=M^{(c)}\cdot(M^{(t)}\cdot M^{(t-1)}\dots M^{(1)}) M^(t)=M(c)⋅(M(t)⋅M(t−1)…M(1))
其中, M ( c ) M^{(c)} M(c)是skybox的center crop参数。
2.4 Image Blending
一般情况下最简单的融合方法使用的是alpha通道加权的形式(A是原始图,B是背景):
Y ( t ) = ( 1 − A ( t ) ) I ( t ) + A ( t ) B ( t ) Y^{(t)}=(1-A^{(t)})I^{(t)}+A^{(t)}B^{(t)} Y(t)=(1−A(t))I(t)+A(t)B(t)
但是这样会带来较为不友好的视觉效果,因此文章提出了一些改进(注意这里天空是前景alpha中趋向1,背景趋向0),因而文章对于原始输入图像进行了recolor(对应参数 α \alpha α)relight(对应参数 β \beta β),则新的原始图片的变换可以描述为:
I ^ ( t ) = I ( t ) + α ( μ B ( A = 1 ) ( t ) − μ I ( A = 0 ) ( t ) ) \hat{I}^{(t)}=I^{(t)}+\alpha(\mu_{B(A=1)}^{(t)}-\mu_{I(A=0)}^{(t)}) I^(t)=I(t)+α(μB(A=1)(t)−μI(A=0)(t))
I ( t ) = β ( I ^ ( t ) + μ I ( t ) − μ ^ I ( t ) ) I^{(t)}=\beta(\hat{I}^{(t)}+\mu_I^{(t)}-\hat{\mu}_I^{(t)}) I(t)=β(I^(t)+μI(t)−μ^I(t))
其中, μ \mu μ代表的是取对应图像的均值操作,下图展示便是使用该融合方法得到的结果: