用相机定量检测灯光的频闪

您所在的位置:网站首页 显示屏亮度频闪测试怎么设置 用相机定量检测灯光的频闪

用相机定量检测灯光的频闪

2024-07-13 23:32| 来源: 网络整理| 查看: 265

很多人都知道用手机可以粗略地检测频闪。但频闪到底有多严重呢?手机检测不到的是否真的就没有频闪呢?本文将用相机做出定量的分析。

问题由来

最近买了个小米Yeelight吸顶灯,用来替换家里坏掉的灯。用手机给几个吸顶灯拍了下照,本想看看光源的均匀程度。

图:手机拍摄的光源(左上:松下三基色荧光灯;右上:松下LED;左下:松下未来光;右下:小米Yeelight)

拍照的时候发现有的灯是有闪烁的。于是想系统地测量一下它们的频闪。正好手头有逐行扫描的相机,可以干这事。

原理 交流电

光源的频闪主要来自交流电。因为在交流电的驱动下,光的强度会随时间变化。

市电的波形是正弦波,而其功率可以简化为正弦波的平方。可以看到频率是2倍关系。

图:正弦波及其平方的波形

所以,对于50Hz的市电,白炽灯的频闪就是100Hz。

而对于其它灯具,可能存在交直流变换,恒流驱动,PWM调光,不管怎样,只要其中存在一定的低频交流成份,就会有频闪。

逐行扫描

对于100Hz的频闪,人的肉眼一般是感觉不到的。假设我们用一个每秒能拍1000张照片的相机,固定曝光量(光圈/快门/ISO),对着灯光下白纸拍照,这些照片的明暗程度会呈现出周期性的变化。我们可以通过这些照片分析出亮度随时间的变化。

然而我并没有这么快的相机。但我有一个逐行扫描的相机,它可以10ms“拍”2000行(其实只是一张照片),我们分析每行的亮度变化,可以干同样的事。

逐行扫描的相机(图像传感器CCD或CMOS)其实是相对低端的,有时候也叫作卷帘快门(它的反面是全局快门)。其实它们都是电子开关。卷帘快门可类比于卷帘式的窗帘。下面是原理示意图。

图:全局快门

在全局快门模式下,所有CCD/CMOS点阵同时曝光,然后再逐行读出。

图:卷帘快门

在卷帘快门模式下,每行的曝光有个时间差,边曝光,边读出数据。(但并不是严格顺序的,曝光的时间是可以重叠的)

“每行的时间差”对这个测量很重要。我用的这个相机,这个参数是35us。这就是说,按行采样的采样率是1/35us,即28.57KHz。这个值比每秒1000张高多了。

测量方法及注意事项

这种测量方法有一个重要的前提:在同一时刻下,场景中的每一行亮度是相等的。否则,如果拍摄出来的照片每行亮度不同,这到底是场景中亮度本来就不同,还是光源亮度的随时间波动所致呢?简言之,想测时间上的波动,就不要有空间上的波动。

对了达到这个目的,我们需要让光源严格与白纸垂直,然后,相机也要与白纸垂直。但这比较难操作。于是我使用了一种邪门的办法:让相机直接对着光源,但不用镜头。这样“底片”上不会对光源的形状成像,而只是一团均匀的白光(类似于镜头未对上焦时的虚化)。

图:测量方法(不使用镜头)

另外,曝光时间越短越好。试想,如果对于100Hz的光源,使用10ms的曝光时间,每一行的曝光时间都是交流电的一个完整周期,它们的曝光量是相等的,将观察不到频闪。

测量数据

测量中使用的节能灯、日光灯已经比较旧了,护眼台灯是杂牌。

图:测量中用的节能灯和护眼台灯

测量的原始数据就是一张张的照片。有些照片可以明显地看到滚动的条纹,有些则不明显。

图:不同光源的照片(含曝光时间)

比如,

70us和5ms曝光的白炽灯,条纹明显; 而10ms曝光的白炽灯则看不到条纹,因为正好是一个周期; 11ms曝光的白炽灯有条纹但不那么明显,因为相当于1个周期曝光的底色上再叠加0.1个周期的波动。 数据分析

要得到量化的结果,需要对照片进行分析。在ImageJ里写几行脚本,很容易得到每行的平均亮度。

图:用ImageJ进行每行亮度分析

把每行的亮度画成曲线,就得到了这个图。

图:白炽灯亮度曲线

频闪指数或波动深度定义为亮度的波动幅度比上平均亮度,波动幅度是峰谷差的一半,即:

波动深度(频闪指数)= (H-L)/(H+L) = (196-160)/(196+160) = 10.1%

测量结果

下图是亮度的波形。可以看到:

除了松下未来光(*),小米Yeelight,护眼台灯外,其它都有频闪。 除了手电外,有频闪的市电光源都是100Hz的频闪。 松下未来光,其实也可以看到100Hz的波动,但幅度很小。 图:不同光源的亮度波动曲线(为了便于摆放整齐,不同的光源的曲线在Y轴乘上了不同的系数,这不影响结果)

