NW' Blog
2026年7月2日 · 内容页面   |   📝编辑于2026年7月2日

Colmap + OpenSplat
P104部署记录

Multi-View 多视角图片生成 3DGS 高斯泼溅。完整记录三维重建工具链的搭建过程,包含 Colmap 参数调优、OpenSplat 环境配置与编译,以及 P104 显卡的实战经验。

Colmap + OpenSplat 部署预览

Colmap 参数调优

Colmap 直接从 GitHub 下载压缩包解压即可使用。但在实际重建过程中,平面中心容易出现大片空白,这通常意味着算法在那些区域「看不到」足够的特征点来进行匹配和三维重建。问题主要与 特征提取稠密重建 两个环节的参数设置有关。

下面是根据界面可优先尝试调整的参数组合,建议按顺序操作:

第一步:让算法「看」得更清楚(调整特征提取)

这部分调整是为了让 Colmap 在原本纹理贫乏的区域(如白墙、光滑地面)也能提取到足够多的特征点。

  • 调整位置:在 Colmap 界面中,找到 Feature Extraction(特征提取)选项。
  • 推荐修改
    • 提升特征数量:将 max_num_features 从默认的 8192 增加到 1600032000。这能让算法提取更多点,增加在空白区域找到特征的概率。
    • 捕捉更多细节:将 SiftExtraction.peak_threshold 从默认的 0.00667 降低到 0.0030.001。这会降低特征点检测的门槛,让算法能识别出更多细微的特征。
    • 适应视角变化:勾选 SiftExtraction.estimate_affine_shape。这能提升对大幅视角变化的适应能力,尤其适合环绕拍摄的场景。

第二步:让匹配更「宽松」和「精准」(调整特征匹配)

这部分调整是为了在保证质量的前提下,尽可能多地建立特征点之间的连接。

  • 调整位置:在 Feature Matching(特征匹配)选项下。
  • 推荐修改
    • 放宽匹配条件:将 max_ratio0.80 适当提高到 0.850.90。这个参数控制匹配的独特性,放宽后允许更多(可能质量稍低)的匹配进入,有助于连接稀疏区域。
    • 增加候选匹配:尝试将 guided_matching-1 改为 1 来启用。这会利用已有的几何信息引导搜索更多匹配点。
    • 保障基础匹配:将 min_num_matches15 提高到 3050。这能确保用于计算两视图几何的匹配点足够多,从而得到更稳健的模型。

第三步:从「点」到「面」,填补空洞(调整稠密重建)

如果前两步做完,稀疏点云(Sparse Reconstruction)仍有空洞,则需要在稠密重建(Dense Reconstruction)阶段进行修补。

  • 调整位置:在开始稠密重建前,点击 Options 按钮,进入 PatchMatch StereoFusion 标签页。
  • 推荐修改
    • 增大匹配窗口:将 window_radius 从默认的 5 增加到 79。更大的窗口能覆盖更多像素信息,提高在低纹理区域的匹配稳定性。
    • 手动设置深度范围:在 depth_mindepth_max 中,根据场景大致距离手动输入一个范围(如室内 0.510 米),而不是使用 -1 自动计算。这能有效避免算法因深度范围估计错误而产生大量空洞。
preview
meshed -- 使用MeshLab查看

OpenSplat 环境部署

环境设置

CUDA 11.8 原生不支持 Visual Studio 2022 (v17),会显示 "No CUDA toolset found",可以升级到 CUDA 12 。如果使用 CUDA 11.8 ,需要手动复制文件:


C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\extras\visual_studio_integration\MSBuildExtensions\
文件夹下的所有文件复制到
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\BuildCustomizations\
( 路径请根据实际安装位置调整)。共 4 个文件:

  • CUDA 11.8.props
  • CUDA 11.8.targets
  • CUDA 11.8.xml
  • Nvda.Build.CudaTasks.v11.8.dll

设置环境变量并安装 PyTorch:

bash
set DISTUTILS_USE_SDK=1
set CUDA_HOME=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8
set PATH=%CUDA_HOME%\bin;%PATH%
python -c "import os; print(os.environ.get('CUDA_HOME'))"

