偷天换日,逼真的天空置换算法

责编 | 晋兆雨

来源 | Jack Cui

头图 | CSDN付费下载于视觉中国

前言

天空,是摄像中的一个关键元素。

游戏的天空,我们可以随意调节,可以是晴空万里,也可以是风雨交加。

现实的天空,我们也可以使用算法进行调整,算法效果逼真(效果如下):

万里星空、皓月千里、电闪雷鸣,各种天气特效,算法一键生成。

甚至,可以生成电影特效中才有的,移动城堡,天空之城。

这么好玩的 AI 算法,你想学吗?

老规矩,今天,继续手把手教学。

算法原理、环境搭建、效果实现,一条龙服务,尽在下文!

SkyAR

SkyAR 是一种用于视频中天空置换与协调的视觉方法,该方法能够在风格可控的视频中自动生成逼真的天空背景。

该算法是一种完全基于视觉的解决方案,它的好处就是可以处理非静态图像,同时不受拍摄设备的限制,也不需要用户交互,可以处理在线或离线视频。

使用单卡 NVIDIA Titan XP GPU,SkyAR  处理 640 x 320 的视频,可以达到 24 fps 的实时处理速度。

算法主要由三个核心组成:

  • 天空抠图网络(Sky Matting Network):就是一种 Matting 图像分隔,用于检测视频帧中天空区域的视频,可以精确地获得天空蒙版。

  • 运动估计(Motion Estimation):恢复天空运动的运动估计器,使生成的天空与摄像机的运动同步。

  • 图像融合(Image Blending):将用户指定的天空模板混合到视频帧中。除此之外,还用于重置和着色,使混合结果在其颜色和动态范围内更具视觉逼真感。

完整框架如下图:

天空抠图网络:用来检测视频帧中的天空区域。与以往将此过程定义为二元像素级分类(前景 vs 天空)问题的方法不同,该研究设计了一种基于深度学习的由粗到细的预测 pipeline,以产生更精确的检测结果和更悦目的混合效果。

运动估计:用于恢复天空的移动。虚拟摄像机捕获的天空视频需要在真实摄像机的运动下进行渲染和同步。该研究假设天空以及天空中的物体(例如,太阳、云等)位于无穷远,并用 Affine 矩阵建模它们相对于前景的运动。

图像融合:在预测天空蒙版时,输出像素值越高,表示像素属于天空背景的概率越高。在常规方法中,通常利用图像遮罩方程,将新合成的视频帧与背景进行线性组合,以作为它们的像素级组合权重。

但由于前景色和背景色可能具有不同的色调和强度,因此直接进行上述方法可能会导致不切实际的结果。因此,研究人员应用重新着色和重新照明技术将颜色和强度从背景转移到前景。

更详细的内容,可以直接看 paper:

https://arxiv.org/abs/2010.11800

效果测试

Github 项目地址:

https://github.com/jiupinjia/SkyAR

第一步,安装依赖库。

根据 Requirements.txt 安装依赖库即可,很简单。

第二步,下载训练好的模型权重文件。

下载地址(需翻墙):

https://drive.google.com/file/d/1COMROzwR4R_7mym6DL9LXhHQlJmJaV0J/view

第三步,配置文件修改。

在 config 目录下,有一些配置文件,可以根据自己的情况更改视频和天空模版。

{
  "net_G": "coord_resnet50",
  "ckptdir": "./checkpoints_G_coord_resnet50",

  "input_mode": "video",
  "datadir": "./test_videos/canyon.mp4",
  "skybox": "galaxy.jpg",

  "in_size_w": 384,
  "in_size_h": 384,
  "out_size_w": 845,
  "out_size_h": 480,

  "skybox_cernter_crop": 0.5,
  "auto_light_matching": false,
  "relighting_factor": 0.6,
  "recoloring_factor": 0.5,
  "halo_effect": true,

  "output_dir": "./eval_output",
  "save_jpgs": false

ckptdir 为权重文件的解压后的目录,datadir 为输入视频的目录,skybox 为使用的天空模版。

生成效果保存到 output_dir 目录中。

修改好配置文件,使用指令直接运行:

python skymagic.py --path .\config\config-canyon-galaxy.json

--path 指定使用的配置文件。

运行效果:

处理速度很快,一会儿就处理完了。

更多效果展示:

我将程序进行了打包,东西都已配置完成,可以直接使用。

下载地址(提取码:jack):

https://pan.baidu.com/s/1sjwSRmqswFaOXb7xbHKNVA

更多精彩推荐

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用子模式编号的程序: import re text = '''行尸走肉、金蝉脱壳、百里挑一、金玉满堂、 背水一战、霸王别姬、天上人间、不吐不快、海阔天空、 情非得已、满腹经纶、兵临城下、春暖花开、插翅难逃、 黄道吉日、天下无双、偷天换日、两小无猜、卧虎藏龙、 珠光宝气、簪缨世族、花花公子、绘声绘影、国色天香、 相亲相爱、八仙过海、金玉良缘、掌上明珠、皆大欢喜、 浩浩荡荡、平平安安、秀秀气气、斯斯文文、高兴高兴''' # ABAC形式的词语 pattern_1 = re.compile(r'(\w)(\w)\1(\w)') print(pattern_1.findall(text)) # AABB形式的词语 pattern_2 = re.compile(r'(\w)(\w)\2\1') print(pattern_2.findall(text)) # ABAB形式的词语 pattern_3 = re.compile(r'(\w)(\w)\3\2') print(pattern_3.findall(text)) 使用子模式命名的程序: import re text = '''行尸走肉、金蝉脱壳、百里挑一、金玉满堂、 背水一战、霸王别姬、天上人间、不吐不快、海阔天空、 情非得已、满腹经纶、兵临城下、春暖花开、插翅难逃、 黄道吉日、天下无双、偷天换日、两小无猜、卧虎藏龙、 珠光宝气、簪缨世族、花花公子、绘声绘影、国色天香、 相亲相爱、八仙过海、金玉良缘、掌上明珠、皆大欢喜、 浩浩荡荡、平平安安、秀秀气气、斯斯文文、高兴高兴''' # ABAC形式的词语 pattern_1 = re.compile(r'(?P<x>\w)(?P<y>\w)(?P=x)(?P<z>\w)') print(pattern_1.findall(text)) # AABB形式的词语 pattern_2 = re.compile(r'(?P<x>\w)(?P<y>\w)(?P=y)(?P=x)') print(pattern_2.findall(text)) # ABAB形式的词语 pattern_3 = re.compile(r'(?P<x>\w)(?P<y>\w)(?P=z)(?P=y)') print(pattern_3.findall(text))

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值