我一直在寻找与视频变化检测相关的算法。
基本上它会看到当前帧与前一帧或视频的第一帧之间是否存在任何视觉差异,并显示使用差异。
你能建议一个算法吗?
我的实现:我确实逐帧读取视频并转换为灰度,每帧减去第一帧并播放视频(当前帧第一帧)
这是一种可以测试两个图像之间是否存在相似性的方法: -
- 将两个图像分成4 * 4或8 * 8块
- 从两个图像的两个相应块的差异中取平方误差
- 累计错误并根据阈值进行检查
- 如果小于阈值,则它们是相似的图像
- 别的不一样
另一种方法: -
我们知道两个类似的框架可以有一些翻译: -
使用两个图像的互相关,越高,图像越相关。
您是否尝试通过计算直方图并将它们相互比较来获得任何结果(例如,使用EMD)?
视频中的一个重大变化会显示为直方图中的一个重大变化
我记得读过一篇论文,作者会通过检测直方图中的大跳跃来检测切割的场景。
编辑:这不是我的想法,但看起来不错。 This paper介绍了几种技术及其相关性能John S. Boreczky和Lawrence A. Rowe,“视频镜头边界检测技术的比较”,图像和视频数据库的存储和检索(SPIE),1996。
这是一个基于边缘检测的场景变化检测的example,使用MATLAB计算机视觉系统工具箱。
您可以尝试以下两种方法:
cv::Mat diff;
cv::absdiff(imgA, imgB, diff);
计算相邻帧的RGB直方图的卡方距离是鲁棒方法之一。您可以在here中查看此方法的实现和用法。