点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

文章导读

采用传统的点云处理算法做障碍物检测有一个重要的环节就是地面分割,本文介绍各种常用的地面分割方法,并通过实际测试分析其场景的不适应性,最后推荐几种开源的分割算法供大家尝试。

1

为什么要做地面分割

采用激光雷达做低层次感知的障碍物检测任务,考虑硬件性能,开发周期,数据成本等问题,可以采样传统的点云处理算法进行障碍物的分割、拟合、跟踪。在这个过程中使用聚类算法进行障碍物分割,而聚类算法依据点之间的欧式距离来度量属性,因此地面点会对位于地面上物体点集造成干扰。

深度学习的方法往往不需要预先分割出地面是因为无论将点云转换成何种方式输入,卷积都会以滑窗的方式遍历到每一块局部区域提取特征,然后做分类回归。

2

有哪些地面分割的方法

地面分割算法通常可以分为:

  • 平面栅格法

  • 点云法向量

  • 模型拟合法

  • 面元网格法

平面栅格法

栅格法通常是根据设定好的尺寸建立平面网格(也可以做多层网格或者三维体素),然后将原始点云投影到各自的网格中,对每个网格中的点集提取特征,比如:平均高度、最大高度、高度差、密度等等。

具体方法:

  • 设置网格尺寸生成栅格图;

  • 根据点的x,y坐标投影到对应的栅格中;

  • 统计每个栅格中的点集高度特征;

  • 用统计量与设定的阈值比较进行分类;

投影后的栅格图类似于鸟瞰图,如下所示:

存在问题:

当激光雷达线束比较少的时候,比如下图用的16线激光雷达采集的道路数据,车辆前方20米以外的地面上,能够打到的激光点已经比较少了,而且打到障碍物上的激光线束一般也只有一条,如果在栅格中采用高度特征进行地面过滤,遇到低矮的障碍物很容易会被当成地面点过滤掉。

点云法向量

点的法线估计是需要其邻域点的做支持,邻域的大小一般由邻域半径值或临近点个数来表示。过大的邻域会抹平三维结构细节使得法向量过于粗糙,而过小的邻域由于包含了太少的点受噪声干扰程度较强。

用法向量进行地面分割是考虑到地面点的法向量一般为竖直方向,通过设置角度阈值,求每个点的法向量与地面法向量的夹角,与阈值对比进行分类。

考虑到人行道,车顶等道路上很多物体都存在法向量为(0,0,1)或(0,0,-1)的区域,所以通常会把点云法向量作为特征与其他方法结合过滤地面点集。

引入法向量能够解决什么场景呢?

在栅格法中,我们一般会利用高度信息对点集进行分类,但是往往地面高度和路两边的人行道高度差距只在30cm左右,如果没有先验信息提取出道路ROI区域的话,使用高度阈值划分道路,路沿,障碍物可能存在误差,但是引入点云法向量,可以较好的提取出道路两旁法向量突变的点集构成路沿,从而配合栅格化将道路区域,非道路区域,障碍物进行划分。如下图所示:

模型拟合法

常用的模型拟合方法包括以下几种:

  • 平面拟合-RANSAC

  • 高斯过程-GP-INSAC

  • 平面参数拟合(特征值)

以RANSAC平面拟合的方法为例,具体流程如下:

  • 在设置的迭代次数内,每次随机选取3个点确定一个平面方程(Ax+By+Cz+D=0);

  • 将所有点依次带入该平面方程中,根据设定的距离阈值做判定,若在阈值范围内,则认为属于该平面的内点,否则为外点,遍历所有点后统计内点个数;

  • 在迭代次数内内点数量最多的平面方程即为地面方程,该地面方程下的内点就是地面点云集,外点就是障碍物点云集;

在理想的路面采用基于模型类的方法分割地面,效果尚可,如下图所示:

存在问题:

1. 交通道路从排水考虑通常是中间凸起,两边低洼,类似于拱桥形状,虽然曲率不大,但是通过随机采样一致性算法计算地平面,可能会得到倾斜于一侧的平面作为地面方程;

2. 在上下坡的时候同样因为地面非绝对平面,计算出的地面方程,会出现把前方地面点集作为障碍物点的情况;

3. 由于RANSAC是在点云空间随机的取三个点构建平面,如果场景中存在大块墙面时,会出现将墙面作为地面方程的情况;

面元网格法

基于面元的分割可以分为局部类型或者表面类型,常采用区域增长的方式进行地面分割。其核心是基于点法线之间角度的比较,将满足平滑约束的相邻点合并在一起,以一簇点集的形式输出,每簇点集被认为是属于相同平面。

区域增长的具体流程如下:

  • 选择种子点:在当前点集A中选择有最小曲率的点加入种子点集;

  • 区域增长:寻找种子点的邻域点,对于位于A中且与种子点的法向量夹角小于阈值的邻域点,将其加入当前区域中,如果其曲率小于阈值则也加入种子点集;

  • 对于每个种子点重复上一步操作,最终输出一组类,每个类的点都认为是同一平滑表面的一部分;

采用面元区域增长的方法在一定程序上能够较好的应对地面存在曲率的情况。对于比较平缓的曲面或者平面能够达到较好的分割效果,但是实际道路中的噪声点太多,直接使用区域增长分割地面,会出现较多零星的地面点被当成障碍物点集。

而且区域增长算法的时耗较大,时间复杂度和面积成正比,对于实时性要求较高的感知算法模块,需要进一步优化。比如将平面的区域增长降为到边缘,或者划分区域,在小范围呢进行分割等等。

3

如何分割带坡度的地面

