事件相机提取直线

前言

最近在跟导师做科研项目需要测量高频振动正好用到事件相机,需要提取事件流数据中的直线特征,在这里记录一下实验数据采集与处理的过程。

相机配置

事件相机:我们使用的是 inivation 的 DAVIS346 ,是一款 346x240 分辨率的 DAVIS 相机。

镜头:由于事件相机的分辨率受限,尽量使用长焦镜头可以得到更多的微振动细节信息,我们使用 50cm 焦段的变焦镜头。

系统搭建

我们使用直尺和砝码(重物)在椅子上构造了一个悬臂梁系统。使用事件相机的目的是测量尺子的振动频率与幅度,因此我们通过简单的架设相机和适当的补光,将事件相机对准悬臂梁系统。

软件采集

使用 inivation 公司提供的DV软件进行事件相机的数据采集, DV 的功能已经相对完善,但是由于一些软件 bug ,切换不同的可视化页面容易闪退,因此受不了的也可以自己DIY写脚本进行采集。采集的数据为 .aedat4 文件,这是 inivation 自己的一种文件格式(详情可以参考 doc )

事件数据

由于事件相机的事件流数据的特殊之处,我们采集得到的 aedat4 文件里面存储的数据不能像常规处理RGB相机那样直接对图像进行处理,aedat4 里的一个事件读取出来的结果是 [x坐标,y坐标,t时间戳,p极性] ,其所代表的含义就是在 t 时间点时,事件相机的 CMOS 坐标 (x,y) 光强变化 p 是 + or -。

因此我想到了有两种方法来处理事件数据:

  1. 最直接的处理就是将t作为第三个坐标轴,极性不参与考虑,将事件数据转变成3D点云数据,按照点云的处理方法来处理事件数据。

  2. 我们也可以将事件数据进行时间上的切片与积累,例如每次处理10ms(100Hz)的数据,直接得到一个事件流的积累图像,即一个二维的图像,很多方法就可以沿用以前处理RGB图像的方法了。

数据预处理

我采用的是上述的方法2进行事件数据的初步预处理,可以得到类似下图的效果,红色为负极性事件,绿色为正极性事件

事件相机提取直线_第1张图片

然后进行事件数据的降噪,排除掉周围噪点,得到下图效果。

事件相机提取直线_第2张图片

直线提取

直线的提取我试过的方法共有两种,最简单直接的就是直接用 LSD 进行直线的提取,这个通过 openCV 直接调库就能简单实现,LSD 也有很多参数可以进行调整,调一调的效果也许会比较好,在下面我贴出我使用 LSD 跑出来的结果,只能说差强人意,太吃数据了,跑出来的结果与其说是提取直线,我倒是觉得像是提取边缘。我调研到的用 LSD 提线的效果比较好的场景是 2D 激光雷达,对于事件相机这种相对弥散的点数据来说 LSD 真不太行。

事件相机提取直线_第3张图片

第二种我采用的方案是 DBSCAN 聚类 + RANSAC 拟合直线的方法来进行直线的提取,这种方法对于我们这种希望在事件数据弥散点云中提取出直线信息的目的更为契合。DBSCAN 聚类能有效的将不同的事件分类成簇,再使用 RANSAC 能排除杂散点有效的拟合最符合的直线作为我们认定的直线特征。结果如下视频所示。


我的博客

你可能感兴趣的:(计算机视觉,图像处理)