【菜狗学三维重建】TSDF三维重建隐式表达详细解释——20250413
三维重建的任务
将一系列二维图像提取信息,把全局构造出来成为三维。
一些常见的应用
1、原型设计
2、虚拟现实
3、辅助驾驶
4、定位与追踪(城市)
三维重建的方法:
(1)激光雷达可以直接获取深度和三维信息,但是成本很高。
(2)使用多个视角图像进行三维重建,成本低,比较容易。
三维重建基础:
Neural Recon的任务流程
传统任务流程:输入序列,深度估计,点云,融合
每一步都要保证误差较小,否则累计误差。
每次都是自己每一帧各自来做。
论文提出:不需要中间过程,只输入视频序列,利用神经网络来进行中间步骤。
输入不同帧前后有关系。
不使用高端设备和中间过程,直接用端到端的框架。
整体框架
1、关键帧选择:每个视频选择间隔几秒选一个帧来进行重建
2、输入序列:9张图
3、片段重建:利用9张图把三维重建出来
4、全局合成:考虑序列顺序,让整体看起来正常
核心是中间的网络,即利用图像信息 估计 TSDF值
1、特征的投影和投射:将图像的特征映射到重建的结果。
通过不同图像的关系找到之间的特征,对于多张图做卷积,一共九张图像
对于三维模型的某个点,对应了九张图的特征(例如每个图80维度)通过平均来融合。
2、片段合并:
直接合并有问题,各个片段都是单独做的,使用RNN类似的思想
下一个状态始终考虑前一个片段结果。
3、整体架构
由粗到细:先用大体素 预测场景,再逐步用小体素 不断调整细节。
每个体素概率低,丢弃,概率高,保留。
TSDF
已知:1、原始图片;2、对应深度;3、每张图片相机位姿;4、相机内参。
增量式计算:每多一张图像,对于其信息进行融合,不断更新和组合来生成 整体三维模型。
1、初始化体素
需要把重建的结果放到一块立方体当中(空间),每一个小块块叫做体素,每个体素插入一个值,这个值就是TSDF和权重。
2、TSDF值的含义
TSDF的计算
对于每一个体素,计算在世界坐标系的位置:
目前深度图对应于每个像素,需要用体素对应像素坐标位置以及深度信息。
世界坐标系——相机坐标系——像素坐标系
TSDF结果:
下图是一帧的结果,面前是正,面后是负。
TSDF的增量式:
每一步都进行更新,后一帧与前一帧进行组合
代码实战
一些小Tip:
①GitHub看一个项目,可以先看他的issues,里面会有各种报错的提问,数据集的提问,可以看到作者对于某个问题的回答。
②看readme来配置环境,所需要的一些准备工作。
代码实战:
1、文件夹内容:
__pycache__
存放 Python 编译后的缓存文件(
.pyc
),可忽略,不需要手动操作。
assets
作用:一般用于存放项目中使用的静态资源,比如可视化图像、预训练模型、演示数据等。
在重建项目中,可能包括重建结果示例、可视化用的 mesh 文件等。
config
作用:配置文件夹,通常存放
.yaml
或.json
格式的配置文件。包含模型参数、训练超参数、数据路径、网络结构配置等信息。
data
作用:数据加载与处理相关的代码。
通常包括数据读取器(如 ScanNet、TUM RGB-D),以及数据增强、TSDF 生成等功能。
datasets
作用:具体数据集接口封装,可能对不同数据源实现不同的数据加载逻辑。
常包含对数据格式的适配、文件路径管理、样本生成等。
models
作用:模型定义,包括 NeuralRecon 的网络结构。
可能包含:backbone 网络(如 ResNet、UNet)、深度估计模块、TSDF 融合模块、多视图融合逻辑等。
ops
作用:操作(operations)模块,通常是一些底层函数或 CUDA 加速模块。
包括 TSDF 融合操作、体素化处理、自定义损失函数、梯度处理等。
tools
作用:辅助脚本,例如训练、评估、推理、模型转换等。
常见文件如
train.py
、eval.py
、inference.py
,用于调用模型主流程。
后面没有继续做这方面研究,就没有再看……
——20250827
小狗照亮每一天