三维重建

我们知道,照相机的原理是讲一个三维场景投影到二维平面。所谓三维重建,顾名思义就是从已有的二维图像中复原原始三维场景。
       三维重建的原理大致如下:首先,通过多角度拍摄或者从视频中提取得到一组图像序列,将这些图像序列作为三维重建系统的输入。然后分析多个视角的图像,根据纹理特征提取出稀疏特征点(稀疏点云),通过这些特征点估计相机位置和参数。在得到相机参数并完成特征点匹配后,就可以获得更稠密的点云(这些点可以附带颜色,从远处看就像还原了物体本身一样,但从近处能明显看出它们只是一些点)。最后根据这些点重建物体表面,并进行纹理映射,就还原出三维场景和物体了。
       目前,有不少开源的三维重建系统,下面这篇文章写出了各个系统的比较:https://leohope.com/解问题/2018/03/06/compare-re3d-system/
       之前尝试用过PMVS-CMVS,后来发现使用的重建方法比较老,源文件已经很久没有更新和维护。而且它支持的输入有很大的局限性。最终,我选用了能够配套使用的完整库OpenMVG和OpenMVS(文档最规范详细),这两个系统虽然不是一个团队开发的,但却恰好一起完成了三维重建的整个流程。

OpenMVG和OpenMVS

常见的多视图三维重建管线:重建稀疏点云-Structure from Motion(Sfm)→重建稠密点云-Multi-View Stereo(MSV)→重建表面-Surface Generation(SG)→纹理映射-Texture Mapping(TM)

其中,OpenMVG负责从原始图像到稀疏点云,OpenMVS负责重建稠密点云、重建表面和纹理映射。我这里还使用了Meshlab查看模型(点云)生成效果。

编译过程

编译就像女朋友生气,永远不知道你错在哪里。

OpenMVG

OpenMVG的编译参考官方文档很顺利的通过了,没踩到坑。

OpenMVS

还是先上官方文档。
       下面列出几个遇到的坑,供需要的朋友参考。
       官方文档第四行有一句:main_path='pwd'。一开始没在意就照做了,后来在执行这句命令:cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="$main_path/vcglib"来编译VCGLib的时候报错说找不到VCG的路径,让我指定环境变量VCG_ROOT的值。想了一下可能是main_path没指定对,后来试了一下将main_path直接替换为VCGLib的根目录就可以顺利通过啦。
       还有一个就是Eigen库的版本问题,当时编译时直接下载了最新版本,后来编译出错,最后在stackoverflow上找到答案,Eigen必须是3.2.X版本。
       其他的按照官方文档都顺利编译通过!编译完成后迫不及待的下载了官方用例一展身手。按照官方文档给的使用教程执行时,Sfm过程很顺利,生成了稀疏点云。但是在后面的MVS过程出现了找不到指令的错误。明明编译过程和Sfm过程都很顺利,为什么会说找不到指令呢?头都要挠秃了,后来去看了一眼用户目录下的bin目录,发现里面根本就没有OpenMVS的指令阿, 难道编译出错了吗?
       在google的时候偶然看到stackoverflow上的一个帖子(万能的stackvoreflow又拯救了我的头发),OpenMVS编译是不会将可执行文件放在用户的bin目录下的,在使用的时候要手动把编译生成的可执行文件复制到用户的bin目录下或者指定文件的目录(OpenMVS_Build/bin),急忙去OpenMVS_Build/bin下面把可执行文件复制到用户的bin目录下,试了一下果然可以了!

小结

了解了整个流程后,就可以手写脚本来实现整个流程了。最后再给出一个图片数据集网站,可以直接拿图来执行整个三维重建过程:http://www.diegm.uniud.it/~fusiello/demo/samantha/

如有错误还请大牛指正,希望对大家有所帮助。

