一、简介
Bundler和CMVS-PMVS是进行多视图三维重建的一套非常有用的工具包。Bundler利用一系列无序图片生成场景的稀疏点云,并且估计每一幅图片的相机参数(内参和外参)。CMVS-PMVS可以利用已知图片以及图片对应相机参数(使用Bundler求得)来进行稠密的三维重建(dense reconstruction)。
二、源码下载
我们直接从github上来下载Bundler和CMVS-PMVS的源码,在linux 终端分别输入如下命令,等待下载完成。
git clone https://github.com/snavely/bundler_sfm.git
git clone https://github.com/pmoulon/CMVS-PMVS.git
由于Bundler要使用SIFT进行特征提取,我们还要去下面这个网站下载SIFT
http://www.cs.ubc.ca/~lowe/keypoints/
三、安装依赖
为了编译和运行Bundler,我们需要安装如下依赖
sudo apt-get install liblapack-dev libblas-dev minpack-dev f2c gfortran jhead imagemagick
接下来继续安装SIFT依赖
sudo apt-get install libc6-dev-i386
安装CMVS-PMVS依赖
sudo apt-get install libgtk2.0-dev libdevil-dev libboost-all-dev libatlas-cpp-0.6-dev libatlas-dev libcminpack-dev libgfortran3 libmetis-edf-dev libparmetis-dev freeglut3-dev libgsl0-dev
四、编译Bundler和CMVS-PMVS
首先我们编译Bundler,在linux 终端使用cd命令进入到bundler_sfm下,也就是Makefile文件所在的目录,然后在终端输入make命令,回车等待编译完成。编译完成后会在bin目录下会生成可执行文件。为了使Bundler顺利执行,我们还要进行如下操作
sudo cp /usr/bin/jhead bin/
sudo cp bin/libANN_char.so /usr/lib/
接下来我们继续对CMVS-PMVS进行编译,我们依然使用cd命令进入到CMVS-PMVS/program/下,然后依次执行以下命令
mkdir build && cd build
cmake ..
make
执行完成后,CMVS-PMVS也就编译完成了,生成的可执行文件位于build目录下的main目录中。为了接下来运行方便,我们将生成的可执行文件cmvs、genOption、pmvs2这三个文件拷贝到bundler_sfm目录的bin下。
五、执行Bundler和CMVS-PMVS进行三维重建
我们可以利用自带的example中的图片进行测试,我们以ET为例来说明如何进行三维重建。首先还是使用cd命令进入到ET文件夹下,然后执行以下命令
../../RunBundler.sh
最终会生成很多的结果文件,其中bundler文件夹下的bundler.out中存储了重建的稀疏点3D坐标和相机参数。
接下来我们就可以利用PMVS进行稠密点云的重建了,在这之前我们还需要将Bundler的输出转换为CMVS-PMVS的输入格式。我们利用bin下的Bundle2PMVS即可完成这一过程。
../../bin/Bundle2PMVS prepare/list.txt bundle/bundle.out
此时会生成pmvs目录,在此目录下有prep_pmvs.sh文件,我们编辑此文件,将里边的BUNDLER_BIN_PATH修改为bundler的bin文件夹的实际路径。例如:
BUNDLER_BIN_PATH=/home/chao/AAAAAA/temp/bundler_sfm/bin
然后依次执行如下操作
sh pmvs/prep_pmvs.sh
../../bin/cmvs pmvs/
../../bin/genOption pmvs/
../../bin/pmvs2 pmvs/ option-0000 (注意option之前的空格键)
生成的最终结果位于pmvs目录的models 文件夹下,名称为option-0000.ply,我们直接使用meshlab打开此文件便可以看到结果。如下图所示
我们也可以自己拍照片来进行三维重建,但是要注意两个问题
最后附上自己的三维重建结果
此数据github地址如下
https://github.com/chao0210/multiview-dataset.git