三维场景重建3D高斯点渲染复现

🍑个人主页:Jupiter.
🚀 所属专栏:传知代码
欢迎大家点赞收藏评论😊

在这里插入图片描述

在这里插入图片描述

目录

  • 三维场景重建概述
    • MVSNet
    • Nerf
    • 3D gaussian-splatting
  • 效果演示
    • 3D gaussian-splatting原理
    • 高斯分布的数学基础
    • 渲染过程
    • 优化与加速
  • 3D Gaussian-splatting模型部署
    • 安装相应依赖
    • 数据转换
    • 模型训练
    • 效果演示
    • 附件包含:


参考文献:需要本文的详细复现过程的项目源码、数据和预训练好的模型可从该地址处获取完整版:地址

三维场景重建概述

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
  1. 安装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/
将训练完的点云

在这里插入图片描述
拖入页面即可

附件包含:

源码可执行文件(exe、dmg等)部署文档

参考文献:需要本文的详细复现过程的项目源码、数据和预训练好的模型可从该地址处获取完整版:地址


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/501045.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小波滤波器处理一维信号-附Matlab源代码

⭕⭕ 目 录 ⭕⭕ 一、引言二、多分辨率分析原理2.1 概念解析2.2 尺度函数和小波函数的关系2.3 滤波器本质2.4 二维正交多分辨率分析 三、一维信号小波滤波器处理实例四、Matlab程序获取与验证 一、引言 Fourier变换无法同时描述和定位信号在时间和频率上的突变部分。小波变换的…

log4j2的Strategy、log4j2的DefaultRolloverStrategy、删除过期文件

文章目录 一、DefaultRolloverStrategy1.1、DefaultRolloverStrategy节点1.1.1、filePattern属性1.1.2、DefaultRolloverStrategy删除原理 1.2、Delete节点1.2.1、maxDepth属性 二、知识扩展2.1、DefaultRolloverStrategy与Delete会冲突吗?2.1.1、场景一&#xff1a…

vue v-for 数据增加页面不刷新

<div style"float:left;border:1px solid red;height:100px;width:600px;"><el-form-item label"多语言配置" style"width:700px;" prop"validTanleHead"><el-input style"width: 180px" placeholder"请…

Mac 版本向日葵退出登录账号

找遍整个软件&#xff0c;Mac 版本的向日葵甚至逆天到没有提供退出登录的功能… 随后我发现可以直接删除向日葵的配置文件达到退出登录的效果&#xff0c;具体操作如下&#xff1a; cd /etc # 确认存在 orayconfig.conf 文件 ls orayconfig.conf  # 删除 sudo rm -f oray…

双目视觉:reprojectImageTo3D函数

前言 reprojectImageTo3D 是 OpenCV 中用于从视差图生成三维点云的函数。它的原理是利用视差图和相机的校准参数&#xff0c;通过三角测量法&#xff0c;计算每个像素对应的三维坐标。以下内容根据源码分析所写&#xff0c;觉得可以的话&#xff0c;点赞收藏哈&#xff01;&am…

苍穹外卖04——Redis初入门 在店铺打烊or营业状态管理功能中的使用

Redis入门 redis简介 它以键值对的形式存储数据在内存中,并且以极高的性能和灵活性而著称,通常用于缓存、消息代理以及持久化数据。 - 基于内存存储,读写性能高- 适合存储热点数据(热点商品、资讯、新闻)- 企业应用广泛Windows版下载地址:https://github.com/microsoft…

No.1十六届蓝桥杯备战|第一个C++程序|cin和cout|命名空间

第一个C程序 基础程序 使用DevC5.4.0 写一个C程序 在屏幕上打印hello world #include <iostream> using namespace std;int main() {cout << "hello world" << endl;return 0; } 运行这个C程序 F9->编译 F10->运行 F11->编译运行 mai…

springboot实战(19)(条件分页查询、PageHelper、MYBATIS动态SQL、mapper映射配置文件、自定义类封装分页查询数据集)

引言&#xff1a; 该类博客的学习是基于b站黑马视频springbootvue视频学习&#xff01;具体围绕项目——"大事件"进行实战学习。 目录 一、功能介绍&#xff08;需求&#xff09;。 1、文章列表功能基本介绍。 2、条件分页查询功能与注意。 3、前端页面效果。&#x…

