colmap软件用法

文档地址:Tutorial — COLMAP 3.11.0.dev0 documentation

background:

Structure-from-Motion

分为三个阶段(colmao软件也是按这个阶段进行划分解耦的):

  • Feature detection and extraction

  • Feature matching and geometric verification

  • Structure and motion reconstruction

操作软件的时候也是按照这三个部分来的,先提取特征(看样子是SIFT角点检测类的算法)、然后特征匹配和集合验证,最后是重建。

Multi-View Stereo

(Multi-View Stereo, MVS)利用(Structure from Motion, SfM)的输出来计算图像中每个像素的深度和/或法线信息。通过融合多个图像的深度图和法线图,MVS 可以生成场景的密集点云。使用融合点云的深度和法线信息,诸如(屏幕)泊松表面重建算法 [kazhdan2013] 等技术可以恢复场景的3D表面几何形状。

如何提高软件重建的效果?

  • 拍摄具有良好纹理的图像。避免完全无纹理的图像(例如,纯白的墙壁或空桌子)。如果场景本身没有足够的纹理,您可以放置额外的背景物品,比如海报等。

  • 在相似的光照条件下拍摄图像。避免高动态范围的场景(例如,逆光拍摄带有阴影的照片或透过门窗拍摄的照片)。避免光滑表面上的反射亮点。

  • 拍摄具有高度视觉重叠的图像。确保每个对象至少出现在3张图像中——越多越好。

  • 从不同的视角拍摄图像。不要只在同一位置旋转相机来拍摄图像,例如,每次拍摄后请走几步。同时,尽量从相对相似的视角获取足够的图像。请注意,更多的图像并不一定更好,可能会导致重建过程变慢。如果使用视频作为输入,建议降低帧率。

软件操作流程:

输入的Data Structure

拍摄好多视角图片之后放到一个文件夹里面,文件夹的结构如下:

/path/to/project/...
+── images
│   +── image1.jpg
│   +── image2.jpg
│   +── ...
│   +── imageN.jpg
+── database.db
+── project.ini  # 每个project的参数configuration 

database.db是保存软件使用过程中的一些参数,比如提取的特征、相机位姿参数了等等。可以通过: processing -》Database manage查看并修改。

软件启动

先新建一个Database,选择一个地方,输入数据库名即可。

然后选择存放图片的文件夹。

但是注意:文件夹内拍摄的图片最好是相同size的,使用相同相机拍摄的,或者干脆直接拍一个视频,然后使用ffmpeg截帧即可,命令如下:

ffmpeg -i input.mp4 -vf "fps=10" output_%04d.png #每秒取10帧

Feature Detection and Extraction

选择相机参数并提取特征

内置了十个相机参数:

  • SIMPLE_PINHOLE (ID: 0) - 简单针孔模型,使用3个参数(焦距fx, fy 和主点坐标cx, cy)来描述。它假设没有镜头畸变。
  • PINHOLE (ID: 1) - 针孔模型,使用4个参数来描述,与简单针孔模型类似,但允许焦距在x轴和y轴上不同。
  • SIMPLE_RADIAL (ID: 2) - 带有一个径向畸变参数的简单针孔模型,共4个参数。
    RADIAL (ID: 3) - 带有两个径向畸变参数的针孔模型,共5个参数。
  • OPENCV (ID: 4) - OpenCV使用的相机模型,包括两个径向畸变参数和两个切向畸变参数,共8个参数。
  • OPENCV_FISHEYE (ID: 5) - OpenCV鱼眼模型,同样包括两个径向畸变参数和两个切向畸变参数,共8个参数,但专门用于鱼眼镜头。
  • FULL_OPENCV (ID: 6) - 完整的OpenCV相机模型,包括更多的畸变参数,共12个参数。
  • FOV (ID: 7) - 视野模型,考虑了焦距、主点位置和一个额外的畸变参数,共5个参数。
  • SIMPLE_RADIAL_FISHEYE (ID: 8) - 简单的鱼眼模型,带有一个径向畸变参数,共4个参数。
  • RADIAL_FISHEYE (ID: 9) - 鱼眼模型,带有两个径向畸变参数,共5个参数。
    THIN_PRISM_FISHEYE (ID: 10) - 薄棱镜鱼眼模型,考虑了更多的畸变类型,共12个参数。

