3D 相片是这两年比较热门的研究方向,Facebook 已经支持分享 3D 相片。相信在不久的将来朋友圈、微博上也可以分享炫酷的 3D 照片
这篇论文作者来自弗吉尼亚理工学院、台湾国立清华大学和 Facebook,作者提出了一种从 单张 RGB-D 图像生成 3D 照相 的方法,效果炫酷、惊艳,目前代码已在Github上开源。
开源链接:https://github.com/vt-vl-lab/3d-photo-inpainting
先展示下猫咪和高达的结果,镜头晃动、希区柯克等效果,毫无违和感。
文章方法对深度图的质量要求并不高,只需要深度不连续处在彩色图和深度图中是合理对齐的即可。深度图可以从 双摄相机通过立体视觉的方式计算 得到,也可以借助 深度学习的方法从单张图片估计 得到,因此应用到智能手机完全没有问题,作者也对这两种来源的深度图进行了测试。
初始化阶段首先将输入的 RGB-D 图的深度通道归一化到 0-1 之间,并对深度图进行双边中值滤波,以使得边缘更加明显,再基于此图片生成初始 LDI。然后再根据给定阈值判断相邻像素的视差,找到深度不连续像素,并经过一些简化、处理得到最终的深度不连续边。
接下来每次选择一条深度边借助填补算法来修复背景,首先在深度不连续处断开 LDI 像素连接,得到 (前景、背景) 轮廓像素,然后生成一个合成区域,使用洪水漫淹算法初始化颜色和深度值,再使用深度学习的方法填补该合成区域。
给定语境区域和合成区域,这里的目标是合成颜色值和深度值。将整个修复任务分解成三个子网络:
- 边修复网络 (edge inpainting network)
- 颜色修复网络 (color inpainting network)
- 深度修复网络 (depth inpainting network)
首先将语境区域的边作为输入,使用边修复网络预测合成区域中的深度边,先预测边信息能够推断 (基于边的) 结构 信息,有助于约束 (颜色和深度的) 内容 预测。然后使用修复的边和语境区域的颜色作为输入,使用颜色修复网络预测颜色。最后再使用同样的方法预测深度信息。
由于我本地机器没有 GPU,使用 CPU 运行代码,虽然也能跑,但运行时要消耗至少 12GB 内存,而且结果还不准确。故使用 Colab,简单方便。下面是电源宝宝测试结果,感觉还凑合 。