当前位置: 首页 > article >正文

三维场景重建与3D高斯点渲染技术探讨

🏡作者主页:点击! 

🤖编程探索专栏:点击!

⏰️创作时间:2024年12月25日10点11分


神秘男子影,
  秘而不宣藏。
泣意深不见,
男子自持重,
   子夜独自沉。


文章源地址(有视频):链接icon-default.png?t=O83Ahttps://www.aspiringcode.com/content?id=17329323593007&uid=2e72486d067241b1b4896f33c8978478

三维场景重建概述

MVSNet

多视图立体视觉网络(MVSNet, Multi-View Stereo Network)是计算机视觉领域中用于从多视角图像中重建3D几何结构的一种深度学习方法。MVSNet通过利用卷积神经网络(CNNs)对输入的多张图像进行特征提取,然后基于这些特征来计算不同视角之间的匹配代价,并构建代价体积(cost volume)。接下来,通过3D卷积操作对这个代价体积进行处理,以预测每个像素的深度值,最终生成稠密的深度图和点云数据。

MVSNet的优势在于它能够自动地从大量未标注的多视角图像中学习到有效的特征表示,从而简化了传统MVS算法中复杂的参数调整过程。此外,由于其基于深度学习的设计,MVSNet还具有较好的泛化能力,可以适应不同类型的场景和摄像机配置。

Nerf

NeRF (Neural Radiance Fields) 是一种革命性的3D场景表示方法,它使用全连接神经网络来隐式地建模场景的辐射场(radiance field),即给定任意位置和观察方向时的颜色和密度。通过在训练过程中优化网络参数,NeRF可以从一组稀疏的2D图像中重建出高质量的3D场景,并支持自由视角的渲染。

NeRF的主要特点是它能够捕捉到非常精细的细节和复杂光照条件下的效果,这得益于其对场景内部结构的连续、分层表示。然而,这种高精度是以较高的计算成本为代价的,因为每次渲染新视角都需要重新评估整个神经网络。此外,NeRF模型通常需要大量的训练时间和存储空间。

3D gaussian-splatting

3D Gaussian-splatting是一种新兴的3D场景表示技术,它将场景中的每个点视为一个带有方向性的高斯分布。这种方法不仅记录了点的位置信息,还包含了颜色、法线方向以及不确定性等属性。相比传统的点云或网格模型,Gaussian-splatting能够在较低的内存占用下提供更加细腻和平滑的表面细节,特别适合于表现具有复杂几何结构和纹理变化的场景。

3D Gaussian-splatting结合了点云的灵活性和体素表示的紧凑性,同时提供了类似于NeRF的高质量渲染结果。更重要的是,它的渲染速度远快于NeRF,且更容易实现动态更新和交互,因此在实时应用中展现出巨大的潜力。

效果演示

3D gaussian-splatting原理

3D Gaussian-splatting的核心思想是将3D空间中的每一个点都用一个多维高斯分布来表示,其中每个高斯分布不仅描述了该点的空间位置,还编码了颜色、法线和其他物理属性。具体来说,一个高斯分布由均值向量μ(代表点的位置)和协方差矩阵Σ(定义了分布的形状和方向)组成。对于彩色高斯分布,还会包含一个额外的颜色向量c。

高斯分布的数学基础

渲染过程

当渲染一个场景时,3D Gaussian-splatting通过以下步骤来合成图像:

投影:首先,根据相机的姿态(位置和朝向),将所有高斯分布投影到图像平面上。这一步骤决定了哪些高斯分布会在最终图像中可见。
累积贡献:对于每个像素,累加所有投影到该像素上的高斯分布的贡献。这是通过计算每个高斯分布在该像素处的概率密度值并乘以其颜色来完成的。
融合与后处理:最后,对所有像素的累积贡献进行融合,得到最终的图像。可能还需要执行一些后处理步骤,如抗锯齿、色调映射等,以提高输出质量。

优化与加速

为了使3D Gaussian-splatting能够高效运行,研究者们提出了一系列优化策略,包括但不限于:

层次结构:构建多层次的数据结构,如八叉树或kd-tree,以便快速查找和剔除远离视线的高斯分布。
重要性采样:在渲染过程中,优先考虑那些对最终图像影响较大的高斯分布,减少不必要的计算。
GPU加速:充分利用现代图形处理器的强大计算能力,加速高斯分布的投影、累积等操作。

3D Gaussian-splatting模型部署

安装相关依赖

1.进入附件下面

conda env create --file environment.yml
conda activate gaussian_splatting

2.安装diff-gaussian-rasterization
下载如下两个项目,将第二个项目放在第一个项目的diff-gaussian-rasterization/third_party/glm

https://github.com/graphdeco-inria/diff-gaussian-rasterization
https://github.com/g-truc/glm/tree/5c46b9c07008ae65cb81ab79cd677ecc1934b903

然后安装依赖

pip install .

3.安装simple-knn
下载如下一个项目

https://gitlab.inria.fr/bkerbl/simple-knn

安装相应依赖

pip install .

自定义数据集

照片采集

你可以随意采取自己附近的物品图片,尽量50+张,放入附件./data/input文件夹下

数据转换

python convert.py -s ./data

模型训练

python train.py -s ./data -m ./output/mydata

效果演示

https://playcanvas.com/supersplat/editor/
将训练完的点云


http://www.kler.cn/a/453593.html

相关文章:

  • 【生产问题记录-Mysql分区】
  • 海外招聘丨 苏黎世联邦理工学院—机器学习在社会和政治科学中的应用博士后
  • 洛谷 P1014:Cantor 表
  • C语言基础:指针(数组指针与指针数组)
  • No.1免费开源ERP:Odoo自定义字段添加到配置页中的技术分享
  • 05.HTTPS的实现原理-HTTPS的握手流程(TLS1.2)
  • Spring Boot项目开发常见问题及解决方案(上)
  • 阿里推出QVQ 视觉推理模型,解锁视觉智能新维度
  • day17-18-进程管理和系统资源管理
  • GPT-O3:简单介绍
  • 【Ubuntu学习】另一个程序已锁定文件的一部分,进程无法访问
  • 从零开始C++棋牌游戏开发之第三篇:游戏的界面布局设计
  • Android Https和WebView
  • 命令行之巅:Linux Shell编程的至高艺术(上)
  • 链游破局之路:如何打破边缘化,获得更好的发展
  • [Unity Shader]【图形渲染】 Shader数学基础13-模型空间,世界空间和观察空间的转换
  • GPIO+TIM(无PWM)实现呼吸灯功能
  • Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena
  • mysql三种读取模式(普通、流式、游标)
  • node.js web框架koa的使用
  • Sealos Devbox 基础教程:使用 Cursor 从零开发一个 One API 替代品
  • ip-协议
  • OpenAI 12天发布会:AI革命的里程碑@附35页PDF文件下载
  • C语言练习-if语句
  • 【JavaEE】网络(6)
  • vulnhub靶场【shuriken】之node