【问题标题】:OpenCV: Detecting seizure-inducing lights in a video?OpenCV:检测视频中诱发癫痫的灯光?
【发布时间】:2018-07-09 17:08:36
【问题描述】:

我一直在研究一种算法,可以检测视频中引起癫痫发作的频闪灯。

目前,我的代码几乎将每一帧都返回为能够导致癫痫发作(3Hz 闪烁)。

我的代码计算每个像素的相对亮度,并查看亮度在任何给定秒内上升然后下降等或下降然后上升等超过 10% 的次数。

有什么方法可以做到这一点,而不需要在一秒钟内比较每个单独的像素并且只返回正确的帧。

我试图模仿的一个例子:https://trace.umd.edu/peat

【问题讨论】:

    标签: c++ opencv video video-processing light


    【解决方案1】:

    将图像转换为灰度。将图像分成块,可能是 16x16 或 64x64 或更大(实验看看什么有效)。在至少 2/3 秒内获取每个块的平均亮度。随着时间的推移创建一波亮度。在这个波上做一个 fft 并寻找大约 3Hz 的最小能量阈值。

    【讨论】:

    • 您好,谢谢您的回答!如何计算一维亮度值数组的 DFT/FFT。假设一秒时间帧中的 64x64 块之一在该时间跨 n 帧具有亮度值 [100, 120, 130, 90, 80 ... 等]。我将如何提取频率/执行 FFT?
    【解决方案2】:

    解决此类问题的常用方法是将帧转换为灰度,然后构造一个包含 1 到 3 秒时间间隔的帧的立方体。从这个立方体中,您可以提取单个像素(嘈杂)或块(推荐)的时变特征。可以首先手动观察生成的 1D 曲线,看看它们是否真的显示了您正在寻找的 3Hz 变化(有时,这些变化会因为相机的自动曝光设置而丢失或失真)。如果你能看到它,你应该能够使用 FFT 来自动隔离和检测它。

    【讨论】:

    • 这很有帮助!但是为什么要使用 FFT 而不是 DFT,因为灰度图像亮度值是离散类型的呢?
    • 抱歉打错字了,我想说的是 DFT。
    • 嘿!我已经尝试过这种方法,但我在实际应用 DFT 并理解它时遇到了麻烦。我是 DFT 的新手,但它可以用于每个块的平均亮度值曲线而不是每个块中的纯图像(Mat 类型)吗?
    • 这个想法是在每个块的平均亮度值曲线上使用DFT。不确定 OpenCV 的 DFT 是否可以直接用于一维数组,但如果它不起作用,我们可以尝试不同的库。如果实在太费劲,也可以通过减去均值的方式对数组进行归一化处理,手动观察一些结果,然后计算交叉比看看是否可行。
    • 如何计算一维亮度值数组的 DFT/FFT。假设一秒时间帧中的 64x64 块之一在该时间跨 n 帧具有亮度值 [100, 120, 130, 90, 80 ... 等]。我将如何提取频率/执行 FFT?
    猜你喜欢
    • 2010-11-24
    • 2016-09-06
    • 1970-01-01
    • 2023-03-31
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多