本文仅用于自己学习整理,不保证内容的完整性和准确性,仅供其他朋友参考。转载请注明出处

前言

角点检测与跟踪,是特征提取与跟踪(Feature tracking)下研究较多的内容。相对其他上层任务来说(物体分类、SLAM等),是一个较为底层的工作。但也有着较多的研究。在这里做一些总结,会不断进行补充。

1、角点检测与跟踪的分类

文献【1】将特征检测进行了一些归类。

第一类是利用事件流数据,寻找某种模板,实现检测与跟踪,例如寻找在颗粒检测时(particle detection)多采用聚集的事件,我认为这是一些比较简单的形状可以这么搞,也没见太多。主要见到的还是在一些名为颗粒检测的论文中看到,即不考虑形状啥的,只要有一团,就是要找的特征。文献【2】【3】是两个particle tracking的研究。

第二类是参考了Frame-based的特征的特性,进行的检测与跟踪。具体来说,基于事件的角点检测考虑了一个角点的在frame下的形状等属性。这里分类可以再细分为以下两种:

  1. 结合Frame图像的方法,例如从frame中进行提取特征后,利用Event去跟踪;
  2. 不结合Frame,只使用Event的方法。

根据我目前看论文的情况,就“角点检测”这个任务来说,只使用Event数据进行检测与跟踪的方法居多,基本上不需要参考Frame的数据。

其实还可以找到第三类,结合学习的方法进行角点检测与跟踪。这里提到的"学习",又可以进行细分:

  1. 基于统计的机器学习方法,例如【1】就是利用大量的角点数据生成随机森林的方式,从而判断某个事件是否为角点;
  2. 基于卷积神经网络的方法,即采用卷积的方法判断是否为角点。这又可以进一步细分为,是否需要事件积累,或者称为“同步”还是“异步”。所谓积累或同步,是指积累一定时间段或一定数量的事件后,形成事件积累图,然后利用卷积方法找角点;而异步的方法,是重新设计了卷积的形式,将卷积应用在离散的时间序列上,实现卷积【4】。
  3. 基于脉冲神经网络的方法,Spiking Neural Network。但提到这种方法对于密集的事件可能效果不好。

抛开这种分类方法,还有其它的分类依据,例如:同步还是异步?许多文章会强调 Asynchronous,即表示他们的方法是异步的。异步一般是可逐事件处理的(Event-by-event),而对立的方法则需要进行accumulate (Group of events)。可以发现,这些分类依据是交叉的,并不能说只要利用了Frame数据就一定是同步或者异步,毕竟连CNN都能搞成异步的。

2、Time surface / SAE

“时间表面”(我自己瞎翻译的, Time Surface)【5】,或叫做“激活事件表面”(也是我自己瞎翻译的,Surface of Active Events),缩写为SAE,是一种事件数据流的表示方式,在角点检测中使用尤为频繁。简单来说,每个像素上发生的最新的一个事件的时间戳,构成的表面,就是SAE。直观上看就是下图:

这三个图表达了一个意思,沿某一方向运动时,边缘造成最新的SAE对应的值更大,而发生事件更早的地方值更小。图1是在Image上画出来的拖尾的感觉,图2展示出SAE具有“阶梯状”(一写论文会采用Step描述SAE特性)。
若写成数学表达式,则为一个映射:
S:(x,y)∈R2→t∈RS: (x, y) \in R^2 \to t \in RS:(x,y)∈R2→t∈R 即SAE对应的映射S,将一个像素的二维坐标映射到一个一维的时间戳。这就是最基本的SAE。

2.1 Normalized SAE

时间归一化SAE【6】(没有专有名词,论文中采用 "Time-window normalization"这一描述),指的是在一个时间窗内的时间戳,全部映射到[0, 1]之间。使用这种方式可以方便的计算一些距离,例如论文中的Descriptor Distance使用了归一化时间的SAE进行计算。

2.2 Speed Invariant Time Surface

在文章【1】中提出,缩写为SITS。当一个边缘运动速度不同时,传统的SAE会有很大的差距,速度越快,SAE表面的坡度越小,速度越慢,则越抖。为此文章提出的Speed Invariant的方法可以避免速度的影响。
基本思路是,当一个事件发生时,找空间大小为(2r+1)×(2r+1)(2r+1)\times(2r+1)(2r+1)×(2r+1)的窗口,之中如果有其他事件且时间戳比当前的大,则那个事件对应的改进时间戳(不是严格意义的时间)进行-1操作,并将这个事件的改进时间戳设置为最大值(2r+1)2(2r+1)^2(2r+1)2,由此一来,SAE的改进时间戳以1递减,从而保证了SAE的梯度是恒定的,改进时间戳与实际时间戳无关,也就是与速度无关。
改进前后的样子如图,第一列是传统SAE,第二列是2.1节提到的归一化,可以发现类似于进行了均衡化;第三列是Speed Invariant的方法,保证了相邻时间戳像素的SAE以1递减,更加均匀。

