开源
OpenMVG:基于C++的端到端的3D重建
来源:元经纪     阅读:407
网站管理员
发布于 2023-03-14 09:20
查看主页

概述

通过开发 C++ 框架,扩展对图像/摄影测量 3D 重建功能的认识。

OpenMVG 从由库、二进制文件和管道组成的图像框架中提供端到端的 3D 重建。

OpenMVG 使用 C++ 开发,可在 Android、iOS、Linux、macOS 和 Windows 上运行。

OpenMVG数据结构

[hidecontent type="logged" desc="隐藏内容:登录后可查看"]

OpenMVG 围绕三个称为
SfM_Data,Regions和的数据结构进行阐述PairWiseMatches。 数据SfM_data结构是用于存储以下关系的通用容器:
  • Views图像文件名和对相机固有和姿势的引用
  • Intrinsics相机内部参数
  • Poses相机外参数
  • Landmarks3D 结构(3D 点及其可见性信息)
struct SfM_Data
{
  Views views;           /// reference to the used images (each image link to a pose and intrinsic camera id)
  Poses poses;           /// poses data (indexed by view.id_pose)
  Intrinsics intrinsics; /// intrinsics camera data (indexed by view.id_intrinsic)
  Landmarks structure;   /// Structure (3D points with their 2D observations)
...
};
数据Regions结构是用于存储图像描述的通用容器:
  • 特征(基于点)
  • 描述符(可以是标量或二进制值的向量)
PairWiseMatches数据结构用于存储图像对之间对应特征的索引。 笔记:
  • SfM_data/Views是独一无二的,而IntrinsicsPoses可以共享。
  • SfM_Data结构 IO 可以是 JSON/XML/BINARY 以简化与您的工具的互操作性或 PLY(仅输出)以实现可视化。
OpenMVG 管道围绕两个主要概念进行阐述:
  • 抽象数据提供者
    • Features_provider
    • Regions_Provider
    • Matches_Provider
  • 抽象处理引擎
    • ReconstructionEngine
此 API 允许轻松实施新管道并使用用户想要利用的任何数据格式。 这里概述了 OpenMVG 数据结构、数据提供程序、二进制文件和管道系统:

图像数据集上的OpenMVG

向您解释如何在图像上运行 OpenMVG SfM 管道。
注意:OpenMVG 将尝试检索图像的像素焦距。如果不能,它会抱怨No Intrinsic found,您将能够在场景初始化阶段使用-f X * 1.2with提交一个大概的焦距。X = Max(image <Width, Height>)
我们的管道由链接多个 OpenMVG 二进制文件的 Python 脚本组成(即初始化、图像匹配,然后是 SfM)。

样本数据

为了让您玩转管道,我们建议您先尝试这些图像数据集:OpenMVG 图像数据集
  • 您会发现针孔[低分辨率/高分辨率] 和 360 图像。

顺序和增量 SfM 管道

$ cd openMVG_Build/software/SfM/
$ python SfM_SequentialPipeline.py [full path image directory] [resulting directory]
$ python SfM_SequentialPipeline.py ~/home/user/data/ImageDataset_SceauxCastle/images ~/home/user/data/ImageDataset_SceauxCastle/Castle_Incremental_Reconstruction

全球 SfM 管道

$ cd openMVG_Build/software/SfM/
$ python SfM_GlobalPipeline.py [full path image directory] [resulting directory]
$ python SfM_GlobalPipeline.py ~/home/user/data/ImageDataset_SceauxCastle/images ~/home/user/data/ImageDataset_SceauxCastle/Castle_Global_Reconstruction

如何可视化、重用 OpenMVG SfM 管道输出

请使用 Meshlab 或 CloudCompare 并打开文件cloud_and_poses.ply
  • 相机轨迹以绿点显示
  • 3D 结构显示为whitecolored点 -> 请参阅colorized.ply
生成的 SfM 输出存储在sfm_data.bin文件中。此文件可以转换为JSON/XML供第 3 方使用或PLY用于可视化。这些转换可以通过使用完成openMVG_main_ConvertSfM_DataFormat(请注意,您可以选择要导出的数据,例如,如果您只需要姿势信息来显示相机轨迹,则可以保持 JSON 输出紧凑)。

OpenMVG 二进制文件

这里描述了在这些 Python 管道中使用的主要二进制文件:

图像匹配/检索

任务 描述
初始化场景 openMVG_main_SfMInit_ImageListing sfm_data使用引用输入图像的视图和对相机模型的引用来初始化场景。 - 每个视图都引用一个内在 Id 和一个姿势 Id。 请注意,此二进制文件允许选择您的图像正在使用的相机型号。
描述图像 openMVG_main_ComputeFeatures Regions为文件的所有视图计算请求的特征 ( ) sfm_data
图像匹配 openMVG_main_ComputeMatches 计算成对匹配。

运动结构特定方法

任务 描述
openMVG_main_SfM --sfm_engine INCREMENTAL 从 2 视图开始重建并依次添加剩余视图。
openMVG_main_SfM --sfm_engine INCREMENTALV2 从 2 或 n 视图开始重建,然后依次添加剩余视图。这条管道比 更快openMVG_main_IncrementalSfM但更不准确。
openMVG_main_SfM --sfm_engine GLOBAL 计算对或图像之间的相对运动,然后使用运动平均来同时解决所有相机姿势。
openMVG_main_ComputeStructureFromKnownPoses 通过对匹配项进行三角测量或沿对极线查找对应点,检索已知相机位置的场景(点云)的结构。

本土化

任务 描述
openMVG_main_SfM_Localization 检索现有sfm_data场景中的图像位置。

更多详细教程

[/hidecontent]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
【2023年10月20日-11月19日:线上活动】全球数字化领导力,促进企业数字化人才培养
小米去年收入3659亿元创历史新高,SU7卖一台亏4.5万、内部暂无盈利要求
大数据技术对企业工商管理决策的影响
摩托罗拉推出g系列智能手机:售价6999卢比
曝Redmi K80系列或将升级6000mAh电池

首页

分类

定制方案

消息

我的