【问题标题】:Video change detection视频变化检测
【发布时间】:2014-02-04 02:14:00
【问题描述】:

我一直在寻找与视频变化检测相关的算法。

基本上它会查看当前帧与前一帧或视频的第一帧是否有任何视觉差异,并显示使用差异。

你能推荐一个算法吗?

我的实现:我确实逐帧读取视频并转换为灰度减去第一帧的每一帧并播放视频(当前帧第一帧)

【问题讨论】:

  • 我假设您的意思不是任何变化,而是某种类型的显着变化,例如主体运动、相机运动、照明、场景变化等.?如果您只是想知道两个帧是否相同,最好的方法是isequal(frame1,frame2),但如果这些帧是由物理设备捕获的,则始终存在噪声。
  • @horchler isequal 更加精确,会考虑帧中的所有数据,也会考虑很少的强度或亮度变化,我不看这样的准确性,因为录制视频的设备是LCD 显示器上的相机
  • 为了帮助您,我们必须知道您想要检测什么样的变化(以及您不想想要检测的变化)。描述你到底想要做什么。

标签: algorithm matlab image-processing video-processing


【解决方案1】:

这是一种测试两张图片是否相似的方法:-

  1. 将两个图像分成 4*4 或 8*8 块
  2. 从两个图像中的两个对应块的差异中获取平方误差
  3. 累积错误并对照阈值进行检查
  4. 如果小于阈值,则它们是相似的图像
  5. 其他不同

另一种方法:-

正如我们所知,两个相似的帧中可能会有一些翻译:-

使用两个图像的互相关,图像的相关性越高。

【讨论】:

    【解决方案2】:

    您是否尝试过通过计算直方图并将它们相互比较(例如使用 EMD)来获得任何结果?

    视频的大变化会显示为直方图的大变化

    我记得读过一篇论文,其中作者会通过检测直方图中的大幅跳跃来检测场景剪切。

    编辑:这不是我的想法,但看起来不错。 This paper 介绍了几种技术及其相对性能 John S. Boreczky 和 ​​Lawrence A. Rowe,《视频镜头边界检测技术的比较》,图像和视频数据库 (SPIE) 的存储和检索,1996 年。

    【讨论】:

    • 我尝试在具有阈值差异的帧中运行直方图差异。我正在寻找是否可以进行更好的分析
    【解决方案3】:

    这是一个example,用于使用 MATLAB 的计算机视觉系统工具箱进行基于边缘检测的场景变化检测。

    【讨论】:

      【解决方案4】:

      您可以尝试以下两种方法:

      1. 直接计算 Mat 数据的差异(代码使用 OpenCV):

        cv::Mat diff;
        cv::absdiff(imgA, imgB, diff);
        
      2. 计算两幅图像特征向量的差异。例如,您可以先计算每张图像的 RGB/HSV 颜色直方图(如果每个通道使用 8 个 bin,则为 24d 向量),然后计算这两个直方图向量的相关性。

      【讨论】:

        【解决方案5】:

        计算相邻帧的 RGB 直方图的卡方距离是稳健的方法之一。这个方法的实现和使用可以在here看到。

        【讨论】:

          猜你喜欢
          • 2013-06-15
          • 2016-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-10
          相关资源
          最近更新 更多