天河一号机上bundler配置总结

因为毕业设计选了李坤老师的题目,关于城市场景的三维重建,而用到天河一号的计算资源,并接触到了很多sfm,bundler, bundle adjustment等东西。首先要在机器上安装bundler实现整个重建过程,现在把其总结如下。

bundler是华盛顿大学计算机学院的Noah Snavely所写,具体介绍及软件下载地址在软件主页上有,这里就不多说了,主页地址:http://phototour.cs.washington.edu/bundler/

我用的是最新的版本0.4版,其不仅支持Linux,也支持在wiindows下的使用,因为我所使用的环境是天河一号机,操作系统是openSUSE64位版,所以只谈一下在此环境下的安装心得。


先介绍一下整个Bundler的工作过程。

1、找到输入的.jpg文件所在目录,然把所有图片文件的后辍改为统一的小写.jpg,方便后续处理,然后对每个文件读取其exif信息,同时生成一个所有.jpg文件的列表list.txt;

2、使用ImageMagick的一个命令将所有的.jpg文件转化成.pgm文件(源文件保留),然后对.pgm文件执行sift,将找到的点输出到文件.key并保存;

3、读取.key中的信息,然后执行match查找对应的点,并将结果输出;

4、根据前面所得到的信息,执行bundler,最后生成一些.out文件和.ply文件等。


一、准备

首先从软件主页地址下得bundler的源码包,查看其中的README可知,其有另外两个依赖的软件,一个是SIFT,另一个是ImageMagick,这两个软件在README中都有提供下载地址,我就不在这里给出了。解压后得到一个目录,我在这里记为$BUNDLER_DIR

SIFT很简单,只要make一下生成一个sift的二进制代码文件就可以了,然后把生成的文件全部复制到$BUNDLER_DIR/bin下即可;

ImageMagick有点麻烦,我在自己的机器上安装成功了,但在天河一号上就遇到了许多问题。一方面因为天河一号的系统只安装一些必要的库文件,如fortran,C,C++等等,一些不常用的库是不会安装的。而IamgeMagick所依赖的一些图像库不会装;另一方面ImageMagick在安装过程中总会出现一个库依赖不满足的情况,而且这个问题在ImageMagick的安装中还很常见,这个问题尝试了好久一直没解决,有兴趣可以参考一下这个帖子。因为在这个问题上浪费太多时间却一直没有进展,所以决定跳过这一步,在执行脚本ToSift.sh中把有关转换格式和删除.pgm文件的操作都删除掉,直接将在本地电脑上转换好的.jpg文件和对应的.pgm文件放在同一个目录下同时输入,从而避免了此麻烦。如果有人看到了我前面提到的那个帖子并且知道如何解决此问题,请留言或私信告诉我,感激不尽!


二、编译

不同的环境遇到的问题肯定是不同的,比如我在自己的机器上编译的时候,遇到了没有libgfortran库的问题,而在天河一号上跑就没有遇到这个问题。但下面这几个问题,如果使用的是0.4版本的话,应该是所有人都会遇到的。

首先是jpeglib.h文件找不到的问题。在编译时,如果遇到此问题,可以把自己安装jpeglib时的include目录指定到$BUNLDER_DIR/src下的Makefile里的include变量中,也可以直接使用包里已有的文件,在$BUNDLER_DIR/lib/jpeg目录下。只要把上面的目录写到前面提到的include变量中即可;

然后是链接生成目标文件时会遇到的问题。在$BUNDLER_DIR/lib目录下提供了编译运行时所需要的大部分库(以.a结尾),但这些文件并不全,有一些需要的库在其中没有提供,我发现的有三个库,分别是libjpeg.a, libblas.a, liblapack.a,这三个文件。一开始我以为在lib目录里的libcblas.a就是libblas.a,改下名即可,后来在Makefile里发现有-lblas与-lcblas的区别,所以就没动它。

先说下libjpeg.a。这个需要安装libjpeg库,注意不是libjpeg-dev,两者是有区别的,具体什么区别我不太清楚,总之用libjpeg就可以解决问题。我自己装的是libjpeg7,用源码安装的,安装很简单,./configure,make make install大致这些步骤,我就不详说了,然后把安装得到的libjpeg.a文件复制到$BUNDLER_DIR/lib目录下即可。

然后是libblas和liblapack。这两个可以用一个安装包来解决。在网上找liblapack,找到一个源码包,版本是3.3.1.因为权限与环境的限制,只能用源码包。我找到一个rpm源码包,解压后得到的源码。这个包在make的时候要给出一个make.inc,包中在INSTALL这个目录下有提供几种。lapack这个库本身的生成要依赖于libblas,一开始我使用的INSTALL目录下的带64字样的make.inc文件,在包的根目录下生成了三个.a文件,我们需要的只有两个,一个是带有blas字样的,一个是带有lapack字样的。这两个生成的文件就是最终的生成结果,我把它们改成libblas.a,liblapack.a后复制到$BUNDLER_DIR/lib下,这时编译遇到一个问题,说是在使用liblapack的时候,有一些定义与libblas定义冲突。

后来我到网上查了一下,查到说lapack与blas的依赖关系,并可以通过make.inc文件来指定是否使用lapack那个源码包里所带的BLAS目录下的文件来生成lapack。这次我使用lapack源码目录根目录下的make.inc.example文件,将其改名为make.inc(这个文件里没有指定生成,blas,因此编译后不会生成blas),先clean一下,然后再make,这时会发现生成了一个新的lapack文件,而blas文件则仍是原来的旧的文件。这时这两个文件就是相互独立的,把它们改成liblapack.a,libblas.a然后复制到$BUNDLER_DIR/lib目录下即可。再回到$BUNDLER_DIR目录下make,编译成功!进入$BUNDLER_DIR/bin目录下会看到一些新生成的二进制文件,表示编译成功。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LeetJoe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值