拓冰建站拓冰建站
首页 / 资讯中心 / 正文

COLMAP 入门与实战:Structure-from-Motion 与 Multi-View Stereo 三维重建管线全解析

COLMAP 入门与实战Structure-from-Motion 与 Multi-View Stereo 三维重建管线全解析【免费下载链接】colmapCOLMAP - Structure-from-Motion and Multi-View Stereo项目地址: https://gitcode.com/GitHub_Trending/co/colmapCOLMAP 是一个通用的运动恢复结构Structure-from-Motion, SfM与多视图立体Multi-View Stereo, MVS三维重建管线支持图形界面与命令行两种交互方式能够从有序或无序图像集合中重建场景的稀疏与稠密三维结构。本文以仓库 doc/index.rst 官方文档首页为骨架结合安装指南、教程与源码系统讲解 COLMAP 的安装方式、核心功能、快速上手路径与完整命令行工作流读完后你将掌握从图像到稠密网格的端到端重建能力。COLMAP 项目概览COLMAP 的定位是一款general-purpose通用型SfM 与 MVS 管线既支持有序如视频序列、航线拍摄图像集合也支持无序如游客照片、众包图像图像集合的自动重建。它的主要特点包括双交互界面提供功能完整的图形用户界面GUI用于交互式重建同时提供可脚本化的命令行接口CLI用于自动化管线。免费开源采用新版 BSD 许可证可在 LICENSE 中查看完整许可文本许可仅针对 COLMAP 自身其 thirdparty 依赖各自独立授权详见 doc/license.rst。可复用库形态除了独立的应用程序外COLMAP 还构建为可复用的 C 库可被链接进自己的工程同时通过 PyCOLMAP 暴露大部分功能给 Python。从源码结构看COLMAP 的核心代码按功能模块组织在 src/colmap 下sfm/增量式与全局式映射器、mvs/PatchMatch 立体匹配与稠密融合、feature/SIFT/ALIKED/LoMa 特征提取与匹配、estimators/位姿估计、三角化、旋转平均等、controllers/自动重建、特征提取/匹配等高阶控制器以及ui/Qt 图形界面。命令行入口位于 src/colmap/exe/colmap.cc。安装 COLMAP官方文档首页提供了按平台选择的安装入口选择器指向 doc/install.rst 安装指南。COLMAP 支持多种安装途径可归纳为四类1. 预编译二进制Windows预编译二进制同时包含图形与命令行界面双击COLMAP.bat批处理脚本即可启动 GUI该脚本会自动设置库路径在cmd.exe或 PowerShell 中运行COLMAP.bat -h可列出所有可用命令。首次运行时 Windows Defender 可能因二进制未正式签名而弹出安全警告——这些二进制由 CI 自动构建若不信任可选择源码构建。Linux/Unix/BSD可通过系统包管理器安装注意默认仓库中的包通常不带 CUDA 或 HIP/ROCm 支持。macOSHomebrew 提供了预编译二进制brew install colmap即可。Docker仓库提供带 CUDA 支持的预构建镜像构建与运行说明见 docker/README.md 与 docker/Dockerfile。Anaconda/Mambaconda-forge 频道提供conda install colmap。2. 从源码构建从源码构建适用于所有主流平台Linux、macOS、Windows典型流程以 Debian/Ubuntu 为例完整依赖清单见 doc/install.rstgit clone https://gitcode.com/GitHub_Trending/co/colmap cd colmap mkdir build cd build cmake .. -GNinja -DBLA_VENDORIntel10_64lp ninja sudo ninja install几个关键构建选项GPU 加速CUDA至少 11.X为推荐依赖。配置时通过-DCMAKE_CUDA_ARCHITECTURESnative仅本机运行默认、all/all-major可分发到其他机器或具体架构号如75指定。AMD GPU 可改用 HIP/ROCm 后端-DCUDA_ENABLEDOFF -DHIP_ENABLEDON -DCMAKE_HIP_ARCHITECTURESgfx90aCUDA_ENABLED与HIP_ENABLED互斥该后端当前加速稠密重建的patch_match_stereo。BLAS 后端BLA_VENDORIntel10_64lp指示 CMake 使用 Intel MKL 的 BLAS 实现若改用 OpenBLAS 需选择 OpenMP 版本。Boost 版本约束COLMAP 使用boost::unordered的 flat/node hash map 承载性能关键的 scene 与 SfM 容器且这些容器是公共头文件的数据成员构成 ABI 的一部分boost::unordered_node_map需要 Boost 1.84系统 Boost 过旧时会自动下载固定版本并本地构建约 100 MB可用-DFETCH_BOOSTOFF强制要求系统 Boost。共享库默认构建静态库可加-DBUILD_SHARED_LIBSON改为动态库加快增量链接、减少磁盘占用但无法跨库做 LTO 优化。地址消毒器-DASAN_ENABLEDON -DTESTS_ENABLEDON -DCMAKE_BUILD_TYPERelWithDebInfo建议配合调试符号使用。构建完成后即可运行colmap -h # 列出所有可用命令 colmap gui # 启动图形界面3. 作为 C 库集成COLMAP 安装后会自动将头文件安装到${CMAKE_INSTALL_PREFIX}/include/colmap、库文件到lib/colmap、CMake 配置到share/colmap。在你的工程中只需cmake_minimum_required(VERSION 3.10) project(SampleProject) find_package(colmap REQUIRED) # 或 find_package(colmap 3.4 REQUIRED) add_executable(hello_world hello_world.cc) target_link_libraries(hello_world colmap::colmap)对应示例源码位于 doc/sample-project其hello_world.cc演示了通过colmap::OptionManager解析命令行参数并调用colmap::StringPrintf输出结果。4. PyCOLMAP Python 绑定PyCOLMAP 将 COLMAP 的大部分能力暴露给 Python从重建管线到稳健几何估计器详见 doc/pycolmap/index.rstpip install pycolmap # Linux/macOS/Windows 预编译 wheel pip install pycolmap-cuda12 # 需要 CUDA 12 GPU 加速目前仅 Linux从源码构建 PyCOLMAP 时先按上述步骤从源码安装 COLMAP再在 python/pycolmap 目录执行python -m pip install .部分功能如代价函数还要求以同样方式安装 PyCeres。Python 侧的绑定入口见 src/pycolmap/main.cc。核心功能特性官方首页以功能卡片形式列出了 COLMAP 的六大核心能力下面逐一展开。Structure-from-Motion稀疏重建稳健的增量式 SfM从有序或无序图像集合中恢复相机位姿与稀疏三维结构是 COLMAP 的看家本领。SfM 流程传统上分为三个阶段特征检测与提取、特征匹配与几何验证、结构与运动重建对应模块见 src/colmap/feature 与 src/colmap/sfm/incremental_mapper.cc。增量式重建的典型特点是先用初始图像对播种seeding重建再逐张注册新图像、三角化新点、过滤外点并周期性执行光束法平差Bundle Adjustment——完整流程见 doc/tutorial.rst。若所有图像无法注册进同一个模型COLMAP 会尝试重建多个模型可通过model_merger命令合并共享图像的模型。Multi-View Stereo稠密重建基于 PatchMatch 立体匹配与立体融合的稠密重建输出精细的稠密点云与网格。MVS 以 SfM 的输出为输入为每幅图像计算深度图与法向图融合多视图的深度/法向信息得到带法向的稠密点云再通过screenedPoisson 曲面重建或 Delaunay 重建恢复场景表面几何。核心实现位于 src/colmap/mvs/patch_match.cc 与 src/colmap/mvs/fusion.cc。生成的网格可选地通过QEMQuadric Error Metric简化mesh_simplifier命令降低面片复杂度并可通过多视图纹理映射mesh_texturer命令算法依据 Waechter 等人的工作为每个面片指派最优视角图像生成带 UV 坐标的纹理图集。图形与命令行界面一个可执行文件同时内置 GUI 与 CLI。GUI 提供交互式重建Reconstruction菜单下的 Start、Multi-view stereo 等操作细节见 doc/gui.rstCLI 提供colmap help可枚举的全部命令细节见 doc/cli.rst。两者共享同一套选项系统——选项既可作为命令行参数直接传入也可通过--project_path path/to/project.ini加载.ini项目配置文件。PyCOLMAPPython 绑定PyCOLMAP 暴露了从重建管线到稳健几何估计器的大部分 COLMAP 功能便于在 Python 生态中编写自动化脚本与自定义流程如 python/examples/custom_incremental_pipeline.py 展示的自定义增量式管线。其 API 文档位于 doc/pycolmap/pycolmap.rst。Camera Models Rigs相机模型与多相机平台COLMAP 支持多种针孔与畸变相机模型SIMPLE_PINHOLE、PINHOLE、OPENCV、FULL_OPENCV、RADIAL 等完整列表见 doc/cameras.rst模型实现见 src/colmap/sensor/models.h并支持多相机 rig刚性平台上相对位姿固定的多相机组合。自 COLMAP 3.12 起引入的概念详见 doc/concepts.rst 与 doc/rigs.rst提供了对多传感器平台的规范化建模Sensor传感器采集环境数据的设备最常见是相机未来可扩展 IMU、GNSS 等Rig平台多个相对位姿固定的传感器组成的刚性装配例如双目相机、头戴式 AR/VR 设备、自动驾驶传感器套件也可建模用于拼接无缝 360° 全景图的虚拟相机阵列每个 rig 有且仅有一个参考传感器定义其原点Frame帧某个时间戳下 rig 的一次采集快照包含一个或多个传感器的测量例如双目视频的每一帧即同一时刻两幅图像的集合。COLMAP 为每帧优化一个位姿而非每张图像一个位姿。这些概念向后兼容不影响传统单相机场景的默认用法输出中对应rigs.bin与frames.bin文件。Datasets Formats数据集与数据格式COLMAP 提供开箱即用的示例数据集见 doc/datasets.rst并具备文档完善的输入/输出格式见 doc/format.rst以便与第三方工具集成。所有中间数据特征、匹配、相机、图像注册信息统一存储在自包含的 SQLite 数据库文件中格式见 doc/database.rst实现见 src/colmap/scene/database_sqlite.cc重建结果则以cameras.bin、images.bin、points3D.bin等二进制/文本文件组织。快速上手Getting Started官方首页给出三步入门流程安装 COLMAP使用安装选择器获取推荐安装命令或下载预编译二进制或从源码构建见 doc/install.rst。准备数据下载提供的示例数据集见 doc/datasets.rst或使用自己的图像。一键自动重建使用automatic reconstruction工具单击即可构建模型见 doc/tutorial.rst 的 Quickstart 章节。自动重建的目录布局在 GUI 中选择Reconstruction Automatic Reconstruction指定 workspace 文件夹即可。例如图像位于path/to/project/images选择path/to/project作为 workspace 后输出目录结构如下── images │ ── image1.jpg │ ── image2.jpg │ ── ... ── sparse │ ── 0 │ │ ── rigs.bin │ │ ── cameras.bin │ │ ── frames.bin │ │ ── images.bin │ │ ── points3D.bin │ ── ... ── dense │ ── 0 │ │ ── images │ │ ── sparse │ │ ── stereo │ │ ── fused.ply │ │ ── meshed-poisson.ply │ │ ── meshed-delaunay.ply │ │ ── meshed-advancing-front.ply │ ── ... ── database.db其中sparse/存放各重建分量的稀疏模型dense/存放对应的稠密模型。稠密点云fused.ply可通过File Import from ...导入 COLMAP 查看稠密网格则需用 Meshlab 等外部工具可视化。该工具的控制器实现位于 src/colmap/controllers/automatic_reconstruction.cc。命令行下可得到完全相同的布局colmap automatic_reconstructor \ --workspace_path path/to/project \ --image_path path/to/project/images手动控制完整命令行工作流若需对重建过程/参数进行更细粒度的控制可将自动重建拆解为如下命令序列全部细节见 doc/cli.rstDATASET_PATH/path/to/project # 1. 特征提取 colmap feature_extractor \ --database_path $DATASET_PATH/database.db \ --image_path $DATASET_PATH/images # 2. 特征匹配小规模数据集用穷举匹配 colmap exhaustive_matcher \ --database_path $DATASET_PATH/database.db # 3. 增量式稀疏重建 mkdir -p $DATASET_PATH/sparse colmap mapper \ --database_path $DATASET_PATH/database.db \ --image_path $DATASET_PATH/images \ --output_path $DATASET_PATH/sparse # 4. 图像去畸变 mkdir -p $DATASET_PATH/dense colmap image_undistorter \ --image_path $DATASET_PATH/images \ --input_path $DATASET_PATH/sparse/0 \ --output_path $DATASET_PATH/dense \ --output_type COLMAP \ --max_image_size 2000 # 5. PatchMatch 立体匹配几何一致性开启 colmap patch_match_stereo \ --workspace_path $DATASET_PATH/dense \ --workspace_format COLMAP \ --PatchMatchStereo.geom_consistency true # 6. 深度图/法向图融合为稠密点云 colmap stereo_fusion \ --workspace_path $DATASET_PATH/dense \ --workspace_format COLMAP \ --input_type geometric \ --output_path $DATASET_PATH/dense/fused.ply # 7. 网格重建Poisson / Delaunay / Advancing Front 三种 colmap poisson_mesher \ --input_path $DATASET_PATH/dense/fused.ply \ --output_path $DATASET_PATH/dense/meshed-poisson.ply colmap delaunay_mesher \ --input_path $DATASET_PATH/dense \ --output_path $DATASET_PATH/dense/meshed-delaunay.ply colmap advancing_front_mesher \ --input_path $DATASET_PATH/dense \ --output_path $DATASET_PATH/dense/meshed-advancing-front.ply # 8.可选网格简化 colmap mesh_simplifier \ --input_path $DATASET_PATH/dense/meshed-poisson.ply \ --output_path $DATASET_PATH/dense/meshed-poisson-simplified.ply \ --MeshSimplification.target_face_ratio 0.25 # 9.可选基于去畸变图像生成纹理 colmap mesh_texturer \ --workspace_path $DATASET_PATH/dense \ --input_path $DATASET_PATH/dense/meshed-poisson.ply \ --output_path $DATASET_PATH/dense/textured任意命令都可用-h, --help参数查看其全部选项。COLMAP 还支持优雅停机与断点续跑feature_extractor、mapper、patch_match_stereo、stereo_fusion等命令会协同处理SIGINT/SIGTERM在安全点停止并写入可用结果特征提取与匹配可对同一数据库重跑同一命令继续PatchMatch 重跑时会跳过已完成的深度/法向图被中断的增量重建可通过--input_path续跑。重建实战要点结合教程 doc/tutorial.rst以下几个实操细节能显著影响重建质量拍摄建议图像需有良好纹理避免白墙、空桌面光照条件相近避免逆光、透过门窗拍摄等高动态范围场景避免光滑表面高光每个物体至少出现在 3 张图像中从不同视点拍摄不要只在同一位置旋转相机但也要保证一定比例的相近视角视频输入建议降采样帧率。特征提取默认提取 SIFT 特征GPU 或 CPU。带 CUDA 支持构建时 GPU 提取无需接显示器、适合无头服务器OpenGL 回退路径需要显示器服务器上推荐 CPU 版本。此外可通过--FeatureExtraction.type选择 ALIKED、LoMa 等基于 ONNX 模型的学习型特征提取器见 src/colmap/feature/aliked.cc 与 src/colmap/feature/loma.cc。也可从文本文件导入特征格式为每特征一行X Y SCALE ORIENTATION D_1 ... D_128首行为NUM_FEATURES 128描述子取值 0~255图像左上角像素中心坐标为 (0.5, 0.5)。匹配模式选择见 doc/tutorial.rstExhaustive Matching图像两两匹配适合数百张以内的小数据集结果最佳耗时随图像数平方增长Sequential Matching适合视频等顺序采集的数据相邻帧匹配内置基于词汇树的回环检测--SequentialMatching.loop_detection_period、--SequentialMatching.loop_detection_num_images、--SequentialMatching.loop_detection_min_index_distance要求文件名顺序编号Vocabulary Tree Matching用词汇树找视觉近邻并做空间重排适合数千张以上大规模集合Spatial Matching按空间近邻匹配默认从 EXIF 提取 GPS 信息有准确先验位置时推荐Transitive Matching利用已有匹配的传递关系补全匹配图Custom Matching自定义图像对或导入匹配支持文本文件指定。SIFT 匹配可用 GPU 加速多 GPU 时用--FeatureMatching.gpu_index指定CPU 匹配用--FeatureMatching.use_gpu 0显著变慢。稀疏重建失败排查执行额外匹配穷举匹配、启用 guided matching、增大词汇树近邻数若初始化失败可在Reconstruction Reconstruction options Init手动选择有足够多视角匹配的初始图像对。数据库管理Processing Manage database可查看相机、图像与匹配通过Set camera为图像组共享内参用prior_focal_length标志提示是否信任焦距值实验室标定设为 1无先验时建议1.25 * max(width, height)。完整控制需直接操作 SQLite 数据库此时可仅用 COLMAP 做特征提取匹配、或用 COLMAP 只做增量重建。文档地图官方文档首页的导航toctree勾勒出完整文档体系均可作为深入学习入口主题文档路径安装指南doc/install.rst教程doc/tutorial.rst核心概念Sensor/Rig/Framedoc/concepts.rst查看器doc/viewer.rst特征提取与匹配doc/features.rst数据库格式doc/database.rst相机模型doc/cameras.rstRig 支持doc/rigs.rst输入输出格式doc/format.rst数据集doc/datasets.rst图形界面doc/gui.rst命令行界面doc/cli.rstPyCOLMAP APIdoc/pycolmap/index.rst常见问题doc/faq.rst变更日志doc/changelog.rst贡献指南doc/contribution.rst许可doc/license.rst参考文献doc/bibliography.rst支持与问题反馈使用中遇到疑问建议通过社区讨论渠道提问Bug 报告、功能请求与新增功能建议则提交到问题跟踪系统相应入口在官方文档首页 Support 一节。引用与致谢引用信息若在研究中使用了本项目请引用以下文献inproceedings{schoenberger2016sfm, author{Sch\{o}nberger, Johannes Lutz and Frahm, Jan-Michael}, title{Structure-from-Motion Revisited}, booktitle{Conference on Computer Vision and Pattern Recognition (CVPR)}, year{2016}, } inproceedings{schoenberger2016mvs, author{Sch\{o}nberger, Johannes Lutz and Zheng, Enliang and Pollefeys, Marc and Frahm, Jan-Michael}, title{Pixelwise View Selection for Unstructured Multi-View Stereo}, booktitle{European Conference on Computer Vision (ECCV)}, year{2016}, }若使用全局式 SfM 管线GLOMAP请引用inproceedings{pan2024glomap, author{Pan, Linfei and Barath, Daniel and Pollefeys, Marc and Sch\{o}nberger, Johannes Lutz}, title{{Global Structure-from-Motion Revisited}}, booktitle{European Conference on Computer Vision (ECCV)}, year{2024}, }若使用图像检索/词汇树引擎请引用inproceedings{schoenberger2016vote, author{Sch\{o}nberger, Johannes Lutz and Price, True and Sattler, Torsten and Frahm, Jan-Michael and Pollefeys, Marc}, title{A Vote-and-Verify Strategy for Fast Spatial Verification in Image Retrieval}, booktitle{Asian Conference on Computer Vision (ACCV)}, year{2016}, }致谢COLMAP 最初由 Johannes Schönberger 编写由他的博士导师 Jan-Michael Frahm 与 Marc Pollefeys 提供资助。当前核心维护团队包括 Johannes Schönberger、Paul-Edouard Sarlin 与 Shaohui Liu。PyCOLMAP 的 Python 绑定最初由 Mihai Dusmanu、Philipp Lindenberger 与 Paul-Edouard Sarlin 添加。项目还受益于无数社区贡献——包括 Bug 修复、改进、新功能、第三方工具与社区支持。此外COLMAP 构建于既有工作之上使用其中特定算法时除引用上文的 COLMAP 论文外还应引用源码中标注的原始作者并考虑引用主要第三方依赖最值得注意的是 ceres-solver、poselib、sift-gpu、vlfeat。【免费下载链接】colmapCOLMAP - Structure-from-Motion and Multi-View Stereo项目地址: https://gitcode.com/GitHub_Trending/co/colmap创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门