博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】win7 64位配置bundler-v0.4-source
阅读量:4625 次
发布时间:2019-06-09

本文共 3850 字,大约阅读时间需要 12 分钟。

一。什么是Bundler

 

        

       Bundler是一个采用C和C++开发的称为SfM(struct-from-motion)的系统,实现了根据用户提供的无序的图像序列,生成稀疏的三维点云模型。它能够利用无序的图片集合(例如来自网络的图片)重建出3D的模型。最早的版本被用在Photo Tourism的项目上。

        Photo Tourism系统可以交互式浏览和探索大型非结构化场景照片集合。系统有一个基于图像的建模前端,它会自动计算每一张照片的角度,以及稀疏模型对应的场景和形象的三维模型。

 

图1.Photo Tourism

        Bundler的输入是一些图像、图像特征以及图像匹配信息,输出则是一个根据这些图像反应的场景的3D重建模型,伴有少量识别得到的相机以及场景几何信息。系统借用一个由Lourakis 和Argyros提供的称为Sparse Bundle Adjustment的开发包的修改版,一点一点递增地重建出图像场景。Bundler已经成功的应用在许多网络相册系统,尤其是一些建筑相册里。

 

 

二。过程如下:

 

1.访问 http://www.cs.cornell.edu/~snavely/bundler/ 下载并解压。

 

 

 

2.在windows平台下,使用visual studio2010打开bundler-v0.4-source目录下的vc++目录中的工程文件:Bundler.sln;

 

       然后按顺序逐个编译bundler所需的依赖库,

       有:5point、ann_1.1_char、cblas、getopt、imagelib、jpeg、matrix、sba-1.5、sfm-driver、f2c、clapack、cminpack等。

编译f2c时,会给出无法找到#include "sysdep1.h"文件的错误 以及会提示无法找到#include "arith.h"文件的错误。

解决方法:进入f2c的目录,

                  1>将sysdep1.h0文件名修改为sysdep1.h;

  2>将signal1.h0文件名修改为signal1.h;

  3>新建一个arith.h文件,在文件里添加如下内容即可:

#define IEEE_8087

#define Arith_Kind_ASL 1
#define Long int
#define Intcast (int)(long)
#define Double_Align
#define X64_bit_pointers
#define QNaN0 0x0
#define QNaN1 0xfff80000

这时,编译f2c,便成功了。

接下来编译keyMatchFull和Bundler项目,一切顺利。:-)

 

为了进行获得稠密的三围重建效果,利用Bundler提供的Bundle2PMVS和RadialUndistort工具,生成稠密重建软件所需的参数。

编译Bundlr2PMVS时,在Bundle2PMVS.cpp文件中会出现“未知的标识符mkdir”的错误。

解决方法

1>在文件的开头添加#include <direct.h>,

2>将mkdir替换为_mkdir,如下所示:

//mkdir(output_path, 0770);

_mkdir(output_path);

至此,Bundle2PMVS编译成功。

 

编译RadialUndistort时,在RadialUndistort.cpp文件中会出现“无法识别的标识符index” 以及 无法打开jpeglib.h。

解决方法:1>修改代码如下所示:

//char *space = index(buf, ' ');

//if (space) *space = 0;

std::string str(buf);

int space_pos = str.find(' ');
str.at(space_pos) = 0;
files.push_back(str);

     2>修改LoadJPEG.cpp的头文件为#inlcude "jpeglib.h",然后添加jpeglib.h的路径如下:

 

至此,RadialUndistort编译成功。

 

 

 

 

3.在成功执行Bundler前,我们需要做几步准备工作:

 

(1)将需要的文件复制到指定目录

        Bundler生成完成后,需要将bundler-v0.4-source\vc++\Debug\目录下的Bundler.exe、Bundle2PMVS.exe、KeyMatchFull.exe、RadialUndistort.exe、jpeg.dll、ann_1.1_char.dll文件统统考到bundler-v0.4-source\bin\目录下。

 

(2)下载和安装Cygwin

        Cygwin是许多自由软件的集合,最初由Cygnus Solutions开发,用于在各种版本的Microsoft Windows上运行UNIX类系统。由于Bundler默认是通过在Unix环境下执行shell脚本来启动Bundler的,因为在Windows环境下需要安装Cygwin以执行shell脚本。

        Cygwin的下载地址:

        Cygwin的安装过程:

 

图10.选择下一步

 

图11.选择Install from Internet

 

图12.选择下载目录

 

图13.选择连接方式 Use Internet Explorer Proxy Settings

 

