全面解读:轻松掌握事件相机工作原理系列篇
0、前言
事件相机是一款新型传感器。不同于传统相机拍摄一幅完整的图像,事件相机拍摄的是“事件”,可以简单理解为“像素亮度的变化”,即事件相机输出的是像素亮度的变化情况。
事件相机英文名为:Event-based Camera,或简称为Event Camera,缩写为EB。有时也称作DVS(Dynamic Vision Sensor “动态视觉传感器”)、DAVIS(Dynamic and Active-Pixel Vision Sensor)等。
1、传统相机的缺点
传统相机,无论是CMOS传感器,还是CCD传感器,亦或是RGBD相机,都有一个参数:帧率。它们是以恒定的频率拍摄获取图像。这样,即使帧率能够达到1KHz,那也具有1ms的延时。所以传统相机存在一定的延迟问题。
除此之外,传统相机需要通过一定时间的曝光,使感光器件积累一定的光子,那么在曝光时间之内如果物体在高速运动,则会产生模糊,这也是传统相机的一个问题。
另外,传统相机的动态范围较低,具体表现为在光线极差或者亮度极高时,相机获取的信息有限。
(图:延迟,造成检测框滞后于行人;模糊,高速运动球杆拍摄不清;动态响应差,亮度很高时丢失信息)
以上三点,是由于相机自身硬件的限制,即使高性能相机能够一定程度减小这些问题,但由于相机原理,这些问题无法避免。这些问题极大地限制了一些应用场景。而事件相机完全不存在这些问题。
2、事件相机基本原理与优势
事件相机的最基本的原理,即:当某个像素的亮度变化累计达到一定阈值后,输出一个事件。这里强调几个概念:a) 亮度变化:说明事件相机的输出和变化有关,而与亮度的绝对值没有关系;b) 阈值:当亮度变化达到一定程度时,将输出数据,这个阈值是相机的固有参数。
下面重点解释什么是一个“事件”。事件具有三要素:时间戳、像素坐标与极性。一个事件表达的是“在什么时间,哪个像素点,发生了亮度的增加或减小”。
当场景中由物体运动或光照改变造成大量像素变化时,会产生一系列的事件,这些事件以事件流(Events stream)方式输出。事件流的数据量远小于传统相机传输的数据,且事件流没有最小时间单位,所以不像传统相机定时输出数据,具有低延迟特性。下面的动图揭示了事件相机与传统相机的成像的不同。
(动图:左侧为有一个黑色斑块的圆盘,匀速旋转时,右上方的传统相机会定时拍摄完整的图像,下方事件相机的输出会仅输出变化,即黑斑的运动。当圆盘不转时,传统相机依旧傻傻的拍摄图像,而事件相机不会产生任何输出)
下面这幅图展示了实际事件相机拍摄的数据,红色和蓝色分别表示当前像素亮度的增加或减小。这幅图是将一段时间内的事件流累积获得的一组事件。
由于事件相机的成像原理,我们可以发现只要亮度一有变化就会输出,且仅输出变化的数据占用了很小的带宽,同时由于事件相机更擅长捕捉亮度变化,所以在较暗和强光场景下也能输出有效数据。事件相机具有低延迟(<???)、高动态范围(?????)、极低功耗(???)等特性。
3、事件相机发展与研究现状
事件相机诞生于1990年,那个时间许多研究人员探讨动物感知环境的方式,发现对变化更为敏感,所以设计出了实验室用的事件相机。
2008年,诞生了第一款商用的事件相机。这么看来,事件相机从商用到现在也刚刚过了十来年。目前,许多商业公司致力于事件相机的发展,有韩国Samsung、法国prophesee、瑞士iniVation、中国CelePixel(芯仑科技)等。
在学术上,苏黎世联邦理工学院(ETH)的机器人与感知团队对事件相机有着系统深入的研究,其他高校例如帝国理工、慕尼黑大学等也开始相关研究。
事件相机,目前在在特征提取与跟踪、光流、三维重建、SLAM、模式识别、控制等方向正在不断进行着研究,具有广泛的应用前景。
4、扩展链接:
ETH维护的事件相机资料汇总:
https://github.com/uzh-rpg/event-based_vision_resources
本文作者目前从事于事件相机SLAM问题的研究,也是「3D视觉从入门到精通」星球的嘉宾,欢迎大家一起多多交流,也可以前往相关研究博客:
https://blog.****.net/tfb760/category_9511063.html,
或公众号后台回复「事件相机作者」,即可获得联系方式。
上述内容,如有侵犯版权,请联系作者,会自行删文。
推荐阅读
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
全面解读:轻松掌握事件相机工作原理系列篇