Colmap 实用教程 —— Command-line Interface

news2024/11/28 22:46:11

https://colmap.github.io/index.html

Windows 通过 COLMAP.bat,Linux 通过 colmap 使用命令行调用 Colmap 工具。 

Structure-from-Motion 简要介绍

 从大范围来看的话,整个流程可以分成以下三个阶段:

  1. Feature detection and extraction
  2. Feature matching and geometric verification
  3. Structure and motion reconstruction

Colmap 三维重建处理流程

Colmap 提供了简单的集成三维重建方式方式 automatic_reconstructor,只需要提供工程文件路径和对应采集到的图像即可一键实现三维重建。

# The project folder must contain a folder "images" with all the images.
$ DATASET_PATH=/path/to/project

$ colmap automatic_reconstructor \
    --workspace_path $DATASET_PATH \
    --image_path $DATASET_PATH/images

 当然 Colmap 也提供了单步的重建方式,其中对应命令可以使用 -h 参数进行查看,比如 colmap feature_extractor -h。下面将分步骤详细介绍。

图像特征提取

$ colmap feature_extractor \
   --database_path $DATASET_PATH/database.db \
   --image_path $DATASET_PATH/images

feature_extractor 将基于提供的每张图像提取SIFT特征,并将特征存储在 database.db 中。同时,可以使用 feature_importer 加载已经提取的特征。

图像特征匹配

$ colmap exhaustive_matcher \
   --database_path $DATASET_PATH/database.db
  • exhaustive_matcher:针对少量图像(几百张量级),可以获得足够快且最好的重建结果。它将每张图像与其余所有图像进行匹配,不过 block size 可能限制同时加载到内存中的图像数量。
  • sequential_matcher:针对顺序采集的视频图像,由于相邻帧存在视觉上的重叠且没有必要进行完全匹配,它只匹配视频流中的相邻帧。同时,这种匹配方式能够基于 vocabulary tree 进行回环检测。最后,帧之间的前后关系由图像文件名给定,与数据集中的存储顺序无关。
  • vocab_tree_matcher:针对大量图像(几千帧量级),可以通过提供 vocabulary tree 从而快速检索视觉上最相近的图像进行匹配。
  • spatial_matcher:针对能够提供准确定位信息的图像,可以通过对应图像采集时的 GPS 信息从而仅匹配空间位置上相近的图像。
  • transitive_matcher:基于传递规则使用已有的特征匹配关系确定更完全的匹配图,即 A 与 B 匹配,B 与 C 匹配,那将直接匹配 A 和 C。
  • Custom Matching:通过 text 文件指定图像的匹配关系,如果是导入的特征可以进一步指定两张图像之间特征的匹配关系。

稀疏三维重建

$ colmap mapper \
    --database_path $DATASET_PATH/database.db \
    --image_path $DATASET_PATH/images \
    --output_path $DATASET_PATH/sparse
  • mapper:在执行特征提取与匹配后通过 sfM 进行稀疏三维重建与构图。
  • hierarchical_mapper:在执行特征提取与匹配后通过 hierarchical SfM 进行稀疏三维重建与构图。首先将整个场景拆分成部分重叠的多个子场景,然后通过独立并行的方式分别重建,最后进行融合。建议通过此方式建图后执行几次 point triangulation 和 bundle adjustment。

图像去畸变

$ mkdir $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

对原始图像进行去畸变,并且支持导出去畸变图像用于 MVS、CMVS 和 PMVS 进行稠密重建。

稠密三维重建

$ colmap patch_match_stereo \
    --workspace_path $DATASET_PATH/dense \
    --workspace_format COLMAP \
    --PatchMatchStereo.geom_consistency true

在使用 image_undistorter 初始化工作空间后,使用 MVS 进行稠密三维重建或建图。

  • $ colmap stereo_fusion \
        --workspace_path $DATASET_PATH/dense \
        --workspace_format COLMAP \
        --input_type geometric \
        --output_path $DATASET_PATH/dense/fused.ply

融合 patch_match_stereo 的结果形成一个上色点云。

$ 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
  • poisson_mesher:使用 Poisson 表面重建生成彩色点云 mesh
  • delaunay_mesher:基于 Delaunay 三角剖分和可见性投票,使用 graph cut 对重建的稠密和稀疏点云生成 mesh。

其他命令行介绍

图像增删

  • image_rectifier:Stereo rectify cameras and undistort images for stereo disparity estimation.
  • image_filterer:基于稀疏重建过滤图像
  • image_deleter:从稀疏重建中删除指定图像
  • image_registrator:在 mapper 建图之后注册新的图像到现有模型中。其中不会执行 bundle adjustment 和 triangulation。

