ELAS是一种基于概率模型的有效立体匹配算法,能够给予双目图像生成深度图,进而转化为点云.该算法的一种改进算法为LS-ELAS,其论文发表在2017年ICRA上,文章题目为"LS-ELAS: Line Segment based Efficient Large Scale Stereo Matching".本片博客主要介绍ELAS算法的一种开源代码ELAS_ROS安装,及其在KITTI数据集上的具体实现.

一.KITTI数据集下载与转换为rosbag

本文使用的KITTI数据集由kitti2bag转换为rosbag格式,以便于用于ELAS_ROS程序测试.由于该模块较为繁琐,固单独整理成为一篇博客.

步骤一:参照以下博客完成KITTI数据集到rosbag的转换
https://blog.csdn.net/qq_42138662/article/details/114529162

二.安装ELAS_ROS

步骤二:按照以下说明安装ELAS_ROS

zhangman@zhangman-G3-3579:~$ mkdir catkin_elas
zhangman@zhangman-G3-3579:~$ cd catkin_elas
zhangman@zhangman-G3-3579:~/catkin_elas$ mkdir src
zhangman@zhangman-G3-3579:~/catkin_elas$ cd src
zhangman@zhangman-G3-3579:~/catkin_elas/src$ git clone https://github.com/jeffdelmerico/cyphy-elas-ros.git
zhangman@zhangman-G3-3579:~/catkin_elas/src$ cd ..
zhangman@zhangman-G3-3579:~/catkin_elas$ catkin_make

三.配置ELAS_ROS以运行kitti

步骤三:在/catkin_elas/src/cyphy-elas-ros/elas_ros/文件夹下新建launch文件kitti.launch:

<launch><!-- Launches ELAS node, and rectification nodes for input --> <!-- Arguments: input stereo namespace and output elas namespace --><arg name="stereo" default="kitti"/><arg name="elas_ns" default="elas"/><node name="$(arg elas_ns)" pkg="elas_ros" type="elas_ros" output="screen"><remap from="stereo" to="$(arg stereo)"/><remap from="image" to="image_raw"/><param name="disp_min" type="int" value="0"/><param name="disp_max" type="int" value="255"/><param name="support_threshold" type="double" value="0.95"/><param name="support_texture" type="int" value="10"/><param name="candidate_stepsize" type="int" value="5"/><param name="incon_window_size" type="int" value="5"/><param name="incon_threshold" type="int" value="5"/><param name="incon_min_support" type="int" value="5"/><param name="add_corners" type="bool" value="0"/><param name="grid_size" type="int" value="20"/><param name="beta" type="double" value="0.02"/><param name="gamma" type="double" value="3"/><param name="sigma" type="double" value="1"/><param name="sradius" type="double" value="2"/><param name="match_texture" type="int" value="1"/><param name="lr_threshold" type="int" value="2"/><param name="speckle_sim_threshold" type="double" value="1"/><param name="speckle_size" type="int" value="200"/><param name="ipol_gap_width" type="int" value="300"/><param name="filter_median" type="bool" value="0"/><param name="filter_adaptive_mean" type="bool" value="1"/><param name="postprocess_only_left" type="bool" value="1"/><param name="subsampling" type="bool" value="0"/><param name="approximate_sync" value="true" /><param name="queue_size" type="int" value="5"/><!-- If your cameras are not synchronised then uncomment the following line --><!-- <param name="approximate_sync" value="true" type="bool"/> --></node><!--node pkg="rviz" type="rviz" name="$(anon rviz)" respawn="false" output="screen" args="-d $(find elas_ros)/rviz/KITTI.rviz" / -->
</launch>

步骤四:修改/catkin_elas/src/cyphy-elas-ros/elas_ros/src/文件夹下的elas.cpp源码以在kitti对应的rosbag上运行

将84行位置处的如下代码

    // Topicsstd::string stereo_ns = nh.resolveName("stereo");std::string left_topic = ros::names::clean(stereo_ns + "/left/" + nh.resolveName("image"));std::string right_topic = ros::names::clean(stereo_ns + "/right/" + nh.resolveName("image"));std::string left_info_topic = stereo_ns + "/left/camera_info";std::string right_info_topic = stereo_ns + "/right/camera_info";

更改为:

    // Topicsstd::string stereo_ns = nh.resolveName("stereo");std::string left_topic = ros::names::clean(stereo_ns + "/camera_gray_left/" + nh.resolveName("image"));std::string right_topic = ros::names::clean(stereo_ns + "/camera_gray_right/" + nh.resolveName("image"));std::string left_info_topic = stereo_ns + "/camera_gray_left/camera_info";std::string right_info_topic = stereo_ns + "/camera_gray_right/camera_info";

步骤五:重新编译

zhangman@zhangman-G3-3579:~/catkin_elas$ catkin_make

四.在KITTI上运行ElAZ

