从零开始跑通3DGS教程:(二)SFM(colmap)计算初始点云和相机pose

写在前面

  • 本文内容
    本文所属《从零开始跑通3DGS教程》系列文章,将对colmap docker环境部署、使用进行说明

  • 平台/环境
    linux, nvidia GPU, docker

  • 转载请注明出处:
    https://blog.csdn.net/qq_41102371/article/details/146535488

系列文章

docker

安装docker

docker常用命令docker安装部分
可以使用以下命令,避免每次使用docker都需要sudo和密码

sudo usermod -aG docker $USER
sudo service docker restart
sudo chmod 666 /var/run/docker.sock

安装nvidia-docker依赖
Installing the NVIDIA Container Toolkit

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update

sudo apt-get install -y nvidia-container-toolkit

colmap docker

关于colmap

colmap是一个SFM(Structure From Motion)+MVS(Multi VIew Stereo)的开源框架,SFM用于从不同视角采集的多张图像中,恢复相机pose以及场景结构(稀疏点云),MVS用于对场景进行稠密重建(稠密点云)以及表面重建(Mesh)
其官方github为
https://github.com/colmap/colmap
官方文档
https://colmap.github.io/index.html

docker

这里使用现成的colmap docker镜像,如果熟悉环境配置、编译或者本地已有colmap的可以不用
pull docker:https://hub.docker.com/r/colmap/colmap/tags
这里选择colmap:20240219.29版本

docker pull colmap/colmap:20240219.29

创建新的容器,请修改你的宿主机路径"YOUR_PATH"

# docker pull colmap/colmap:20240219.29
xhost +
docker run \
    --name=colmap \
    -e DISPLAY=$DISPLAY \
    -w /working \
    -v YOUR_PATH/3dgs_tutorial:/working/3dgs_tutorial \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    --gpus all \
    --privileged \
    -it colmap/colmap:20240219.29 /bin/bash

创建成功如下
在这里插入图片描述
可以先输入exit退出
在这里插入图片描述

计算

本文相关:
3DGS需要的输入是相机pose,内参,以及场景的稀疏点云,因此我们将只会使用SFM相关的计算;
colmap提供图形化交互界面,以及命令行的方式,来完成SFM的计算

gui

进入图形化界面

启动容器

docker start colmap

进入容器,开启图形化界面

xhost +
docker exec -it colmap /bin/bash
colmap gui

可能会遇到界面是黑色的,ctrl+c多试几次就行
在这里插入图片描述
正常进入如图
在这里插入图片描述

使用

  • 新建project
    File—>New project—>New
    在这里插入图片描述
    选择之前放好的数据路径,输入database, 保存
    在这里插入图片描述
    然后选择图像路径为之前放好的images
    在这里插入图片描述
    然后点击save

  • 特征提取
    Processing—>Feature extraction
    在这里插入图片描述
    处理完成会显示时间
    在这里插入图片描述

特征匹配

Processing—>Feature matching
如果是无序图像,使用Exhaustive
在这里插入图片描述
如果是视频提取的有序图像,使用Sequential
在这里插入图片描述
这里truck数据是有序的数据,我们使用Sequential,点击run,等待处理完成

  • SFM重建
    Reconstruction—>start reconstruction
    等待计算完成
    在这里插入图片描述
  • 导出
cd 3dgs_tutorial/pro/truck
mkdir sparse

File—>export model
在这里插入图片描述
导出点云
File—>export model as
在这里插入图片描述

命令行

启动容器

docker start colmap

进入容器

docker exec -it colmap /bin/bash

计算

cd 3dgs_tutorial/pro
cp sfm.sh truck/
cd truck
sh sfm.sh

在这里插入图片描述
其中,sfm.sh为以下脚本,如果是无序图像,请使用colmap exhaustive_matcher

DATASET_PATH=$(pwd)
echo "processing: $DATASET_PATH"

colmap feature_extractor --database_path \
$DATASET_PATH/database.db --image_path $DATASET_PATH/images \
--ImageReader.camera_model=PINHOLE

# colmap exhaustive_matcher \
#    --database_path $DATASET_PATH/database.db
colmap sequential_matcher \
   --database_path $DATASET_PATH/database.db
   
mkdir $DATASET_PATH/sparse

colmap mapper \
    --database_path $DATASET_PATH/database.db \
    --image_path $DATASET_PATH/images \
    --output_path $DATASET_PATH/sparse

colmap model_converter \
--input_path $DATASET_PATH/sparse/0 \
--output_path $DATASET_PATH/sparse/0/points3D.ply \
--output_type PLY

