colmap多相机重建多场景及数据库数据快速修改方法

2023-05-16

1 colmap流程

1.1 新建项目

  首先打开colmap,然后创建新的project,其中数据库目录和名称自己选定,注意不要将它放到图像目录下即可。然后images选择的是图像目录(比如我这里是guangxi/section1),这个目录下应该包含有不同的文件夹,每个文件夹存放同一个相机拍摄的图像。注意,图像目录下除了待重建的图像之外,不要有别的文件。比如我这里有五个相机,每个相机拍摄有5527张图像,下图是guangxi/section1目录下的文件结构:
在这里插入图片描述
  
  选好之后点击save,如下图所示:
在这里插入图片描述
  

1.2 特征提取

  点击Processing - Feature extraction,打开如下界面:
在这里插入图片描述
  
  主要修改的内容包括:

  • Camera model:相机模型,根据实际需要进行选择,我这里选择OPENCV模型,它包括k1/k2/p1/p2四个畸变参数。
  • 勾选Shared per sub-folder复选框

  一般来说,其余选项保持默认设置即可,修改后的设置如下图所示:
在这里插入图片描述
  
  然后点击Extract,进行特征提取。在数据量很大的情况下,特征提取的速度是不稳定的,可能会一开始很快,一秒钟可以完成好几张,后面就有可能十几秒钟完成一张。这个现象我感觉可能跟数据库的数据写入速度有关,当提取数据缓存过多的时候,就会自动降低提取速度,先将缓存都写入数据库中。但是十几秒一张实在是太慢了,要是一直这个速度,两万多张图像得提取到猴年马月。因此,在速度比较慢的情况下,我就先将提取进程给中断了,这时候界面会一直卡着没法操作(因为colmap还在进行数据库数据写入),但是等一段时间后就能继续操作了,然后再次进行特征提取,速度就又会很快了。我这将近三万张图像的特征提取总共花了两三天时间吧。
  

1.3 特征匹配

  点击Processing - Feature matching,打开如下界面:
在这里插入图片描述
  
  这里有不同的提取方式,其中Exhaustive是穷举匹配,速度比较慢,在数据量很大的情况下是行不通的。因为我使用的是倾斜摄影测量影像数据,所以图像是带有GPS信息的,可以通过它来指导匹配。这种方式是Spatial,然后可以修改一下max_num_neighbors选项,意思是每张图像最多可以和邻近的多少张图像存在匹配关系。默认是50,我这里修改为200,可以根据实际情况进行修改。修改后如下图所示,然后点击Run运行即可。
在这里插入图片描述
  特征匹配也比较耗时,不过速度相对于特征提取是比较稳定的,所以我中途也没有手动将它断掉,总共花费的时间也是两天那样,跟特征提取差不多。
  

1.4 增量式重建

  首先需要进行一些设置。点击Reconstruction - Reconstruction options,可能需要修改的项目包括:

  • multiple models:是否生成多个模型,默认是勾选的,如果不需要colmap重建多个模型,记得将这个勾去掉!!!否则你可能会在漫长等待后突然发现,怎么突然只重建了这么几张影像然后就停止了?于是一脸懵逼地保存然后关闭colmap。千万别这么干!!!(血泪教训,我一开始就是不知道,然后只是将当前的小模型输出就把colmap关闭了,后来发现,是因为colmap已经把最大那个模型重建好了,然后因为默认勾了这个,它会继续从未加入的图像开始新一轮重建,而那个之前重建完毕的大模型,可以通过在右侧模型下拉框中选择获得,然后进行保存。我是第二次遇到这个问题后才知道的,一开始也踩坑了,相当于白跑大半天)。
  • max_num_models:最大模型数量,默认为50,也就是colmap最多会从这份数据中创建50个不同的模型出来。
  • min_model_size:最小模型包含的图像数量,默认为10。看需求进行修改,默认的话,也许你在获得一个大模型后,还会喜提一大堆没什么用的小模型。

  设置完成后,关闭该选项页,然后点击Reconstruction - Start reconstruction开始重建。

  

2 数据库修改

  colmap的数据库是可以直接通过ui界面的database management进行修改的,但是通过这种方式,每次只能修改一个单元格的数据,在需要修改的数据量很大的情况下,这将会是一件非常耗时的重复性劳动,且很有可能发生错漏。比如,我在跑数据的时候,就遇到这么一个问题,原本只是有五个不同镜头的倾斜摄影图像,且每个镜头拍摄的图像都放置在图像目录下的不同文件夹里了,按理说应该只会有五个相机模型,但是在提取特征点的时候,colmap给我创建了18个相机模型,这显然是不对的。因此,我需要自己去修改它的数据库文件。要修改的地方包括两个,一个是将cameras表里的多余相机模型删除,另一个是将images表里的camera_id进行正确对应。但是我的数据总共包含将近三万张照片,一张一张照片手动修改不太现实。
