03 事件可视化
事件相机不输出"图像",输出的是一连串稀疏的异步事件点 (x, y, p, t),肉眼无法直接"看"出运动。本页讲把事件"看成画面"的两种思路,以及核心参数 accumulation time(累加时间) 与显示帧率如何配合。事件原理见 基础原理,事件字段与文件格式见 数据格式。
1. 两种可视化思路
| 思路 | 怎么做 | 看到什么 |
|---|---|---|
| XYT 三维空间 | 把事件画到 X-Y-时间 三维坐标 | 运动的时空轨迹(连续"管道") |
| 2D 帧生成 | 把一段时间内的事件累加到一张二维图 | 类似传统相机的一帧画面 |
2. XYT 三维事件空间
把每个事件 (x, y, t) 画进三维坐标:x、y 是像素坐标,t 是时间轴;ON 事件(变亮)与 OFF 事件(变暗)用不同颜色区分。沿时间轴展开后,一个运动目标会形成一条连续的"时空轨迹"——这正是事件相机时空连续、无运动模糊特性的直观体现:越靠近观察端的事件越新,越远的事件越旧。
3. 由事件生成 2D 帧
任意单一时刻 T(微秒精度)上的事件通常极少,不足以构成画面。因此"生成一帧"需要把 [T-dt, T] 这段时间内的事件累加起来,dt 即 accumulation time(累加时间):
- 以背景色(如黑色)初始化一帧 768×608 的图(尺寸见 Toolkit API 的
HV_EVS_WIDTH / HV_EVS_HEIGHT); - 对
[T-dt, T]内的每个事件,按极性着色——ON(p=1)一种颜色(如红),OFF(p=0)另一种(如绿); - 输出这一帧。
用 C++ + OpenCV 实现的完整代码见 编程指引 05 — 显示可视化。
4. 累加方案:full / over / under
累加时间 dt 与"多久生成一帧"(帧周期 = 1 / 帧率)的相对关系,决定了三种典型方案:
| 方案 | 关系 | 现象 | 适用 |
|---|---|---|---|
| full(满累加) | dt = 帧周期 | 每个事件恰好出现在一帧 | 默认、最常用 |
| over(过累加) | dt > 帧周期 | 同一事件出现在多帧(拖影 / 慢动作感) | 慢放回看、强调轨迹 |
| under(欠累加) | dt < 帧周期 | 大部分事件被丢弃,只有帧前 dt 内的事件可见 | 降低算力、只看"最新"变化 |
举例:显示帧率 30 FPS → 帧周期约 33ms。
dt= 33ms → full,每个事件出现一次;dt仍为 33ms,但帧率提到 1000 FPS(帧周期 1ms)→ over,同一事件跨越多帧;dt= 0.1ms → under,约 90% 的事件不会显示。
自动满累加
我方上位机 MultiVision Studio 可把累加时间设为"自动",让它跟随帧率自动取满累加值,免去手算。MIPI 模块在 RDK X5 的 evs_live_player 中也可调叠帧参数。
5. 累加时间 ↔ 帧率 怎么配
- 看清快速目标:提高帧率(缩短帧周期),累加时间同步缩短以保持 full。
- 看运动轨迹 / 慢动作:维持较长累加时间、提高显示帧率(over)。
- 算力受限:降低帧率,或用 under 只处理最新事件。
- 与 bias 配合:bias 决定事件密度(发不发),accumulation 决定怎么"看"(怎么叠),两者需协调,见 偏置与调参。
6. 录制 ≠ 可视化
重要:RAW 录制与累加时间无关
累加时间只是显示 / 可视化参数,类似于用播放器看慢动作。用 MultiVision Studio 或 evs_live_player 录制得到的 RAW / EVT2 文件,保存的是全部原始事件,与录制时设的累加时间无关——回放时可任意重新设置累加时间。
进阶
- 事件为什么是稀疏异步点:基础原理
- 事件字段
(x, y, p, t)与文件格式:数据格式 - 用代码把事件画成帧:编程指引 05 显示可视化
- bias 与 accumulation 的配合:偏置与调参
