本人按照
http://blog.csdn.net/zzzblog/article/details/17166869
http://oliver.zheng.blog.163.com/blog/static/1424115952011915113138431/这两篇文章运行,发现在我的电脑上有些地方运行不对。所以我按照我能运行的步骤重新写一下。
本人电脑是WIN8,64位操作系统。交代完毕,下面开始。(红色部分是需要特别注意的地方,以及我认为需要改进的地方,加上更多的图,方便使用)
Bundler是Noah Snavely博士写的Structure from
Motion的工具包。它能够通过对某个场景不同角度的多张图片生成稀疏点的三维信息,并且估计每一幅图片的相机参数(内参和外参)。Bundler属于SFM的范畴。
PMVS和CMVS(CMVS是PMVS的改进版,里面包含PMVS)是Yasutaka
Furukama博士写的已知一组图片和图片对应的相机参数生成dense reconstruction
(稠密的三维模型)。
Bundler的配置:
Bundler的配置有两种途径:1)通过makefile;2)通过VS。这里我不建议用VS配置。因为VS配置出来的少了一个Bundle2Vis.exe。而且代码几个错误需要改,比较麻烦,如果一定想在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),
安装时选择全部安装, 大约要用掉16G硬盘空间.
(2)
下载并解压Bundler源码bundler-v0.4-source.tar.gz(下载地址:http://phototour.cs.washington.edu/bundler/),
假设
Bundler的安装位置在/bundler
(3)
编译Bundler
在编译之前请大家在/src打开Bundle2PMVS.cpp将217行的
$ cd /bundler
$
make
(在编译到BundlerApp.h文件第620行, 出现错误:
不能直接调用构造函数‘SkeletalApp::BundlerApp‘)该头文件在/bundler/src目录中, 注释掉该行, 继续make,
可以通过编译此次make共生成bundler.exe, Bundle2PMVS,exe, BundleVis.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 /bundler
$ mkdir
result(建立result文件夹,存放输出结果)
$ cd
result(进入result文件夹)
$ ../RunBundler.sh
..examples/ET (注:
../examples/ET指明用于进行多视角重建的图像所在目录)此时已经运行完Bundler,
在./bundle/bundle.out文件里有重建的稀疏点3D坐标和相机参数,
具体说明参见/bundler/readme.txt。
这样/bundler会生成两个文件夹/bundle和/prepare。
(注意红线里的“..”的个数,这里面涉及到目录问题)
(6)
将Bundler的输出转换为CMVS-PMVS2的输入
Bundler会生成一个Bundle2PMVS.exe用于将Bundler生成的结果转化成CMVS要求的输入。注意这里的操作一定是在bundler的根目录下面。否则后面生成的目录文件会有错
$
../bin/Bundle2PMVS.exe prepare/list.txt bundle/bundle.out(前面也是两个点,看下图红线以内,第一次我就是少了一个点,出错了)
此时生成了pmvs子目录, 编辑里边的prep_pmvs.sh(用到工具EditPlus 3,网上可以搜到),
指明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子目录的文件如下图:
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\Win64-VS2010文件夹中的文件全部拷贝到之前的result文件夹目录下(下图这些文件)。
打开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模型文件用下面的软件可以查看。
稠密网格的显示:
我们这里使用的是MeshLab:http://meshlab.sourceforge.net/
(1)
创建一个新的New Empty Project。
(2)
File->ImportMesh,进入E:\bundler\result\pmvs\models,读入里面的模型文件(如图所示)
下一篇写写关于3D运动学的一些基础知识