虽然我也不太熟悉数据库的操作,不过还好,这个需求比较简单,稍微搜一下sql语句的使用就可以了。首先,我们需要安装数据库管理软件sqlitebrowser(colmap使用的数据库也是sqlite)。ubuntu(windows系统下应该可以直接去官网下载即可)下的安装命令为:

sudo apt-get install sqlitebrowser

  安装完成后,在命令行继续执行:

sqlitebrowser

  即可打开sqlitebrowser界面。点击打开数据库,打开colmap的db文件,如下图所示:
在这里插入图片描述
  
  打开浏览数据界面,就可以选择查看每个表的数据了,如下图所示:
在这里插入图片描述
  
  双击表中的每个单元格,即可进行数据修改:
在这里插入图片描述
  
  但是这种方式效率太过低下,我们可以进入执行SQL标签页,在里面输入SQL语句,让系统帮忙修改:
在这里插入图片描述
  
  上图所示命令的含义是,更新images表格里image_id字段的值小于5527的数据中的camera_id字段的值为1。因为我每个相机都拍摄了5527张图像,所以这样就可以实现将第一个相机拍摄的图像对应的相机模型设置为同一个(camera_id=1)。同理,可以继续进行其他相机图像的相机模型id修改操作。执行SQL语句的速度非常快,修改上万条数据的耗时也只需要几毫秒,这不比手动一个一个修改香太多了。
  
  而删除cameras表里的多余相机模型,直接在浏览数据界面打开对应的表,选中记录并点击右上角删除记录即可。
在这里插入图片描述
  数据库修改完成后,点击写入修改按钮,或者按快捷键ctrl+s进行保存即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

