您的位置:首页 > 产品设计 > 产品经理

WINDOWS XP,32位下 编译运行Bundler,并利用PMVS,CMVS生成密集点云模型

2014-07-26 09:54 357 查看
本人最近在看关于SFM(Structure from Motion运动恢复结构)的相关算法,了解到国外的很多学者在这方面已经研究的非常成熟,成果也很多了。其中Bundler就是其中的一个Strcture from Motion开发工具包,它由Noah Snavely博士所编写,里面有开源的代码供我们参考。这个工具包能够通过对某个场景不同角度的多张图片生成稀疏点的三维信息,并且估计每一幅图片的相机参数(内参和外参)。

由于上面得到的点云信息相对稀少(这个可能是图片数量过少导致),重建效果看起来并不是特别的真实,因此PMVS和CMVS(CMVS是PMVS的改进版,里面包含PMVS)便应运而生,他们可以接收Bundler生成的数据,生成密集的三维模型结构。他们是由Yasutaka
Furukama博士编写。输入一组图片和图片对应的相机参数,便可输出dense reconstruction (稠密的三维模型)。

事先声明,本人用的是WINDOWS XP 32位系统,以下的一些配置针对该系统进行相应的配置,其中参考了许多前人的文章,这在最后会统一给出他们的链接,他们也有针对其他不同的系统的,如果系统不同,请点击链接看他们的博客。本篇的博客主要分成三部分;第一部分是Bundler的配置与运行;第二部分是运用Bundler生成的数据生成密集点云模型;第三部分是.ply模型数据的观测。其中标红的是我在看别人文章并进行配置中得到的需要注意的地方,并加上我自己的理解和遇到的问题。
1.Bundler的配置与运行:
Bundler的配置有两种途径:1)非Windows系统下,通过makefile配置;如果我们想在Windows下运行,就需要装虚拟系统或相关虚拟的运行软件,比如CYGWIN(UNIX虚拟系统),这也是本文采用的方法。2)Windows系统下,通过VS进行配置。这个方法,本人尝试过,确实比较麻烦,有许多错误需要改,但是也花不了多久时间,对于不需要进行密集点云生成的小伙伴可以尝试这种方法。但是如果大家需要生成密集点云模型的则不能采用VS配置。因为VS配置出来的执行文件缺少了一个Bundle2Vis.exe(这是后期进行pmvs转换时必不可少的文件),所以建议大家采用本文下述的方法。VS下配置请参考:http://blog.csdn.net/halfwet/article/details/6973918。有博主说在Bundler2PMVS中,我将//mkdir(output_path,0770)修改成mkdir(output_path)而不是博客所说的_mkdir(output_path),才成功的。这一点本人表示同意,亲自验证过。下面就针对前人的总结,写一写我的配置过程。

