zoukankan      html  css  js  c++  java
  • 在CYGWIN下编译和运行软件Bundler ,以及PMVS,CMVS的编译与使用

    本人按照

    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行的

    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(用到工具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运动学的一些基础知识

    如果看到这里你还没有很完美的获得预期的结果,由于我很久没有做这方面的工作,大家可以加群:336246221进行咨询讨论

  • 相关阅读:
    Data Base mysql备份与恢复
    java 乱码问题解决方案
    【知识强化】第二章 物理层 2.1 通信基础
    【知识强化】第二章 进程管理 2.2 处理机调度
    【知识强化】第二章 进程管理 2.1 进程与线程
    【知识强化】第一章 操作系统概述 1.3 操作系统的运行环境
    【知识强化】第一章 网络体系结构 1.1 数据结构的基本概念
    【知识强化】第一章 网络体系结构 1.2 计算机网络体系结构与参考模型
    【知识强化】第一章 网络体系结构 1.1 计算机网络概述
    【知识强化】第一章 操作系统概述 1.1 操作系统的基本概念
  • 原文地址:https://www.cnblogs.com/mothe123/p/3570981.html
Copyright © 2011-2022 走看看