Colmap简介、Windows下编译安装遇到的各种问题及解决方案

文章目录

    • Colmap简介
    • 官方安装方法
    • 安装过程中遇到的问题总结及解决方法
      • 依赖库Boost编译安装
      • 依赖库在线下载失败,包括Eigen,FreeImage,glew和ceres相关库:urlopen error
      • Glew编译失败,glew.obj : error LNK2019: 无法解析的外部符号 memset,该符号在函数 glewContextInit 中被引用
      • suiteparse和ceres可能遇到的问题:找不到lib文件
      • 无法找到boost目录:**could NOT find Boost**
      • (vs 2019)编译错误:boost无法解析的外部符号
      • (vs 2019)编译错误:cuda一起编译,出现编译器版本不支持
    • colmap重建图

Colmap简介

Colmap是一个集成了Incremental Sfm和Multi View Stereo的库,可以从输入图像集计算,依次得到稀疏点云、稠密点云和三维表面。由sfm方法得到稀疏重建后,稠密重建需要CUDA支持。

稀疏重建算法流程和一般的增量式sfm类似:

  1. 特征点提取(cuda支持下可使用SIFTGPU)

  2. 匹配,序列不同可以选择不同匹配策略

  3. 用两帧初始化开始增量式重建

  4. 重建一定数量序列,做Bundle Adjustment

    作者的改进参考论文:《Structure from motion revisited》

稠密重建部分包括

  1. 求深度图和表面向量,使用改进的pactchMatch方法,基于cuda实现。

    算法见论文:

    《Pixelwise View Selection for Unstructured Multi-View Stereo》

  2. 混合(Fusion),大致理解是第一步求出的深度图和表面向量和稀疏点云混合。这时候得到的点云,已经非常密集了。

  3. 表面重建,Poisson方法和Delaunay方法。后者直接使用了CGAL中的函数。官方文档推荐先做Delaunay在做Poisson,因为Poisson对噪声比较敏感。

官方安装方法

colmap官方文档: https://colmap.github.io/index.html

作者给出的windows下Colmap的安装方法,看起来很简单,只需要cmd一条命令就可以实现Colmap Release版本的编译·,实现软件的安装。
Colmap简介、Windows下编译安装遇到的各种问题及解决方案_第1张图片
但是我在实际操作中,会遇到很多问题,比如网络问题,依赖库版本问题,这都会导致最终Colmap的安装失败。下面的问题是安装过程中遇到了,提供的解决方法,希望可以给读者带来一些参考。

安装过程中遇到的问题总结及解决方法

依赖库Boost编译安装

boost编译安装还是比较简单的。找到boost网站,下载boost的源代码。也有预编译好的版本,但是似乎只有静态链接的库,如libboost__xxxx.lib。建议还是自己编译一遍,方便其它工程使用,也是为了避免下面提到colmap安装的一个问题。

解压后的boost代码包如下,找到bootstrap.bat,运行后生成b2.exe。

Colmap简介、Windows下编译安装遇到的各种问题及解决方案_第2张图片

下面是安装步骤

  1. 打开cmd,切换到上图的目录;先输入.\b2 --help,可以看到boost安装提示如下图
    Colmap简介、Windows下编译安装遇到的各种问题及解决方案_第3张图片

  2. prefix就是boost安装目录,按照自己喜欢修改,默认是在C:\boost;

    从上图出现的一系列中,找到buildtype,输入complete。这样会同时生成libboost_xxxx.lib,boost_xxxlib和对应dll。

  3. 按照正确格式输入: .\b2 prefix=xx目录 --build-type=complete install

  4. 等待大概几十分钟,编译和复制需要较长时间。

依赖库在线下载失败,包括Eigen,FreeImage,glew和ceres相关库:urlopen error

推荐方法使用脚本自动安装的方法,是在线下载colmap依赖的几个库。如果网络受限,比如不能下载慢,py文件中url无效,都没法正常安装,有时候等待很长时间,或者出现下图的报错:
在这里插入图片描述
所以如果有这些库的源代码,直接放在py中指定的文件夹。

打开build.py,其实它的功能就是下载库,解压,移动到__ install__文件夹中,然后cmake编译生成安装。无法下载,我们可以注释掉py文件中下载解压部分,直接开始编译安装,只要修改好py中对应的名字,即可。

Glew编译失败,glew.obj : error LNK2019: 无法解析的外部符号 memset,该符号在函数 glewContextInit 中被引用

使用build.py自动编译glew,还会出现以上报错。打开glew的sln,在debug下,打开glew_s的属性管理器–》附加依赖项-》添加msvcrt.lib,重新生成项目即可。

suiteparse和ceres可能遇到的问题:找不到lib文件

问题大同小异,可以参考我另外一篇博客。如果build.py出了问题,单独编译suiteparse和ceres也可以,但是注意要把生成的include和lib安装到.py中要求的文件夹中。

无法找到boost目录:could NOT find Boost

Colmap简介、Windows下编译安装遇到的各种问题及解决方案_第4张图片

如果其它依赖库都安装完成,编译colmap时报这个错误,这是由于cmake无法找到boost导致的,有各种解决办法,包括手动编译boost的。下面提供两种解决方法,测试过有效:(原理大同小异,按个人习惯选择)

  1. 手动编译colmap。用cmake编译colmap,在gui中添加colmap所需boost几个库和头文件。

  2. 在colmap的cmakelist中设置boost的目录,包括cmake目录和包含,如下所示:

    set(Boost_DIR "C:/Boost/lib/cmake/Boost-1.72.0")
    set(Boost_INCLUDE_DIR "C:/Boost/include")

(vs 2019)编译错误:boost无法解析的外部符号

前面都编译成功了,colmap静态库也生成了,开始链接,生成exe文件,出现下面报错:

colmap.lib(dense_reconstruction_widget.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) void __cdecl boost::filesystem::path_traits::convert(char const *,char const *,class std::basic_string,class std::allocator > &,class std::codecvt const &)" (__imp_?

**原因:**未知。同样的方法,在vs2017中未出现,vs2019编译就出问题,可能是编译器导致

解决办法:手动打开colmap工程,将colmap_exe工程的release下附加依赖项关于boost相关的 libboost_xxx全部修改为boost_xxx。直接用vs生成该项目,继续在py文件中注释一些函数,运行py把一些依赖的项复制好。

(vs 2019)编译错误:cuda一起编译,出现编译器版本不支持

编译cuda一起,报错版本不支持,打开报错文件是:host_config.h。

找到报错地方,是一个对vs版本判断,粗暴去除对于vs版本限制,编译无问题。后续的colmap的cuda功能也不受影响。

为什么敢修改?因为之前用cuda做三方库,vs2019编译时,没报这个错误,觉得没有影响。后面证实确实没有影响。

colmap重建图

找到install文件夹下,colmap.bat,运行colmap。下图为稀疏重建结果。

测试过稠密重建,stereo没有问题,poisson也可以,但是delaunay表面重建失败,还没有找原因。

如果需要稠密重建,看效果的读者,记得按照官方手册的一些tips修改参数。

Colmap简介、Windows下编译安装遇到的各种问题及解决方案_第5张图片

你可能感兴趣的:(软件安装与库配置,SFM,MVS)