Colmap + OpenSplat
P104部署记录
Multi-View 多视角图片生成 3DGS 高斯泼溅。完整记录三维重建工具链的搭建过程,包含 Colmap 参数调优、OpenSplat 环境配置与编译,以及 P104 显卡的实战经验。
Colmap 参数调优
Colmap 直接从 GitHub 下载压缩包解压即可使用。但在实际重建过程中,平面中心容易出现大片空白,这通常意味着算法在那些区域「看不到」足够的特征点来进行匹配和三维重建。问题主要与 特征提取 和 稠密重建 两个环节的参数设置有关。
下面是根据界面可优先尝试调整的参数组合,建议按顺序操作:
第一步:让算法「看」得更清楚(调整特征提取)
这部分调整是为了让 Colmap 在原本纹理贫乏的区域(如白墙、光滑地面)也能提取到足够多的特征点。
- 调整位置:在 Colmap 界面中,找到
Feature Extraction(特征提取)选项。 - 推荐修改:
- 提升特征数量:将
max_num_features从默认的8192增加到16000或32000。这能让算法提取更多点,增加在空白区域找到特征的概率。 - 捕捉更多细节:将
SiftExtraction.peak_threshold从默认的0.00667降低到0.003或0.001。这会降低特征点检测的门槛,让算法能识别出更多细微的特征。 - 适应视角变化:勾选
SiftExtraction.estimate_affine_shape。这能提升对大幅视角变化的适应能力,尤其适合环绕拍摄的场景。
- 提升特征数量:将
第二步:让匹配更「宽松」和「精准」(调整特征匹配)
这部分调整是为了在保证质量的前提下,尽可能多地建立特征点之间的连接。
- 调整位置:在
Feature Matching(特征匹配)选项下。 - 推荐修改:
- 放宽匹配条件:将
max_ratio从0.80适当提高到0.85或0.90。这个参数控制匹配的独特性,放宽后允许更多(可能质量稍低)的匹配进入,有助于连接稀疏区域。 - 增加候选匹配:尝试将
guided_matching从-1改为1来启用。这会利用已有的几何信息引导搜索更多匹配点。 - 保障基础匹配:将
min_num_matches从15提高到30或50。这能确保用于计算两视图几何的匹配点足够多,从而得到更稳健的模型。
- 放宽匹配条件:将
第三步:从「点」到「面」,填补空洞(调整稠密重建)
如果前两步做完,稀疏点云(Sparse Reconstruction)仍有空洞,则需要在稠密重建(Dense Reconstruction)阶段进行修补。
- 调整位置:在开始稠密重建前,点击
Options按钮,进入PatchMatch Stereo或Fusion标签页。 - 推荐修改:
- 增大匹配窗口:将
window_radius从默认的5增加到7或9。更大的窗口能覆盖更多像素信息,提高在低纹理区域的匹配稳定性。 - 手动设置深度范围:在
depth_min和depth_max中,根据场景大致距离手动输入一个范围(如室内0.5到10米),而不是使用-1自动计算。这能有效避免算法因深度范围估计错误而产生大量空洞。
- 增大匹配窗口:将

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.propsCUDA 11.8.targetsCUDA 11.8.xmlNvda.Build.CudaTasks.v11.8.dll
设置环境变量并安装 PyTorch:
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 命令进行编译:
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,需要添加环境变量:
$env:Path += ";D:\Sware\opencv\build\x64\vc16\bin" 运行与测试
使用 Colmap 生成数据集,然后通过 OpenSplat 进行高斯泼溅绘制:
1. 创建 Colmap 数据库并提取图像特征
colmap feature_extractor --database_path dataset/colmap_output/database.db --image_path dataset/input --ImageReader.single_camera 1 2. 执行特征匹配(照片数量不多时用穷尽匹配)
colmap exhaustive_matcher --database_path dataset/colmap_output/database.db 3. 进行稀疏重建(运动恢复结构)
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. 进行稠密重建,生成更密集的点云
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 中运行:
.\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:设置每隔多少步自动保存一次中间结果。防止训练意外中断导致成果丢失,建议设置为2000或5000。
后记
P104 无参数算 16 张手机照片的 OpenSplat,8G显存一会就满了,时间是以小时计的……
之后还是用现代点的显卡跑吧。

Happy Reconstructing! 🎉