1、问题背景
上周有读者咨询了一个图像异常的问题。拍照打闪光灯,图片出现亮度分层,一半过曝一半偏暗,问题现象如下图所示,本文主要分析一下,出现此问题现象的原因。
2、问题分析
读者那边反馈说是限制了 sensor 的最小曝光行就好了,之前没按照最小的配。
a、那为什么会导致这个问题,为什么限制了最小曝光行图像就正常了呢?
对于逐行曝光的 sensor 来说,sensor 的曝光过程是从第一行开始,到最后一行结束,逐行进行曝光的。
而拍照打闪光灯时,如果闪光灯闪的时间太短了,小于了 sensor 曝光一帧完成的时间,那就会导致图片上曝光完成的部分是亮的,未曝光的部分则是暗的。
所以当限制了最小曝光行后,sensor 曝光一帧完成的时间就变短了,这时应该就小于打闪光灯闪的时间了,此时 sensor 在闪光灯闪的这个时间段内就可以完成一帧图像的曝光,所以出图就正常了。
b、如何避免这种问题呢?
若 sensor 驱动中,按照 datasheet 正确配置了最小曝光,但如果闪光灯的闪烁时间还是小于sensor 最小曝光行该怎么办?
这里我观察了我自己的iphone手机关于拍照打闪光灯的情况,是在暗环境下去拍照,这时拍照,闪光灯会闪两下,第一次是常亮1-2s的状态,第二次闪的就快很多,
所以第一次1-2s的常亮状态,这个时间段就可以计算出正确的3a信息,到第二次闪时,直接把保存的正确的3a信息写入就好了,所以这样就不会存在曝光没完成的情况了。
有咨询了之前做手机的同事,这种打闪的情况都是比较难做的,所以目前的状态大多都是在常亮状态下拍照,来保证获取正确的3a信息。
3、问题延申:关于逐行曝光 sensor 的工作原理
a. 可以理解一下如下三句话,他们其实表达的都是一个意思
1帧图像曝光时间是10ms
1帧图像用积分时间11行完成了10ms的曝光,这里假设1行的曝光时间是0.91ms
1帧图像曝光10ms,一帧内所有的像素都曝光了10ms
注:另外关于曝光行,曝光时间,积分时间的概念可以看这篇文章:CMOS Sensor 的一些基本概念,及曝光相关的计算
b. 曝光过程:
如下示意图所示,假设积分时间是11H(也可以说曝光时间是11行),第一行一直曝光11行后(也可以理解为曝光11次),开始读出第一行,后面依次是每行曝光11行后,接着开始读出,直至读出整帧图像。
注:如上动态图非原创,是公司大佬绘制,用来培训所用。