Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于NeRF的三维实景重建技术探索

基于NeRF的三维实景重建技术探索

作者头像
一点人工一点智能
发布于 2024-04-29 03:46:00
发布于 2024-04-29 03:46:00
2.8K0
举报

转载自:​亚信科技新技术探索

编辑:东岸因为@一点人工一点智能公众号

NeRF作为一种新型的视场合成和三维重建方法,在多个领域中都有广泛的应用,如城市测绘、机器人技术、虚拟现实/增强现实、电影制作和游戏开发。本文重点介绍了NeRF的构建流程以及目前比较流行的NeRF三维实景建模库,旨在帮助读者更好地理解和应用NeRF三维实景重建技术,为NeRF三维实景重建技术落地提供参考。

01 引言

自然资源部于2022年8月发布了《实景三维中国建设总体实施方案(2022-2025年)》,该方案明确了建设任务、技术路线与方法、主要成果与汇集、组织实施等,并提出到2025年,50%以上的政府决策、生产调度和生活规划可通过线上实景三维空间完成,2035年这一目标提升至80%。这标志着实景三维将作为国家重要的新型基础设施,全面加速开展布局建设,未来的市场发展空间不可限量。

何谓实景三维?实景三维是对人类生产、生活和生态空间进行真实、立体、时序化反映和表达的数字虚拟空间,是新型基础测绘标准化产品,是国家新型基础设施建设的重要组成部分,为经济社会发展和各部门信息化提供统一的空间基底。

NeRF(神经辐射场)是一种神经网络模型,用于从2D图像中学习并生成连续的3D场景模型。利用NeRF技术,可以在二维数据的基础上自动化构建三维模型,并进行纹理映射、光照渲染等操作,生成具有真实感和视觉冲击力的实景三维模型,克服传统方法的限制,在实景三维领域具有广泛的应用前景。

02 NeRF概述

NeRF通过深度学习的方法,将三维空间表示为一组可学习且连续的辐射场。在已知视角下,对场景进行一系列的捕获(包括拍摄到的图像以及每张图像对应的内外参),不需要中间三维重建的过程,仅根据位姿内参和图像,合成新视角下的图像。不同于传统的三维重建方法把场景表示为点云、网格、体素等显式的表达,NeRF独辟蹊径,将场景建模成一个连续的5D辐射场隐式存储在神经网络中,只需输入稀疏的多角度的2D图像,就可以通过训练得到一个神经辐射场模型,根据这个模型可以渲染出任意视角下的清晰照片。

NeRF神经辐射场的优势主要包括:

高质量渲染:NeRF能够生成高度逼真的3D场景,使用神经网络模型以少量数据集为基础进行训练,从而生成高质量的渲染效果。

连续函数表示:NeRF使用连续函数表示3D场景,这种表示方法可以从任意角度进行渲染,产生令人惊叹的高质量渲染效果。

表达能力强:NeRF能够自然地表达物体的颜色和透明度,以任意精度和分辨率来表示3D模型,使得在3D重建和视图合成等任务上具有非常高的性能。

自监督学习:NeRF的训练过程不需要人工标注,仅通过一组2D图片(通常是同一个3D场景的不同视角的图片)作为输入,然后通过优化算法调整网络的参数,使得网络输出的3D辐射场能够最好地重现这组2D图片。

此外,因为NeRF生成的是连续的3D模型,而不是像传统的3D重建方法那样生成离散的3D体素或三角形网格,所以NeRF生成的模型可以具有更高的解析度和更细的细节。当然,NeRF也有一些局限性,例如训练和渲染过程需要大量的计算资源,而且对于有大量动态内容和复杂反射的场景,NeRF可能无法处理得很好。

03 NeRF构建过程

要构建NeRF,首先要从整个环境或物体周围的不同角度拍摄一系列照片。在某些情况下,录制视频更方便。这允许使用无人机捕获的视频或任何其他预先录制的内容制作NeRF,甚至可以使用这项技术重新捕获3D游戏内容作为NeRF。

