基于图像的三维重建研究

前言

三维重建,顾名思义就是对现实世界中的三维物体用计算机来进行模拟。目前主流的有两种手段:采用红外设备对物体进行测距、基于多张有关待测物体的二维图像进行三维重建。由于前者需要红外设备,成本比较昂贵且不易操作,但是随着计算机视觉以及硬件的发展,基于图像的三维重建正慢慢走入实际应用中。本博文主要讲的是后者基于图像的三维重建实现流程。

基于图像的三维重建,一般分为三个步骤:稀疏重建、密集重建、表面重建。对于三维重建的显示我采用的是开源良好的软件meshLab。本文主要讲一下我实现三维重建的各同方法,供大家参考,首先我先祭出一张图,来总结下目前研究三维重建的一些主流组合。

其中,绿色代表着可以实现,反之红色代表着不可实现。

实现三维重建的不同组合

基于图像的三维重建,我试过多种组合都得到了相应的三维模型,其实主要是三维稀疏重建步骤换了好多源码,其余的像密集重建的pmvs和用于三维显示的meshlab都很友好,实现三维重建的组合如下:

  • visualSFM + meshlab (windows)
  • bundler + PMVS/CMVS + meshlab (linux)
  • openMVG + PMVS/CMVS + meshlab (linux)
  • openMVG + PMVS/CMVS + meshlab (windows)

接下来具体来叙述下他们的编译及实现流程,在此先说一下,因为密集重建PMVS和meshlab在这些组合中都是共通的,
所以我准备按照三维重建的顺序来讲,把这两个软件编译及实现步骤放到后面统一讲解。

一、visualSFM

环境:

系统:win7 64位

引言

想必这应该是实现三维重建中最简单的软件了吧,网上也有好多有关他的使用介绍。这个软件也可以让初学者能够较快的体验到三维重建的效果,对初学者的体验比较好。此软件无需编译,简单来讲就是从官网上下载Zip包,直接解压运行其中的exe即可,然后按照教程进行导入图片,提取特征,特征匹配,sfm三维重建,一套操作下来,就可以得到三维重建模型了。

具体操作

官网地址:http://ccwu.me/vsfm/,去官网找软件下载包。
当然官网上说的很清楚了,以下截图足以说明一切:

在此补充一句,因为visualSFM是有密集重建这一步的。最后如上所述一通操作后,最后会在根目录下生成**.nvm.cmvs文件夹,其中有个00文件夹,这个文件夹就是meshlab显示所需要的输入,想要知道如何通过meshlab显示三维模型,请移步至meshlab介绍。在此多说一句,其中option-0000.ply的文件则记录的是三维重建后物体三维坐标。

结果:

最终三维重建的结果如下:

评价:

该开源软件具体来说应该算是半开源软件,虽说免费使用,但是并没有给开源代码,难以在此基础上进行改进。
最后给出visualSFM软件及图片下载链接:https://download.csdn.net/download/liu14lang/10526902

二、bundler + PMVS/CMVS + meshlab

环境

系统:Ubuntu 16.04LTS

引言

该软件相比较于之前的visualSFM算是比较复杂了,

具体操作

  • 老规矩,到官网http://www.cs.cornell.edu/~snavely/bundler/上找下载包。
  • 此软件我只在Linux环境下实现了三维重建,在windows下不好操作。故以下讲的是在Linux下进行的操作,当然如果英语好的同志可以去官网上找教程,那上面的教程铁定比我详细。教程链接:http://www.cs.cornell.edu/~snavely/bundler/bundler-v0.4-manual.html。
  • 或者我参考的是网上这位老兄写的博客,传送门:https://blog.csdn.net/zouyu1746430162/article/details/78638133,他已经讲的很详细了,在此我就不再赘述啦。

结果

评价

该软件比较局限,在windows平台下不好编译,并且该软件不适用于大规模场景的三维重建。

三、openMVG + PMVS/CMVS + meshlab (linux)

环境

系统:Ubuntu 16.04LTS

引言

之前由于见识不够广泛,居然没有听说过如此良好的源码。当用了之后,才发现基于图像的三维稀疏重建至今为止最友好的源码应该非他莫属了。他的效果不仅好,而且文档写的非常的规范,而且三维稀疏重建仅仅是他开源库的一部分,他还有别的功能,具体见他的开源库地址:https://github.com/openMVG/openMVG,
官方文档:https://openmvg.readthedocs.io/en/latest/。

具体操作

有关稀疏重建的文档链接:https://openmvg.readthedocs.io/en/latest/software/SfM/SfM/
我参考的博客链接有:
http://tombraiderjf.com/2018/01/02/openMVG%E5%92%8CPMVS%E4%B8%89%E7%BB%B4%E7%82%B9%E4%BA%91%E9%87%8D%E5%BB%BA/

我按照他讲的成功的在Ubuntu上跑起来了,当然其中有一一些地方是比较坑的,比如:

  • openmvg中提供了两种稀疏重建方法,对于这两种稀疏重建他分别建立了不同的文件件名字,可能在文档中写的不够清楚,所以可能会出现找不到类似路径问题,碰到此问题,一定要检查下路径是否正确。
  • 三维稀疏重建是需要相机参数的,openMVG提供了一些相机的焦距,保存在sensor_width_camera_database.txt中,如果你的相机不在此文件中,则需要另外提供相机焦距信息。
  • 最后可以先试着按照那篇博客把openMVG编译好,然后再按照给的官方文档根据自己的需求一步一步地进行重建。

结果:

四、openMVG + PMVS/CMVS + meshlab (windows)

引言

因为在实际应用中,windows系统还是占大多数的,所以要想应用广泛,则需要开发一般windows下能运行的软件。所以这节讲下如何在windows下编译openMVG。

环境

系统:win7
IDE:visual studio 2017
cmake:3.10

具体操作

  • 在https://github.com/openMVG/openMVG上将源码下载下来
  • 利用cmake进行编译,具体怎么编译,自行百度,没有什么难度。需要注意的是编译vs版本选择vs2017 64位系统(根据自己的版本来定,建议版本越高越好)
  • 编译后运行openMVG.sln文件,然后根据官方文档按照自己的需求一步一步地进行重建

在此贴出我编译后出来的结果:

其中箭头指的就是按照官方文档上的步骤。

结果

与Linux下的结果差不多

评价

目前为止,我试过的最好的稀疏重建实现源码了,当然还有一些我没有试过。

五、CMVS/PMVS

引言

稀疏重建就讲到这里了,本节讲下密集重建。之前也讲过,密集重建的开源软件比较友好,小白也能够运行起来。但是算法非常的复杂,对于我们只在乎工程项目的话,只要代码能较好的应用就够了。

环境

系统:win7

具体操作

(1)在https://github.com/pmoulon/CMVS-PMVS地址上下载源码

(2)解压,如下图所示:

(3)打开命令框进入此文件路径。

(4)在命令框中输入cd .\binariesWin-Linux\Win64-VS2010

(5)将稀疏重建后的pmvs文件夹放入.\binariesWin-Linux\Win64-VS2010路径中

(6)在命令框中输入cmvs pmvs/

(7)在命令框中输入genOption pmvs/

(8)在命令框中输入pmvs2 pmvs/ option-0000 (注意option之前的空格键)

(9)最后在 ./pmvs/model 路径下会有一个.ply文件,里面存储的就是实际物体的三维坐标以及相机信息。这也是meshlab的输入文件。

六、meshlab

参考我另一篇博文:https://blog.csdn.net/liu14lang/article/details/79145057

你可能感兴趣的:(日志)