2.3 Filtered SAE

论文【7】提出了Filtered SAE与对应的Arc*角点检测方法。Filtered SAE基本思想是,我不用最新的时间戳,而是用滤波之后的。这里用FSAE进行缩写,文章中用S∗S^*S∗表示新的SAE,传统的SAE用SSS表示。
改进方法的直观解释如图,不是采用最新的时间戳,而是采用最新时间戳对应的一段时间之内的最早的时间戳作为当前SAE的值,从图上看就是时间戳的下界。
改进方法的数学形式是:
S∗:(x,y)∈R2→(tr,tl)∈R2S^*: (x, y) \in R^2 \to (t_r, t_l)\in R^2S∗:(x,y)∈R2→(tr​,tl​)∈R2 将原有的映射SSS从二维像素映射为一维的时间,改进为映射为二维时间,trt_rtr​表示reference,tlt_ltl​表示 latest。每个事件到来时更新latest,然后找一段儿时间之内的(论文取值为50ms)的同极性的最早时间戳作为ref。

这种表示方式的好处:滤掉了一个边缘产生的大量数据,保证了时间戳的稳定即SAE的平滑,降低了数据量。

2.4 Local SAE 与 Global SAE

【8】提出采用Global SAE方法代替上面的Local SAE,说是这种表示更加简洁。具体使用使会取出一个local的SAE。没太搞懂为什么Global SAE会更方便,或许和数据结构有关。先放到这里。

3. 几种典型角点检测与跟踪方法

3.1 第一个角点检测方法

【9】这篇文章是论文中公认的第一个角点检测的研究。看发表在了Neural networks上就可以推测其概念上的影响比实用性要强一些(开个玩笑,但个人感觉更实用的方法更多的发表在和视觉或机器人相关的期刊会议,而不是偏生物的这些)。

本文的基本思想是,角点是由两条直线相交的,所以在时空窗口内回归平面,即时间窗口中的直线,从而相交找角点。由于回归方法可以增量进行,所以是一个异步的方法。这篇文章虽然实用性不高(平面回归耗时较多),但毕竟算是第一篇嘛,还是异步的方法,所以地位还是有的。

3.2 Harris角点检测 eHarris

【10】是Event-based Harris角点检测方法,其角点的定义形式,以及求解方法,都是直接来自Harris方法,利用eigen求解两个特征向量,判断是否都足够大从而判断是否是Harris角点。
该方法有被后人实现,用作对比。参考FAST角点检测的开源代码:https://github.com/uzh-rpg/rpg_corner_events

3.3 FAST角点检测 eFAST

【11】提出了基于事件的FAST角点检测方法,与传统FAST方法判断周围一圈灰度值是否连续大于小于的方法类似,eFAST采用SAE方法,比较一圈上SAE的值是否连续大于/小于中心值,从而判断是否为FAST角点。
为保证鲁棒性,选取两个圆圈,半径3与半径4。对于半径3圆圈,若有连续3-6个像素小于或大于中心的SAE,且半径4的圆圈有连续4-8个,那么则认为是一个FAST角点。

有代码实现:https://github.com/uzh-rpg/rpg_corner_events

3.4 Arc* 方法(检测+跟踪)

【7】中的方法,包括了角点检测与跟踪。

角点检测
角点检测方法与eFAST类似,但更加细节。首先所采用的SAE是Filtered SAE(2.3介绍的),然后从半径3的圆圈上,寻找最新的时间戳,之后沿顺时针和逆时针方向搞两个指针Ecw和Eccw,分头遍历,当Ecw的时间戳比Eccw小时,Ecw移动到下一个位置;反之移动Eccw直到比Ecw的小。来回交替,直到两个碰面。由此统计各自走过的长度,在3-6之间(半径4的在4-8之间),则认为是角点。
个人认为这种搜索方法比eFAST相比,是不是更鲁棒一些啊。不会因为一两个突变的导致不连续大于或小于。

跟踪
跟踪采用一种树的方式。寻找最新角点附近有无之前的事件,如果有则作为子节点附属到距离最近的事件(父节点)上,如果没有其他事件则自己作为树的根节点,开始生长。同时有一个时间阈值,如果空间窗内的事件早于时间阈值,也认为是新的角点。
理论上来说,如果角点检测稳定,则必然是1像素相邻的,但论文保险起见空间窗选取了5pixel。这种跟踪方式个人感觉也很有趣。

