最新OpenMVG编译安装与逐命令运行增量式和全局式SfM教程

news2025/7/8 6:48:13

  openmvg是一个轻便的可以逐步运行的SfM开源库,它同时实现了增量式和全局式两种算法。

说明文档地址:https://openmvg.readthedocs.io/en/latest/
github主页地址:https://github.com/openMVG/openMVG
在这里插入图片描述

  

1 编译安装

  openmvg的安装比较简单,首先是安装依赖:

$ sudo apt‐get install libxxf86vm1 libxxf86vm‐dev libpng‐dev libjpeg‐dev libtiff‐dev libxi‐dev libxrandr‐dev graphviz

  然后克隆openmvg源码:

$ git clone ‐‐recursive https://github.com/openMVG/openMVG.git

  最后,使用cmake编译与安装:

$ mkdir openMVG_Build && cd openMVG_Build
$ cmake ‐DCMAKE_BUILD_TYPE=RELEASE ../openMVG/src/
$ cmake ‐‐build . ‐‐target install

  

2 运行命令

  openmvg的官方使用说明里有说如何运行SfM,包括使用脚本一行命令运行(只有在图像exif带内参信息的时候才能使用),以及如何分步运行,可以参考这里。但是这里需要说明的是,openmvg的代码后面有修改过,而使用文档却并没有完全更新过来。所以,如果只是按照使用文档来运行,或者是很多别的教程(可能只是直接抄官方文档或者比较老的),很可能会遇到错误(很多示例并不能跑)。在遇到一些不知名的报错以及踩过不少坑之后,我把可以运行出来的命令记录下来。这里,最好只改变输出文件夹的根路径,可以放在任何你想放的路径下,但是一些输出的名字这些,最好不要修改,容易出错。另一个需要注意的问题是,需要明确图像有无exif信息可以读取到相机内参,比如焦距这些,如果没有的话,那么相机内参还需要在第一步的时候就进行输入,下面分别进行介绍。
  

2.1 图像exif带相机内参信息

# 首先给一些路径进行定义,方便下面描述,使用时使用自己的实际目录进行替换即可
# DIR_DATA: 图像数据存放路径
# DIR_OUTPUT: 存放输出结果的路径
# DIR_OM: 存放openmvg源码的路径
1. 初始化图像列表
openMVG_main_SfMInit_ImageListing -d DIR_OM/openMVG/src/openMVG/exif/sensor_width_database/sensor_width_camera_database.txt -i DIR_DATA -o DIR_OUTPUT
2. 计算特征
openMVG_main_ComputeFeatures -i DIR_OUTPUT/sfm_data.json -o DIR_OUTPUT
3. 生成图像对
openMVG_main_PairGenerator -i DIR_OUTPUT/sfm_data.json -o DIR_OUTPUT/imgpairs.bin
4. 图像匹配
openMVG_main_ComputeMatches -i DIR_OUTPUT/sfm_data.json -p DIR_OUTPUT/imgpairs.bin -o DIR_OUTPUT/matches.bin
5. 错误匹配点对滤除
openMVG_main_GeometricFilter -i DIR_OUTPUT/sfm_data.json -m DIR_OUTPUT/matches.bin -g f -o DIR_OUTPUT/matches.f.bin
6.1. 全局式SfM
openMVG_main_SfM -s GLOBAL -i DIR_OUTPUT/sfm_data.json -m DIR_OUTPUT/ -o DIR_OUTPUT/out_Global_Reconstruction
6.2. 增量式SfM
openMVG_main_SfM -s INCREMENTAL -i DIR_OUTPUT/sfm_data.json -m DIR_OUTPUT/ -o DIR_OUTPUT/out_Incremental_Reconstruction
7.1. 生成颜色(全局式)
openMVG_main_ComputeSfM_DataColor -i DIR_OUTPUT/out_Global_Reconstruction/sfm_data.bin -o DIR_OUTPUT/out_Global_Reconstruction/sfm_data_colorized.ply
7.2. 生成颜色(增量式)
openMVG_main_ComputeSfM_DataColor -i DIR_OUTPUT/out_Incremental_Reconstruction/sfm_data.bin -o DIR_OUTPUT/out_Incremental_Reconstruction/sfm_data_colorized.ply

  下面是实验数据与最终生成的结果:
