ELAS方法计算双目视差

由于需要用到高精度的双目视差算法,找到了这个算法,为了防止我自己忘记,把它的使用过程,特地记录在这里啦。如果对大家有帮助就更好啦,嘿嘿。。

ELAS是由Andreas Geiger于2010年提出的一种比较新颖的立体匹配算法,全称为《Efficient Large Scale Stereo Matching》。这种算法的优点是对于高分辨率的图像,能够兼顾较高的匹配速度和匹配精度,在许多公开的数据集中ELAS的平均匹配精度十分接近SGM,但是速度却比SGM更快。

ELAS算法的基本流程是:
(1) 对左右图像进行sobel滤波,生成sobel特征图;
(2) 基于sobel特征进行匹配,筛选出其中具有较高置信度的匹配点,作为"support points",即支持点;
(3) 对支持点构建Delaunay三角网格;
(4) 构建立体匹配的概率生成模型;
(5) 基于最大后验概率密度估计(MAP)进行稠密立体匹配,获取初始视差图;
(6) 视差后处理:无效孔洞插值、(自适应)中值滤波、连通域噪声剔除、左右一致性检验。

下面是我具体的使用过程
该算法的代码下载地址为:ELAS下载地址
下载好后,可以利用matlab和vs联合编程,也可直接利用VS运行。

采用VS运行过程如下:

  1. 我使用的是VS2019,选择打开本地文件,选择文件中由CMakeLists.txt文件的根目录,进行添加:



2.加载成功后,选择main.cpp文件运行:
我在运行过程中,遇到了如下问题:

经过查询,发现将文件中出现问题的语句改为typedef signed __int8 int8_t;(中间加上signed就运行成功了)。

3.由于ELAS算法只能针对pgm格式的图像进行处理,所以我利用了opencv读取JPG格式的图像,在转化为PGM的格式。
A.第一次尝试 (没有成功,可以直接跳至B.第二次尝试)
1)在CMake文件中利用opencv,需要对CMakeLists.txt进行修改:
a.添加OpenCV头文件
b.添加OpenCV的链接库路径
c.在cmake文件配置文件中指定引用的库文件名


2)配置好后,重新编译后cmake仍然找不到opencv。

B.第二次尝试
参考了文末的第四篇文章,做出如下改正:

# project
cmake_minimum_required (VERSION 2.6)
project (libelas)
find_package(OpenCV REQUIRED)
# directories
set (LIBELAS_SRC_DIR src)# include directory
include_directories("${LIBELAS_SRC_DIR}/${OpenCV_INCLUE_DIR}")
include_directories("E:/opencv4.3.0/opencv/build/include")# use sse3 instruction set
SET(CMAKE_CXX_FLAGS "-msse3")# sources
FILE(GLOB LIBELAS_SRC_FILES "src/*.cpp")# make release version
set(CMAKE_BUILD_TYPE Release)# build demo program
add_executable(elas ${LIBELAS_SRC_FILES})link_directories("E:/opencv4.3.0/opencv/build/x64/vc15/lib")
target_link_libraries(elas opencv_world430 opencv_world430d)

有以下问题需要注意:

在对每个CMakeLists.txt的文件进编辑的时候,按下CTRL+S即文件保存的按键,自动触发CMake项目的配置流程,这回终于成功,cmake中找到了OpenCV,可以开始编写自己的程序啦!!!

4.在主函数中编程,将已有的JPG 格式的图像文件批量转化为PGM格式的文件,利用ELAS算法计算双目视差,结果如下图:
原始图像:(左图)

视差图:

***联合编程过程尝试如下: ***(未成功,可跳过不看)

1.首先打开MATLAB,配置您的 MATLAB MEX C++ 编译器(如果尚未配置)(mex -setup)具体流程可以详见我的另一篇文章:
Matlab2016使用mex命令寻找编辑器Visual Studio2019
2.配置完成后,切换到libelas/matlab目录,运行运行“make.m”后,得到一个名为“elasMex”的 MEX 文件,然后尝试运行“demo.m”,它会打开一个 GUI 并显示包含的测试图像的一些结果。
可惜,我运行到此处,出现了错误(还不知如何更改)
PS:如有人明白问题在哪,恳求赐教,万分感谢!!!

运行结果如下:

如有错误,欢迎指正,万分感谢

以上参考:详解双目立体匹配算法ELAS
用vs2017的cmake工具为其他项目添加OpenCV库
利用opencv将JPG等格式的文件转化为PGM的函数
Visual Studio 2019 cmake配置opencv开发环境

CMake的具体内容,可以参见下文,讲的比较清楚:
VS2019 C++的跨平台开发——Cmake项目(一)