3.5 ACE方法 (检测+跟踪)

【6】采用这种方法,与Arc的作者是同一个人,虽然都是18年论文且跟踪方法相似,但我感觉Arc方法更美妙一些,可能是ACE的改进版。这种方法的检测采用Normalized SAE(2.1节),然后比较局部SAE的描述子距离,从而判断边缘与角点。感觉不好玩就不深入学习了。

3.6 eFAST* 与 eHarris* 角点检测

这两种检测方法是【7】论文的Arc方法用作比较的,将Filtered SAE改进eHarris和eFAST方法,表现出Filter SAE的有效性且Arc方法的有效性。

3.7 FA-Harris 角点检测

【8】提出的角点检测方法。名曰具有3个单元:Global SAE管理单元,角点筛选单元,以及角点细化单元。但更像是之前方法的大杂烩。

首先维护一个全局SAE(2.4节),之后利用Arc*方法【7】筛选可能的角点,再利用类似于eHarris的方法对角点中心位置进行细化。之所以这么搞,兼顾了FAST的快速优势,以及Harris的精度优势,将FAST做初步提取之后Harris细化。性能上也有不小的提升。或许好用,但感觉没有新意。

3.8 其他跟踪方法

还有许多特征跟踪方法,这些方法不局限于角点的跟踪,采用的方法也多种多样,例如“多假设特征跟踪”【12】,“模板跟踪”【13】,“概率数据关联法”【14】,这些方法打算放到“特征跟踪”专题中进行整理总结。对了,这些名字也是我自己翻译概括的,毕竟我目前还没见到过中文论文提到这些方法。

4、心得体会

集中精力学习了多篇角点检测与跟踪的论文,对大体内容有了了解,最新的论文的思路没有跳出旧有的设计方案,可见现阶段的研究开始出现了重复的感觉。

有些地方自己没有深入研究,先放到这里作为提醒:
1. 没有考虑性能上的问题。没有关注以上方法的性能,精度与时间等;
2. 没有研究代码实现。论文中比较速度时,代码写的方式不同效率能差好多,毕竟数据量这么大,如何更新、如何检索,这如果自己实现代码需要进一步研究。

根据现有的论文,我大胆推测一下一步的研究方向,我个人感觉还有些地方可以去做
1. 现阶段缺少有效的评价指标。由于Event-based的方法跟踪和检测频率远高于Frame-based方法,所以不能直接用Frame-based直接作为GT,评价精度;
2. 缺少统一的测试数据集。虽然大多采用shapes_xxx.bag这个数据集,但没有benchmark,也没有带有GT的数据集,如果有的话方便比较许多;
3. 缺少完整的性能比较。各种方法也是各说各话,如果有一篇研究完整的对比分析了这些方法,那会客观很多,主要还是许多代码没有开源,自己实现没有可比性。

Reference

【1】Jacques Manderscheid, et al. Speed Invariant Time Surface for Learning to Detect Corner Points with Event-Based Cameras. CVPR(2019)
【2】Drazen, D., et al. Toward real-time particle tracking using an event-based dynamic vision sensor. Experiments in Fluids(2011)
【3】Borer, D.J…Large-scale 3D Particle Tracking with Dynamic Vision Sensors
【4】Cedric Scheerlinck. Asynchronous Spatial Image Convolutions for Event Cameras. RAL(2019)
【5】R. Benosman, C. Clercq, et al. Asynchronous Frameless Event-Based Optical Flow. Neural Networks(2012)
【6】Ignacio Alzugaray. ACE: An Efficient Asynchronous Corner Tracker for Event Cameras. 3DV(2018)
【7】Ignacio Alzugaray. Asynchronous Corner Detection and Tracking for Event Cameras in Real Time. RAL(2018)
【8】Ruoxiang Li, et al. FA-Harris: A Fast and Asynchronous Corner Detector for Event Cameras. IROS(2019)
【9】Xavier Clady, et at. Asynchronous event-based corner detection and matching. Neural networks(2015)
【10】Valentina Vasco, et al. Fast event-based Harris corner detection exploiting the advantages of event-driven cameras. IROS(2016)
【11】Mueggler, E. Fast Event-based Corner Detection. BMVC(2017)
【12】Ignacio Alzugaray. Asynchronous Multi-Hypothesis Tracking of Features with Event Cameras. 3DV(2019)
【13】Beat Kueng, et al. Low-Latency Visual Odometry using Event-based Feature Tracks. IROS(2016)
【14】Alex Zihao Zhu. Event-based feature tracking with probabilistic data association. ICRA(2017)

