600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 激光雷达角点检测 c语言 一种基于事件帧的角点检测方法与流程

激光雷达角点检测 c语言 一种基于事件帧的角点检测方法与流程

时间:2022-06-08 16:14:09

相关推荐

激光雷达角点检测 c语言 一种基于事件帧的角点检测方法与流程

本发明属于图像处理领域,用于解决基于事件相机的SLAM项目的角点检测。

背景技术:

在过去几十年里,由于计算机视觉算法的研究与发展,人们对机器人感知的兴趣也日益增加。这种传统相机能够捕获相机周围环境的高信息内容,并且因为其低成本,普遍的特点而在各种应用中变得最流行。

同时定位与地图构建(Simultaneous Localization,SLAM)是机器人感知领域最重要的里程碑之一,并且在过去30年取得了瞩目的成就。然而,传统的基于帧的相机在设计上表现出一些限制,一方面,它以固定得帧速率输出图像,无论每个图像中存在的新得信息量如何,因此,传入的信息通常是有大量的冗余的,这些冗余的数据会浪费宝贵的计算资源。另一方面,高动态场景或相机运动会给传统图像帧带来运动模糊,并且会使续帧之间缺乏足够的重叠信息,因此基于传统相机的角点检测和跟踪效果变得很差,这也限制了SLAM的进一步发展。尽管近些年来出现了一些新型的传感器,如激光雷达,深度相机,结构光传感器以及立体相机,然而现有的SLAM算法在机器人运动或环境过于复杂时还是容易失效。

事件相机或动态视觉传感器(Dynamic Vision Sensor,DVS)作为一个新的方案,有望克服基于传统相机框架中的一些问题,从而引起了越来越多的关注。它通过模拟视网膜,并响应由于运动引起的照明中的像素级变化而产生的脉冲。更具体的说,在tj时刻,uj=(xj,yj)像素位置上的亮度增量达到阈值±c(c>0),那么一个事件ej=(xj,yj,tj,pj)将被触发,pj∈{+1,-1}表示事件的极性正号表示亮度增加,负号表示亮度减小,因此事件相机输出的是异步事件流,如附图图1所示,并且由于事件仅仅记录增量变化,所以场景的绝对亮度值不再是直接可见的。与传统的基于帧的相机相比,事件相机可以以几乎无限的帧速率捕捉亮度变化,并记录特定时间点和图像位置的事件。特别是对于移动场景,事件相机在数据速率、速度和动态范围方面具有很大的优势,有望解决现有SLAM系统中运动过快而失效的问题

现有的基于事件相机的SLAM项目按对事件流的处理方式不同,大致可分为两类。一类是直接在事件流上进行检测和跟踪,如“Low-latency visual odometry using event-based feature tracks”文章所述,另一类是沿时间轴累积事件压缩成事件帧,然后在事件图像上运用现有的传统的Fast角点检测算法,如“Real-time Visual-Inertial Odometry for Event Cameras using Keyframe-based Nonlinear Optimization”文章所述。

然而直接在事件图像上使用传统Fast角点检测忽视了事件帧本身的特点(像素值不连续),如附图2所示,使得检测和跟踪的质量较差,如附图3所示,Fast将一些孤立像素点检测为角点,这种不稳定的角点,在跟踪过程中不仅容易丢失,而且还会影响跟踪的准确性。另外,Fast角点检测出的角点集中在图像中部,靠近边缘处,几乎没有角点,这是由事件图像成像特点决定的,事件图像通过累积事件得到,在图像边缘处,事件较少,相应的事件图像上的灰度值也较图像中部小,而Fast角点检测依据灰度值的大小进行判断,因此在相同的Fast阈值下,图像边缘会不满足Fast阈值,所以检测不到角点。

技术实现要素:

本发明针对现有的基于事件相机的SLAM项目中直接在事件图像上使用Fast角点检测的不足,提出一种针对事件图像成像特点的角点检测方法。该方法先把事件流沿时间轴按事件的点数累积压缩成事件图像,然后遍历整个事件图像,如果像素值小于设定阈值,此像素点不是角点。当满足像素值阈值时,以当前像素位置为中心定义一个半径为R的圆,当圆上有连续L个像素位置的像素值高于其他像素位置,则中心像素被视为角点。

本发明提供的技术方案为一种基于事件帧的角点检测方法,包括如下步骤:

步骤1,输入事件图像,设置阈值p,半径R,Lmin,Lmax,遍历事件图像E中每个像素位置;

步骤2,对于当前像素位置(x,y),如果像素值E(x,y)小于等于p,此像素不是角点;

步骤3,如果E(x,y)大于p,以(x,y)为中心初始化一个半径为R的圆C,具体实现如下,

步骤3.1,初始化Anew为圆C上像素值最大的像素点,初始化Ecw为Anew顺时针相邻的像素点,初始化Eccw为Anew逆时针相邻的像素点;

步骤3.2,判断Ecw和Eccw的位置是否相等,如果Ecw位置不等于Eccw;

步骤3.2.1,当Ecw大于Eccw时,如果Anew中最小值小于Ecw或者Anew中像素点个数小于Lmin,则扩展Anew直到包含Ecw,更新Ecw为顺时针下一个像素点,否则不扩展Anew只更新Ecw;

