Ubuntu 16.04下安装Bunlder和PMVS(CMVS)---很重要

前端之家收集整理的这篇文章主要介绍了Ubuntu 16.04下安装Bunlder和PMVS(CMVS)---很重要前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
 
 

一. 简介

Bundler和PMVS(CMVS)是进行三维重构中非常有用的一套工具包,Bundler利用一系列无序图片可以生成场景的稀疏点云,这些稀疏点云通过PMVS工具包可以得到稠密点云,从而可以重建出场景的3D模型。 Bundler是Noah Snavely博士采用C和C++开发的sfm(Structure from Motion)的系统,它能够通过对某个场景不同角度的多张图片生成稀疏点的三维信息,并且估计每一幅图片的相机参数(内参和外参)。最早的版本被用在Photo Tourism的项目上。 Bundler的输入是一些图像、图像特征以及图像匹配信息,输出则是一个根据这些图像反应的场景的3D重建模型,伴有少量识别得到的相机以及场景几何信息。系统借用一个由Lourakis 和Argyros提供的称为Sparse Bundle Adjustment的开发包的修改版,一点一点递增地重建出图像场景。Bundler已经成功的应用在许多网络相册系统,尤其是一些建筑相册里。 PMVS和CMVS(CMVS是PMVS的改进版,里面包含PMVS)是Yasutaka Furukama博士写的已知一组图片图片对应的相机参数生成dense reconstruction (稠密的三维模型)。

二. Bundler下载与安装

1. Bundler工具包下载

(1)Bundler下载 Bundler可以在官方进行下载,最近的安装包为bundler-v0.4-source.zip。也可以去GIthub上下载. (2)sift下载 Bundler工具包需要利用sift进行特征提取,可以去lowe大神的网站去下载.

2. Bundler编译安装

这里是官网的安装说明,但是我自己在安装的时候中间还是出了一些小问题,所以我在这里也记录了以下安装过程。 (1)Bundler编译 只需要进入Bundler根目录并执行make即可


  
  

(2)sift执行文件
Bundler的运行需要sift进行特征提取,这里我们对上面下载的sift源码进行编译,即可以获得sift的执行文件


  
  

然后将生成的"sift"文件拷贝到文件夹中。(bundler根目录下的bin文件夹)
此外我们还需要安装运行sift所需的一个依赖包,这个问题可以参见github上的issue #36,执行以下指令即可


  
  

否则的话,可能出现以下错误


  
  

sift_error.png

(2)jhead安装
如果出现下面错误的话,请安装jhead包,这个包应该是脚本./bin/extract_focal运行所需。


  
  

安装方法如下:


  
  

安装完成后需要将jhead文件拷贝到./bin下


  
  

(3)ANN共享文件配置
按照官网上所说,我们需要将/libANN_char.so加入系统库中。