权限

因为docker是root权限,生成的文件也就是,需要回到宿主机,修改权限
在这里插入图片描述

cd YOUR_PATH/3dgs_tutorial/scripts
sh chown.sh

在这里插入图片描述

可视化

在这里插入图片描述

将生成好的sparse/0/point3D.ply放进Cloudcompare可视化
在这里插入图片描述

编辑

下一步将进行坐标系编辑和尺度修正:
从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)
如果不关心坐标系和尺度,可以直接进行3dgs训练:
从零开始跑通3DGS教程:(五)3DGS训练

参考

文中已列出

主要做激光/影像三维重建,3DGS,配准、分割等常用点云算法,熟悉open3d、pcl等开源点云库,技术交流、咨询可私信

### 配置3D图形栈(3DGS)于Windows操作系统 #### 所需软件安装 为了成功构建运行3D图形栈,在Windows平台上需要准备一系列基础工具库。这常涉及以下几个组件: 1. **Visual Studio** 安装最新版本的 Visual Studio 是必要的,因为它提供了强大的 C++ 编译器支持 DirectX 的开发环境。建议选择带有桌面开发套件的工作负载选项[^1]。 2. **CMake** 这是一个跨平台的自动化构建系统生成器,用于管理编译过程并简化不同操作系统的项目配置工作流。可以从官方网站下载适合 Windows 版本的进制文件进行安装。 3. **DirectX SDK 或者最新的 Windows SDK** 对于现代应用程序来说,推荐使用包含在 Windows 8 及更高版本中的 Windows SDK 来替代旧版 DirectX SDK;它包含了创建高性能游戏其他多媒体应用所需的 API 文档资料。 4. **Python及其依赖包** Python 被广泛应用于计算机视觉领域内的脚本编写以及数据处理任务当中。对于从事3D重建工作的开发者而言,可能还需要额外安装诸如 OpenCV、NumPy 等第三方扩展模块来辅助完成特定功能实现。 5. **Git** Git 是一种分布式版本控制系统,方便团队协作管理追踪代码变更历史记录。过命令行界面或者 TortoiseGit 插件的形式集成到资源管理器右键菜单中均可满足日常需求。 6. **其他开源框架/库** 根据具体应用场景的不同,可能会涉及到更多专门用途的技术选型决策,比如 PCL(Point Cloud Library) 处理点云数据集、VTK(The Visualization Toolkit) 实现可视化效果渲染等。 7. **3D建模与编辑工具** Blender是一款免费且开源的强大三维设计软件,适用于模型制作、动画创作等多个环节。此外还有Maya、3ds Max等行业标准产品可供考虑选用取决于个人偏好或项目要求。 #### 设置步骤概述 - 下载并按照官方指南逐步引导完成上述各项必备程序的本地部署; - 创建一个新的解决方案工程目录结构,并利用 CMakeLists.txt 文件定义好整个项目的组织方式; - 将源码仓库克隆至指定路径下,确保能够顺利拉取远程分支更新内容; - 开始着手编写核心算法逻辑部分之前先搭建起基本测试用例框架以便后续验证正确性; - 掌握常用调试技巧如断点跟踪、日志输出等功能有助于提高解决问题效率; - 积极参与社区交流分享经验心得,及时获取前沿资讯动态保持技术敏感度。 ```python import numpy as np from sklearn import datasets, linear_model from matplotlib import pyplot as plt def load_data(): diabetes = datasets.load_diabetes() data = diabetes.data[:, np.newaxis, 2] # Split the data into training/testing sets train_x = data[:-20] test_x = data[-20:] # Split the targets into training/testing sets train_y = diabetes.target[:-20].reshape(-1, 1) test_y = diabetes.target[-20:].reshape(-1, 1) return train_x, train_y, test_x, test_y if __name__ == "__main__": X_train, y_train, X_test, y_test = load_data() regr = linear_model.LinearRegression() # Train the model using the training sets regr.fit(X_train, y_train) # Plot outputs plt.scatter(X_test, y_test, color='black') plt.plot(X_test, regr.predict(X_test), color='blue', linewidth=3) plt.xticks(()) plt.yticks(()) plt.show() ``` 此段代码并非直接关联于3D图形栈的具体实施细节,而是提供了一个简单的机器学习实例以供参考了解如何运用Python及相关科学计算库开展实验研究活动。实际工作中应当依据业务场景针对性地选取适当的方法论技术路线加以实践探索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺有缸的高飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值