通常来讲照片的生成质量比视频要好一些,前提是照片是进行特定拍摄,无明显模糊。视频操作则会更加简单一些,但是运动模糊会显著降低重建质量,为了达到最佳效果,慢慢移动手机,尽量避免快速移动,尤其是旋转。为了获得最佳效果,应该从尽可能多的独特视角捕捉物体或场景。此外,在拍摄时最好移动手机(在3D空间中),而不是从静止位置旋转它,站在同一个地方,在一个球体中向外捕捉通常不太好。

构建NeRF的流程如下:

1. 数据收集:收集一组2D图像,这些图像从不同的角度和位置捕获了同一场景。这些图片都是对同一3D场景的拍摄,所以在这个场景中,每个物体都会在多个图像中出现,只是视角和位置不同。

2. 预处理:对于每张图像,需要知道相机的参数,包括相机的位置和方向。这些参数可以用来确定从相机位置出发,经过图像上每个像素,向场景中射出的视线的方向。

3. 神经网络训练:使用这些数据训练一个深度神经网络。这个网络的目标是能够根据3D坐标和视线方向预测出那个位置的颜色和体密度。在训练过程中,使网络预测的颜色值和真实的2D图像尽可能一致,神经网络就能学习到场景的3D表示。而为了实现这个目标,通过比较网络预测的颜色和图像中的真实颜色来计算误差,然后通过反向传播算法来更新网络的参数。神经网络的输入是每个3D位置和相应的视线方向,输出是预测的颜色和密度值。

图1:NeRF过程
图1:NeRF过程

04 三维实景建模库介绍

目前比较流行的三维实景重建库有Luma AI、NVIDIA Instant NeRF、NeRFStudio三种。

· Luma AI

Luma AI是一家专注于3D媒体生成和应用的服务商,它的核心技术是NeRF。Luma AI网页版是可以免费使用的,网页版视频和图片(ZIP压缩包)体积最大限制5GB;视频转3D API单次收费1美元。

Luma AI支持导出GLTF、OBJ、点云,并且导出的GLTF、OBJ模型是带有纹理的;Luma AI提供了插件可以将NeRF与Unreal Engine相结合,使用该插件用户可以在Unreal Engine中加载Luma AI生成的三维模型。

图2是使用HUAWEI P40 Pro拍摄的实景视频,图3是通过Luma AI网页版训练的结果,图4是将Luma AI网页版训练结果导出,加载到Unreal Engine 5中的效果。

图2:手机拍摄视频
图2:手机拍摄视频
图3:Luma AI训练结果
图3:Luma AI训练结果
图4:Unreal Engine加载Luma AI训练结果
图4:Unreal Engine加载Luma AI训练结果

· NVIDIA Instant NeRF

NVIDIA Instant NeRF是一种将2D图像转换为3D场景的神经渲染技术,它基于NeRF模型。它极大地提高了3D捕获和共享的速度、易用性和范围,被认为是迄今为止最快的NeRF技术,它在2022年被美国《时代》周刊评为年度最佳发明。

NVIDIA Instant NeRF是开源项目,在GitHub上,目前提供了几种特定显卡型号的安装包,如果是其他型号的显卡,则需要下载源码进行编译。Instant NeRF可以导出自有格式.ingp,也可以导出Mesh,但是导出的Mesh没有纹理。

如果拍摄的是视频,需要使用colmap2nerf进行抽帧以及生成transform.json文件(记录每张图像的相机参数),处理后的数据才能被Instant NeRF训练。

图5是使用官方测试数据训练的结果,训练机器的显卡型号为:NVIDIA GeForce RTX3070。

图5:NVIDIA Instant NeRF训练结果
图5:NVIDIA Instant NeRF训练结果

· NeRFStudio

NeRFStudio是一个用于创建、训练和可视化神经辐射场(NeRF)的开源软件库。它提供了API,可以简化创建、训练和可视化NeRF的端到端过程。目前支持多种模型,其中Nerfacto是NeRFStudio提出的,是NeRFStudio的默认模型,也是最推荐使用的模型。

