visualSFM
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的更多相关文章
- VisualSFM for Structure from Motion
VisualSFM是Changchang Wu编写的使用 Structure from Motion (SfM)进行3D重建的交互界面,具体内容详见http://homes.cs.washington ...
- VisualSFM+PMVS生成稠密点云
利用相机拍摄一个场景不同角度的图片,使用VisualSFM能够得到稀疏点云,如果想要得到稠密点云,可以在VisualSFM中加入PMVS的应用程序,PMVS会作为一个插件运行将稀疏点云插成稠密的点云. ...
- visualSFM的使用方法
VisualSFM是Changchang Wu编写的使用 Structure from Motion (SfM)进行3D重建的交互界面,具体内容详见http://ccwu.me/vsfm/.本人电脑环 ...
- VisualSFM使用记录1 unable to load libsiftgpu.so
官网:http://ccwu.me/vsfm/(解决过程蓝色字,问题原因解决方法红色字)SFM computer missing match阶段运行出现错误 More than 189MB of gr ...
- 【转】visualSFM生成的bundle.rd.out文件的格式
1.bundle.out 文件包含了一些经过估算得到的场景和相机几何信息.文件的格式如下: //---------------------------------------------------- ...
- 3D场景定位的一些资源
利用多张影像对小物体进行拍摄,进而进行三维重建,是计算机视觉中的重要问题之一. 目前对此研究最全面的网站是:http://vision.middlebury.edu/mview/eval/ 目前最优秀 ...
- Computer Graphics Research Software
Computer Graphics Research Software Helping you avoid re-inventing the wheel since 2009! Last update ...
- CG&CAD resource
Computational Geometry The Geometry Center (UIUC) Computational Geometry Pages (UIUC) Geometry in Ac ...
- 计算机视觉与模式识别代码合集第二版three
计算机视觉与模式识别代码合集第二版three Topic Name Reference code Optical Flow Horn and Schunck's Optical Flow ...
随机推荐
- mysql存储emoji问题
前一段时间,项目中需要在数据库中存储emoji,由于编码格式不对,直接导致数据库报错,后来修改mysql的编码,就解决了 emoji符号实际上是文本,并不是图片,它们仅仅显示为图片 在mysql5.5 ...
- ubuntu下apache新建虚拟主机
最近发现在一个服务器上面布了一些项目,如果不用虚拟主机,用链接跳进去的话,有时候路径会出错,而自己在配置虚拟主机的时候又出现了一些问题,看似简单的东西,却花费了一上午,所以决定把简单的方法记下来,供和 ...
- 大臣的旅费---树的直径(dfs)
很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者 ...
- MySQL数据查询
数据查询语言DQL select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [ ...
- 图解android开发在界面上显示图片
图解android开发在界面上显示图片<申明:转自百度> <原文章地址:http://jingyan.baidu.com/article/49711c6153a277fa441b7c ...
- c++stack容器介绍
c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO) 使用该容器时需要包含#include<stack>头文件: 定义stack对象的示例代码如下: sta ...
- Spring Boot 2.0 新特性和发展方向
以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持. 内嵌容器包结构调整 为了支持reactive使用场景,内嵌的容器包结构被重构了 ...
- SharePoint 命令行
网站集备份: Backup-SPSite http://sp2013 -Path C:\sp.bak 网站集还原: Restore-SPSite http://sp2013/sites/dyzx -P ...
- Jenkins+Jmeter持续集成笔记(一:环境准备)
整体思路: 通过Jmeter图形界面编写api测试脚本 ant 批量执行Jmeter脚本文件 将其集成到jenkins,设置执行频率与发送测试报告 运行环境 系统 配置 IP Centos7.1 1核 ...
- Oracle 数据库逻辑结构2.md
Oracle 数据库逻辑结构一.存储关系Oracle 数据库逻辑上是由一个或多个表空间组成的,表空间物理上是由一个或多个数据文件组成的:而在逻辑上表空间又是由一个或多个段组成的.在Oracle 数据库 ...