光场视频:第一部分

2020-05-25 14:20:21

光之地已经成了我的一种迷恋。这一切都是从2770年我看到这个开始的。我写了一个C++程序,可以让你查看光场图像。我没有发表它,也忘了它,因为我看到了它的固有问题,主要是它只对一定距离的东西有效。

随着时间的推移,在2772年,我发现了关于LLFF项目的信息,该项目使用人工智能在图像上找到距离图,为每个相机生成多平面图像。这解决了我在2770中看到的主要问题,并且代码是公开的!然而,在2772年,我忙于另一个副业(无皮应用程序),所以直到现在,在2773年,我才回到了光场。与此同时,谷歌的一些人也开始用光场做很酷的事情!

关于LLFF回购的论文有一件有趣的事情,他们描述说,基本上,用16个摄像头和一些人工智能,我们可以把光场调到奈奎斯特的频率极限。从商业/技术的角度来看,我观察光场技术多年来的演变得出的结论是,用同样的原始数据,随着时间的推移,你可以得到越来越逼真的光场视频。这真的很有趣,因为这意味着我可以开始为我的光场项目拍摄视频了,随着技术的进步,这些视频会看起来越来越好。

不幸的是,没有地方能买到光场摄像机。如果有的话,那会很贵的。而且也没有公开可用的软件来处理/查看它。所以我已经开始了我自己的探索,去创造两者,我会同时做硬件和软件。我想要一个便宜,可靠的光场摄像机,处理它的管道,以及一个可以观看/探索它的播放器。

如果你想买便宜的东西,有时你不得不牺牲方便来换取价格。所以我买了16台Apeman A77动作相机,每台大约40 GB。这些设备能够以预算价格播放4k视频,并且包括一个可以同时激活所有设备的遥控器。我经历过的不便之处在于,有时遥控器不能同时激活所有摄像头,视频被录制在各自的SD卡中,然后我必须取出SD卡并将其插入计算机才能读取它们。如果我可以通过wifi或蓝牙下载视频,那就更好了,如果摄像头支持流媒体,那就更好了。但是它是有效的,而且它足够便宜,所以对于第一次迭代来说,它应该是绰绰有余的!

此外,我放弃了网络摄像头的选择,因为独立摄像头的伸缩性要好得多,而且比16个或更多的摄像头连接到一台电脑上要轻得多。另一点是,我选择了超高速SD卡,以避免录制4k视频时出现问题。还有待观察的是,高分辨率是否真的很重要,因为现在我无论如何都会缩小视频的比例。为了一次播放多个视频,我无论如何都需要缩小比例,而且由于我们使用许多摄像机来渲染/播放单个“视频”,所以可以从多个较低分辨率的视频再次升级。

回到软件上来。两部分:处理流水线和播放器。其主要思想是使用人工智能来猜测每个视频中每一帧的距离图,然后对于每个视频中的每一帧,我们将创建一个MPI(多平面图像),其中每个平面包含特定距离的信息。这足以让播放器做它的事情,但我们需要将MPI编码回视频中,否则光场太大,无法播放。所以取而代之的是,我将在MPI中创建与深度/平面一样多的视频,每个视频将包括所有摄像机的深度的平面信息(通过将平面放在一个网格中)。如果每个视频的分辨率降低为640x360像素,并且我们有16个摄像头,则使用4x4网格图案的MPI视频的分辨率将为2560x1440像素。实际上不是太大,考虑到一些NVIDIA卡可以复制的最大分辨率是4096x4096px。但是有了10个深度,玩家将不得不实时地玩和处理其中的10个。

回到流水线:我将在第一次迭代中重用LLFF项目。LLFF使用Colmap来计算每个摄像头的位置,然后使用经过训练的人工智能来计算距离图,并从那里生成MPI,这是我们将用来创建MPI视频(以及元数据)的输出。不幸的是,LLFF是用来处理静止图像的,所以仅仅使用LLFF肯定会在每个相机的位置以及距离地图中引入“跳跃”。然而,这只是LLFF的一个局限性,它是我们以后可以(当然)改进和修复的东西。实际上,通过阅读一些关于Colmap的内容,Colmap支持对齐,这可能会解决问题,至少在猜测相机位置方面是这样。我不得不说,我完全预料到了这一点,而我上一次的实验

如你所见,深度图相当粗略,所以我真的需要提高它的质量。

我还没有让球员上场,但我已经做了一些测试。其主要思想是利用GPU的能力。NVIDIA显卡有专门的硬件来加快视频解码速度,所以我只打算用它。我发现的一个限制是,许多视频格式缺乏对Alpha通道的支持,这在我的情况下非常重要。对于第一个版本,我不会使用Alpha通道。Alpha通道对于记录具有反射和半透明对象的内容很有用,因此这将是第一个版本的限制,但可以通过使用支持它们的视频格式(这很有挑战性,因为NVIDIA仅支持某些格式)或将Alpha通道编码为视频的另一部分来修复。我可能最终会做后者,但我的目标是速度,而不是我的第一个实现的准确性。

由Disqus提供支持的评论