【事件相机整理】角点检测与跟踪总结相关推荐

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

    本发明属于图像处理领域,用于解决基于事件相机的SLAM项目的角点检测. 背景技术: 在过去几十年里,由于计算机视觉算法的研究与发展,人们对机器人感知的兴趣也日益增加.这种传统相机能够捕获相机周围环境的 ...

  2. 事件相机角点检测,从原理到demo

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 上次提到了事件相机的数据集和运行平台,这次我们运行第一个实例,从简单的入手:角点检测. 一.事件相机H ...

  3. 事件相机(event camera)概述与应用(随笔)

    一.事件相机的相关概念 事件相机是具有微秒反应时间的仿生传感器,可记录每像素亮度变化的异步流,称为"事件".事件相机通过检测每个像素的亮度变化来生成一个事件,相比于传统相机,更适合 ...

  4. 2020年,关于事件相机(event camera)的最新研究论文总结

    本文仅用于学习过程中的一些总结记录.2020年发表的关于事件相机在一些领域的总结. 1. 运动估计 Motion Estimation 有不少关于运动估计的论文,基本是围绕之前最大化事件积累图对比度的 ...

  5. 【CeleX5事件相机使用系列】芯仑相机的EventDenoising是如何实现的

    芯仑自身自带了一个 enableEventDenosing 函数,可以"启用去噪功能".突然好奇,芯仑自身的降噪功能是如何实现的?今天简单查阅了源码,稍作总结整理. 去噪原理 事件 ...

  6. 事件相机特征跟踪-概率数据关联法

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1.前言 在特征跟踪时,有一个重要的概念是数据关联(Data Association).所谓数据关联, ...

  7. 事件相机特征跟踪-模板跟踪方法

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1.前言 由于事件相机不能提供完整的图像,所以最初的特征跟踪依赖传统相机的数据.本推送介绍事件相机特征 ...

  8. 关于事件相机的整理与思考

    来源丨新机器视觉.韦心雕AI 佐思周彦武老师的事件相机,引发了对帧事件的思考.基于该思考,对事件相机做一个整理,具体算法不去解释.主要参考<Event-based Vision: A Surve ...

  9. 事件相机特征跟踪-EKLT方法

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1.前言 本推送介绍另一种特征跟踪方法,来自论文:"EKLT: Asynchronous P ...

最新文章

  1. vue webpack 访问php,实例详解vue-cli优化的webpack配置
  2. Unity3d 下websocket的使用
  3. C/C++调试:gdbserver的简单使用
  4. c盘哪些文件可以删除_Win7下C盘哪些文件可以删除?
  5. linux系统 opt扩容,Linux系统扩容根目录磁盘空间的操作方法
  6. 1.窗体与界面设计-菜单应用实例
  7. Windows 系统环境变量大全
  8. 可重启的活动目录域服务
  9. js 一个关于图片onload加载的事
  10. MySQL索引的原理,B+树、聚集索引和二级索引的结构分析
  11. SAVIOR Securing Autonomous Vehicles with Robust Physical Invariants
  12. 美式英语 [t] 的发音
  13. java 批量文件编码转换 GBK to UTF-8(swing界面)
  14. python直方图教程_Matplotlib绘制直方图
  15. Win10自带邮件系统绑定腾讯企业邮箱
  16. 便签插件可以贴在手机桌面上显示吗?怎么设置呢?
  17. vue|JavaScript let语法
  18. 全网最详细的 Maven 教程!
  19. 今天的彩蛋来的有点急,请抓住!
  20. 一分钟轻松解决阿里云盘无法分享压缩包问题

热门文章

  1. CUDA C编程(笔记)——CUDA的异构并行计算
  2. c#将字符串转换为数组_C#中怎样把一个字符串转换成字符形数组?
  3. android蓝牙配对加连接,android – 配对设备的蓝牙自动连接
  4. discuz密码找回:忘记UCENTER创始人密码
  5. RTP Payload H264
  6. python判断火车票座位号分布图_火车票座位号分布图图解(是否靠窗)
  7. 第四周小组作业:WordCount优化
  8. 360网站卫士SQL注入绕过案例一个
  9. 卡巴斯基KAV/KIS 6.0.1.411正式版下载 附MP1版中文汉化+注册码
  10. 计算机设计大赛指导老师的申报书,附件大赛作品申报书.DOC