OpenMVS OpenMVG 笔记

news/2024/11/12 16:34:50/

OpenMVS & OpenMVG 笔记

OpenMVS 和 OpenMVG 都是计算机视觉中用于三维重建的开源库。两者都可以实现从图像集合中计算出相机位姿和三维点云,但它们的重点略有不同。 OpenMVG 主要关注于从输入图像集合中提取稠密的特征匹配,通过这些匹配计算相机的位姿和场景中的点云。它提供了一套完整的结构从运动(Structure-from-Motion, SFM)框架,包括图像处理、特征描述和匹配、相机标定、相机位姿估计等等。 而 OpenMVS 则更加关注于基于密集的点云进行表面重建和纹理映射,从而得到高质量的三维模型。OpenMVS 可以接受 OpenMVG 的输出作为输入,进一步优化重建结果,并进行多个视角的三维模型融合。 因此,可以说 OpenMVG 更加偏向于提取几何信息,而 OpenMVS 更加偏向于提取纹理信息。两者的结合则可以得到更为丰富的三维重建结果。

OpenMVS

OpenMVS (Multi-View Stereo) 是一个面向计算机视觉科学家的库,特别针对 Multi-View Stereo 重建社区。虽然有成熟且完整的开源项目针对运动结构管道(如 OpenMVG),可以从输入图像集中恢复摄像机姿势和稀疏 3D 点云,但没有一个项目解决摄影测量链流的最后一部分。OpenMVS 旨在通过提供一整套算法来填补这一空白,以恢复要重建的场景的整个表面。输入是一组摄像机姿势加上稀疏点云,输出是一个带纹理的网格。本项目涵盖的主要主题是:

  • 密集的点云重建,以获得尽可能完整和准确的点云
  • 网格重建,用于估计最能解释输入点云的网格表面
  • 用于恢复所有精细细节的网格细化
  • 网格纹理,用于计算清晰准确的纹理,为网格着色

OpenMVG

Open Multiple View Geometry 开源多视图几何体

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

  • 这些库提供了对以下功能的轻松访问:图像操作、特征描述和匹配、特征跟踪、相机模型、多视图几何、鲁棒估计、运动结构算法…
  • 二进制文件解决了管道可能需要的单元任务:场景初始化、特征检测和匹配以及运动结构重建,将重建的场景导出到其他多视图立体视觉框架以计算密集的点云或纹理网格。
  • 管道是通过链接各种二进制文件来创建的,以计算图像匹配关系,解决运动结构问题(重建、三角测量、定位)和…
    OpenMVG 使用 C++ 开发,可在 Android、iOS、Linux、macOS 和 Windows 上运行。

OpenMVG

SFM 运动结构恢复(Structure from motion)数十年来一直是计算机视觉领域的热门研究方向之一,实现了众多实际应用,尤其在近景三维重建中,该算法从获取的目标物系列影像出发,最终获取较高精度的目标物稀疏三维点云。

OpenMVG 数据结构