然后点击Extract即可,提取完关掉这个窗口就行。然后打开processing -》Database manage就能查看了点那个Show image就会出现选中的图片和提取的角点特征,点那个Overlapping images就会显示和这张图片有重叠特征的图片,还会显示有多少特征点重叠,但是这一步操作完了暂时是看不到的,得等下一步Feature Matching完了之后才能看到。

注意,第一部分的相机参数可以指定也可以直接默认:

You can either automatically extract focal length (焦距)information from the embedded EXIF information or manually specify intrinsic parameters, e.g., as obtained in a lab calibration. If an image has partial EXIF information, COLMAP tries to find the missing camera specifications in a large database of camera models automatically. If all your images were captured by the same physical camera with identical zoom factor, it is recommended to share intrinsics between all images. Note that the program will exit ungracefully if the same camera model is shared among all images but not all images have the same size or EXIF focal length. If you have several groups of images that share the same intrinsic camera parameters, you can easily modify the camera models at a later point as well (see Database Management). If in doubt what to choose in this step, simply stick to the default parameters.

可以选择自动从嵌入的EXIF信息中提取焦距信息,或者手动指定内参,例如实验室校准得到的参数。如果图像的EXIF信息不完整,COLMAP会尝试在一个大型的相机模型数据库中自动查找缺失的相机规格。如果所有图像都是使用相同的物理相机并且具有相同的变焦因子拍摄的,建议在所有图像之间共享内参。请注意,如果所有图像共享相同的相机模型但并非所有图像都具有相同的大小或EXIF焦距,程序将会异常退出。如果您有几个组的图像共享相同的内参,您也可以在稍后的阶段轻松修改相机模型(详见数据库管理)。如果您不确定在此步骤中选择什么,只需坚持使用默认参数即可。

第一步的数据格式

如果你想导入一些现有的feature,colmap也规定了文件格式:

NUM_FEATURES 128
X Y SCALE ORIENTATION D_1 D_2 D_3 ... D_128
...
X Y SCALE ORIENTATION D_1 D_2 D_3 ... D_128

其中:X, Y, SCALE, ORIENTATION是浮点数,D_1…D_128 是0-255的整数 ,文件第一行会说明特征数和特征维度,例如:

4 128
1.2 2.3 0.1 0.3 1 2 3 4 ... 21
2.2 3.3 1.1 0.3 3 2 3 2 ... 32
0.2 1.3 1.1 0.3 3 2 3 2 ... 2
1.2 2.3 1.1 0.3 3 2 3 2 ... 3

Feature Matching and Geometric Verification

点击:Processing 》feature matching即可。

内置了六种匹配算法:

  • 穷尽匹配:如果你的数据集中的图像数量相对较少(最多几百张),这种匹配模式应该足够快,并能产生最佳的重建结果。在此模式下,每张图像都会与其他每张图像进行匹配,而块大小决定了同时从磁盘加载到内存中的图像数量。
  • 顺序匹配:如果图像是按顺序获取的,例如通过视频摄像机获取,此模式非常有用。在这种情况下,连续帧之间存在视觉重叠,没有必要对所有图像对进行穷尽匹配。相反,连续捕获的图像会相互匹配。这种匹配模式内置了基于词汇树的循环检测功能,每隔 N 张图像(循环检测周期 `loop_detection_period`)就会与视觉上最相似的图像(循环检测图像数 `loop_detection_num_images`)进行匹配。请注意,图像文件名必须按顺序排列(例如,image0001.jpg, image0002.jpg 等)。数据库中的顺序无关紧要,因为图像会根据文件名显式排序。请注意,循环检测需要预先训练好的词汇树,可以从 https://demuc.de/colmap/ 下载。
  • 词汇树匹配:在这种匹配模式下 [schoenberger16vote],每张图像都会使用带有空间重排序的词汇树与其视觉最近邻进行匹配。这是推荐用于大量图像集合(数千张)的匹配模式。这需要预先训练好的词汇树,也可以从 https://demuc.de/colmap/ 下载。
  • 空间匹配:这种匹配模式将每张图像与其空间最近邻进行匹配。空间位置可以在数据库管理中手动设置。默认情况下,COLMAP 还会从 EXIF 中提取 GPS 信息并用于空间最近邻搜索。如果有准确的位置信息,这是推荐的匹配模式。
  • 传递匹配:这种匹配模式利用已存在的特征匹配的传递关系来生成更完整的匹配图。如果图像 A 匹配到图像 B 而 B 又匹配到 C,那么这个匹配器会尝试直接匹配 A 和 C。
  • 自定义匹配:此模式允许指定个别图像对进行匹配或导入个别特征匹配。要指定图像对,你需要提供一个文本文件,每行包含一对图像:每一行先是匹配的图片名称,然后是两张图片中匹配的点的标号:
  • image1.jpg image2.jpg
    0 1
    1 2
    3 4
    <empty-line>
    image1.jpg image3.jpg
    0 1
    1 2
    3 4
    4 5
    <empty-line>
    ...

