Graph Cut Ransac代码编译过程

一、 论文简介

Graph Cut Ransac来自于CVPR2018,本文提出了一种新的鲁棒估计算法,叫做图割RANSAC,简称GC-RANSAC。当找到当前最好模型时,该算法在局部优化中使用图割算法来区分局内点和局外点。本文提出的局部优化算法理论简洁、易于实现,运行效率高。
原文链接:https://www.researchgate.net/publication/317356965_Graph-Cut_RANSAC/download
github源码:https://github.com/danini/graph-cut-ransac
论文讲解:http://www.jintiankansha.me/t/qrfUea99AY

二、 代码编译

对于这份代码的编译耗费了我很多时间,我觉得这份代码是在windows下用VS2015或更高版本编写的,很多头文件在ubuntu16.04中根本不存在,因此编译花了几天时间。

1、拿到代码立即编译,会出现这个错误

GCoptimization.cpp:11:17 fatal error: ppl.h: 没有那个文件或目录

在这里插入图片描述
解决方案:对于这个错误,github上有人提问:https://github.com/danini/graph-cut-ransac/issues/9, 作者给出了解决方案: s u d o a p t − g e t i n s t a l l l i b c p p r e s t − d e v \color{blue}{sudo apt-get install libcpprest-dev} sudoaptgetinstalllibcpprestdev
但是运行了这个命令之后,依然会报该错误,后来发现这里只是安装了pplx而非ppl,因此需要引入pplx.h的头文件,我的机器上pplx.h的的路径为:usr/include/pplx/pplx.h, 那么我们在GCoptimization.cpp中将#include <ppl.h> 改为 #include “usr/include/pplx/pplx.h” 即可。

2、改完这里,再次make,出现了如下的错误

GCoptimization.h:140:28:error: ‘DBL_MAX’ was not declared in this scope

在这里插入图片描述
解决方案: 这个错误相对容易解决,在GCoptimization.h中加入 #include <float.h>即可。

3、接下来继续make,出现了如下的错误

GCRANSAC.h:3:39: fatal error: opencv2\highgui\highgui.hpp:没有那个文件或目录

在这里插入图片描述
解决方案:这是因为linux的路径跟windows的区别,这里将斜杠改一下即可,在GCRANSAC.h中包含头文件的部分将这个路径改为:opencv2/highgui/highgui.hpp即可。

4、接下来继续make,出现了如下的错误

main.cpp:23: fatal error: direct.h :没有那个文件或目录

解决方案: 在main.cpp中直接注释#include <direct.h>即可。

5、接下来继续make,出现了如下的错误

prosac_sampler.h:170:5:error: ‘cout’ is not a member of ‘std’

在这里插入图片描述
解决方案:在prosac_sampler.h中加入cout的头文件<iostream>即可。

6、接下来继续make,出现了如下的错误

GCRANSAC.h:77:7:error: ‘unique_ptr’ in namespace ‘std’ does not name a template type std::unique_ptr<theia::ProsacSampler<cv::Mat >> prosac_sampler;

在这里插入图片描述
解决方案:查找unique_ptr,发现位于:/usr/include/c++/5/bits/unique_ptr.h, 因此在GCRANSAC.h加入头文件:#include “/usr/include/c++/5/bits/unique_ptr.h”,

7、接下来继续make,出现了如下的错误

estimator.h:120:4:error: ‘vector’ was not declared in this scaope

在这里插入图片描述
解决方案:在estimator.h中加入头文件即可#include < vector >即可。

8、接下来继续make,出现了如下的错误

estimator.h:122:4:error: ‘concurrency’ has not been declared concurrrency::parallel_for(0,(int)data.size(),[&](int i)

在这里插入图片描述
解决方案:没有详细处理,把这里的并行改为了串行。
在这里插入图片描述

9、接下来继续make,出现了如下的错误

main.cpp:78:25:error: ‘_makedir’ was not declared in this scope

在这里插入图片描述
解决方案:参见博客:https://www.cnblogs.com/matthew-2013/p/4675366.html
在这里插入图片描述

10、接下来继续make,出现了如下的错误

在这里插入图片描述
源码为:
在这里插入图片描述
解决方案:经查发现上述for循环的写法需要c++14支持,因此需要改动两处:
1)根目录CMakeLists.txt中将 set(CMAKE_CXX_STANDARD 17) 改为 set(CMAKE_CXX_STANDARD 14)
2)升级系统gcc/g++编译器到7.4.0, 安装命令如下:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test  
sudo apt-get update
sudo apt-get install gcc-7 g++-7
 
# 安装完成之后,再将其与最新版本之间建立链接。每次输入gcc,g++时
# 自动使用最新版本。其默认安装位置 /usr/bin/
# 方法一:强制建立新链接。
sudo ln -s /usr/bin/gcc-7  /usr/bin/gcc -f
sudo ln -s /usr/bin/g++-7  /usr/bin/g++ -f

11、 最后再make,程序编译通过,运行样例。生成的程序在主目录的bin文件夹下,不过需要首先在主目录下创建results文件夹。运行结果为:

在这里插入图片描述
results:
在这里插入图片描述

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Researcher-Du

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值