Flick是由于我们平常所用的交流电是50Hz或者60Hz(美国)的正弦波形,荧光灯辐射能量与此相关,人眼察觉不出来(神经网络刷新频率太低,还是视觉残留效应?),但是CMOS sensor可以观察到,当拍摄被荧光灯照射的场景时就会容易有flick现象。如下图。这是一种垂直方向的正弦波,而且会随着时间滚动。
![]()
要解释flick的成因,先要了解CMOS Sensor的曝光方式。Sensor 通常有全局曝光global shutter和滚动曝光rolling shutter两种。Global shutter是指整个Frame pixel在同一时间开始曝光,同一时间结束曝光,然后把数据通过接口传输出来,等数据传输完成之后,再开始下一个Frame的曝光。Rolling shutter是指Frame中各条line上的pixel 按照顺序依次开始曝光,先曝光完成的line 先传输,不必等整个frame都曝光完成。示意图如下。
![]()
大部分sensor都支持这两种曝光模式,相比较而言,可以看到rolling shutter对时间的利用率较高,大部分时间可以被利用起来进行曝光。Rolling shutter的缺陷是当有物体高速移动的时候,拍摄到的物体会有变形,矩形变成平行四边形,这可以依照上图原理推断出来。Global shutter不会变形,主要用于拍照片,对fps没有太多要求,单张照片也不存在flick的问题。Rolling shutter用于拍视频,所以会存在flick问题。
Flick的原因在于荧光灯发出的能量在时间上是不均匀的,以我们国家50Hz为例,电压为50Hz正弦波,做平方运算转换到荧光灯的辐射能量,为100Hz的半弦波形状,如下图。假设某个frame的曝光时间为0.025s,即2.5个半弦波,由于采用rolling shutter,每条line的起始曝光时间不一致,Line A和line B可吸收的能量也不相同,Line B 要比Line A亮一些。这样在整个Frame 中就会有垂直方向的波浪纹。如果相邻Frame的间隔不是0.01s的整数倍,那么每条Line 在不同Frame接收的能量也会变化,这样看到的现象是波浪纹会随着时间在画面上滚动。
![]()
解决flick的方法很简单,只要限制曝光时间是0.01s的整数倍,那么任意像素吸收的能量都是一样的。然而在户外光照较强的时候,曝光时间为0.01s的时候就会导致过曝,户外也没有荧光灯,不需要强加这个限制,所以在ISP中需要一个检测机制,能够检测出flick的存在,当发现这种flick的时候才对曝光时间进行限制。检测flick没有统一的方法,可以自由发挥想象力,找到能准确检测flick并且不会误判的方法,正是ISP乐趣所在。
|