点击Matching之后就可以点击 Processing -> Database Manage ->Overlapping Image查看特征重叠部分了。

特征Match这一步很耗时,作者提到,所以最好还是找一个GPU不错的电脑。

Expected times for exhaustive matching are from a few minutes for tens of images to a few hours for hundreds of images to days or weeks for thousands of images

Sparse Reconstruction

打开:Reconstruction > Start,即可进行重建,但是重建的效果不怎么好才300多个点,不好很正常。

Dense Reconstruction

然后我们进行稠密重建。点击Reconstruction > dense reconstruction。

然后选择一个工作目录来保存结果,然后左面的按钮直接从左点到右,其中Stergo和Fusion很耗时间和资源,确保电脑性能足够。不同按钮代表的算法不再赘述。

重建完的效果还是不错的。 

colmap是查看不了每个点的法线的,想要看得用meshlab。把.ply文件拉进去就行。

想要看每个点的法线得拉到meshlab中选择render->show Normal/Curvature才可查看法线。

关于Undistortion,还提供了几种其他的算法,可以在Extra -> Undistortion里面设置 

 

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

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

相关文章

uniapp使用里image标签图片无法撑满全屏问题,uniapp image填充不满父容器解决方案

问题效果 底部有一个白条&#xff0c;查看元素之后也没有padding也没有margin 解决方案 vertical-align: bottom;解决后效果图

嵌入式开发系列----入门保姆级必看博客

嵌入式开发是指为特定的硬件平台编写软件的过程&#xff0c;通常涉及硬件资源有限、实时性要求高的应用。嵌入式系统广泛应用于消费电子、工业自动化、汽车、医疗设备等领域。本文将介绍嵌入式开发的基础内容&#xff0c;包括硬件和软件的构成、开发工具链、常用的编程语言以及…

计算机网络(4)

同轴电缆 由一根空心的外圆柱导体和一根位于中心轴线的内导线组成&#xff0c;内导线和圆柱 导体及外界之间用绝缘材料隔开&#xff0c;按直径的不同&#xff0c;同轴电缆分为粗缆和细缆 两种 与双绞线相比&#xff0c;同轴电缆的抗干扰能力强&#xff0c;屏蔽性好&#xff0c;…

Cesium基础-(Entity)-(label )

里边包含Vue、React框架代码详细步骤、以及代码详细解释 Label 在 Cesium 中表示一个可以在三维地球上显示的文本标签。它通常用于在特定位置显示信息,比如地名、地标名称或其他注释。Label 可以自定义样式、颜色、大小,并能根据距离视角动态调整显示效果。 以下是 Label 的…

云计算虚拟化-自用服务器购买指南

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 首先强调&#xff1a;这个不是必需品&#xff0c;请各位根据自己的情况来。技术的进步这些只能算锦上添花&#xff0c;重要的…

基于gewe制作第一个微信聊天机器人

现在我们制作一个微信智能聊天机器人。发送文字它可以回复一段话&#xff0c;或一张图片&#xff0c;是不是有点小酷&#xff01; 当然&#xff0c;这种智能回复的算法和数据库我们自己肯定是没有的&#xff0c;所以我们借助于gewe框架的开放API接口来完成我们的功能。 请求参…

C++模板进阶

C教学总目录 C模板进阶 1、模板初阶的补充2、非类型模板参数3、模板的特化3.1、函数模板特化3.2、类模板特化3.2.1、全特化3.2.2、偏特化3.2.3、类模板特化的应用 4、模板的分离编译 1、模板初阶的补充 现在假设我们有一个vector对象&#xff0c;我们要遍历输出vector对象中的…

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本 Shell脚本源码地址&#xff1a; Gitee&#xff1a;https://gitee.com/raymond9/shell Github&#xff1a;https://github.com/raymond999999/shell脚本可以去上面的Gitee或Github代码仓库拉取。 支持的功能和系统&am…

