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

这篇具有很好参考价值的文章主要介绍了基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明

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

1. MVS(Multi-view stereo)概述

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

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

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

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

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

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

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

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

图像一致性

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

立体匹配

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

openmvs,算法,学习,开源

2. OpenMVS开源框架

介绍

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文件夹中打开终端
openmvs,算法,学习,开源

Meshlab下载

参考教程

测试数据集下载

链接:https://pan.baidu.com/s/13T04aKJ2OB6_RX7IMMGhpg
提取码:oxkp
下载完的数据如下所示:
openmvs,算法,学习,开源
openmvs,算法,学习,开源

1. 稠密重建

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

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

openmvs,算法,学习,开源

2. 曲面重建

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

得到log和test_mesh.ply:
openmvs,算法,学习,开源
openmvs,算法,学习,开源

3. 网格优化

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

得到log和test_refinemesh.ply:
openmvs,算法,学习,开源
openmvs,算法,学习,开源

4. 纹理贴图

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

得到log和test_texture.ply以及test_texture.png:
openmvs,算法,学习,开源
openmvs,算法,学习,开源
openmvs,算法,学习,开源

参考文献和资料

[1]Multi-View Stereo: A Tutorial
[2]三维重建笔记——稠密重建
[3]MVS——multi view system从多视图的密集重建(1)
[4]初识立体匹配文章来源地址https://www.toymoban.com/news/detail-791716.html

到了这里,关于基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【项目实战】三维重建:基于RGB-D数据集的TSDF算法

    主要流程: 计算每个体素在深度图像中的TSDF值,然后基于前一个体素的TSDF值更新后一个(加权平均),最后得到所有体素的结果,拼接为3D模型。 TSDF需要非常大的显存空间,GPU需要大概 2KB 存储单个体素的所有信息。因此, 只适用于小场景下的三维重建(如室内环境)。

    2024年02月12日
    浏览(64)
  • 目标检测(Object Detection)学习笔记(概述与传统算法与基于深度学习算法)

    本文为课程研讨需要,对目标检测算法进行理论学习,无实战内容,欢迎交流探讨 目标检测(Object Detection) 的任务是找出图像中所有感兴趣的目标(物体),不同于分类和回归问题,目标检测还需要确定目标在图像中的位置 (定位) ,而确定识别目标的类别和位置 (分类

    2024年02月02日
    浏览(41)
  • 【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集

    提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 LLFF格式是NeRF网络模型训练使用的数据集格式之一,本文基于COLMAP软件展示从LLFF格式数据集的制作到开始模型训练的完整流程。NeRF(神经辐射场)通过输入同一场景不同视角下

    2024年02月10日
    浏览(52)
  • 三维重建SfM算法

    三维重建的 SfM (Structure from Motion) 算法是通过多张二维图片来重建三维场景的算法。 特征点提取 在这个步骤中,需要对每张图片提取出一些特征点,并计算它们的描述子。在特征点提取的过程中,可以使用 SIFT,SURF 等算法。一般来说,一个好的特征点需要具备旋转不变性、

    2024年02月02日
    浏览(41)
  • 三维重建——商汤NeuralRecon算法详解与论文解读

    论文地址:https://arxiv.org/abs/2104.00681 代码链接见文末 代码详解: https://blog.csdn.net/qq_52053775/article/details/128880856         三维重建,就是将2D的图片信息重建为3D的信息。应用领域广泛。可以应用于原型设计、虚拟现实等。 (1) 相机成像         相机成像一般是小孔成像的原

    2024年02月13日
    浏览(42)
  • 【CloudCompare教程】008:基于点云的三维模型重建(泊松重建)

    本文讲述基于点云的三维模型重建方法,PoissonRecon是“Poisson Surface Reconstruction”的缩写,它是由约翰霍普金斯大学的Misha Kazhdan47提出的三角形网格生成算法的简单接口。 加载兔子点云,如下图所示: 在三维模型构建之前,应先计算法向量,否则会有以下提示:点云必须具有

    2024年02月07日
    浏览(50)
  • 【三维重建】【深度学习】NeuS总览

    论文提出了一种新颖的神经表面重建方法,称为NeuS,用于从2D图像输入以高保真度重建对象和场景。在NeuS中建议将曲面表示为有符号距离函数(SDF)的零级集,并开发一种新的体绘制方法来训练神经SDF表示,因此即使没有掩模监督,也可以实现更准确的表面重建。NeuS在高质量的

    2024年02月16日
    浏览(38)
  • MATLAB算法实战应用案例精讲-【目标检测】三维点云重建

    目录 前言 算法原理 什么是点云? 数据预处理  三维计算视觉研究内容

    2024年02月06日
    浏览(53)
  • Nerf神经辐射场三维重建0基础学习

    前言 本期内容为对Nerf神经辐射场的网络结构以及其使用的体渲染技术的一个介绍。文章会同步更新到公众号 AI知识物语 ,并且后续有需要也会更新响应的讲解视频到B站,同名 出门吃三碗饭 开讲! 简单介绍Nerf Nerf是2020年的一篇ECCV论文,其贡献就是通过提供2维信息来渲染

    2024年02月09日
    浏览(42)
  • 三维人脸实践:基于Face3D的人脸生成、渲染与三维重建 <二>

    git code: https://github.com/yfeng95/face3d paper list: PaperWithCode 3DMM方法,基于平均人脸模型,可实现线性的人脸生成。此外,基于人脸关键点,还能渲染对应的三维人脸模型。 基于3DMM模型的生成1:正常 基于3DMM模型的生成2:微笑 3DMM模型的原理是怎样的?如何实现二维与三维的生成呢

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包