Ubuntu使用OpenMVG和OpenMVS进行三维重建相关推荐

  1. Windows下基于openMVG及openMVS的三维重建Qt应用程序

    J3D模型重建系统 J3DReconstruction 简介 本项目主要是前段时间因学业及项目需要,去鼓捣了一下多目三维重建这个东西,然后其实发现国外开源的框架和库不少,我索性就照着openMVG和o ...

  2. OpenMVG、OpenMVS配置及学习记录(Win10+VS2015)

    更新于2018年7月24日 经过了近一年的学习,总结各方面经验,还是极其强烈的建议初入三维重建的朋友几点: 1.不要在Windows系统下装openmvg和openmvs了,直接用上Linux系统吧, ...

  3. linux系统MVS安装,Ubuntu 环境 openMVG+openMVS 配置

    1. openMVG 比较简单,直接按照 build wiki 的步骤一步一步来就没问题. Instruction: Build on Linux # Install the required ext ...

  4. 使用 OpenMVG+PMVS实现视觉三维重建

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 一.什么是视觉三维重建? 我们知道,照相机的原理是将一个三维场景投影到二维平面.所谓视觉三维重建,顾名 ...

  5. 使用openMVG+openMVS对自制数据集三维重建(单相机图片序列)

    1 对于单个相机拍摄的图像序列 很简单,将自己的图片放入一个文件夹,命令输入指向这个文件夹就好了: 1.1 Sequential & Incremental SfM pipeline $ cd ...

  6. 三维重建——纹理映射

    纹理映射部分主要编译运行了Github上两个以C++为主的源代码:G2LTex和mve两部分. G2LTex G2LTex源码链接:https://github.com/fdp0525/G2LTex ...

  7. 【论文笔记】基于 VR 的移动机器人真实环境三维建模系统

    文章目录 摘要 关键词 1 引言 2 系统框架 2.1 点云地图与重定位 2.2 生成模型地图 Step 1: 去噪声和降采样 Step 2: 计算每个点的法线 Step 3: Possion 曲面重 ...

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

    基于MVS的三维重建算法学习笔记(一)- MVS三维重建概述与OpenMVS开源框架配置 声明 1. MVS(Multi-view stereo)概述 稀疏重建与稠密重建的区别 稀疏重建--SFM(S ...

  9. 在win10+vs2019下对openmvg+openmvs的编译总结

    前言,相较于openmvs,openmvg的编译难度更低,所以大家可以先对openmvg进行编译. 针对openmvg的推荐视频:openmvg配置_哔哩哔哩_bilibili:推荐文章:OpenMV ...

最新文章

  1. class struct
  2. Eclipse中配置Tomcat
  3. python modbus tk 库_如何使用modbus tk rtu(python)设置简单的从机和主机
  4. JAVA实例,判断是否是瑞年
  5. Pokémon Go火遍全球,开启全民捕捉小精灵的时代
  6. 完善获取数据库数据的写法
  7. 电商无线页面设计手机移动端的设计模板
  8. 哪些是常用的数据分析方法
  9. 信息论的基本概念(自信息,条件熵,联合熵,互信息,条件互信息)
  10. SIM868获取LBS位置
  11. uml图中实线箭头和虚线箭头的区别
  12. 计算机航嘉快捷启动键,win7 u盘启动快捷键是什么|win7 u盘启动按哪个键
  13. 神经网络计算棒怎么用,微软神经网络计算棒
  14. 桌面级显卡天梯图(显卡性能对比图.2018.11)
  15. FL studio 20简易入门教程 -- 第四篇 -- 钢琴卷帘窗口与单轨乐器编辑界面
  16. linux 切换java_Linux中切换java的版本
  17. SQL题库:sqllearning4​—触发器、数据库存储练习
  18. Oracle批量清空表数据
  19. 计算机学院新生篮球赛名字,计算机学院新生篮球赛圆满结束,获奖队伍公布!...
  20. js中toString用法

热门文章

  1. vue项目使用百度地图
  2. HTTP status code is not handled or not allowed
  3. 基本分段存储管理方式详解
  4. 产品经理分析模型大全
  5. nodejs插入图片url到excel表中
  6. 路飞学城Python-Day35
  7. python下载文件传到服务器_python实现从ftp服务器下载文件
  8. 在Ubuntu上搭建FTE服务器
  9. 基于微信的旅游小程序、景区景点购票小程序、毕业设计、开题报告、毕业论文参考(2)Java管理后台、springboot框架
  10. nginx 服务器重启命令,关闭