Iotop使用

文章目录 Iotop依赖及编译1:内核配置2: 环境配置3.依赖库ncurses3.1 Ncurses的编译配置 4. Iotop的编译及修改5.测试效果如下&#xff1a; Iotop依赖及编译 源码路径&#xff1a;https://github.com/Tomas-M/iotop#how-to-build-from-source (GitHub - Tomas-M/iotop: A top u…

CVPR力推!预训练+医学图像这么玩,审稿人都得为你让条路!

最近发现Nature、CVPR、NeurIPS等顶会顶刊上&#xff0c;涌现了不少预训练医学图像的文章&#xff0c;不仅效果拔群&#xff0c;思路也很有启发性。 像是Nature上的REFERS&#xff0c;便颠覆了传统方法&#xff0c;使标注数据量直降90&#xff05;&#xff01;此外还有CVPR24上…

Spark 共享变量:广播变量与累加器解析

Spark 的介绍与搭建&#xff1a;从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 Spark on YARN&#xff1a;Spark集群模式…

基于Matlab 疲劳驾驶检测

Matlab 疲劳驾驶检测 课题介绍 该课题为基于眼部和嘴部的疲劳驾驶检测。带有一个人机交互界面GUI&#xff0c;通过输入视频&#xff0c;分帧&#xff0c;定位眼睛和嘴巴&#xff0c;通过眼睛和嘴巴的张合度&#xff0c;来判别是否疲劳。 二、操作步骤 第一步&#xff1a;最…

强化学习不愧“顶会收割机”!2大创新思路带你上大分,毕业不用愁!

强化学习之父Richard Sutton悄悄搞了个大的&#xff0c;提出了一个简单思路&#xff1a;奖励聚中。这思路简单效果却不简单&#xff0c;等于是给几乎所有的强化学习算法上了一个增强buff&#xff0c;所以这篇论文已经入选了首届强化学习会议&#xff08;RLC 2024&#xff09;&a…

个人记录。改错huggingface,离线使用

huggingface_hub.utils._errors.LocalEntryNotFoundError: Connection error, and we cannot find the requested files in the disk cache. Please try again or make sure your Internet connection is on. 下载 true改false

【计算机网络】网络框架

一、网络协议和分层 1.理解协议 什么是协议&#xff1f;实际上就是约定。如果用计算机语言进行表达&#xff0c;那就是计算机协议。 2.理解分层 分层是软件设计方面的优势&#xff08;低耦合&#xff09;&#xff1b;每一层都要解决特定的问题 二、网络传输基本流程 1.预备…

C++练习 字符串反转

从界面上输入一个C风格的字符串&#xff0c;如果输入的是"abc"&#xff0c;反转后"cba"。 要求&#xff1a; 1&#xff09;反转的结果存放在另一字符串中。 2&#xff09;原地反转&#xff0c;不借助其它的字符串。 #include <iostream> using n…

Postman常见问题及解决方法

软件测试资料领取&#xff1a;[内部资源] 想拿年薪40W的软件测试人员&#xff0c;这份资料必须领取~ 软件测试面试刷题工具&#xff1a;软件测试面试刷题【800道面试题答案免费刷】 1、网络连接问题 如果Postman无法发送请求或接收响应&#xff0c;可以尝试以下操作&#xf…

LED和QLED的区别

文章目录 1. 基础背光技术2. 量子点技术的引入3. 色彩表现4. 亮度和对比度5. 能效6. 寿命7. 价格总结 LED和 QLED都是基于液晶显示&#xff08;LCD&#xff09;技术的电视类型&#xff0c;但它们在显示技术、色彩表现和亮度方面有一些关键区别。以下是两者的详细区别&#xff…

光流法(Optical Flow)

一、简介 光流法&#xff08;Optical Flow&#xff09;是一种用于检测图像序列中像素运动的计算机视觉技术。其基于以下假设&#xff1a; 1.亮度恒定性假设&#xff1a;物体在运动过程中&#xff0c;其像素值在不同帧中保持不变。 2.空间和时间上的连续性&#xff1a;相邻像素之…

400. 第 N 位数字

目录 题目解法 题目 给你一个整数 n &#xff0c;请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。 解法 class Solution { public:int findNthDigit(int n) {int low 1, high 9;while (low < high) {int mid (high - lo…