NeRFStudio没有提供安装包,如果想使用需要在GitHub上,下载源码进行编译。NeRFStudio支持导出Mesh、点云,下载扩展Volinga extension for NeRFStudio可以支持Unreal Engine,但是需要通过Volinga网站进行格式转换。

图6:NeRFStudio官方训练结果
图6:NeRFStudio官方训练结果

05 总结与展望

NeRF三维实景建模是一种利用神经网络技术对真实世界进行三维建模的方法,它通过分析大量的图像和视频数据,能够构建出高质量的三维模型,为各个领域的应用提供了广阔的可能性。

总的来说,NeRF三维实景建模是一种非常有前途的技术,未来可能会在更多的领域得到应用和发展。同时,随着技术的不断进步和应用场景的不断扩大,它也将会面临着更多的挑战和机遇。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaScript事件探秘
事件流描述的是从页面中接收事件的顺序。IE的事件流是事件冒泡流,而Netscape的事件流是事件捕获流
张张
2019/12/26
9370
【JS】395-重温基础:事件
事件流描述的是从页面中接收事件的顺序,通常有这样两种完全相反的事件流概念:事件冒泡流(IE团队提出)和事件捕获流(网景团队提出)。
pingan8787
2019/11/05
1.1K0
事件
事件 JavaScript和HTML的交互是通过事件实现的。JavaScript采用异步事件驱动编程模型,当文档、浏览器、元素或与之相关对象发生特定事情时,浏览器会产生事件。如果JavaScript关注特定类型事件,那么它可以注册当这类事件发生时要调用的句柄。事件是某个行为或者触发,比如点击、鼠标移动..... 当用户点击鼠标时 当网页已加载时 当图像已加载时 当鼠标移动到元素上时 当用户触发按键时... 事件流 事件流描述的是从页面中接收事件的顺序,比如有两个嵌套的div,点击了内层的div,这时候是内层
小胖
2018/06/27
1.4K0
事件
JavaScript与HTML之间的交互式通过事件实现的。 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间。可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码。
奋飛
2019/08/15
3.4K0
JavaScript 学习-30.HTML DOM0级事件和 DOM2级事件
# 前言 DOM0 级事件就是 html 元素添加onclick 属性,或者给元素添加onclick事件,但是同元素的同一事件只能绑定一个函数,否则后面的事件会覆盖前面的事件。 如果我们想一个元素绑定多次同一个时间,比如我想绑定2个onclick事件,2个都要生效,于是就有了DOM2 级事件,通过addEventListener绑定的事件。 为什么没有 DOM1 级事件,我也很好奇,DOM1 一般只有设计规范没有具体实现,所以一般没有所谓的DOM1 级事件。 DOM0 级事件 DOM0 级事件就是前面讲到的
上海-悠悠
2022/05/30
1.1K0
JavaScript 学习-30.HTML DOM0级事件和  DOM2级事件
事件监听函数,以及事件的捕获和冒泡机制
事件一般是用于浏览器和用户操作之间的交互,当用户执行某些特殊的操作时,浏览器给予反应,触发绑定的事件,事件流,事件发生时会在元素节点和根节点之间按照约定的顺序传播,事件经过的所有节点都会受到事件的影响,这个传播过程被称为DOM事件流
子舒
2022/06/09
1.3K0
事件监听函数,以及事件的捕获和冒泡机制
js 事件笔记
在Web中, 事件在浏览器窗口中被触发,执行事先绑定的事件处理器(也就是事件触发时会运行的代码块),对事件做出响应。 用户在浏览器的任何一个操作都会去触发一个事件,JavaScript采用异步事件驱动编程模型,当文档、浏览器、元素或与之相关对象发生特定事情时,浏览器会产生事件。
bamboo
2019/01/29
11.4K0
js 事件笔记
JavaScript事件处理程序
事件就是用户或者浏览器执行的某种操作。我们常用的点击,滚动视口,鼠标滑动都是事件,为响应事件而调用的函数被称为事件处理程序,在js中事件处理程序的名字以 on 开头。
大熊G
2022/11/14
6170
JavaScript事件
JavaScript事件 对于事件来讲,首先,我们需要了解这样几个概念:事件;事件处理程序;事件类型;事件流;事件冒泡;事件捕获;事件对象;事件模拟,事件方面的性能优化(事件委托、移除事件处理程序); 事件的概念 事件:指的是文档或者浏览器窗口中发生的一些特定交互瞬间。我们可以通过监听器(或者处理程序)来预定事件,以便事件发生的时候执行相应的代码。 事件处理程序:我们用户在页面中进行的点击这个动作,鼠标移动的动作,网页页面加载完成的动作等,都可以称之为事件名称,即:click、mousemove、loa
汤高
2018/01/11
2.1K0
JavaScript事件
关于DOM事件流、DOM0级事件与DOM2级事件
DOM 事件模型包括捕获和冒泡,捕获是从上往下到达目标元素,冒泡是从当前元素,也就是目标元素往上到 window
Leophen
2019/08/26
2.2K0
JavaScript的事件
javascript与HTML之间的交互是通过事件实现的。事件就是文档或浏览器窗口中发生的一些特定的交互瞬间。
小小鱼儿小小林
2020/06/24
1.6K0
JS事件流模型
事件捕获Event Capturing是一种从上而下的传播方式,以click事件为例,其会从最外层根节向内传播到达点击的节点,为从最外层节点逐渐向内传播直到目标节点的方式。 事件冒泡Event Bubbling是一种从下往上的传播方式,同样以click事件为例,事件最开始由点击的节点,然后逐渐向上传播直至最高层节点。
WindRunnerMax
2020/08/27
1.7K0
面试官:什么是js中的事件流以及事件模型?
我们先从字面意义上理解,事件我们已经知道了是什么,那流呢?我们看看百度对于流的解释
inline705
2022/03/01
2.1K0
面试官:什么是js中的事件流以及事件模型?
02-老马jQuery教程-jQuery事件处理
根据文章内容总结摘要。
老马
2017/12/27
6.6K0
02-老马jQuery教程-jQuery事件处理
深入理解事件
javascript 给 DOM 绑定事件处理函数总的来说有2种方式:在 html 文档中绑定、在 js 代码中绑定。下面的方式1、方式2属于在 html 中绑定事件,方式3、方式4和方式5属于在js代码中绑定事件,其中,方式4和5属于事件监听,而方式5是最推荐的做法。
Chor
2019/11/08
8830
深入理解浏览器事件模型的概念和原理
大家好,我是腾讯云开发者社区的 Front_Yue,本篇文章将带领大家深入探讨浏览器事件模型的概念和原理
Front_Yue
2024/01/29
8191
深入理解浏览器事件模型的概念和原理
JavaScript第十一弹——事件流!事件代理!我懂了!
Hello小伙伴们,好久不见,最近实在太忙了,所以没有更!今天回来更文突然发现了一件尴尬的事情,两个第九弹哇,好像也改不了题目呀,那我们今天只能直接第十一弹了
萌兔IT
2019/07/25
4970
JavaScript第十一弹——事件流!事件代理!我懂了!
深入理解 DOM 事件机制
本文主要介绍 DOM 事件级别、DOM 事件模型、事件流、事件代理和 Event 对象常见的应用,希望对你们有些帮助和启发!
小生方勤
2019/06/02
2.9K1
Web开发的基本功
#ThoughtWorkers好声音#第十五期 (图片:网络) 有些东西称为基本功,对于 Web 开发而言,事件处理模型便是其中的一个,我们经常会在代码里遇到阻止浏览器默认行为的做法。 成都办公室
ThoughtWorks
2018/04/16
1.4K0
Web开发的基本功
JS事件流
HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件、页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件。想要知道这些事件是在什么时候进行调用的,就需要了解一下“事件流”的概念。
前端逗逗飞
2021/04/30
8.7K0
JS事件流
相关推荐
JavaScript事件探秘
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档