Ubuntu18.04配置VisualSFM
参考:https://www.jianshu.com/p/cc0b548313e9

VisualSFM有GPU和NO_GPU两个版本,本文安装VisualSFM为有GUP版本

VisualSFM配置主要过程有:

1. Build VisualSFM

2. Build SiftGPU

3. Build Multicore Bundle Adjustment (a.k.a. “pba”)

4. Hack PMVS-2

5. Build Graclus 1.2

6. Hack CMVS

7. Running VisualSFM

一、安装前提

已经安装必须的工具和依赖
sudo apt install make build-essential pkg-config liblapack-dev gfortran jhead imagemagick libc6-dev-i386 libgtk2.0-dev libdevil-dev libboost-all-dev libatlas-cpp-0.6-dev libatlas-base-dev libcminpack-dev libgfortran3 libmetis-edf-dev libparmetis-dev freeglut3-dev

已经安装Nvidia显卡驱动和Cuda(GPU版本需要)            
安装过程中提示“cannot find -lXXX”,安装对应版本依赖。

二、编译VisualSFM
解压 VisualSFM_linux_64bit.zip,进入vsfm文件夹,open in Terminal,输入make
如果提示“...cannot be used when making a PIE project, recompile with -fPIC”,打开makefile文件,在LIB_LIST += 后添加“-no-pie”,然后重新make。

这一步只是生成了VisualSFM软件界面。

三、编译SiftGPU得到libsiftgpu.so
下载SiftGPU并得到编译文件,艰难过程
1.解压SiftGPU-V400.zip,进入SiftGPU文件夹,右键open in Terminal,输入make
可能出现数条以下错误:
/usr/bin/ld: cannot find XXX

一个个装包

其中/usr/bin/ld: cannot find -lIL 错误一直无法解决,最终找到该包为libdevil-dev包,进行安装,
$sudo apt-get install libdevil-dev

接着继续
$make
运行成功后在目录下得到一个libsiftgpu.so,copy该文件到上上一步的vsfm/bin中,即与VisualSFM程序同目录

四、编译pba-master包得到libpba.so
解压pba-master.zip
进入src/pba文件夹,编辑“SparseBundleCU.h” 和“pba.h” 文件,分别在顶部添加#include <stdlib.h>
回到pba-master文件夹下,右键open in Terminal,输入make
make完成后,把pba-master/bin下的libpba.so拷贝到上上一步的vsfm/bin中,即与VisualSFM程序同目录

五、接着生成pmvs2,cmvs,genOption三个二进制文件
在https://github.com/pmoulon/CMVS-PMVS上下载CMVS-PMVS-master.zip,解压后进入/VFMSource/CMVS-PMVS-master/program目录

$mkdir build
$cd build
$cmake ..
$make
到CMVS-PMVS/program/build/main下,将pmvs2,cmvs,genOption三个二进制文件拷贝到上上上一步的vsfm/bin中

六、VisualSFM运行
1.切换到vsfm/bin中,双击运行VisualSFM文件。
2.将VisualSFM添加到环境变量中,利用命令行运行。
$udo gedit ~/.bashrc
文件底部添加
export PATH=$PATH:/home/路径/vsfm/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/你的/路径/vsfm/bin
保存关闭,在命令行输入source ~/.bashrc 刷新一下输入VisualSFM&,即可运行

==============================================================================================
PS:
在解决/usr/bin/ld: cannot find -lIL
过程中也经过一通操作,做了以下事:

参考:https://www.cnblogs.com/gaoxiang12/p/5149067.html

由于特征匹配是SLAM中非常耗时间的一步,普通SIFT计算非常慢,普通PC上计算一个640×480的图中的SIFT大约需要几百毫秒左右,SIFTGPU能够明显地提升程序提取SIFT的速度。同时,它的代码大部分是基于OpenGL的,即使在没有英伟达显卡的机器上也能运行起来。

下载SiftGPU与依赖库

1.确保有OpenGL