步骤六:运行elas和kitti的rosbag,并在rivz可视化

  • 运行elas节点
roslaunch elas_ros kitti.launch
  • 播放kitti对应的rosbag
rosbag play kitti.bag
  • 启动rviz
rviz
  • 在rviz中添加相关topic后进行可视化

五.elas程序更改说明

如果想应用该程序到其他rosbag,请按照以下说明进行修改
0.修改思路
ELAS_ROS程序的运行共需要监听左相机灰度图像,右相机灰度图像,左相机的info,右相机的info,因此我们的更改主要围绕这四个topic名字来进行更改.

首先运行rosbag,然后查看rosbag对应的topic,如kitti数据集相应的rostopic如下:
为了便于叙述,下面的topic结构称为:
/rosbag名/相机名/图像话题名或相机info名

/kitti/camera_gray_left/image_raw
/kitti/camera_gray_right/image_raw
/kitti/camera_gray_left/camera_info
/kitti/camera_gray_right/camera_info

1.launch文件更改
launch文件按照以下模板进行更改:

<launch><!-- Launches ELAS node, and rectification nodes for input --> <!-- Arguments: input stereo namespace and output elas namespace --><arg name="stereo" default="camera"/>    ##这里的camera更改为rosbag的名字,如kitti<arg name="elas_ns" default="elas"/>/**************以下这个模块用于立体矫正,如果输入的左右目图像已经进行了立体矫正,则删除该模块********/<!-- If you already have rectified camera images remove the image_proc nodes --><group ns="$(arg stereo)/left"><node name="left_rect" pkg="image_proc" type="image_proc"/></group><group ns="$(arg stereo)/right"><node name="right_rect" pkg="image_proc" type="image_proc"/></group><!-- This node actually does the stereo reconstruction -->/**************以上这个模块用于立体矫正,如果输入的左右目图像已经进行了立体矫正,则删除该模块********/<node name="$(arg elas_ns)" pkg="elas_ros" type="elas_ros" output="screen"><remap from="stereo" to="$(arg stereo)"/><remap from="image" to="image_rect"/>     ##这里的image_rect更改为图像名字,如image_raw##以下参数是程序相关参数,改动后会影响立体匹配效果<param name="disp_min" type="int" value="0"/><param name="disp_max" type="int" value="255"/><param name="support_threshold" type="double" value="0.95"/><param name="support_texture" type="int" value="10"/><param name="candidate_stepsize" type="int" value="5"/><param name="incon_window_size" type="int" value="5"/><param name="incon_threshold" type="int" value="5"/><param name="incon_min_support" type="int" value="5"/><param name="add_corners" type="bool" value="0"/><param name="grid_size" type="int" value="20"/><param name="beta" type="double" value="0.02"/><param name="gamma" type="double" value="3"/><param name="sigma" type="double" value="1"/><param name="sradius" type="double" value="2"/><param name="match_texture" type="int" value="1"/><param name="lr_threshold" type="int" value="2"/><param name="speckle_sim_threshold" type="double" value="1"/><param name="speckle_size" type="int" value="200"/><param name="ipol_gap_width" type="int" value="300"/><param name="filter_median" type="bool" value="0"/><param name="filter_adaptive_mean" type="bool" value="1"/><param name="postprocess_only_left" type="bool" value="1"/><param name="subsampling" type="bool" value="0"/><param name="approximate_sync" value="true" /><param name="queue_size" type="int" value="5"/><!-- If your cameras are not synchronised then uncomment the following line --><!-- <param name="approximate_sync" value="true" type="bool"/> --></node><!--node pkg="rviz" type="rviz" name="$(anon rviz)" respawn="false" output="screen" args="-d $(find elas_ros)/rviz/KITTI.rviz" / -->
</launch>

2.elas.cpp源代码更改

    // Topicsstd::string stereo_ns = nh.resolveName("stereo");//这里的left改成rosbag中对应的左相机的名字,如camera_gray_leftstd::string left_topic = ros::names::clean(stereo_ns + "/left/" + nh.resolveName("image"));//这里的rigth改成rosbag中对应的右相机的名字,如camera_gray_rightstd::string right_topic = ros::names::clean(stereo_ns + "/right/" + nh.resolveName("image"));//这里的left改成rosbag中对应的左相机的名字,如camera_gray_leftstd::string left_info_topic = stereo_ns + "/left/camera_info";//这里的rigth改成rosbag中对应的右相机的名字,如camera_gray_rightstd::string right_info_topic = stereo_ns + "/right/camera_info";

3.更改后先编译再运行

