- 在 FAST + SAE 的文章基础上的一个改进,设计了一个归一化方案,使得 SAE 不会随速度变化
- 在 1. 的基础上采用机器学习方法,将不变时间表面输入分类器训练,来区分角点事件
Speed Invariant Time Surface
在每个像素位置(x,y)处的值都是极性为 p 的事件在该位置发生的时间
思想:引入其他的规范化方式,减少在速度、转角、方向的变化的情况下 Time Surface 的变形
目的:通过为每个像素位置(x,y)与每个极性保持一个单一的值,有效地获得与速度无关的时间表面
方法
理解:想象运动物体都有轮廓,我们会捕捉运动物体的轮廓的"波(wave)",这个波不论运动速度如何,都是不变的,都应该具有相同的轮廓。每当到来一个新的事件时,将该位置的Time Surface的值定为一个较大的值,并减少周围的值,这样可以逐步减少由之前的移动轮廓导致的事件的值,并且由于减少是依赖于一个常数因子,所以“波”的斜率与等高线的速度无关
Speed Invariant Time Surface(后面简称SITS) 的构建
- 将 S上面的所有值初始化为 0 ,即对于所有的 (x, y),S(x, y, p) = 0;
- 对于每一个到来的事件 e(x, y, p),用如下方式更新 S;
- 对于 e 的周围的 (2r + 1) × (2r + 1) 的邻域内的所有点 (x', y'),如果 S(x', y', p) > S(x, y, p)(周围的大于当前的),那么邻域内所有的 S(x', y', p) 都减一;
- 将 到来事件 e 对应的 S(x, y, p) 设为 (2r + 1)²
从事件中学习角点检测
- 构建并更新 SITS(利用上面说到的方法);
- 构造一个分类器来对当前事件 ei 进行分类(分类为是否是特征点或不是),输入是 ei 的 n × n 邻域内的一个点的 patch,记作 si;
我们的目的是要得到一个分类器 F*,可以完成这样的任务:
文中选择了随机森林,每棵树是一个决策树桩(单层决策树),用描述符的维度 dk 和阈值 th 对比来得到结果,输出一个 e 是特征点的概率
由基尼不纯度来获得每个节点进行分支的最好的策略
角点检测流程
- 每传入一个事件;根据输入事件流,计算 SITS(它是一个局部的计算结果);
- 将 SITS 作为输入放入随机森林,训练来区分角点
- 如果随机森林返回的值高于一个阈值,则认为它是角点
结果会生成一个稀疏而稳定的角点事件流。
构建训练集
对每一个事件,都在它的局部位置对应的灰度图(应该是指伪图像)使用 Harris 角点检测,并根据检测结果分类。
** 文中使用了一个自己构建的、图案简单的训练集,但根据后面的实验结果,该方法训练出来的随机森林可以很好地泛化到复杂情况下