pip install torch==2.5.1+cu118 torchvision==0.20.1+cu118 --index-url https://download.pytorch.org/whl/cu118
pip install -v -e .

提示:需要 build 后使用。注意 Visual Studio 不要用 2026 的版本。Nanoflann、json、cxxopts、glm 需要联网下载,太慢了可以直接从 GitHub 下载解压。OpenCV 这里使用的版本是 4.9。

编译与构建

P104 的算力是 6.1(参考链接)。注意手动下载的包改成自己的位置。在 Developer Command Prompt for VS 2022 使用以下 CMake 命令进行编译:

bash
cmake -G "Visual Studio 17 2022" -A x64 \
  -DCMAKE_PREFIX_PATH="D:/Sware/libtorch;D:/Sware/opencv/build" \
  -DFETCHCONTENT_SOURCE_DIR_nanoflann=D:/Sware/nanoflann \
  -DFETCHCONTENT_SOURCE_DIR_json=D:/Sware/json \
  -DFETCHCONTENT_SOURCE_DIR_cxxopts=D:/Sware/cxxopts \
  -DFETCHCONTENT_SOURCE_DIR_glm=D:/Sware/glm \
  -DOpenCV_DIR=D:/Sware/opencv/build \
  -DCMAKE_CUDA_ARCHITECTURES=61 ..

cmake --build . --config Release

Build 好后运行 exe 时报错显示找不到 opencv_world490.dll,需要添加环境变量:

Powershell
$env:Path += ";D:\Sware\opencv\build\x64\vc16\bin"

运行与测试

使用 Colmap 生成数据集,然后通过 OpenSplat 进行高斯泼溅绘制:

1. 创建 Colmap 数据库并提取图像特征

bash
colmap feature_extractor --database_path dataset/colmap_output/database.db --image_path dataset/input --ImageReader.single_camera 1

2. 执行特征匹配(照片数量不多时用穷尽匹配)

bash
colmap exhaustive_matcher --database_path dataset/colmap_output/database.db

3. 进行稀疏重建(运动恢复结构)

bash
mkdir -p dataset/colmap_output/sparse
colmap mapper --database_path dataset/colmap_output/database.db --image_path dataset/input --output_path dataset/colmap_output/sparse

4. 进行稠密重建,生成更密集的点云

bash
colmap image_undistorter --image_path dataset/input --input_path dataset/colmap_output/sparse/0 --output_path dataset/colmap_output/dense --output_type COLMAP

colmap patch_match_stereo --workspace_path dataset/colmap_output/dense --workspace_format COLMAP --PatchMatchStereo.geom_consistency true

colmap stereo_fusion --workspace_path dataset/colmap_output/dense --workspace_format COLMAP --output_path dataset/colmap_output/dense/fused.ply

5. 复制 images 文件夹后运行 OpenSplat

需要把 dataset/colmap_output/dense/images 文件夹复制到 dataset/colmap_output/sparse/0 后再进行 GS 绘制。
进入 \OpenSplat\build\Release 中运行:

bash
.\opensplat.exe D:\temp\GS3D\dataset\colmap_output\sparse\0 -o output.splat

这个命令会处理 Colmap 数据,并生成一个名为 output.splat 的高斯泼溅文件。你也可以指定 .ply 作为输出后缀。


OpenSplat 关键参数调优

OpenSplat 提供了丰富的参数来适应不同场景。这里有几个最常用的:

  • -o [--output] arg:指定输出文件名,默认为 splat.ply
  • --cpu:强制使用 CPU 运行。当 GPU 显存不足时可以考虑,但速度会慢很多。
  • -d [--downscale-factor] arg:图像下采样因子。处理高分辨率图像(如 4K)时,可设为 2 或 4 来大幅降低显存占用。
  • -s [--save-every] arg:设置每隔多少步自动保存一次中间结果。防止训练意外中断导致成果丢失,建议设置为 20005000

后记

P104 无参数算 16 张手机照片的 OpenSplat,8G显存一会就满了,时间是以小时计的……
之后还是用现代点的显卡跑吧。

preview
我滴老伙计

Happy Reconstructing! 🎉