OpenMVG 围绕三种数据结构进行阐述,称为 SfM_Data、Regions(区域)和 PairWiseMatches。
SfM_data 数据结构是一个通用容器,用于存储以下对象之间的关系:

  • Views 图像文件名和对相机内部和姿态的引用
  • Intrinsics 相机内部参数
  • Poses 姿态摄像机外部参数
  • LandMarks 3D 结构(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 数据结构是用于存储图像描述的通用容器:

  • Features (point-based)
  • Descriptors (可以是标量向量或二进制值)

PairWiseMatches 数据结构用于存储一对图像之间相应特征的索引。

注意:

  • SfM_data/Views 是唯一的,而 Intrinsics 和 Poses 可以共享。
  • SfM_Data结构 IO 可以是 JSON/XML/BINARY,以简化与工具的互操作性,也可以是 PLY(仅输出)以实现可视化。

OpenMVG 管道围绕两个主要概念进行阐述:

  • Abstract Data Providers
    • Features_provider
    • Regions_Provider
    • Matches_Provider
  • Abstract Processing Engines
    • ReconstructionEngine

API 允许轻松实现新管道并使用用户想要利用的任何数据格式。
以下是 OpenMVG 数据结构、数据提供程序、二进制文件和管道系统的概述:

OpenMVG_OverView

安装

使用vcpkg安装openmvs时,会同时安装openmvg

vcpkg install openmvs:x64-windows

使用

openmvg就是从获取的目标物系列影像出发,最终获取较高精度的目标物稀疏三维点云,即生成SFM。

直接运行openmvg安装目录中的tutorial_demo.py:

python tutorial_demo.py

结果如下:

openmvg_demo

具体步骤参见:

openmvg_pipeline
OpenMVG_OverView

Convert SfM scene from OpenMVG

将openmvg的SFM结果转换到openmvs:

openMVG_main_openMVG2openMVS.exe -i tutorial_out\reconstruction_sequential\sfm_data.bin -o scene.mvs -d .\images

可视化openmvs sfm场景:

View.exe scene.mvs

稀疏点云

Dense Point-Cloud Reconstruction

DensifyPointCloud.exe scene.mvs

提取稠密点云数据,生成scene_dense.mvs和稠密点云数据scene_dense.ply

View.exe scene_dense.mvs

稠密点云

Rough Mesh Reconstruction

点云重建生成scene_dense_mesh.mvs和网格体scene_dense_mesh.ply

ReconstructMesh.exe scene_dense.mvs

View.exe scene_dense_mesh.mvs

稠密点云网格重建

Mesh Texturing

生成纹理scene_dense_mesh_texture.mvsscene_dense_mesh_texture.plyscene_dense_mesh_texture.ply

TextureMesh.exe scene_dense_mesh.mvs -o scene_dense_mesh_texture.mvs

View.exe scene_dense_mesh_texture.mvs

贴图处理

纹理图片:

纹理


http://www.ppmy.cn/news/1545892.html

相关文章

基于51单片机的温控电风扇proteus仿真

地址:https://pan.baidu.com/s/1vgYgY41tp_axxVFTHAPwFg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…

【死锁处理案例之一】

数据库死锁问题分析与优化:以 DELETE ... WHERE name LIKE "%name" 和插入操作为例 引言 在数据库应用中,死锁是一种常见的并发问题。当两个或多个事务彼此等待对方持有的资源时,就会导致死锁,最终所有相关的事务都无法继续执行。这种情况不仅影响应用程序的性…

量化交易系统开发-实时行情自动化交易-Okex K线数据

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来聊聊基于Okex交易所API获取K线数…

GNU构建系统和Autotool

1、前言 经常使用Linux的开发人员或者运维人员,可能对configure->make->make install相当熟悉。事实上,这叫GNU构建系统,利用脚本和make程序在特定平台上构建软件。这种方式成为一种习惯,被广泛使用。本文从用户视角和开发…

ORB_SLAM3安装

ORB_SLAM3安装 一.前期准备1.1ubuntu查看当前版本的命令1.2 根据ubuntu版本,更新下载软件源1.3 先下载git1.4 vim语法高亮1.5 常见的linux命令 二.ORB-SLAM3下载2.1 ORB_SLAM3源码下载2.2 安装依赖库2.2.1 依赖库2.2.2 安装pangolin2.2.3 安装opencv2.2.4 Eigen3安装…

Spring Boot技术在导师双选系统中的应用

第一章 绪论 1.1 选题背景 如今的信息时代,对信息的共享性,信息的流通性有着较高要求,尽管身边每时每刻都在产生大量信息,这些信息也都会在短时间内得到处理,并迅速传播。因为很多时候,管理层决策需要大量信…

朴素贝叶斯分类器基于iris及Python手写实现

数据来源为sklean.datasets中的load_iris,代码如下: # -*- coding:utf-8 -*- import numpy as np import pandas as pd from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import ac…

Yocto 项目下通过网络更新内核、设备树及模块

Yocto 项目下通过网络更新内核、设备树及模块 前言 在 Yocto 项目的开发过程中,特别是在进行 BSP(Board Support Package)开发时,经常需要调整特定软件包的版本,修改内核、设备树以及内核模块。然而,每次…