步骤3.2.2,当Ecw小于Eccw时,如果Anew中最小值小于Eccw或者Anew中像素点个数小于Lmin,则扩展Anew直到包含Eccw,更新Eccw为逆时针下一个像素,否则不扩展Anew只更新Eccw。

步骤3.3,重复步骤3.2,直到Ecw等于Eccw;

步骤4,如果Anew中像素点个数大于等于Lmin小于等于Lmax,或者Anew的互补圆环中像素点个数大于等于Lmin小于等于Lmax,那么此像素点是角点,否则不是角点。

进一步的,设置p=30,R=4,Lmin=3,Lmax=6。

本发明针将事件图像成像过程中像素值不连续,图像边缘处像素值较中部较小的特点考虑在内,避免了直接在事件图像上使用Fast角点检测把孤立的像素点检测为角点,在图像边缘处检测不到角点的情况。在跟踪过程中使用本发明提出的角点检测方法能够得到较好的跟踪质量。

附图说明

图1是传统相机和DVS相机数据对比。

图2是事件图像的像素值,其中(a)为具体的像素位置处像素值大小,(b)为像素值的三维视图。

图3角点检测结果的对比,其中(a)为使用传统Fast角点检测结果,(b)为使用本发明角点检测结果。

图4是一个具体实施的例子,其中(a)为一个待检测像素点周围半径为4的圆上的像素点,(b)为Anew、Ecw和Eccw的初始位置,(c)为检测过程中将Anew扩展到最小长度时的状态,(d)为最终Anew的状态。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实例仅仅用于解释本发明,并不用于限定本发明。

本发明实施例提供的一种基于事件帧的角点检测方法,具体步骤如下:

输入:事件图像,阈值p,半径R,Lmin,Lmax;

(1)遍历事件图像E中每个像素位置。

(2)对于当前像素位置(x,y),如果E(x,y)小于等于p,此像素不是角点。

(3)如果E(x,y)大于p,以(x,y)为中心初始化一个半径为R的圆C。

(3-1)初始化Anew(即圆上较高像素值区域)为圆C上像素值最大的像素点,初始化Ecw为Anew顺时针相邻的像素点,初始化Eccw为Anew逆时针相邻的像素点。

(3-2)如果Ecw位置不等于Eccw。

(3-2-1)当Ecw大于Eccw时,如果Anew中最小值小于Ecw或者Anew中像素点个数小于Lmin,则扩展Anew直到包含Ecw,更新Ecw为顺时针下一个像素点,否则不扩展Anew只更新Ecw。

(3-2-2)当Ecw小于Eccw时,如果Anew中最小值小于Eccw或者Anew中像素点个数小于Lmin,则扩展Anew直到包含Eccw,更新Eccw为逆时针下一个像素,否则不扩展Anew只更新Eccw。

(3-3)重复(3-2)步骤,直到Ecw等于Eccw。

(4)如果Anew中像素点个数大于等于Lmin小于等于Lmax,或者Anew的互补圆环中像素点个数大于等于Lmin小于等于Lmax,那么此像素点是角点,否则不是角点。

下面以一个具体是例子进行说明。

一个待检测的图像E,设置p=30,R=4,Lmin=3,Lmax=6。对于当前像素位置(x,y),如附图4中中间的灰色像素点,此像素位置的像素值E(x,y)>30,满足阈值要求,接着判断此像素点是不是角点。

以(x,y)为中心初始化一个半径为4的圆,如图4(a)所示。

初始化Anew(即圆上较高像素值区域)为C中最大值即图4(b)中像素值为15处,初始化Ecw为Anew顺时针相邻的像素点即图4(b)中像素值为14处,初始化Eccw为Anew逆时针相邻的像素点即图4(b)中像素值为4处。

首先由于Ecw大于Eccw时,并且Anew中像素点个数小于Lmin,因此沿顺时针扩展Anew,更新Ecw的位置到像素值12处,此时Anew中包含两个像素点。同理,由于此时Ecw大于Eccw,并且Anew中像素点个数小于Lmin,因此沿顺时针扩展Anew,更新Ecw的位置到像素值10处,此时Anew中包含三个像素点如图4(c)所示。接着由于Ecw大于Eccw,但是Anew中最小值12大于Ecw,因此不扩展Anew,只更新Ecw的位置到像素值13处。此时Ecw大于Eccw,并且Anew中最小值12小于Ecw,因此扩展Anew到Ecw,更新Ecw的位置到像素值14处。此时Ecw大于Eccw,并且Anew中最小值10小于Ecw,因此扩展Anew到Ecw,更新Ecw的位置到像素值8处,得到图4(d)。接着由于Anew中最小值10一直大于Ecw和Eccw,因此不再扩展Anew,只更新Ecw或者Eccw直到Ecw和Eccw位置重合。

最终,Anew中像素点个数为6,满足设定的范围,因此当前像素点是一个角点。

图3(a)为在三个数据集场景下,在事件图像上使用fast检测的结果,(b)为使用本发明检测的结果,白色圆圈为检测的角点。通过对比可以发现,fast将一些孤立的点检测为角点,并且在图像边缘处fast检测不到角点,角点集中在图像中部,而本发明的检测方法成功的避免了这两种情况。

本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。