linux下使用Bundler + CMVS-PMVS进行三维重建
一、简介Bundler和CMVS-PMVS是进行多视图三维重建的一套非常有用的工具包。Bundler利用一系列无序图片生成场景的稀疏点云,并且估计每一幅图片的相机参数(内参和外参)。CMVS-PMVS可以利用已知图片以及图片对应相机参数(使用Bundler求得)来进行稠密的三维重建(dense reconstruction)。二、源码下载我们直接从github上来下载Bun
一、简介
Bundler和CMVS-PMVS是进行多视图三维重建的一套非常有用的工具包。Bundler利用一系列无序图片生成场景的稀疏点云,并且估计每一幅图片的相机参数(内参和外参)。CMVS-PMVS可以利用已知图片以及图片对应相机参数(使用Bundler求得)来进行稠密的三维重建(dense reconstruction)。
二、源码下载
我们直接从github上来下载Bundler和CMVS-PMVS的源码,在linux 终端分别输入如下命令,等待下载完成。
- 1
- 2
由于Bundler要使用SIFT进行特征提取,我们还要去下面这个网站下载SIFT
- 1
三、安装依赖
为了编译和运行Bundler,我们需要安装如下依赖
- 1
接下来继续安装SIFT依赖
- 1
安装CMVS-PMVS依赖
- 1
四、编译Bundler和CMVS-PMVS
首先我们编译Bundler,在linux 终端使用cd命令进入到bundler_sfm下,也就是Makefile文件所在的目录,然后在终端输入make命令,回车等待编译完成。编译完成后会在bin目录下会生成可执行文件。为了使Bundler顺利执行,我们还要进行如下操作
- 找到下载的SIFT程序,解压之后将里边的sift可执行文件拷贝到bundler_sfm下的bin目录下。
- 安装依赖的时候我们安装了jhead,我们要将jhead文件拷贝到bundler_sfm下的bin目录下。可以使用命令
sudo cp /usr/bin/jhead bin/
- 将bundler_sfm/bin/目录下生成的libANN_char.so文件拷贝到系统库
-
cd bundler_sfm-master make
- 会生成libANN_char.so
sudo cp bin/libANN_char.so /usr/lib/
接下来我们继续对CMVS-PMVS进行编译,我们依然使用cd命令进入到CMVS-PMVS/program/下,然后依次执行以下命令
- 1
- 2
- 3
执行完成后,CMVS-PMVS也就编译完成了,生成的可执行文件位于build目录下的main目录中。为了接下来运行方便,我们将生成的可执行文件cmvs、genOption、pmvs2这三个文件拷贝到bundler_sfm目录的bin下。
五、执行Bundler和CMVS-PMVS进行三维重建
我们可以利用自带的example中的图片进行测试,我们以ET为例来说明如何进行三维重建。首先还是使用cd命令进入到ET文件夹下,然后执行以下命令
- 1
- 2
最终会生成很多的结果文件,其中bundler文件夹下的bundler.out中存储了重建的稀疏点3D坐标和相机参数。
接下来我们就可以利用PMVS进行稠密点云的重建了,在这之前我们还需要将Bundler的输出转换为CMVS-PMVS的输入格式。我们利用bin下的Bundle2PMVS即可完成这一过程。
- 1
- 2
此时会生成pmvs目录,在此目录下有prep_pmvs.sh文件,我们编辑此文件,将里边的BUNDLER_BIN_PATH修改为bundler的bin文件夹的实际路径。例如:
- 1
然后依次执行如下操作
- 1
- 2
- 3
- 4
生成的最终结果位于pmvs目录的models 文件夹下,名称为option-0000.ply,我们直接使用meshlab打开此文件便可以看到结果。如下图所示
我们也可以自己拍照片来进行三维重建,但是要注意两个问题
- Bundler在进行三维重建时会使用jhead 读取照片信息,然后根据读取的相机型号从bin目录下的extract_focal.pl文件中读取ccd_widths,如果你使用的相机不在此文件列表中,你需要查询自己相机的ccd_widths并按照格式手动加入extract_focal.pl文件。
- 图片尺寸问题。笔者在跑数据时,由于图片尺寸过大,导致失败,此时只需要将图片按比例缩放即可。在linux下推荐使用imagemagick,方便快捷。可参考http://blog.sina.com.cn/s/blog_68f88be10102vohm.html
最后附上自己的三维重建结果
此数据github地址如下
更多推荐
所有评论(0)