日光灯的曲线有点特别,可能和电路及其发光原理有关。

图:日光灯亮度波动曲线

护眼台灯的曲线也不一样,散点图放大后是这样,进一步放大,可以看到还是周期波动的曲线,只是频率更高。

图:护眼台灯亮度波动曲线及放大

将数据存为PCM,在Audacity里可以看到其频谱。峰值在8379Hz,我们可以认为这是其频闪频率。

图:护眼台灯频闪频谱

下图是汇总的测量结果。主要指标就两个:频闪频率和波动深度(频闪指数)。峰值和谷值是计算时选取的中间结果;曝光时间是当次测量对应的曝光时间。严格来讲,曝光时间越短结果越精确;曝光时间加长,频闪指数会降低。

图:不同光源频闪的量化指标 对测量的若干思考 一致性问题

多次测量时,相机和光源的距离会变,曝光时间也可能会变,结果能否保持一致?

做了几次试验。

图:测量一致性比较

图中A1和A2测得的亮度值不同,但最后波动深度的结果是一样的。A3的曝光时间加长,结果变小一点,这是符合预期的。B1是另一根灯管,结果也比较接近。这基本说明测量是可信的。

曲线不平的问题

前面的很多图中,可以看到亮度曲线整体上并不是平的。这并不是说明光的亮度有低频波动,而是因为相机和灯光不垂直或有暗角,会导致光在平面上的分布不均匀,每行的平均亮度里会反映出这种波动。这个很难避免,但不影响对频闪频率和波幅的测量。

所以,在计算波动深度时,我选取了两个相邻的波峰做平均,选两个波峰中间的波谷。参见上图。

至于光强是否真的有低频波动?首先理论上不大可能有50Hz以下的波动。实验上,我们可以用普通的30帧率的相机,按帧取样做测试,看有没有低频波动。

采样频率和曝光时间

前文说过,我使用的相机是行扫描的相机,行采样频率是28.57KHz。根据采样定理,它可以检测出14.28KHz及以下的频闪。

如果曝光时间是140us,这看起来频率只能到1/140us即7.14KHz。是这样吗?

实际上,只要曝光时间不是频闪周期的整数倍,即使10.1倍,通过积分后,还是会有波动,因为每次采样有相位差。但这个波动幅度会被拉平,所以测量的准确性会降低。

前面护眼台灯的测量,频闪频率是8379Hz,而曝光时间140us已经超过了频闪周期(119us),所以测得的频闪指数应该会偏小。

下图是在Mathematica中做的一个模型,用来说明不同曝光时间对测得的波动深度的影响。

图:曝光时间对测量波动深度的影响

光源使用的是标准正弦波。可以看到:

曝光时间为光源周期1/10, 1/5时(红色,橙色),影响是很小的。 曝光时间达到光源周期的1/2(绿色),测量结果仍接近实际波动的60%。 曝光时间超过光源周期,比如1.2倍,也能检测到波动,只不过只有实际的15%的样子。

根据这个模型修正护眼台灯的测量结果:

FindMaximum[Sample[x, 140/119 Pi], {x, 0, Pi}]

结果是:10.5712

测量值/实际值 = (10.5712 - 10.5) / 0.5 = 0.1424

修正后的波动深度为: 1.2% / 0.1424 = 8.4%

用这样的方法,我们可以得到测量精度和曝光时间的关系,如下图:

测量精度和相对曝光时间(横坐标:曝光时间和频闪周期的比值)的关系 按帧采样的测量

在灯光下,对着白纸或白墙拍一段视频,然后计算每帧的平均亮度。

shell脚本如下,将输出存为CSV,即可画出曲线。

ffmpeg -i video.mov %d.jpg for i in {1..600} do echo -n $i, identify -verbose $i.jpg | grep mean | tail -n 1 | awk '{print $2}' done 图:帧采样得到的日光灯亮度曲线

由于频闪周期、采样周期、曝光时间三者没有任何倍数关系,采样亮度呈现出非常复杂的“类周期”波动。

由于曝光时间是频闪周期的3.3倍,波动已经平滑了很多。从图中计算出波动深度是0.51%。而前面的测量方法得出的结果是5.3%。

所以,用低帧率的帧采样,只能看出有无频闪,并不能准确得到频闪频率和波动深度。

结语

通过逐行扫描的相机可以对光源的频闪进行定量检测,要点在于减少曝光时间,保持感光面的光照均匀。普通的整帧曝光的相机,由于帧率不高,仅能用来检测有无频闪,并不能准确测量出频闪频率和波幅。

测量的结果令我颇意外:松下的LED和三基色荧光灯连普通白炽灯都比不上。而小米Yeelight的数据非常好。

当然,这个对比有不公平的地方,松下的灯是旧的(三四年2000小时左右的使用时间),而小米的灯是新的。不过松下未来光也是同样旧的(使用时间甚至更长),但表现还不错。这说明普通产品的质量还是有差距。小米的Yeelight则需要时间的检验,看几年后指标如何。

这些测量结果仅反映我家的灯具,并不能代表市面上所有的产品。本文主要还是探讨测量方法。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3