VS2019下cmake项目:利用ELAS方法计算双目视差相关推荐

  1. 计算双目视差的方法汇总及效果分析

    计算双目视差的方法汇总及效果分析 这是我在计算双目视差的过程中进行过尝试,想要记录下来.若是对大家有帮助就更好啦!如有错误或还可改进之处,欢迎指正!! matlab自带的disparity函数(BM方 ...

  2. Windows 中使用 VS2019 开发 CMake 项目

    文章目录 0. 前言 1. 使用 VS2019 编译 SPDLOG 2. 在 VS2019 中创建 CMake 项目引入 SPDLOG 0. 前言 目标:使用 VS2019 构建 CMake 项目,或 ...

  3. python学习之 利用蒙特卡洛方法计算PI值

    使用环境为python IDLE3.5. #利用蒙特卡洛方法计算PI值 from random import random from math import sqrt from time import ...

  4. 利用蒙特卡洛方法计算圆周率并将撒点分布和π估计值可视化(Python大作业)

    这个大作业做的比较简单,其他同学动辄两三百行,我只是出于纯个人兴趣,想了解一下第三方库matplotlib的用法以及更加直观的了解蒙特卡洛方法. 首先是蒙特卡洛方法求圆周率的部分: >>& ...

  5. ubantu下清除项目缓存的方法

    全局搜索  .fepack-tmp  , 删除主文件夹下的 .fepack-tmp 文件夹. (文件夹中包含www文件,里面有各个项目编译后的文件) 转载于:https://www.cnblogs.c ...

  6. Python:利用模拟方法计算骰子点数出现的概率

      运用模拟方法模拟投掷两个骰子(分别用随机变量x和y表示)10000次,计算出下列情况出现的概率: (1)两个骰子点数和为"小"(小于7): (2)两个骰子点数和为"大 ...

  7. C++调试器:CMAKE项目利用gbc进行调试

    launch文件 {// 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述.// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink ...

  8. 奥村方法计算机仿真,实验3-Okumura-Hata方法计算计算机仿真.docx

    文档介绍: . 课程实验报告 课程 3G移动通信实验 学院 通信学院 专业 通信工程 班级 13083414 学号 13081403 学生姓名 李倩 实验Okumura-Hata方法计算机仿真 [实验 ...

  9. 奥村模型计算机仿真,实验3Okumura-Hata方法计算计算机仿真.pdf

    课 程 实 验 报 告 课程 3G 移动通信实验 学院 通信学院 专业 通信工程 班级 学号 学生姓名 李倩 实验 Okumura-Hata 方法计算机仿真 [实验目的] 加深对奥村模型的理解: 能够 ...

  10. 计算机仿真实训操作开车步骤,实验3 Okumura-Hata方法计算计算机仿真

    <实验3 Okumura-Hata方法计算计算机仿真>由会员分享,可在线阅读,更多相关<实验3 Okumura-Hata方法计算计算机仿真(4页珍藏版)>请在人人文库网上搜索. ...

最新文章

  1. 云游戏打破硬件限制,传输体验或成发展掣肘!
  2. step2 . day7 C语言阶段小的项目总结
  3. 使用url参数在C4C的html5 UI和Fiori UI之间做切换
  4. javaScript转换日期合格式
  5. 四轴码垛机器人配件_四轴码垛机器人的应用范围
  6. ios java 加密_AES加密 - iOS与Java的同步实现
  7. 中国碳酸镁铝行业市场供需与战略研究报告
  8. matlab fullfile函数
  9. 应急响应-Linux入侵排查
  10. node.js连接数据库得基本操作
  11. 什么算法计算地图上从A点到B点的方向?
  12. nifi mysql hive_Nifi入门
  13. 十进制 -> N进制 写法 -- Java
  14. 芯片尺寸越做越小,晶圆划片刀的选择至关重要
  15. 2021最新 从零开始搭建terraria(泰拉瑞亚)云服务器
  16. 计算机软件方法专利撰写,干货 | 计算机软件专利撰写模板
  17. LVGL v8学习笔记 | 06 - label控件的使用方法
  18. 爬虫基础(6)网页解析之XPath库
  19. 苹果官方iPhone/iPad以旧换新5步攻略
  20. 物联网场景中,我们如何选择时序数据库 ?

热门文章

  1. 无限小说网 内部服务器错误,iOS网络模块优化(失败重发、缓存请求有网发送)...
  2. 电脑主板报警声音的故障现象对照表
  3. 学会如何使用移动用户反馈系统,让你玩转APP
  4. 转:Delphi开发经验谈
  5. Android TextToSpeech(tts)语音播报(文字转语音)
  6. android状态栏半透明灰色,快速解决Android7.0下沉浸式状态栏变灰的问题
  7. 从官网通过execl制作省市区行政代码
  8. Django 官方文档中文3.2 4.0
  9. 贵州大学计算机网络试题,贵州大学计算机基础考试题库.doc
  10. 利用setInterval()方法实现在页面上显示实时时间