查看是否安装opengl
dpkg -l|grep opengl
=============================OpenGL安装=====================================
参考:https://www.linuxidc.com/Linux/2017-03/141555.htm
首先不可或缺的就是编译器与基本的函数库,如果系统没有安装的话,依照下面的方式安装:

$ sudo apt-get install build-essential

安装OpenGL Library

$ sudo apt-get install libgl1-mesa-dev

安装OpenGL Utilities

$ sudo apt-get install libglu1-mesa-dev
      OpenGL Utilities 是一组建构于 OpenGL Library 之上的工具组,提供许多很方便的函数,使 OpenGL 更强大且更容易使用。

安装OpenGL Utility Toolkit

$ sudo apt-get install libglut-dev
      OpenGL Utility Toolkit 是建立在 OpenGL Utilities 上面的工具箱,除了强化了 OpenGL Utilities 的不足之外,也增加了 OpenGL 对于视窗介面支援。
      注意:在这一步的时候,可能会出现以下情况,shell提示:

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libglut-dev
将上述$ sudo apt-get install libglut-dev命令改成$ sudo apt-get install freeglut3-dev即可。

2.Opengl按以上步骤安装好后下载GLEW
GLEW下载地址http://glew.sourceforge.net/,需根据opengl版本下载对应版本
运行以下文件opengl.c查看openGL版本,

#include <iostream>
#include <GL/glut.h>
// #include "stdafx.h" //int _tmain(int argc, _TCHAR* argv[])
int main(int argc, char *argv[])
{
glutInit(&argc, (char**)argv);
//显示模式初始化
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
//定义窗口大小
glutInitWindowSize(300,300);
//定义窗口位置
glutInitWindowPosition(100,100);
//创建窗口
glutCreateWindow("OpenGL Version");
const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字
const GLubyte* biaoshifu = glGetString(GL_RENDERER); //返回一个渲染器标识符,通常是个硬件平台
const GLubyte* OpenGLVersion =glGetString(GL_VERSION); //返回当前OpenGL实现的版本号
const GLubyte* gluVersion= gluGetString(GLU_VERSION); //返回当前GLU工具库版本
printf("OpenGL实现厂商的名字:%s\n", name);
printf("渲染器标识符:%s\n", biaoshifu);
printf("OpenGL实现的版本号:%s\n",OpenGLVersion );
printf("OGLU工具库版本:%s\n", gluVersion);
system("pause");
return 0;
}

输入命令:
g++ -o test /home/zsl/Desktop/opengl.c -lGL -lGLU -lglut
./test
输出信息:
OpenGL实现厂商的名字:NVIDIA Corporation
渲染器标识符:GeForce RTX 2080 Ti/PCIe/SSE2
OpenGL实现的版本号:4.6.0 NVIDIA 418.39
OGLU工具库版本:1.3
sh: 1: pause: not found

依据opengl版本,我下载的最新版的glew的zip包,解压,进入目录/glew-2.1.0,glew是用makefile直接编译的,不用cmake,直接在当前目录打开终端
$ make
$ sudo make install

其将以下编译好的文件libGLEW.a  libGLEW.so  libGLEW.so.2.1  libGLEW.so.2.1.0
放在了/usr/lib64目录下,由于之后我们要用cmake去编,但是它可能找不到这个文件夹,所以需要告诉系统该文件夹下有要找的链接库:
$ sudo ldconfig /usr/lib64

3.完成glew操作后,开始编译SiftGPU,在下载好SiftGPU-V400.zip后解压,进入解压文件下/SiftGPU-V400/SiftGPU目录中,打开终端进行make操作。
$ make

这通操作过后依然/usr/bin/ld: cannot find -lIL

最终解决是一个libdevil-dev包没装。

下一章试试运行下