模型操作

  • model_analyzer:打印重建结果的统计分析。
  • model_aligner:Align/geo-register model to coordinate system of given camera centers.
  • model_orientation_aligner:使用曼哈顿世界假设对齐模型的坐标系。
  • model_converter:将 COLMAP 格式导出为 PLY 或 NVM 格式。
  • model_cropper:按照指定 bounding box 裁切模型,其中 BBox 可以通过 GPS 或者模型坐标系给出。
  • model_splitter:Divide model in rectangular sub-models specified from file containing bounding box coordinates, or max extent of sub-model, or number of subdivisions in each dimension.
  • model_merger:融合存在共同注册图像的两个不连续重建。

重建结果优化

  • point_triangulator:使用数据集中的所有匹配特征对现有模型中的所有注册图像观测进行三角化。
  • point_filtering:基于 minimum track length, maximum reprojection error 的标准滤除模型中的稀疏点。
  • bundle_adjuster:在现有重建场景上执行全局 bundle adjustment。在执行 image_registrator 或需要优化内参时执行。

数据集操作

  • database_creator:生成一个空的 COLMAP SQLite 数据集,其中包含必要的数据库信息。
  • database_merger:将两个数据集融合,其中同 id 的图像和相机会被作为不同进行处理。

vocabulary tree 相关

  • vocab_tree_builder:基于数据集中的提取图像生成 vocabulary tree。这是一个离线过程只需要被执行一次,同时可以被用于其他数据集。 Note that, as a rule of thumb, you should use at least 10-100 times more features than visual words. 预训练的结果可以从 https://demuc.de/colmap/ 直接下载。同时也可以构建自己的 vocabulary tree 从而适配不同的 PR 和速度。
  • vocab_tree_retriever:基于 vocabulary tree 进行图像检索。

其他

  • gui:启动图形界面
  • project_generator:基于不同重建质量设置生成项目文件
  • color_extractor:提取模型所有点的平均颜色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MQ通道常用知识列举(一)

MQ的几个基本组件: 1. 什么是通道 通道是分布式队列管理器在IBM MQ MQI 客户端和IBM MQ服务器之间或两个IBM MQ服务器之间使用的逻辑通信链路。通道用于将消息从一个队列管理器移动到另一个队列管理器。 2, 启动通道 对发送方、服务器和请求方通道使用 MQSC 命令…

CentOS 7.6安装JDK8过程(通过官网下载压缩包方式)

Oracle官网JDK下载地址 JDK8下载地址 选择tar.gz压缩包进行下载 复制下载链接,登录服务器,执行wget xxxxx(刚刚复制的下载地址) 下载完毕后,执行解压命令tar -zxvf xxxxx.tar.gz 配置/etc/profile 执行命令vim /etc…

把Mybatis Generator生成的代码加上想要的注释

作者:王建乐 1 前言 在日常开发工作中,我们经常用Mybatis Generator根据表结构生成对应的实体类和Mapper文件。但是Mybatis Generator默认生成的代码中,注释并不是我们想要的,所以一般在Generator配置文件中,会设置不…

Java题目集