在这里插入图片描述
  
在这里插入图片描述
  
  其中,存放最终输出结果的文件夹out_Global_Reconstruction/out_Incremental_Reconstruction下应该会有如下内容:
在这里插入图片描述
  ply文件是点云数据,可以使用cloudcompare或者meshlab可视化查看和编辑,上面的结果图就是用cloudcompare打开的sfm_data_colorized.ply文件。
  

2.2 参数指定输入内参信息

  要输入内参信息,只需在第一步的时候进行修改即可,其他步骤与2.1一致。手动输入内参k的方式是增加-k参数:

1. 初始化图像列表
openMVG_main_SfMInit_ImageListing -d DIR_OM/openMVG/src/openMVG/exif/sensor_width_database/sensor_width_camera_database.txt -i DIR_DATA -o DIR_OUTPUT -k "6432;0;3000;0;6455;2000;0;0;1"

  其中-k参数是由双引号界定由分号分隔的九个值,也就是内参矩阵K,按行主序排列,依次为:

"fx;0;cx;0;fy;cy;0;0;1"

  下面是实验数据与最终生成的结果:
在这里插入图片描述
  
在这里插入图片描述

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

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

相关文章

【centos7下部署mongodb】

一.安装环境 CentOS7MongoDB4.0.13正式版。 二.下载MongoDB 1.1 官网下载地址:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.13.tgz 1.2 将压缩包通过xftp上传到服务器/opt目录,然后解压、改名 三. 配置环境变量及配置文件 3.1配置系…

8000+字,就说一个字Volatile

简介 volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级&…

2023最新版网络安全保姆级指南,手把手带你从零基础进阶渗透攻防工程师

前言 一份网络攻防渗透测试的学习路线,不藏私了! 1、学习编程语言(phpmysqljshtml) 原因: phpmysql可以帮助你快速的理解B/S架构是怎样运行的,只有理解了他的运行原理才能够真正的找到问题/漏洞所在。所以对于国内那些上来就说…

Java实现在线沟通功能

文章目录1、介绍 和 特点2、整合SpringBoot2.1、导入依赖2.2、websocket 配置类2.3、消息处理类2.4、启动服务2.5、前端代码:张三2.6、前端代码:李四3、效果4、小结1、介绍 和 特点 t-io是基于JVM的网络编程框架,和netty属同类,所…

MES系统需求误区,一文告诉你需求分析有哪些

在企业的实际应用中,对MES系统需求的分析常常会出现六个错误。 要求广泛,目标不明确由于对MES系统的概念和企业的实际运作不了解,导致企业在提出MES系统的要求时,常常会笼统而不明确,有时会混淆目标和需要。比如&#…

LabVIEW主VI前面板中显示或使用多个子VI

LabVIEW主VI前面板中显示或使用多个子VI想在程序中连接一个或多个子VI的前面板,但是当调用它们时,每个子VI在计算机屏幕上显示为一个新窗口。那么怎么能让每个子VI作为主VI前面板的一部分进行显示,而不是在屏幕上显示多个窗口?正在…

python读取tif图像+经纬度

python读取tif的包很多,但大都只能读出图像像素值,不能读取到经纬度信息。原因:TIFF 简单理解就是一种图像格式,类似于 jpg、png 等。GeoTIFF 就是在普通 TIFF 文件上增加了地理位置、投影信息、坐标信息等,常用于遥感…

BBS系统的设计与实现

技术:Java、JSP等摘要:BBS全称为Bulletin Board System,中文就是“电子公告板”。 BBS是一种电子信息服务系统。它向用户提供了一块公共电子白板,每个用户都可以在上面发布信息或提出问题,早期的BBS由教育机构或研究机…

电脑硬盘如何重新分区 ?教你两招磁盘分区方法

摘要:对于刚刚购买的电脑来说,有些厂商在装机的时候没有根据用户需求,就给硬盘随意分区了,有的分区划分的不是很合理,在使用过程中会遇到一些麻烦,那么电脑硬盘如何重新分区 ?本文将给大家详细介…