copy the approximate nearest neighbors (ANN) shared library at BASE_PATH/lib/libANN_char.so
to a location in your LD_LIBRARY_PATH (or add BASE_PATH/lib to LD_LIBRARY_PATH

执行以下指令即可:


  
  

注意,此处的libANN_char.so文件是编译Bundler生成的,因此必须保证第(1)步编译成功。
下面是不配置出现的错误


error_ANN.png

3.测试

我们可以利用自带的example中的图片进行测试,例如我们以kermit为例:


  
  

最终会生成很多的结果文件。其中bundler文件夹下的中存储了重建的稀疏点3D坐标和相机参数。内容的具体格式可以参加/bundler/readme.txt。


bundler测试结果.png

4. Bundle2PMVS转换

在利用Bundler得到场景的稀疏点云后就可以利用PMVS进行稠密点云的重建了,当然在这之前我们还需要将Bundler的输出转换为CMVS-PMVS2的输入格式。我们利用bin下的Bundle2PMVS即可完成这一过程。


  
  

执行完毕后会有如下提示


  
  

此时会生成了pmvs子目录,里面有文件prep_pmvs.sh,我们需要执行,在执行前需要编辑prep_pmvs.sh,将修改为bundler的bin文件夹的实际路径。例如:


  
  

之后就可以执行了。然后,我们会得到txt,visualize,models目录和bundle.rd.out,list.rd.txt,vis.dat,pmvs_options.txt等文件,这些东西就可以作为PMVS的输入了。

三. PMVS(CMVS)的下载与安装

1. PMVS(CMVS)下载

Bundler官网上提供的PMVS链接已经失效,PMVS2和CMVS的官网地址分别为:http://www.di.ens.fr/pmvs/http://www.di.ens.fr/cmvs , 我们可以在上面下载PMVS和CMVS。
PMVS2的下载包为:pmvs-2-fix0.tar.gz
CMVS的下载包为:cmvs-fix2.tar.gz (243Mb)

2. PMVS(CMVS)安装

(1) PMVS2安装
安装可以参考官网的官方说明

Compilation
We suggest on using the binary distribution,but if you choose to compile the source codes,try the following.Make sure you have all the libraries listed above in your system.
Go to directory "program/main"
Add INCLUDE and LDLIBRARY paths to Makefile
make depend
make

按照官方这个说明一步步进行。需要注意的是我们可能需要安装一些依赖包:


  
  

此外还需要一个编译过的目标文件 mylapack.o (该文件貌似在老版本里,新版本里不知为何移除了?),参考这里.
编译过程中可能出现的错误


  
  

修改方法主要参考了这里:

Update ../base/numeric/mylapack.cc
From:
extern "C" {
#include <clapack/f2c.h>
#include <clapack/clapack.h>};
To:
extern "C" {
//#include <clapack/f2c.h>
//#include <clapack/clapack.h>
#include <lapacke.h>};
#define integer int

Update ../base/numeric/mylapack.h
From:
static void lls(std::vector<float>& A,std::vector<float>& b,long int width,long int height);
static void lls(std::vector<double>& A,std::vector<double>& b,long int height);
To:
static void lls(std::vector<float>& A,int width,int height);
static void lls(std::vector<double>& A,int height);

(2) CMVS安装
安装可以参考官网的官方说明
1)安装依赖软件和库

  • Bundler
  • PMVS2
  • Graclus。下载完后需要根据个人系统是32位还是64位修改下编译配置文件Makefile.in中的option项即
    修改完成后在终端执行即可。

2)安装CMVS


  
  

然后讲下载的CMVS包解压并将文件(夹)覆盖PMVS的文件夹。然后修改Makefile文件,只要是要将前面安装的Graclus的目录包括进去。


  
  

注意前面要加上“-I"。同时需要将下的ibmetis.a、libmultilevel.a两个文件放置到Makefile里设置的YOUR_LDLIB_PATH路径下。另外值得注意的是,下载的cmvs中的Makefile文件里有两行(10,13行)说明内容没有注释掉,需要手动注释(前面加#号即可)。
修改完Makefile文件后即可。

按照上面方法修改之后重新即可。
安装成功后将会得到 pmvs2、cmvs、genOption三个二进制文件

3. PMVS使用

以PMVS工具包里自带的data/hall为例:

  • 默认指令
  • 如果你的机器内存不是很大的话,可以分成两步执行
  • 如果你的机器内存足够的话,可以常识下面指令获得稠密点云
    结果将会保存在文件夹hall/models/下,如果采用的是默认指定,那么将会得到以下三个文件
  • outputs.option.txt.ply (colored 3d points for visualization)
  • option.txt.patch (full reconstruction information)
  • option.txt.pset (input file for PoissonSurfaceRecon by Michael Misha Kazhdan and Matthew Bolitho)

这几个文件中保存的就是稠密重建点云信息。

4. CMVS使用

使用可以参考官方文档

Command specifications
cmvs
Usage: ./cmvs prefix maximage[=100] cpu[=4]
Example: If you want to specify maximage=70 and cpu=6 with the data directory located at ./pmvs,try the following command
./cmvs ./pmvs/ 70 6
You should choose maximage based on the amount of memory in your machine.
cpu should be the number of (virtual) cpus or cores in your machine.
If you want more control of the program,look into the comments inside program/main/cmvs.cc
genOption
Usage: ./genOption prefix level[=1] csize[=2] threshold[=0.7] wsize[=7] minImageNum[=3] cpu[=8]
Parameters are for PMVS2 option files.

5. 稠密点云的可视化

上面利用PMVS进行稠密重建得到的结果outputs.option.txt.ply可以用一些可视化软件进行显示,这里我们可以采用MeshLab

四. 参考内容

-END-
作者:mac在路上链接:http://www.jianshu.com/p/ef3ef6fdf354來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。cd bundler_sfm-master makecd siftDemoV4/siftDemoV4 makebundler_sfm-master/binsudo apt-get install libc6-dev-i386sift.txt: 1: sift.txt: ../../bin/sift: not found[extract_focal] Error: jhead not found. Please install jhead to ./binsudo apt-get install jheadsudo cp /usr/bin/jhead ./binsudo cp ./lib/libANN_char.so /libcd ./examples/kermit ../../RunBundler.shbundler.out../../bin/Bundle2PMVS prepare/list.txt bundle/bundle.init.out@@ Conversion complete,execute "sh pmvs/prep_pmvs.sh" to finalize @@ (you will first need to edit prep_pmvs.sh to specify your bundler path,@@ so that the script knows where to find your @@ RadialUndistort and Bundle2Vis binaries)sh pmvs/prep_pmvs.shBUNDLER_BIN_PATHBUNDLER_BIN_PATH=/media/machao/Data/chma/bundler_sfm-master/binsh pmvs/prep_pmvs.shsudo apt-get install libgtk2.0-dev libdevil-dev libboost-all-dev libatlas-cpp-0.6-dev libatlas-dev imagemagick libcminpack-dev libgfortran3 libmetis-edf-dev libparmetis-dev freeglut3-dev libgsl0-dev sudo apt-get install libgsl0-dev libblas-dev libatlas-dev liblapack-dev liblapacke-devg++ -c -O2 -Wall -Wno-deprecated -I/usr/include ../base/numeric/mylapack.cc ../base/numeric/mylapack.cc:6:25: fatal error: clapack/f2c.h: No such file or directory compilation terminated. Makefile:39: recipe for target 'mylapack.o' FailedCOPTIONS = -DNUMBITS=32 #32位机器 COPTIONS = -DNUMBITS=64 #64位机器makecd ./pmvs-2 // Go to PMVS2 directory mv program/main/Makefile program/main/Makefile.bak // Back-up MakefileYOUR_INCLUDE_METIS_PATH = -I/path/to/your/graclus1.2/metisLibgraclus1.2make../base/cmvs/bundle.cc:1134:52: error: ‘accumulate’ was not declared in this scopemake./pmvs2 ../../data/hall/ option.txt./pmvs2 ../../data/hall/ option.txt-0000 ./pmvs2 ../../data/hall/ option.txt-0001./pmvs2 ../../data/hall/ option-highres.txt

猜你在找的Ubuntu相关文章