LoRA微调系列笔记

系列文章目录 第一章&#xff1a;LoRA微调系列笔记 第二章&#xff1a;Llama系列关键知识总结 第三章&#xff1a;LLaVA模型讲解与总结 文章目录 系列文章目录LoRA&#xff1a;Low-Rank Adaptation of Large Language Models目的&#xff1a;依据&#xff1a;优势&#xff1a;…

Python - 游戏:飞机大战;数字华容道

Pygame是一个利用SDL库的写的游戏库&#xff0c;SDL呢&#xff0c;全名Simple DirectMedia Layer&#xff0c;是一位叫做Sam Lantinga的大牛写的 SDL是用C写的&#xff0c;不过它也可以使用C进行开发&#xff0c;当然还有很多其它的语言&#xff0c;Pygame就是Python中使用它的…

【JVM】总结篇-字节码篇

字节码篇 Java虚拟机的生命周期 JVM的组成 Java虚拟机的体系结构 什么是Java虚拟机 虚拟机&#xff1a;指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 &#xff0c;是物理机的软件实现。常用的虚拟机有VMWare&#xff0c;Visual Box&…

GitHub 及 GitHub Desktop 详细使用教程(通俗易懂)

目录 Δ前言 一、Github教程 1.什么是Github&#xff1f; 2.仓库和对仓库的操作&#xff1a; 2.1 Repository&#xff08;仓库&#xff09; 2.2 Fork&#xff08;派生&#xff09; 2.3 Star&#xff08;收藏&#xff09; 2.4 Watch&#xff08;追番&#xff09; 2.5 Issue&am…

OpenLinkSaas使用手册-待办事项和通知中心

在OpenLinkSaas工作台上&#xff0c;你可以查看待办事项和未读通知。 待办事项 目前待办事项支持: 个人待办项目待办:在项目中指派给你的任务/缺陷Git待办:在Git仓库中指标给你的Issue,目前只有在AtomGit和Gitee账号登录时才支持。 通知中心 通知中心支持Git通知和邮件通知两种…

springboot集成阿里云短信服务

springboot集成阿里云短信服务 一.阿里云账号准备 流程:注册阿里云账号>短信服务>新增资质>新建签名>新建模版>申请秘钥>用代码测试 1.注册阿里云账号 2、登录成功后&#xff0c; ① 在首页搜索短信服务 ② 打开第一个搜索结果 ③ 免费开通 ④ 可以根据…

试题转excel;word转excel;大风车excel(1.1更新)

最近更新了大风车excel1.1版本 主要优化在算法层面&#xff1a; 1.0版本试题解析的成功率为95%&#xff0c;现在1.1版本已经优化到解析成功率为99% 一、问题描述 一名教师朋友&#xff0c;偶尔会需要整理一些高质量的题目到excel中 以往都是手动复制搬运&#xff0c;几百道…

python实现自动登录12306抢票 -- selenium

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码&#xff0c;但是都不是最新的&#xff0c;我也是从网上找别人的帖子&#xff0c;看B站视频&…

机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型

机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型 目录 机器学习之正则化惩罚和K折交叉验证调整逻辑回归模型1 过拟合和欠拟合1.1 过拟合1.2 欠拟合 2 正则化惩罚2.1 概念2.2 函数2.3 正则化种类 3 K折交叉验证3.1 概念3.2 图片理解3.3 函数导入3.4 参数理解 4 训练模型K折交…

文件本地和OSS上传

这里写目录标题 前端传出文件后端本地存储阿里云OSS存储上传Demo实现上传ConfigurationProperties 前端传出文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head&g…

《Vue3实战教程》37:Vue3生产部署

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 生产部署​ 开发环境 vs. 生产环境​ 在开发过程中&#xff0c;Vue 提供了许多功能来提升开发体验&#xff1a; 对常见错误和隐患的警告对组件 props / 自定义事件的校验响应性调试钩子开发工具集成 然而&#xff…

python制作打字小游戏

import pygame # 导入游戏模块 安装pygame import sys # 导入系统指令模块 import random # 导入随机数模块 pygame.init() #初始化游戏环境 wndpygame.display.set_mode((800,565)) #指定窗口大小 pygame.mixer.music.load(素材/SurvivalGame.mp3) #素…