OpenShift 简介

OpenShift 是红帽 Red Hat 公司基于开源的云平台,是平台即服务(PaaS),是一种容器应用平台。允许开发人员构建、测试和部署云应用。该系统是在 K8S 核心之上添加工具,从而实现更快的应用开发、部署及扩展。 在 OpenShi…

leetcode 1675. Minimize Deviation in Array(最小化数组偏差)

数组里面有n个正整数,里面的数字可以无限次进行如下操作: 1.偶数可以除以2 2.奇数可以乘以2 数组中任意两元素差的最大值称为偏差。 把数组中的元素进行上面2种操作,使偏差最小。 思路: 数组中现有2种数字,一种是奇数…

新手如何入门黑客技术,黑客技术入门该学什么?

你是否曾经也对黑客技术感兴趣呢?感觉成为黑客是一件很酷的事,那么作为新手如何入门黑客技术,黑客技术入门该学什么呢? 其实不管你想在哪个新的领域里有所收获,你需要考虑以下几个问题。 首先你要想明白为什么学这个&…

程序员是世界上最理性、最睿智的群体,耶稣也反驳不了我,我说的!

有人说,程序员是吃青春饭的,35 岁就提前退休了。 猛一看,这句话是对的;仔细一看,这句话是不对的。 说它对,是因为现实中确实有很多程序员 35 岁就被毕业了;说它不对,是因为 35 岁以…

【数据库】redis集群环境详解

目录 集群环境 一,集群介绍 1、为什么需要redis集群 2、什么是redis集群 二,数据分片 三, 主从复制模型 四,一致性保证 五,集群搭建 1, 集群结构 2,创建配置文件 (1&#…

播放器问答弹题功能(视频播放弹出问题)教程与实际演示案例

阿酷tony / 原创 / 2023-2-24 长沙问答弹题功能是指酷播云产品在视频播放的指定时间点弹出问答题目,适合在教学、培训类视频中使用。使用问答功能,既可以增加学生与内容的互动,有利于教学质量的提升,又可以评估学生的学习效果和课…

【 K8s 源码之调度学习】Pod 间亲和性和反亲和性的源码分析

查看案例 字段含义podAffinityPod 间的亲和性定义podAntiAffinityPod 间的反亲和性定义requiredDuringSchedulingIgnoredDuringExecution硬性要求,必须满足条件,保证分散部署的效果最好使用用此方式preferredDuringSchedulingIgnoredDuringExecution软性…

duilib.dll丢失怎么办?dll文件丢失修复方法分享

duilib.dll丢失怎么办?其实在使用 Windows 系统的过程中,有时会出现提示“duilib.dll丢失”的错误。这个错误可能会影响电脑的正常运行,但是不用担心,今天小编来给大家详细的讲解一下duilib.dll丢失都有哪些解决方法。 一.什么是…

SAFe(Scaled Agile Framework)学习笔记

1.SAFe 概述 SAFe(Scaled Agile Framework)是一种面向大型企业的敏捷开发框架,旨在协调多个团队和部门的协同工作,以实现高效的软件开发和交付。下面是SAFe框架的简单介绍总结: SAFe框架包括以下四个层次&#xff1a…

金测评 手感更细腻的游戏手柄,双模加持兼容更出色,雷柏V600S上手

很多朋友周末都喜欢玩玩游戏放松一下,在家玩游戏的时候,PC是大家常用的平台,当然了,玩游戏的时候用键鼠的话,手感难免差点意思,还是要手柄才能获得更好的体验。我现在用的是雷柏V600S,这是一款支…

飞鹅打印机怎么样?飞鹅打印机好用吗?飞鹅打印机怎么知道订单是否漏单?

外卖打印机怎么选?飞鹅打印机好用吗?飞鹅智能云打印机产品专注于云打印的解决方案和技术服务提供。2019 年飞鹅已经成为国内先进的云打印服务提供商,主要是服务美团、饿了么客户,产品主要优势:自动接单、自动打印,无需…