本人按照

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进行咨询讨论

在CYGWIN下编译和运行软件Bundler ,以及PMVS,CMVS的编译与使用的更多相关文章

  1. linux 下的两种软件安装方式 —— 源码(编译、安装),编译好的二进制(直接安装)

    我们以 GPG(加密工具)为例来说明两种安装方式的区别: 源码(Source code releases,名称中则会含有src等说明信息,tarball:source),先编译再安装 GPU 的源码地 ...

  2. Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

    转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编 ...

  3. Cygwin下编译的程序不使用Cygwin.dll即可运行的命令 及常用命令简介

    cc -mno-cygwin foo.c 1.$ ps PS的相关用法: QuoteUsage ps [-aefl] [-u uid]-f = show process uids, ppids-l = ...

  4. ubuntu下C程序的编辑、编译、运行

    均以hello world程序为例 一.vim hello.c/hello.cpp 创建hello.c/hello.cpp文件,并进入vim界面 二.此时按键盘上的很多键均不会有任何反应,键入i,进入 ...

  5. DOS环境下含包并引用第三方jar的java程序的编译及运行

    DOS环境下含包并引用第三方jar的java程序的编译及运行 1.程序目录机构 bin:class文件生成目录 lib:第三方jar包目录 src:源程序文件目录 2.程序代码: 3.程序编译 jav ...

  6. Linux下C程序的编辑,编译和运行以及调试

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  7. 在cygwin下编译c语言

    #include <stdio.h> int main (void) { printf("Hello World!\n"); ; } 1.保存到cygwin工作目录下 ...

  8. Ubuntu下怎么编译并运行C、C++和Pascal语言?

    很多同学在安装了Ubuntu的环境后,发现在Windows下的许多东西都打不开了,但是用网站上的在线IDE又不是很方便. 所以,ljn教你如何在Ubuntu下编译并运行C.C++和Pascal. 一. ...

  9. windows下在idea用maven导入spark2.3.1源码并编译并运行示例

    一.前提 1.配置好maven:intellij idea maven配置及maven项目创建 2.下载好spark源码: 二.导入源码: 1.将下载的源码包spark-2.3.1.tgz解压(E:\ ...

随机推荐

  1. JAVA泛型使用方法总结

    1. 基本概念: (1)什么是泛型? 泛型,即"参数化类型".即将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用或 ...

  2. linux上的用户管理

    作为一个专业的服务器发行版,CentOS上存在着n多个用户,作为一个专业的运维工程师,linux的用户管理和用户组的管理是做为一个SA必不可少的工作. 下面我们就先来谈谈linux中的用户管理: us ...

  3. python正则实现简单计算器

    利用正则实现计算器 利用正则来实现简单计算器的功能,能够设计计算带括号的加减乘除运算.当然不使用eval等语句. 利用递归: import re from functools import reduc ...

  4. Python之Django rest_Framework(3)

    补充:  为什么要前后端分离:       a.因为前端它有自己框架,这样它的效率就非常高       b.不做前后端分离,公司如果既有客户端,又有app这种情况下你就的写两遍 django rest ...

  5. bzoj 3597: [Scoi2014]方伯伯运椰子 [01分数规划 消圈定理 spfa负环]

    3597: [Scoi2014]方伯伯运椰子 题意: from mhy12345 给你一个满流网络,对于每一条边,压缩容量1 需要费用ai,扩展容量1 需要bi, 当前容量上限ci,每单位通过该边花费 ...

  6. 简易商品信息管理系统——首个Web项目

    正文之前 在学习了一段时间的Java Web的内容之后,当然需要有个项目来练练手,我相信大多数人的首选项目都是信息管理系统吧,所以我选择了商品信息管理系统 目前项目源码已全部上传至GitHub,欢迎大 ...

  7. 小甲鱼OD学习第13-14讲

    这次我们的任务是破解这个需要注册码的软件,如下图所示 我们搜索上图相应的提示字符串,看看能找到什么线索,我们搜索  invalid  code  试试看,如下图 然后下断点,如下图所示 我们来到断点处 ...

  8. Spring学习——从入门到精通

    本文章是博主原创,转载需注明出处. 第一篇先简单入个门--通过Spring创建对象 开发环境为Myeclipse2013,JDK版本为1.6,不要嫌它老,新知识都是在旧知识的基础上建立起来的,所谓基础 ...

  9. python学习:字典排序

    按字典值排序   按照字典value排序,类似sort -k 命令   import operator x= {1:2,3:4,4:3,2:1,0:0} sorted_x = sorted(x.ite ...

  10. java 流输出的一些问题

    一.java流的控制首先要先准备一个文件,例如:File f = new File(d:/lol.txt); 二.可以使用如下指令创建流,用于不同的用途 1.FileInputStream,FileO ...