ELAS_ROS算法在KITTI数据集上生成稠密点云相关推荐

  1. KITTI数据集上MaskRCNN检测效果示例

    KITTI数据集上MaskRCNN检测效果示例 在Semantic Instance Segmentation Evaluation中,MaskRCNN性能效果排名第一. Test Image 0 I ...

  2. 什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果?

    什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果? 什么是维度诅咒? 随着维数(或特征)个数的增加,任意两个样本或者实例之间的平均距离也会增加,换句话说,在高维空间中,实例往往位于空间的边缘. ...

  3. 感知机算法在鸢尾花数据集上的实践

    感知机算法在鸢尾花数据集上的实践 1 问题背景 2 数据集的微处理 3 导数据,并进行简单可视化 4 模型算法的训练部分 1 问题背景 感知机作为一个比较经典的处理线性二分类的算法,今天想着实践一下, ...

  4. 图像生成 - 使用BigGAN在Imagenet数据集上生成高质量图像。

    图像生成是计算机视觉领域中的重要问题,其目的是生成具有高质量和真实感的图像.最近,Google提出的BigGAN方法在图像生成任务上取得了巨大的成功,可以生成高分辨率和高质量的图像.在本文中,我们将介 ...

  5. 用DPM(Deformable Part Model,voc-release3.1)算法在INRIA数据集上训练自己的人体检测模型

    我的环境 DPM源码版本:voc-release3.1 VOC开发包版本:VOC2007_devkit_08-Jun Matlab版本:MatlabR2012b c++编译器:VS2010 系统:Wi ...

  6. 几种聚类算法在IRIS数据集上的应用(python)

    分解聚类.C均值聚类及其改进.ISODATA应用在IRIS数据集的表现 IRIS数据集 分解聚类 C均值聚类 ISODATA K均值聚类 这个其实是之前的一次课程作业,要求是对鸢尾花数据集IRIS做聚 ...

  7. 【MMDetection3D】环境搭建,使用PointPillers训练测试可视化KITTI数据集

    文章目录 前言 3D目标检测概述 KITTI数据集简介 MMDetection3D 环境搭建 数据集准备 训练 测试及可视化 绘制损失函数曲线 参考资料 前言 2D卷不动了,来卷3D,之后更多地工作会 ...

  8. 一文多图搞懂KITTI数据集下载及解析

    转载自一文多图搞懂KITTI数据集下载及解析-阿里云开发者社区 KITTI Dataset 1.图片下载:点击下载:https://s3.eu-central-1.amazonaws.com/avg- ...

  9. 基于KITTI数据集的无人驾驶感知与传感器融合实现—(0)—照猫画虎

    基于KITTI数据集的无人驾驶感知与传感器融合实现-(0)-照猫画虎 学习前言 链接 项目介绍 项目效果 逻辑框架图 详细步骤 学习前言   最近自动驾驶蛮火的,我自己看这玩意也想弄弄,然后在百度AI ...

  10. 【图像语义分割】DeepLabv3+(Pytorch版) 源码复现—Kitti数据集

    自己研究课题涉及到图像语义分割,所以最近复现了Deeplabv3+,在KITTI数据集上进行实验,kitti的语义分割数据集是按照cityspace的数据集制作的所有可以用cityspaces的训练模 ...

最新文章

  1. 面试再问值传递与引用传递,把这篇文章砸给他!
  2. 设计模式------观察者模式
  3. Kubernetes端到端解决方案Part3:如何正确部署Kubernetes
  4. 手把手教你学会用Delve调试Go程序
  5. day7 java的构造器
  6. jQuery实现字体变大和缩小
  7. 路由 RIP 协议 和 滞空路由
  8. win10软件拒绝访问删不掉_谷歌工程师正在解决Windows 10防病毒软件导致谷歌浏览器不稳定问题...
  9. 互联网晚报 | 11月22日 星期一 | 华为正式开启二手机业务;B站通过收购获得支付牌照;字节跳动公益平台正式上线...
  10. 摇杆控制方向原理_摇杆电位器原理及结构
  11. 《设计模式修炼真经》15 — 模板方法模式
  12. oracle中vim设置行号,vim的常用操作
  13. 51单片机实现万年历
  14. 工业企业数字化转型--设备管理运维系统
  15. 第19章、 认识与分析登录档
  16. 宝宝喜欢爬窗户怎么办?
  17. 插入排序原理以及C语言实现
  18. 玉米社:巧用以下6点,规避短视频剪辑违规侵权问题
  19. pc端网页唤起本地的咚咚和千牛
  20. HTTP 响应的格式和响应代码

热门文章

  1. GBase 8a MPP Cluster管理工具---“GBaseDataStudio”
  2. 测试手机屏幕颜色软件,【AVW分享】一款你可以拥有的手机屏幕测试app
  3. SPSS数据插补方法
  4. eclipse安装程序无法启动
  5. 3D视觉是CV技术的未来!对话奥比中光CEO黄源浩
  6. 标准正交表与混合正交表的使用
  7. C# WinForm程序中使用Unity3D控件
  8. 编码表/转义字符/进制转换
  9. SecureCRT下载安装与破解
  10. MyEclipse详细使用教程