colmap多相机重建多场景及数据库数据快速修改方法 的相关文章

  • Linux下Nacos安装集群配置及Mysql持久化配置

    安装配置1个ngix 43 3个nacos注册中心 43 1个mysql 一 Nacos下载安装 1 下载地址 xff1a https github com alibaba nacos releases tag 1 3 1 2 解压 把下载
  • centos 安装redis踩的两个坑

    redis 安装就不说 xff0c 面向百度编程 xff0c 主要记录下两个重要的点 xff1a 1 设置redis 密码 找到redis安装目录 xff0c 进入下面的bin目录 xff0c 找到redis conf文件 编辑redis
  • centos7安装mysql 8.0 简单全过程

    一 安装 依次执行以下命令 xff0c 遇到选项选Y span class token function sudo span yum localinstall https repo mysql com mysql80 community r
  • nacos注册地址服务名找不到问题记录

    项目构成 xff0c nacos 43 gateway 43 openfeigns xff0c 在做配置的时候使用服务名 xff08 spring application name xff09 找不到服务器 问题解决 xff1a 调用的微服
  • 做设计师还是程序员?一张图你就明白!

    平时大家相安无事 xff0c 可一旦项目滑了水 栽了坑 二重奏就开始没完没了的唱起来了 请看下图 xff1a 你的桌子是有什么 小编反手一摸 xff0c 还好小编的头发还再 你头发呢 xff1f 相信这里有很多学习java的朋友 xff0c
  • 查看数据库当前编码【Mariadb、Mysql、Flask】

    情景 在centos下部署flask项目 xff0c 使用的是mariadb xff0c xff08 本地mysql香香的 xff09 xff0c 用到sqlarchemy xff0c 插入前中文 xff0c 出入后查询乱码 xff0c 最
  • JVM之调优篇

    内存泄漏与内存溢出 内存溢出 指在程序申请内存时 xff0c 没有足够的内存可以分配 xff0c 就是OOM xff0c 即使垃圾回收之后也不能有足够的空间分配 内存泄漏 Memory Leak 是指在程序运行后 xff0c 没有释放所占用
  • 使用document解析xml文件

    在慕课上课时 xff0c 看到可以使用document来解析xml文件 xff0c 把上课的代码放出来 xff0c 先记录一下 大概步骤如下 xff1a 1 使用DocumentBuilderFactory 创建对象后再创建Document
  • 【STM32】HAL库开发教程(四)—串口FIFO使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 本文主要介绍STM32 HAL库开发中串口 FIFO的使用 一 开发步骤 1 Cubemx配置 在左侧引脚配置栏选择目标串口号在串口模式处配置串口模
  • mysql报错ORDER BY clause is not in SELECT list, references column ‘‘which is not in SELECT list解决方案

    mysql报错Expression 1 of ORDER BY clause is not in SELECT list references column 39 fusion m create time 39 which is not i
  • 文件管理

    彩蛋 操作系统总目录 戳我 文章目录 1 初始文件管理2 文件的逻辑结构无结构文件有结构文件顺序文件是否可以实现记录的随机存取变长记录定长记录 索引文件索引顺序文件多级索引顺序文件 3 文件目录文件控制块需要对目录进行哪些操作 目录结构单级
  • 设备管理

    彩蛋 操作系统总目录 戳我 文章目录 I O设备的基本概念与分类什么是I 0设备 I O设备分类按使用特性分类按照传输速度分类按照信息交换的单位分类 I O控制器I 0设备的机械部件I 0设备的电子部件 I 0控制器 I O控制器的组成内存
  • 进程管理

    彩蛋 操作系统总目录 戳我 进程 进程的概念 进程的定义 程序 就是一个指令序列 程序段 数据段 PCB三部分组成了进程实体 进程映像 一般情况下 xff0c 我们把进程实体就简称为进程 例如 xff0c 所谓创建进程 xff0c 实质上是
  • 哲学家进餐问题

    文章目录 哲学家进餐问题问题描述问题分析思想三代码小结 哲学家进餐问题 问题描述 一张圆桌上坐着5名哲学家 xff0c 每两个哲学家之间的桌上摆一根筷子 xff0c 桌子的中间是一碗米饭 哲学家们倾注毕生的精力用于思考和进餐 xff0c 哲
  • 进程同步和互斥

    彩蛋 操作系统总目录 戳我 文章目录 进程互斥的硬件实现方法中断屏蔽方法TestAndSet指令Swap指令小结 信号量机制信号量机制 整型信号量信号量机制 记录型信号量小结 用信号量机制实现信号量机制实现进程互斥信号量机制实现进程同步信号
  • Java Future

    Callable Doug Lea 大师 xff0c 在1 5的杰作 span class token comment 64 see Executor 64 since 1 5 64 author Doug Lea 64 param lt
  • 布隆过滤器

    网页黑名单 垃圾邮件过滤系统 爬虫网站判重 哈希函数 特征 xff1a 典型的哈希函数都有无限的输入值域 当给哈希函数传入相同的输入值时 xff0c 返回值一样 当给哈希函数传入不同的输入值时 xff0c 返回值可能一样 xff0c 也可能
  • mysql45讲知识框架图

    1 一条SQL查询语句是如何执行的 xff1f 在有些场景下 xff0c 执行器调用一次 xff0c 在引擎内部则扫描了多行 xff0c 因此引擎扫描行数跟rows examined并不是完全相同的 主要讲述mysql 服务器和存储引擎之间
  • session 和 cookie

    一 区别 存储位置不同 xff1a session 存储在服务器端 xff1b cookie 存储在浏览器端 安全性不同 xff1a cookie 安全性一般 xff0c 在浏览器存储 xff0c 可以被伪造和修改 容量和个数限制 xff1
  • R语言中的igraph包绘制网络图

    本文转自网络 R语言中的igraph包可以很方便地画出网络图 xff0c 在社交关系分析等领域发挥重要作用 xff0c 下面介绍包中一个重要的函数graph from data frame xff08 xff09 graph from da