图14.这里弹出的警告一定要选择“确定”

图15.选择需要的安装包

 

        肯定需要使用Devel组件,但不必全部安装,选择里面的四个关键包安装即可,为了使我们安装的Cygwin能够编译程序,我们需要安装gcc编译器,默认情况下,gcc并不会被安装,我们需要选中它来安装。为了安装gcc,我们用鼠标点开组件列表中的“Devel”分支,在该分支下,有很多组件,我们必须的是:

binutils

gcc

//gcc-mingw

gdb

图16.打开Devel分支

 

 

 

 

 

 

 

 

图20.选择gdb

 

        但要注意一点,Bundler程序中会使用perl、python来进行一些预处理,因此在安装过程中需要把Devel、Perl、Python三个组件库都选上。另外还有ImageMagick这个库,用来处理图片。

 

图21.选择ImageMagick库,在Graphics分支下

 

图22.选择perl、python组件库

 

图23.安装完成(时间可能比较长)

(3)下载特征检测器

        Bundler推荐使用SIFT来进行特征提取,可以到SIFT的作者David Lowe的主页上下载他提供的SIFT Demo作为我们的检测器。下载页面为:或者直接点击下载地址下载:

        下载完成后,解压该文档,将目录下的siftWin32.exe文件拷贝到bundler-v0.4-source\bin目录中。

图24.特征检测器

 

(4)准备图片

        将要进行分析处理的图片放到一个目录里,Bundler自己也提供了两套图片,分别放在bundler-v0.4-source\examples\ET和bundler-v0.4-source\examples\kermit中。

 

(5)运行Bundler

        打开Cygwin,cd定位到BASE_PATH目录下(你的Bundler所在目录,定位方法参见Cygwin指令),然后输入下面的命令:./RunBundler.sh examples/ET 或者:./RunBundler.sh examples/Kermit

 

./RunBundler.sh examples/ET   ./RunBundler.sh examples/Kermit

  

 

 

 

 

 

 

图27.Bundler输出的结果(目录bundle)

 

 

 

4.后续工作

 

Bundler输出的文件大多以“bundle_*.out”的形式来命名,我们称之为“bundle文件”。缺省命令下,Bundler在每张图片经过分析和注册(register)后都会输出一个相应的bundle文件用来保存当前的状态信息,并以“bundle_<n>.out”的形式命名。当所有的文件都注册后,Bundler就会输出一个最终的文件“bundle.out”。另外,每一回合结束时还会紧接着生成一些后缀名为“ply”的文件,这些文件包含的是经过重建后的相机和点的信息。这些ply文件可以通过使用专用的查看器scanalyze来查看,地址为:。当然也可以通过meshlab来查看,下载地址为:。

利用Bundler可以得到较为稀疏的点云(pointclouds)数据。如果需要得到更密集的点,可以使用Yasutaka Furukawa博士写的另外一个非常强大的软件包,称为PMVS2,下载:。一种比较常见的途径是使用Bundler来得到相机参数,然后使用Bundle2PMVS程序,将生成结果转换为PMVS2的输入,然后使用PMVS2来得到更密集的点云。另外,读者们可能会对另外一个同样由Furukawa博士开发的实用工具——CMVS感兴趣,CMVS是一个场景聚类程序,在使用PMVS2前可以使用它来进行一些预处理,下载:。

 

 

转自:http://m.blog.csdn.net/blog/u010069101/23294019#

转载于:https://www.cnblogs.com/baozhilin/p/4604738.html

你可能感兴趣的文章
psp工具软件前景与范围文档
查看>>
day06-三元表达式
查看>>
C# DateTime.Now详细用法
查看>>
Php中"{}"大括号的用法总结(转)
查看>>
JavaScript内存优化
查看>>
BZOJ1059: [ZJOI2007]矩阵游戏(二分图匹配)
查看>>
P3385 【模板】负环
查看>>
URI、URL 和 URN的区别
查看>>
根据表达式序列(前缀、中缀、后缀)构建表达式树
查看>>
mysql性能优化
查看>>
【SqlServer系列】语法定义符号解析
查看>>
Color Length UVA - 1625
查看>>
TLS/SSL
查看>>
zoj2319Beautiful People Dp
查看>>
图片加载 背景色块问题
查看>>
Static Binding (Early Binding) vs Dynamic Binding (Late Binding)
查看>>
搭建git服务器
查看>>
iOS之UIDynamic UI动力学使用步骤
查看>>
poj 2498 动态规划
查看>>
Windows Phone 7中使用PhoneApplicationService类保存应用程序状态
查看>>