Java冒泡排序和查找冒泡排序,从小到达排列查找,某一个字符串输出如下数据输出杨辉三角形冒泡排序,从小到达排列 分析:数组 [15,21,20,35,10] 第 1 轮排序: 目标把最大数放在最后 第 1 次比较 [15,21,20,35,10] 第 2 次比较 [15,21,20,35,10…

目标检测 YOLOv5 - ncnn模型的加密 C++实现封装库和Android调用库示例

目标检测 YOLOv5 - ncnn模型的加密 C实现封装库和Android调用库示例 flyfish 文章目录目标检测 YOLOv5 - ncnn模型的加密 C实现封装库和Android调用库示例前言模型版本库的版本示例程序的编译环境模型的转换库的制作主要接口部分模型初始化部分推理的输入输出CMakeList的配置示…

LeetCode-878-第N个神奇数字

1、二分查找 如果我们用函数f(x)f(x)f(x)表示数字小于x的神奇数字的个数,显然我们可以得到如下的公式:f(x)⌊xa⌋⌊xb⌋−⌊xc⌋f(x)\left \lfloor \frac{x}{a} \right \rfloor\left \lfloor \frac{x}{b} \right \rfloor-\left \lfloor \frac{x}{c} \ri…

门店管理|火锅店数字化系统转型

火锅几乎是每个人的最爱,吃着火锅喝着酒,生活日子乐逍遥。在很多火锅店里,我们经常可以看见客人爆满。虽然这几天疫情的冲击导致不少餐饮商家生存很难,但随着对疫情的有效控制,餐饮行业正在回暖。 无论以前还是现在&am…

艾美捷 DetergentOUT GB-S10去垢剂的特点和多种应用

去垢剂,亦有称为清洁剂,主要成分是表面活性剂(部分场合即特指表面活性剂,可分阴离子、阳离子和中性去垢剂等多种类型,中性去垢剂在蛋白提取中应用的较多),根据实际需求有时也会包括研磨剂,pH调节剂&#xf…

Spring Cloud Alibaba(一)

整合nacos 一、项目结构small-shop为父工程&#xff0c;order(订单服务)、stock(库存服务) 二、父工程pom.xml文件&#xff0c;添加基础依赖&#xff0c;控制版本 <modules><module>order</module><module>stock</module></modules><pr…

数字时代,医疗健康企业如何通过数字营销创造用户价值

前言&#xff1a;数字化时代&#xff0c;数字营销为企业深入洞察用户需求、把握用户画像、与用户建立有效互动提供了可能性&#xff0c;从而帮助企业实现降本增效的精细化营销&#xff0c;大大提升企业的经营效率。对医疗健康企业来说&#xff0c;因其行业和需求的特殊性&#…

数据结构--单链表

1.定义 由于顺序表的插入删除操作需要移动大量的元素&#xff0c;影响了运行效率&#xff0c;因此引入了线性表的链式存储——单链表。单链表通过一组任意的存储单元来存储线性表中的数据元素&#xff0c;不需要使用地址连续的存储单元&#xff0c;因此它不要求在逻辑上相邻的…

携手!Kyligence 支持 Amazon EMR Serverless,赋能云上企业降本增效

近日&#xff0c;Kyligence 与亚马逊云科技宣布 Kyligence Cloud 4.6 正式支持 Amazon EMR Serverless&#xff0c;共同助力企业构建高效、低成本云上数据分析。今天&#xff0c;我们将为大家介绍 Kyligence Cloud 4.6 如何通过集成 Amazon EMR Serverless 提供端到端的云上数…

字节给我狠狠上了一课:危机来的时候你连准备时间都没有~

各大互联网公司的接连裁员&#xff0c;政策限制的行业接连消失&#xff0c;让今年的求职雪上加霜&#xff0c;想躺平却没有资本&#xff0c;还有人说软件测试岗位饱和了&#xff0c;对此很多求职者深信不疑&#xff0c;因为投出去的简历回复的越来越少了。甚至还有不少大厂直接…

shell的test命令和两种参数获取方式,详解getopts以及eval、exec、export、read、shift内置命令

一、linux里while [-n “$1”]这里的-n是什么意思? -n str&#xff0c;字符串不为null&#xff0c;长度大于零while [ -n “$1” ] 第一个参数不为空&#xff0c;返回TRUE执行while循环do … done 二、Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立&#x…

【web渗透思路】敏感信息泄露(网站+用户+服务器)

目录 一、信息泄露示例 1、示例&#xff1a; 二、泄露方式 1、原理&#xff1a; 三、泄露危害 1、危害&#xff1a; 四、泄露挖掘 1、爬虫文件 2、目录信息 3、越权访问 4、开发注释、js文件 5、错误提示 6、调试信息 7、备份等目录文件 8、配置不安全 9、版本控…

数字集成电路设计(五、仿真验证与 Testbench 编写)(五)

文章目录9. 编译预处理语句9.1 仿真时间标度10. Verilog HDL测试方法简介9. 编译预处理语句 这些在C语言中都有涉及&#xff0c;但是在硬件描述语言中相对用的不是特别多&#xff0c;比如说include&#xff0c;在语言用的特别多&#xff0c;但是在硬件描述语言很少include&…

【每天学习一点新知识】OWSAP TOP10

OWASP OWASP开放式Web应用程序安全项目&#xff08;open web application security project&#xff09;每年会通过确定企业面临的最严重的10类威胁&#xff0c;以此提高人们对Web应用程序安全的关注度。 2021年 A01 失效的访问控制 未对通过身份验证的用户实施恰当的访问控…

裸辞4个月,面试了30家公司,终于找到理想工作了

上半年裁员&#xff0c;下半年裸辞&#xff0c;有不少人高呼裸辞后躺平真的好快乐&#xff01;但也有很多人&#xff0c;裸辞后的生活五味杂陈。 面试30次终于找到心仪工作 因为工作压力大、领导PUA等各种原因&#xff0c;今年2月下旬我从一家互联网小厂裸辞&#xff0c;没想…

APS高级排产在冶金行业的应用

冶金工业是指对金属矿物的勘探、开采、精选、冶炼、以及轧制成材的工业部门。包括黑色冶金工业(即钢铁工业)和有色冶金工业两大类。随着业务量的不断扩大&#xff0c;仅具有传统的ERP系统和人工生产调度已逐渐不能满足精益生产改进的要求。建立高效的精益生产计划模型及其对应的…

Nginx模块开发之http handler实现流量统计(入门篇)

Nginx模块开发之http handler实现流量统计一、Nginx模块之http handler简介二、Nginx handler模块开发2.1、示例代码2.2、编写config文件2.3、编译模块到Nginx源码中2.4、修改conf文件2.5、执行效果三、Nginx的热更新总结后言一、Nginx模块之http handler简介 当nginx解析conf…