道路坡度问题在传统点云分割算法中一直是个难点。考虑到一个平面方程无法应对现实中的道路,研究者往往会采用分而治之的思想,对区域进行划分,然后在小范围中拟合直线或平面;或者利用激光雷达扫描线之间的角度信息作为先验知识,利用不同线速打到地面上的间隔距离或者角度进行判别,一定程度上弱化了高度信息的敏感性。

近些年也有不少较鲁棒的地面分割算法实测效果良好,思想大多是基于分段的方式。下面推荐几种小编认为不错的方法:

a. 《Fast segmentation of 3d point clouds for ground vehicles》通过对点云(x,y,z)三维空间进行降维到(d,z)的二维栅格中,同时采取不同的划分扇区点云策略划分网格segments和bin,通过局部拟合直线来判断是否为地面点。

b. 《Fast segmentation of 3D point clouds: A paradigm on LiDAR data for autonomous vehicle applications》首先提取地面种子候选点集,再划分segments的基础上进行SVD分解求取法向量平面参数,最后迭代求取最佳法向量。

c. 《Efficient Online Segmentation for Sparse 3D Laser Scans》首先将点云数据转换成深度图像,图像中的行数由垂直方向上的光束的数量定义,列数由激光每360度旋转得到的距离值;用距离值求取连接两点的倾斜角度,最终与约束条件比较判断地面点集。

最终在工程模块中,任何单一算法都不足以覆盖很多场景,通常建议采用多个算法的结合来判断当前点的类型,并且考虑落地嵌入式的性能约束,针对算法中可以分块的部分可以尝试并行运算做加速。下图是一张分割去除地面的效果图:

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近3000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

一文详解激光点云的地面分割相关推荐

  1. 一文详解激光点云的物体聚类

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 文章导读 本文针对自动驾驶中三维点云的道路目标聚类进行讲解,从聚类算法的原理出发,介绍几种常用的点云障 ...

  2. 2.0 解析系列 | 一文详解新一代OceanBase云平台

    小蚂蚁说: 9月21日,OceanBase 2.0 在云栖大会上重磅发布.我们将在接下来的时间里为大家持续推出 "OceanBase 2.0 技术解析系列" 文章,分别从 可运维性 ...

  3. 一文详解激光SLAM框架LeGO-LOAM

    作者介绍:Zach,移动机器人从业者,热爱移动机器人行业,立志于科技助力美好生活. LOAM存在的问题 LeGO-LOAM全称为:Lightweight and Groud-Optimized Lid ...

  4. 云服务器CentOS8.2安装部署Docker一文详解

    目录 前言 一.Docker简介 二.安装部署以及测试Docker 1.安装Docker 1.1查看系统版本 1.2移除旧依赖 1.3安装方法 1.4设置存储库 ​编辑 1.5安装Docker引擎 1 ...

  5. 用pcl读ply文件_一分钟详解PCL中点云配准技术

    原文首发于微信公众号「3D视觉工坊」:一分钟详解PCL中点云配准技术 本文是对前两篇文章:点云配准(一 两两配准)以及3D点云(二 多福点云配准)的补充,希望可以在一定程度上帮助大家对点云配准理解地更 ...

  6. 一文详解自动驾驶的运行设计域(ODD)| 自动驾驶系列 1

    一文详解自动驾驶的运行设计域(ODD)| \n 自动驾驶系列 2021年4月30日,SAE发布了第四版J3016<驾驶自动化分级>,这是即2014年1月16日.2016年9月30日.201 ...

  7. 一分钟详解PCL中点云配准技术

    原文首发于微信公众号「3D视觉工坊」: 一分钟详解PCL中点云配准技术 本文是对前两篇文章:

  8. 一文详解JavaBean 看这篇就够了

    一文详解JavaBean 看这篇就够了 JavaBean的历史渊源 JavaBean的定义(通俗版) JavaBean应用 < jsp:useBean > < jsp:getProp ...

  9. 【卷积神经网络结构专题】一文详解AlexNet(附代码实现)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第二篇文章,前面我们已经介绍了第一个真正意义 ...

最新文章

  1. 你听说过反摩尔定律吗?
  2. Ubuntu 16.04 安装后修改屏幕分辨率(xrandr: Failed to get size of gamma for output default)
  3. 学习Java需要达到的25个目标
  4. python-常见数据类型及其方法
  5. C++中的二阶构造模式
  6. 2017 php7 使用率,让PHP7达到最高性能的几个Tips
  7. 图解算法学习笔记(目录)
  8. openstack创建外网_OpenStack的女性谈论外展,教育和指导
  9. 区块链学习(3)--以太坊Dapp开发
  10. zookeeper学习二
  11. android中stagefright和OMXCodec原理分析
  12. Java 链表元素如何从键盘输入 面试 笔试高频
  13. Android wifi信号强度显示流程
  14. 游戏计算机中有缓冲内存吗,内存再大都不行!CPU缓存竟这么重要
  15. Flask中蓝本(Blueprint)的使用
  16. 6月26日日志-消费记录界面实现
  17. 如何制作电子文档CHM(How to gernerate chm from assembly)
  18. win10高危服务_您可以安全地禁用哪些Win10服务?
  19. chmod 777的含义
  20. 经典励志名言100余句

热门文章

  1. ASP.NET Core开发之HttpContext
  2. 4、利用zookeeper来实现client端自动感知服务器端在线情况,并且可以进行负载均衡。...
  3. 第八章教材内容总结:异常控制流
  4. bzoj2020[Usaco2010 Jan]Buying Feed, II*
  5. Stylus插件开发教程
  6. Android应用程序进程启动过程的源代码分析(1)
  7. Android Service的思考(3)
  8. 美团真的让人无语!背调了一个多星期,跟我说背调不通过!问原因,HR说没办法透露,但可以看其它美团机会...
  9. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!
  10. 淘宝|蚂蚁|菜鸟|盒马|嘀嘀|饿了么面经(已拿多个offer)