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

6 篇文章 8 订阅

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进行保存即可。

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zeeq_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值