OpenCV:检测视频中的癫痫发作灯?
OpenCV: Detecting seizure-inducing lights in a video?
我一直在研究一种算法,可以检测视频中引起癫痫发作的频闪灯。
目前,我的代码 returns 几乎每一帧都能够引起癫痫发作(3Hz 闪烁)。
我的代码计算每个像素的相对亮度,并查看在任何给定秒内亮度先升后降等或先降后升等超过 10% 的次数。
有没有什么方法可以做到这一点,而无需在一秒内比较每个单独的像素,并且只有 returns 正确的帧。
我试图模仿的示例:https://trace.umd.edu/peat
将图像转换为灰度。将图像分解成块,可能是 16x16 或 64x64 或更大的块(试验看看什么有效)。在至少 2/3 秒内取每个块的平均亮度。随着时间的推移创造一波亮度。对该波进行 fft 运算并寻找 3Hz 左右的最小能量阈值。
解决此类问题的常用方法是将帧转换为灰度,然后构建一个包含 1 到 3 秒时间间隔的帧的立方体。从这个立方体中,您可以提取单个像素(嘈杂)或块(推荐)的时变特征。可以首先手动观察生成的 1D 曲线,看看它们是否确实显示了您正在寻找的 3Hz 变化(有时,由于相机的自动曝光设置,这些变化会丢失或失真)。如果你能看到它,你应该能够使用 FFT 来自动隔离和检测它。
我一直在研究一种算法,可以检测视频中引起癫痫发作的频闪灯。
目前,我的代码 returns 几乎每一帧都能够引起癫痫发作(3Hz 闪烁)。
我的代码计算每个像素的相对亮度,并查看在任何给定秒内亮度先升后降等或先降后升等超过 10% 的次数。
有没有什么方法可以做到这一点,而无需在一秒内比较每个单独的像素,并且只有 returns 正确的帧。
我试图模仿的示例:https://trace.umd.edu/peat
将图像转换为灰度。将图像分解成块,可能是 16x16 或 64x64 或更大的块(试验看看什么有效)。在至少 2/3 秒内取每个块的平均亮度。随着时间的推移创造一波亮度。对该波进行 fft 运算并寻找 3Hz 左右的最小能量阈值。
解决此类问题的常用方法是将帧转换为灰度,然后构建一个包含 1 到 3 秒时间间隔的帧的立方体。从这个立方体中,您可以提取单个像素(嘈杂)或块(推荐)的时变特征。可以首先手动观察生成的 1D 曲线,看看它们是否确实显示了您正在寻找的 3Hz 变化(有时,由于相机的自动曝光设置,这些变化会丢失或失真)。如果你能看到它,你应该能够使用 FFT 来自动隔离和检测它。