visualSFM的更多相关文章

  1. VisualSFM for Structure from Motion

    VisualSFM是Changchang Wu编写的使用 Structure from Motion (SfM)进行3D重建的交互界面,具体内容详见http://homes.cs.washington ...

  2. VisualSFM+PMVS生成稠密点云

    利用相机拍摄一个场景不同角度的图片,使用VisualSFM能够得到稀疏点云,如果想要得到稠密点云,可以在VisualSFM中加入PMVS的应用程序,PMVS会作为一个插件运行将稀疏点云插成稠密的点云. ...

  3. visualSFM的使用方法

    VisualSFM是Changchang Wu编写的使用 Structure from Motion (SfM)进行3D重建的交互界面,具体内容详见http://ccwu.me/vsfm/.本人电脑环 ...

  4. VisualSFM使用记录1 unable to load libsiftgpu.so

    官网:http://ccwu.me/vsfm/(解决过程蓝色字,问题原因解决方法红色字)SFM computer missing match阶段运行出现错误 More than 189MB of gr ...

  5. 【转】visualSFM生成的bundle.rd.out文件的格式

    1.bundle.out 文件包含了一些经过估算得到的场景和相机几何信息.文件的格式如下: //---------------------------------------------------- ...

  6. 3D场景定位的一些资源

    利用多张影像对小物体进行拍摄,进而进行三维重建,是计算机视觉中的重要问题之一. 目前对此研究最全面的网站是:http://vision.middlebury.edu/mview/eval/ 目前最优秀 ...

  7. Computer Graphics Research Software

    Computer Graphics Research Software Helping you avoid re-inventing the wheel since 2009! Last update ...

  8. CG&CAD resource

    Computational Geometry The Geometry Center (UIUC) Computational Geometry Pages (UIUC) Geometry in Ac ...

  9. 计算机视觉与模式识别代码合集第二版three

    计算机视觉与模式识别代码合集第二版three     Topic Name Reference code Optical Flow Horn and Schunck's Optical Flow   ...

随机推荐

  1. hibernate的面试总结

    hibenate的面试总结. 可能现在大家常常还会遇到一个些面试的时候问一些关于hibernate的问题,我个人觉得,这些东西一般做过开发的人在使用上没有任何的问题的,但是如果是要你来说就不一定能够说 ...

  2. jquery和ajax和springmvc

    <script type="text/javascript" src="js/jquery-1.11.1.js"></script> $ ...

  3. 26.webpack 入门

    webpack 官方: https://webpack.js.org/ http://webpack.github.io/ 中文: https://www.webpackjs.com/ 资料: htt ...

  4. python API whoami

    import getpass print getpass.getuser() See the documentation of the getpass module. getpass.getuser( ...

  5. css学习_css浮动

    1.文档流介绍 网页布局的核心就是利用css来摆放盒子, 把盒子摆放在合适的位置. css的定位机制有以下3种(网页布局一般需要3种搭配使用): a.普通流(标准流) b.浮动 1.浮动只有左右. 2 ...

  6. 2016CCPC长春 - B/D/F/H/I/J/K - (待补)

    目录: B - Fraction D - Triangle F - Harmonic Value Description H - Sequence I I - Sequence II B题:HDU 5 ...

  7. 理解linux 密码存储

    1. 传统上,linux把加密(哈希)的密码保存在/etc/passwd文件中,passwd文件的格式如下: smithj:x:561:561:Joe Smith:/home/smithj:/bin/ ...

  8. spring相关jar包

    spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-m ...

  9. Unity3D加密保护解决方案

    精锐5加密锁支持Unity3D代码及资源保护,并提供授权方案 产品简介 可使用Virbox Protector加壳工具对Unity3D代码进行加密.Unity3D使用开源mono C#语法,代码会编译 ...

  10. python框架之Flask(3)-Blueprint(蓝图)

    蓝图 用途 给开发者提供清晰的目录结构. 使用 目录结构 1.创建项目. 2.在项目目录下创建与项目名同名文件夹. 3.在 test_prj 文件夹下创建 __init__.py 文件,并在其中实例化 ...