利用Blender合成多视角图像For Nerf

.英伟达Instant Nerf简介

英伟达利用哈希编码将原版Nerf(neural radiance fields)神经辐射场长达数天的训练时间缩短到秒级,而且前向渲染达到了实时的程度,属于目前利用神经辐射场进行新视角合成相关研究中的STOA。因此笔者在Ubuntu中对其进行了复现测试。关于Instant Nerf的环境配置参阅官方Github介绍:https://github.com/NVlabs/instant-ngp,有非常详细的安装运行步骤。

配置完Instant Nerf后,利用官方数据(乐高)进行测试,下面的图片展示了原始数据集+相机旋转平移矩阵的样例。

利用Blender合成多视角图像For Nerf_第1张图片

乐高数据集的特性介绍如下:

1.每个视角图片中提前做了前景目标分割处理,只保留了乐高所在前景区域,其他为透明色;

2.Instant Nerf中使用的transform_matrix 是相机坐标系 to 世界坐标系 的旋转平移矩阵,与传统相机标定用的外参矩阵相反,二者互为逆矩阵;

运行:instant-ngp$ ./build/testbed --scene data/nerf_synthetic/lego/transforms_train.json 然后分别用Normal(法线)或Color(颜色)方式运行MarchCube选型,即可得到下图所示的重构结果。随着训练时间的增长,重构出的乐高越精细。

利用Blender合成多视角图像For Nerf_第2张图片

利用Blender合成多视角图像For Nerf_第3张图片

查看相机分布情况可以得到下图所示的每个视角对应的相机在场景中的位姿分布情况:

利用Blender合成多视角图像For Nerf_第4张图片

.思考

       在实际中要对同一个物体在上百个不同视角下进行拍摄需要足够的设备和繁琐的准备工作,那么,在没有复杂设备的情况下又想玩一玩Nerf,难道就不能构建自己的多视角数据集了吗?答案是:可以玩!

       我们可以利用blender软件,导入现成的3维模型,在场景中增加camera,然后让camera沿一定路径移动然后在不同视角抓拍目标,就可以得到3维模型在相应视角下的2维图像,这样可以大量获取不同视角下的图片,而且相机的外参是已知的,不需要去标定。有小伙伴要问了,你都有物体的三维模型了,还这么折腾不是脱裤子放P么,答案是你说的对!这么做只是在理想环境中验证Nerf的效果,况且许多的公开数据集也是合成的,另外,个人认为通过这种模拟的方式可以做一项有价值的工作是去优化和验证,多少个视角、怎么样的相机视角分布对于多视角三维重构更有效更经济。与本博文相关的3项工作罗列如下,供感兴趣的小伙伴引申阅读:

https://github.com/quan-meng/gnerf

https://lioryariv.github.io/idr/

https://yenchenlin.me/inerf/

下面开始上代码实操:

.测试

Blender软件请自行下载和安装。先双手捧上下面的测试用到的Blender工程。

百度网盘 请输入提取码,提取码:aa37

1. 利用Blender 200个不同视角抓拍这一块不明物体

利用Blender合成多视角图像For Nerf_第5张图片

利用Blender合成多视角图像For Nerf_第6张图片

            不明物体的STL文件                                                       导入Blender中

利用Blender合成多视角图像For Nerf_第7张图片

Blender中的工程和源码分享如下,有兴趣的小伙伴可以下载,替换其中的目标物体,自己进行验证。下面给出的是利用Instant Nerf生成的三维重构结果与真实值(GT)的比较。

利用Blender合成多视角图像For Nerf_第8张图片

利用Blender合成多视角图像For Nerf_第9张图片

这一张是合体以后的图像,可以比较明显的看出,虽然重构出的物体略显粗糙,但是在总体尺度和表面轮廓方面还是基本看的过去的。

利用Blender合成多视角图像For Nerf_第10张图片

2. 第二次减少视角的个数,做一组实验

利用Blender合成多视角图像For Nerf_第11张图片

这一次用Blender生成了16张不同视角抓拍物体的图像,送入Instant Nerf中去训练。

利用Blender合成多视角图像For Nerf_第12张图片

利用Blender合成多视角图像For Nerf_第13张图片

利用Blender合成多视角图像For Nerf_第14张图片

利用16视角的重构结果比200视角的要棱角性更强一些,毕竟少了成倍的信息,但是和真实值相比较,总体上还是能说得过去的。

利用Blender合成多视角图像For Nerf_第15张图片

注:本篇博客内容由团队博士生发表

你可能感兴趣的:(多视角三维重构,python,机器学习,开发语言)