jjzjj

基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置

右边的口袋 2023-12-21 原文

基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置

声明

本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。

1. MVS(Multi-view stereo)概述

MVS(多视点立体视觉,Multi-view stereo)能够单独从图像中构造出高度细节化的3D模型,采集一个庞大的图像数据集,用其来构建出一个用来解析图像的3D几何模型。MVS算法的流程图如下所示,输入为一组图像及其相应的摄像机参数:

  1. 采集图片;
  2. 计算每个图片的相机参数;
  3. 从图像集和相应的摄像机参数中重建场景的三维几何;
  4. 还原场景的构成材料;

稀疏重建与稠密重建的区别

稀疏重建通常是重建一些图像特征点的三维坐标,稀疏重建主要用于定位。稠密重建又称三维重建,是对整个图像或图像中绝大部分像素进行重建。二者分别对应着MVS三维重建方法中的第二步和第三步:稀疏重建一般使用SFM算法,得到每张图片的相机参数;稠密重建则对应着MVS中最核心的部分,一般所说的MVS算法指的就是稠密重建。

稀疏重建——SFM(Structure from Motion)算法

MVS算法的性能只取决于输入图像的质量和摄像机参数,所以MVS的成功很大程度上归功于底层的用来计算摄像机参数的SFM算法。SFM算法以一组图像作为输入,生成两个信息:每幅图像的摄像机参数和图像中可见的一组三维点,这些点通常被编码为轨迹。 轨迹被定义为重建的3D点的3D坐标和输入图像子集中对应的2D坐标的列表,算法流程如下图所示:

稠密重建——MVS(Multi-view stereo)方法

稠密重建是假设相机参数已知的情况下,寻找空间中具有光度一致性(Photo-consistency)的点,对场景进行立体匹配的过程

图像一致性

假设对于下面两幅图像和这样一个三维场景,若选择的三维点位于物体的表面上,那么这个三位点根据相机的内外参投影到图像上,以投影点为中心取出两个方形的小patch,那么它们所包含的场景应该是比较类似的;反之,如果这个点在物体外,两个小patch相差是比较大的,若能度量两个patch之间的一致性,就可以衡量这个三维点是否位于物体表面或者位于这个物体表面的概率大小。

立体匹配

立体匹配这一概念贯穿整个MVS方法,其目标就是从不同视角的图像中找到匹配的对应点,从而从二维图像中恢复出三维信息,即通过校正后的一对图像获取到视差图的过程,叫做立体匹配;而通过匹配后得到的视差图就能够转化为深度图,从而从深度图中获取图像的三维信息,完成稠密重建的任务。

2. OpenMVS开源框架

介绍

OpenMVS是一个比较经典的MVS(Multi-View Stereo)开源库,集成三维重建整个完整的技术方案(相机模型,多视立体几何,稠密重建,曲面重建,点云融合,纹理贴图)。在每个重建环节使用的都是非常经典有效的算法,例如包含目前三维重建非常经典有效的深度图重建算法SGM,PatchMatch。综合重建效果和性能,目前MVS是所有开源库中最好的。该框架还涉及Graph Cut、MRF、泊松融合等比较经典的通用算法原理与代码实现,以及常见的点云后处理和网格后处理(去噪、细分,去非流形,补洞)等图形学相关算法。
综合来说,OpenMVS非常适合入门系统学习和二次开发。代码框架非常完善,代码实现清晰且规范,可快速提高项目实战经验。学习三维重建必备。

OpenMVS安装

  1. Ubuntu 18.04+CMake+git+C/C++编译器(gcc等);
  2. 替换镜像,加快下载速度,具体参考教程
  3. 准备一个空闲的机器安装以下任务:
sudo apt-get update -qq && sudo apt-get install -qq 
sudo apt-get -y install git cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa- dev 
  1. 安装Eigen(version 3.2,Linux下只能是这个版本):
git clone https://gitlab.com/libeigen/eigen.git --branch 3.2 
mkdir eigen_build && cd eigen_build 
cmake . ../eigen
make && sudo make install 
cd ..
  1. 安装Boost:
sudo apt-get -y install libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev
  1. 安装OpenCV(version 2.4 or higher):
sudo apt-get -y install libopencv-dev
  1. 安装CGAL:
sudo apt-get -y install libcgal-dev libcgal-qt5-dev
  1. 安装VCGLib(注意要安装2020年的版本,参考教程):
git clone https://github.com/cdcseacave/VCG.git vcglib
  1. 安装OpenMVS:
git clone https://github.com/electech6/openMVS_comments.git openMVS 
mkdir openMVS_build && cd openMVS_build 
cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="/path to vcglib/vcglib"

其中/path to vcglib/要改为自己系统下的vcglib的路径;
10. 生成OpenMVS库文件(在编译的过程中可能会出现一些warning,不用管,这一步会有许多种类的报错,具体的修改方案参考教程):

sudo make -j2 && sudo make install

OpenMVS测试

OpenMVS可执行文件生成在openMVS/openMVS_build/bin/里面,(-w 设置的是数据的路径,-i 是输入的文件名,-o是输出的文件名),执行命令时在openMVS_build文件夹中打开终端

Meshlab下载

参考教程

测试数据集下载

链接:https://pan.baidu.com/s/13T04aKJ2OB6_RX7IMMGhpg
提取码:oxkp
下载完的数据如下所示:

1. 稠密重建

./bin/DensifyPointCloud -w /path to data/data -i scene.mvs -o test_dense.mvs

其中/path to data/需要改为data在系统中的路径,运行后得到log和test_dense.ply:

2. 曲面重建

./bin/ReconstructMesh -w /path to data/data -i test_dense.mvs -o test_mesh.mvs

得到log和test_mesh.ply:

3. 网格优化

./bin/RefineMesh -w /path to data/data -i test_mesh.mvs -o test_refinemesh.mvs

得到log和test_refinemesh.ply:

4. 纹理贴图

./bin/TextureMesh -w /path to data/data -i test_refinemesh.mvs -o test_texture.mvs

得到log和test_texture.ply以及test_texture.png:


参考文献和资料

[1]Multi-View Stereo: A Tutorial
[2]三维重建笔记——稠密重建
[3]MVS——multi view system从多视图的密集重建(1)
[4]初识立体匹配

有关基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置的更多相关文章

  1. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  2. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  3. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  4. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  5. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  6. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  7. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  8. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  9. ruby-on-rails - (Ruby,Rails) 基于角色的身份验证和用户管理...? - 2

    我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源

  10. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

随机推荐