随机推荐

  • OnNewIntent四种启动模式下的调用时机

    Activity启动模式 Intent Flags taskAffinity task和back stack总结 1 singleInstance模式 第一次进入 xff1a onCreate onStart 在栈顶再次进入 xff1a o
  • windows10 Ubuntu 双系统安装及美化详细步骤

    Windows 10 Ubuntu 双系统安装踩坑实录 写在前面背景介绍 硬件介绍安装 Ubuntu下载镜像文件 制作启动盘安装步骤 安装必备软件混凝土长方形实体逾越工具安装 Nvidia 显卡驱动远程连接工具即时通讯中文输入法 美化 Ub
  • 如何优雅地停止java程序

    方法一 span class token class name System span span class token punctuation span span class token function exit span span c
  • 删除数组里面的某一个值

    Array prototype remove span class token operator 61 span function span class token punctuation span val span class token
  • ASP.NET中实现点击不同菜单项,在当前页面显示其对应内容

    疑惑 xff1a 用ASP NET开发项目时 xff0c 若想要实现这样的界面 xff1a 顶部是导航栏 xff0c 有多个菜单项 xff0c 点击不同的菜单项后 xff0c 下方显示对应的内容页面 xff1b 或者是左侧是菜单栏 xff0
  • 解决error ‘XXX‘ is not defined no-undef且项目没有eslintrc.js文件问题

    问题描述 这是因为eslint的语法校验导致的问题 xff0c 文件是通过public的index html中 lt script src 61 34 xxxxxx js 34 gt lt script gt 引入的 xff0c 没有定义全
  • CentOS7 下MariaDB安装与简单配置(最新)

    前言 MySQL和MariaDB的区别 xff1a LAMP架构盛极一时 xff0c 这离不开MySQL的免费与易用 xff0c 但是在Oracle收购了Sun之后 xff0c 很多公司开始担忧MySQL的开源前景 xff0c 而最近Ora
  • JAVA基础知识(一)

    目录 1 java的数据类型类型之间的转换 xff08 自动转型 强制转型 特殊点 xff09 2 运算符2 1算术运算符2 2逻辑运算符2 3关系运算符2 4赋值运算符2 5三目运算符2 6位运算符 3 运算符的优先级4 表达式5 转义字
  • JAVA基础知识(二)

    目录 1 循环遍历2 排序算法2 1 冒泡排序2 2 选择排序2 3插入排序 3 数组的查找3 1顺序查找3 2二分查找 xff08 折半查找 xff09 4 Arrays工具类5 可变参数 1 循环遍历 JAVA中的常用的循环遍历有for
  • JAVA基础知识(三)

    目录 1 JAVA关键字1 1关键字 xff1a private1 2关键字 xff1a this1 3关键字 xff1a static1 4关键字 xff1a super1 5关键字 xff1a final 2 继承继承中的构造方法 3
  • JAVA基础知识(四)

    目录 1 抽象类 抽象方法2 接口interface3 多态4 对象转型5 内存分析6 设计原则7 单例设计模式 1 抽象类 抽象方法 1 抽象方法和抽象类必须使用abstract修饰符修饰 xff0c 有抽象方法的类只能被定义成抽象类 x
  • 基于mybatis-plus的代码自动生成工具(自定义模板)

    MyBatis Plus是一个MyBatis框架的增强工具 xff0c 在MyBatis的基础上只做增强不做改变 xff0c 为简化开发 提高效率而生 对于mybatis plus不了解的同学 xff0c 可以去MyBatis Plus官网
  • capabilities: ambient capabilities说明

    linux capability介绍 最早之前 xff0c linux对任务权限分为privileged processes xff08 UID等于0 xff0c 属于超级用户或者root用户 xff09 和unprivileged pro
  • 生死簿后台管理系统(有趣、放松下大脑)

    第一幕 xff1a 缘起 听说阎王爷要做个生死簿后台管理系统 xff0c 我们派去了一个程序员 996程序员做的梦 xff1a 第一场 xff1a 团队招募 为了应对地府管理危机 xff0c 阎王打算找 人 开发一套地府后台管理系统 xff
  • 年度最受欢迎的Python的书籍,还不来看看!

    Python是一种通用的解释型编程 xff0c 主要用于Web开发 机器学习和复杂数据分析 Python对初学者来说是一种完美的语言 xff0c 因为它易于学习和理解 xff0c 随着这种语言的普及 xff0c Python程序员的机会也越
  • 线程安全的实现方法

    1 互斥同步 互斥同步是一种常见也是最主要的并发正确性保障手段 xff0c 同步是指在多个线程并发访问共享数据时 xff0c 保证共享数据在同一个时刻只被线程使用 互斥实现方式有互斥量 xff0c 临界区 xff0c 信号量等手段 JAVA
  • CATIA卸载不完全,导致右击新建中有残留——注册表处理方法

    我通过计算机自带的 卸载程序 xff0c 卸载CATIA时 xff0c 出现 找不到指定文件 的情况 xff0c 又不想下载相关第三方软件 xff0c 遂尝试本地删除 首先删除安装目录下的文件 其次删除以下目录中的 Dassault Sys
  • BlackArch Linux安装VMware Tools教程

    BlackArch Linux安装VMware Tools教程 其实 xff0c 只要是Linux系统 xff0c 安装VMware Tools都是大同小异 xff0c 我曾经也给大家分享过一篇文章 xff1a VMware虚拟机 Linu
  • 二叉树的创建(C语言)

    树的基本性质和概念 1 p 61 q 43 1 其中p为顶点 xff0c q为边 2 结点的度 xff1a 子树的个数 xff0c 树的度 xff1a 结点度的最大值 3 连通且无圈 由于所有的树都可以转化为二叉树 xff0c 下列出二叉树
  • colmap多相机重建多场景及数据库数据快速修改方法

    1 colmap流程 1 1 新建项目 首先打开colmap xff0c 然后创建新的project xff0c 其中数据库目录和名称自己选定 xff0c 注意不要将它放到图像目录下即可 然后images选择的是图像目录 xff08 比如我