今天是复活节,你有感受到春天和新生的气息了吗?
今天向大家介绍的工作来自图像修补(inpainting)领域,修复老照片,特别的是它不仅要让记忆有色彩,还要有立体感。一张黑白老照片,既焕发生机又跃然纸上,是不是很神奇?
该项目已开源,三天内冲上Github趋势榜第二名,获得693颗星!我们一起来看看吧!
以下内容转载自机器之心。
如何让一张老照片看起来有 3D 效果?
来自弗吉尼亚理工大学、台湾清华大学和 Facebook 的研究者提出了一种将单个 RGB-D 输入图像转换为 3D 照片的方法,利用多层表示合成新视图,且新视图包含原始视图中遮挡区域的 hallucinated 颜色和深度结构。
具体而言,研究人员使用具有显式像素连通性的分层深度图像(Layered Depth Image,LDI)作为基础表示,并提出了一种基于学习(learning-based)的修复模型,该模型以空间语境感知的方式,为遮挡区域迭代地合成局部新的颜色和深度信息。在使用标准图形引擎的情况下,该方法可以高效地渲染生成 3D 照片。
研究者在多种具有挑战性的日常场景中验证了此方法的有效性,与当前 SOTA 方法相比,该方法生成结果的伪影更少。
与 SOTA 方法对比的效果图
老照片也能有 3D 效果!
除了论文以外,该研究还提供了大量示例、代码,还有可以试用的 Colab 环境,感兴趣的读者可以试试效果。
这么优秀的 3D 效果是怎么实现的?
该研究提出的方法以 RGB-D 图像作为输入,并生成分层深度图像(LDI),并修复输入图像中被遮挡区域的颜色和深度。
该按照以下步骤执行:
图像预处理:首先初始化 LDI,LDI 使用单个层,且完全 4-connected。在预处理过程中,检测主要的深度不连续区域,并将它们分为简单的连接深度边缘(connected depth edge)。这构成了主算法的基础,该算法的核心部分式迭代地选择深度边缘进行修复;
语境和合成区域:断开边缘上的 LDI 像素,只修复边缘的背景像素。具体做法是从边缘的「已知」侧提取局部语境区域,在「未知」侧生成合成区域;
语境感知的颜色和深度修复:合成区域是新像素的连续 2D 区域,研究者使用基于学习的方法从给定语境中为其生成颜色和深度值;
形成 3D 纹理网格:修复完成后,将合成像素合并到 LDI 像素。
该方法按照以上流程迭代进行,直到所有深度边缘都得到处理。
接下来,我们来看每一个步骤的具体做法。
图像预处理
下图 2 展示了图像预处理的过程。首先对颜色和深度输入进行预处理 (a-b),然后使用双边中值滤波器锐化输入深度图 (c-d),接下来使用视差阈值检测不连续区域 (e),清除错误的阈值响应并将不连续区域组合成为连接深度图 (f)。这些连接深度图正是修复过程的基础。
图像预处理
语境和合成区域
该研究提出的修复算法每次都在之前计算好的一个深度边缘上执行。给定一个深度边缘(下图 3a),修复算法的目的是在相邻的遮挡区域中合成新的颜色和深度信息。
首先将不连续区域中的 LDI 像素断开(图 3b)。断开的像素(即失去邻居的像素)被称为轮廓像素(silhouette pixel)。图 3b 中显示了前景轮廓(绿色)和背景轮廓(红色),我们只需要修复背景轮廓。
接下来生成合成区域(即新像素的连续区域,图 3c 中的红色像素),提取语境区域(图 3c 中的蓝色像素)。最后,将合成像素并入 LDI 像素中。
图 3:LDI 修复算法的概念图示。(a) 初始 LDI 是全连接的,图中灰色区域是深度边缘(不连续区域)。(b) 首先将深度边缘上的 LDI 像素连接断开,形成前景轮廓(绿色)和背景轮廓(红色)。(c) 对于背景轮廓,提取语境区域(蓝色),生成合成区域(红色)。(d) 将合成像素并入 LDI 中。
具体示例参见下图 4:
图 4:语境/合成区域。图 2(f) 中三个连接深度边缘示例(黑色)的语境区域(蓝色)和合成区域(红色)。
此外,由于检测到的深度边缘可能无法与遮挡区域的边界很好地对齐,因此研究者将合成区域扩大了 5 个像素,这有助于减少修补区域中的伪影。
图 5:处理不完美的深度边缘。
语境感知的颜色和深度修复
如何合成颜色和深度值?一种最直接的方法是分别修复彩色图像和深度图。但随之产生的问题是,已修复的深度图可能无法与已修复的颜色非常合适地匹配。为了解决此问题,研究者设计了类似于 [43, 67] 的颜色和深度修复网络,同时将修复任务分解为三个子网络:边缘修复网络、颜色修复网络和深度修复网络(下图 6)。
图 6:语境感知的颜色和深度修复。
给定颜色、深度、提取以及连接的深度边缘作为输入,随机选择其中一个边作为子问题。首先使用边缘修复网络修复合成区域中(红色区域)的深度边缘,然后将修复后的深度边缘与语境颜色连接在一起,并应用颜色修复网络生成用以修复的颜色。类似地,将修复后的深度边缘与语境深度连接起来,并应用深度修复网络生成修复深度。
多层修复
在深度复杂(deep-complex)的场景中,仅应用一次该研究提出的修复模型肯定不够,因为修复深度边缘所导致的不连续区域使得我们依然可以看见空白(hole)。所以研究者多次使用修复模型,直到不再生成修复深度边缘为止。
下图 8 展示了多次应用修复模型的效果。其中,应用一次修复模型填补了缺失的层。但是从图 8b 的观察视角中,我们依然可以看到一些空白区域。而应用两次修复模型可以彻底消除这些伪影。
图 8:多层修复
转换为 3D 纹理网格
研究者将所有的修复深度和颜色值集成返回原始 LDI 中,从而创建了 3D 纹理网格。在渲染过程中使用网格表示能够快速渲染新的视图,而且无需对每个视图执行推理步骤。因此,在边缘设备上使用标准图形引擎即可轻松地对该研究方法生成的 3D 表示进行渲染。
实验结果
该研究进行了大量实验,对新方法的效果做了视觉对比、量化对比,同时还做了控制变量实验。
视觉对比
首先,我们来看新方法与当前最优的视角合成在视觉效果上的对比结果:
图 9:新方法与基于 MPI 的方法的视觉对比结果
从图中可以看到,该研究提出的新方法能够修复原始图像中被遮挡的区域,且结构和颜色都很合理。
量化对比
研究者对比了不同方法在 RealEstate10K 数据集上的量化对比结果,如下表 1 所示:
该研究提出的新方法在 SSIM 和 PSNR 两项指标上的性能均具备很强的竞争力。此外,新方法的合成视角表现出了更优秀的感知质量,这一点从 LPIPS 分数上可以看出。
控制变量测试
研究者从测试数据序列中采样了 130 个踪片,并在全图和未遮挡区域上评估修复颜色,测试结果见下表 2。可以看出,该研究提出的边缘引导的修复技术给各项评估指标数值带来了微小的提升。
此外,为测试颜色修复模型的效果,研究者进行了类似的实验。下表 3 展示了不同方法在全图和遮挡区域上的性能结果:
从上表中可以看出新方法的感知质量更好,下图中的示例也说明了这一点。
图 11:颜色修复带来了更好的视觉质量。
在不同深度图上的效果如何?
研究者在不同方法生成的深度图上进行实验,结果表明新方法可以很好地处理不同来源的深度图。
图 12:该研究提出的方法可以处理不同来源的深度图。新视角图像左上角为深度估计。
Github 介绍
环境安装
Linux (已在 Ubuntu 18.04.4 LTS 上测试)
Anaconda
Python 3.7 (已在 3.7.4 上测试)
PyTorch 1.4.0 (已在 1.4.0 测试执行)
运行以下命令
conda create -n 3DP python=3.7 anaconda
conda activate 3DP
pip install -r requirements.txt
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit==10.1.243 -c pytorch
下载模型权重
chmod +x download.sh
./download.sh
执行
将 .jpg 文件 (e.g., test.jpg) 放入 image 文件夹中.
如 image/moon.jpg
运行:
python main.py --config argument.yml
通常情况下处理时间为 2-3 分钟,具体取决于可用的计算资源。
将结果存储再以下目录中:
MiDas 估算的对应深度 tu
如 depth/moon.npy
3D 网格
如 mesh/moon.ply
具有放大效果的渲染视频
如 video/moon_zoom-in.mp4
具有摆动效果的渲染 shi'p
如 video/moon_swing.mp4
渲染视频并进行 circle motion
如 video/moon_circle.mp4
如果你对此项目感兴趣,可浏览项目地址便于参考更多详细信息。
论文地址:https://arxiv.org/pdf/2004.04727.pdf
项目地址:https://github.com/vt-vl-lab/3d-photo-inpainting
网站地址:https://shihmengli.github.io/3D-Photo-Inpainting/
Colab 地址:https://colab.research.google.com/drive/1706ToQrkIZshRSJSHvZ1RuCiM__YX3Bz
END
备注:修复
图像增强与质量评价交流群
图像增强、修复、去雾、去雨、图像修补、图像恢复等技术,
若已为CV君其他账号好友请直接私信。
我爱计算机视觉
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
网站:www.52cv.net
在看,让更多人看到