(1) 下载并安装CYGWIN(下载地址: http://cygwin.com),注意这里我们选择比较新的版本进行下载,以防某些命令在旧的版本是没有的,这个问题我遇到过,花费了好长时间进行安装。安装时选择全部安装,越新版本的占用内存愈大,注意自己的内存空间。

(2) 下载并解压Bundler源码bundler-v0.4-source.tar.gz(下载地址:http://phototour.cs.washington.edu/bundler/),
假设

Bundler的安装位置在E:/bundler。
(3)
编译Bundler
在编译之前请大家在/src打开Bundle2PMVS.cpp将217行的
fprintf(f_scr, "mv pmvs/%s.rd.jpg %s/visualize/%08d.jpg\n",
修改为 fprintf(f_scr, "mv %s.jpg %s/visualize/%08d.jpg\n",。原因后面第(6)步大家会知道。这里需要注意前面标红的逗号,复制粘贴的话注意不要忘记逗号,否则会报错。
$ cd E:/bundler

$ make
这里注意,如果上面安装的cygwin如果不全,可能回到导致令人诧异的错误,我就遇到难以理解的错误,比如direct.h找不到,一些命令没有等等错误。
(在编译到BundlerApp.h文件第620行,
出现错误:
不能直接调用构造函数'SkeletalApp::BundlerApp')该头文件在/bundler/src目录中,
注释掉该行,
继续make, 可以通过编译此次make共生成bundler.exe, Bundle2PMVS.exe, Bundle2Vis.exe,
KeyMatchFull.exe, RadialUndistort.exe, libANN_char.dll, 都放置在/bundler/bin目录下。

(4) 下载SIFT(下载地址: http://www.cs.ubc.ca/~lowe/keypoints/siftDemoV4.zip),
解压后将其中的siftWin32.exe拷贝到/bundler/bin,
这个siftWin32.exe会被Bundler调用作为特征点探测器。

(5) 运行Bundler

Bundler里面有两个examples,里面存放了若干不同视角的图片,我们使用其中的一个example kermit。

$ cd E:/bundler

$ mkdir result(建立result文件夹,存放输出结果)
$ cd result(进入result文件夹)

$ ../RunBundler.sh ../examples/kermit (注: ../examples/kermit指明用于进行多视角重建的图像所在目录)此时已经运行完Bundler,
在./bundle/bundle.out文件里有重建的稀疏点3D坐标和相机参数,
具体说明参见/bundler/readme.txt。

这样/bundler会生成两个文件夹/bundle和/prepare。
这里提示一下,如果大家不知道这个./用法,大家最好查一下,以防后面被一个点两个点弄糊涂了。这里和后面用到的主要是两种
"./"代表当前所在目录下
"../"代表当前目录的上一级目录下





(6)
将Bundler的输出转换为CMVS-PMVS2的输入

Bundler会生成一个Bundle2PMVS.exe用于将Bundler生成的结果转化成CMVS要求的输入。注意这里的操作一定是在bundler的根目录下面否则,后面生成的目录文件会有错。(这句我一直没搞懂,但是在当前的result目录下运行下面的语句是可以得到正确的结果的)。
$ ../bin/Bundle2PMVS.exe prepare/list.txt bundle/bundle.out(前面也是两个点,看下图红线以内,第一次我就是少了一个点,出错了)



此时生成了pmvs子目录,
编辑里边的prep_pmvs.sh(用到工具EditPlus 3,网上可以搜到;或者我用的是写字板编辑,然后利用dos2unix命令将.sh文件转换成unix需要的格式),
指明BUNDLE_BIN_PATH路径来寻找RadialUndistort.exe和Bundle2Vis.exe。注意我们用的是Cygwin所以改BUNDLE_BIN_PATH要注意目录的格式,比如我的Bundler在E盘根目录,那么BUNDLER_BIN_PATH=/cygdrive/e/bundler/bin(地址不能有空格;同时注意目录中斜线的方向)

(7) 完成最后的转换$ ./pmvs/prep_pmvs.sh

在pmvs目下生成txt, visualize, models目录和bundle.rd.out,
list.rd.txt, vis.dat, pmvs_options.txt文件,
这些都是PMVS2的输入。pmvs子目录的文件如下图:



其中,我自己配置的结果是没有上面倒数第二个文件.bak。这个目前不知有什么用。
2.CMVS-PMVS的配置,生成密集的点云模型:
Yasutaka Furukama网站上提供的CMVS是基于Linux上的比较。好在有个人将它转成了可以在Windows下运行的文件,见http://francemapping.free.fr/Portfolio/Prog3D/CMVS.html

(1) 下载CMVS-PMVS并解压缩。发现里面有一个binariesWin-Linux文件夹,里面有配置好的基于Linux,Win32,和Win64的可执行程序,将CMVS-PMVS-master\binariesWin-Linux\Win32-VS2010文件夹中的文件全部拷贝到之前的result文件夹目录下(下面这些文件)。
pmvs2.exe,cmvs.exe,genOption.exe,pthread.dll.


打开cmd
1.进入E盘(E:)
2.进入bundler/result文件夹下(cd E:\bundler\result)
3.输入cmvs pmvs/



4.输入genOption pmvs/(这一步不知道做什么的。。。)
5.pmvs2 pmvs/ option-0000(注意option之前的空格键)





这样,我们发现/pmvs/models/文件夹多了几个文件,其中*.ply文件为3D模型文件用下面的软件可以查看。




3.稠密点云模型的观测:

大家推荐的是使用的是MeshLab:http://meshlab.sourceforge.net/

(1) 创建一个新的New Empty Project。

(2) File->ImportMesh,进入E:\bundler\result\pmvs\models,读入里面的模型文件(如图所示)





本人用的3D观测软件是CloudCompare,下载地址:http://www.danielgm.net/cc/,用法类似与上面,只要加载.ply文件便可以了,效果与上面一样。

本人也尝试了blender,但是blender给出的三维点云图没有颜色,这个目前没搞清楚,如果有大牛知道,希望不吝赐教小弟一下~





本人参考的一些博客文章链接:

http://www.cnblogs.com/mothe123/p/3570981.html
/article/1835118.html
http://oliver.zheng.blog.163.com/blog/static/1424115952011915113138431/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: