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

写在前面

目录

系列文章

docker

安装docker

docker常用命令docker安装 部分

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

bash 复制代码
sudo usermod -aG docker $USER
sudo service docker restart
sudo chmod 666 /var/run/docker.sock

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

bash 复制代码
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版本

bash 复制代码
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

进入图形化界面

启动容器

bash 复制代码
docker start colmap

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

bash 复制代码
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
    等待计算完成
  • 导出
bash 复制代码
cd 3dgs_tutorial/pro/truck
mkdir sparse

File--->export model

导出点云

File--->export model as

命令行

启动容器

bash 复制代码
docker start colmap

进入容器

bash 复制代码
docker exec -it colmap /bin/bash

计算

bash 复制代码
cd 3dgs_tutorial/pro
cp sfm.sh truck/
cd truck
sh sfm.sh

其中,sfm.sh为以下脚本,如果是无序图像,请使用colmap exhaustive_matcher

bash 复制代码
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等开源点云库,技术交流、咨询可私信

相关推荐
杀生丸学AI2 天前
【世界模型】Captain Safari:位姿对齐3D记忆的世界引擎(CVPR 2026)
人工智能·大模型·aigc·safari·三维重建·3dgs·世界模型
sin°θ_陈7 天前
前馈式3D Gaussian Splatting 研究地图(路线三):大重建模型如何进入 3DGS——GRM、GS-LRM 与 Long-LRM 的方法转向
3d·aigc·gpu算力·三维重建·空间计算·3dgs·空间智能
sin°θ_陈7 天前
前馈式3D Gaussian Splatting 研究地图(路线二):几何优先的前馈式 3DGS——前馈式 3DGS 如何重新拥抱多视图几何
深度学习·3d·webgl·三维重建·空间计算·3dgs·空间智能
sin°θ_陈9 天前
前馈式3D Gaussian Splatting 研究地图(总览篇):解构七大路线,梳理方法谱系,看懂关键分歧与未来趋势
论文阅读·深度学习·算法·3d·aigc·空间计算·3dgs
sin°θ_陈9 天前
前馈式3D Gaussian Splatting 研究地图(路线一):像素对齐高斯的起点——pixelSplat 与 latentSplat 在解决什么
python·深度学习·3d·aigc·webgl·3dgs·空间智能
康谋自动驾驶11 天前
视觉重建到物理仿真,3DGS如何走向工程应用?
自动驾驶·可用性测试·3dgs·世界模型
做cv的小昊12 天前
结合代码读3DGS论文(10)——ICLR 2025 3DGS加速&压缩新工作Sort-Free 3DGS论文及代码解读
论文阅读·人工智能·游戏·计算机视觉·3d·图形渲染·3dgs
sin°θ_陈16 天前
行业调研——XGRIDS (其域创新):空间数据生产、资产化与工业工作流的真正价值
经验分享·笔记·深度学习·3d·金融·3dgs·空间智能
Watink Cpper22 天前
[项目构建]ubuntu24.04下从零部署limap步骤与问题解决方案
python·conda·三维建模·colmap·ubuntu24.04·三维线重建·limap