在CYGWIN平台上使用Bundler

本文档详述如何在CYGWIN平台上配置和运行Bundler进行SFM,以及后续如何使用CMVS-PMVS进行稠密三维重建。首先介绍Bundler的安装、编译和运行过程,包括解决编译问题和SIFT特征点探测器的集成。接着,详细阐述了CMVS-PMVS的配置,包括编辑prep_pmvs.sh脚本以指定正确路径。最后,利用MeshLab展示稠密网格的生成和查看步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(文章参考采药的蜗牛的blog,并结合自己的问题作出相应的修改)

Bundler是Noah Snavely博士写的Structure from Motion的工具包。它能够通过对某个场景不同角度的多张图片生成稀疏点的三维信息,并且估计每一幅图片的相机参数(内参和外参)。Bundler属于SFM的范畴。

       PMVS和CMVS(CMVS是PMVS的改进版,里面包含PMVS)是Yasutaka Furukama博士写的已知一组图片和图片对应的相机参数生成dense reconstruction (稠密的三维模型)。


Bundler的配置:

Bundler的配置有两种途径:1)通过makefile;2)通过VS(VS的配置在之前的文章中详细描述了,这里就不做赘述,感兴趣的可以参考 http://blog.youkuaiyun.com/u010922186/article/details/41779817点击打开链接)。实际使用中不建议用VS配置。因为VS配置出来的少了一个Bundle2Vis.exe。

(1) 下载并安装CYGWIN(下载地址: http://cygwin.com), 安装时选择全部安装, 大约要用掉32G硬盘空间.(详细安装步骤参考http://blog.youkuaiyun.com/u010922186/article/details/41779817点击打开链接
(2) 下载并解压Bundler源码bundler-v0.4-source.tar.gz(下载地址:http://phototour.cs.washington.edu/bundler/), 假设
Bundler的安装位置在/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
(在编译到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  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的根目录下面。否则后面生成的目录文件会有错
$ ../bin/Bundle2PMVS.exe prepare/list.txt bundle/bundle.out

此时生成了pmvs子目录, 编辑里边的prep_pmvs.sh(可以用Notepad++,不建议用win自带的notepad), 指明BUNDLE_BIN_PATH路径来寻找RadialUndistort.exe和Bundle2Vis.exe。注意我们用的是Cygwin所以改BUNDLE_BIN_PATH要注意目录的格式,比如我的Bundler在E盘根目录,那么BUNDLER_BIN_PATH=/cygdrive/e/bundler/bin(地址不能有空格)为了方便我们常常写成BUNDLER_BIN_PATH=../bin
(7) 完成最后的转换$ ./pmvs/prep_pmvs.sh(运行时可能会报错,‘\r’之类的错误,可以参考http://blog.youkuaiyun.com/u010922186/article/details/41825237,修正错误)
      在pmvs目下生成txt, visualize, models目录和bundle.rd.out, list.rd.txt, vis.dat, pmvs_options.txt文件, 这些都是PMVS2的输入。

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(win+R)

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,读入里面的模型文件(如图所示)



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值