1.9 工频闪烁 (flicker)

工频闪烁,通常发生在室内场景,曝光时间设置如果不是光源能量周期的整数倍,则图像不同位置处积累的信号强度不同,并呈周期性变化,这是单帧图像的情况。在视频序列上,如果满足一定条件,视频会出现条纹模式在垂直方向上缓慢移动。


3ba0d930747266fbb7b89b25e38f2723.jpeg
(a) flicker (b) no flicker


工频闪烁的形成原因与CMOS sensor rolling shutter的工作原理相关,并且受交流电的频率影响。对于同样的积分时间t,sensor不同位置处的像点开始积分时所处电信号的相位不同,所以同样时间t 内能够积累的光子数也不同。如下图所示。


cc098fbd085a5192c81fa3480b118dc3.jpeg


flicker 的本质是像素曝光起始点相对交流电的相位关系在不断变化。这个问题不仅存在于一帧图像内部,在帧与帧之间也存在同样的问题。

以电频率50Hz为例,如果sensor 工作在25或50fps(frame per second),则帧频率刚好与电频率同步,每帧图像的flicker 表现(明暗位置)与上一帧完全相同,所以明暗条纹在视频上是静止不动的。如果sensor工作在30或60fps,则每帧的flicker与上一帧会产生固定的相移,视频上的明暗条纹图样会在画面垂直方向上缓慢移动。

在室内,为了避免工频闪烁,曝光时间应设置为光源能量周期的整数倍。在中国,光源能量周期为10ms(交流电周期的1/2),在美国则为8.3ms,调整曝光时间时要特别注意这一点。


4c36d2ca7ca0e34df7ad543270c19570.jpeg



1.10 与CCD的对比

CCD技术的发展起源于1960年代,在2000年以前曾是image sensor 的主流解决方案,下图对比了CCD和CMOS读出方式的主要区别。


6e224f795bdf8a989540523e40237380.png


如图所示,CCD 器件通常只有一个电荷-电压转换器(Charge-Voltage Converter),当sensor读出像素数据时,每一行像素中积累的电荷需要在行电压的控制下一步步“蠕动”到下一行,直到最终抵达阵列所属的行缓冲(row buffer),然后开始在列电压的控制下继续一步步“蠕动”到阵列出口处的电荷-电压转换器,完成读出过程。


8977f3a46c8b9fa1d70cc06f60ed5dfc.png




a7fad859d84d979c0f743f2681863720.png
531bce135bf9542f33dd61b977dcc069.png
91e2ab1dfcba2a2be050ae3a65120993.png


CCD的一个主要优点在于所有像素共享同一个电荷-电压转换器,所以像素一致性非常好。相比之下CMOS每个像素都有自己专用的电荷-电压转换器,一致性很不容易控制。

当CCD像素数多于200万时,所有像素共用一个电荷-电压转换器会严重影响读出速度,所以此时会考虑把像素设计成两个或四个阵列,每个阵列配备专用的行缓冲和电荷-电压转换器,可以成倍加快读出速度。

写到此处笔者回忆起一个沉痛的往事。笔者一好友曾试图对接某国产高端sensor,由于自己研发实力有限,便求助于北京的朋友空闲之余帮忙做做,结果不出意料地半年没什么结果。朋友有点着急了,付了50万研发费委托深圳本地的公司帮忙开发,该公司的主要业务是设计生产国产FPGA,接单的主要动力是推广自家的FPGA。sensor出图到是比较顺利,但是朋友很快发现国产FPGA 体积大功耗高,无法满足量产需求,于是朋友要求承接方提供源代码以迁移到X家FPGA,不料承接方以合同金额不包括源代码为由拒绝提供,于是50万瞬间沉没。万般无奈朋友只好雇人自己开发FPGA,如是就遇到了sensor四个阵列输出不同步的问题,厂家也讲不清楚四个阵列的输出时序到底该如何预测,好像是sensor想输出谁就输出谁,什么时候高兴什么时候输出。这就给FPGA设计增添了巨大的难度,朋友雇的年轻人无法应对如此巨大的技术挑战,坚持半年后离职,项目最终流产。