我一直在寻找与视频变化检测相关的算法。
基本上它会看到当前帧与前一帧或视频的第一帧之间是否有任何视觉差异,并显示使用差异。
你能建议一个算法吗?
我的实现:我确实逐帧读取视频并转换为灰度,每帧减去第一帧并播放视频(当前帧第一帧)
答案 0 :(得分:2)
这是一种可以测试两个图像之间是否存在相似性的方法: -
- 将两张图片分成4 * 4或8 * 8块
- 从两个图像的两个相应块的差异中取平方误差
- 累积错误并将其与阈值进行核对
- 如果小于阈值,则它们是相似的图像
- 其他不同
醇>
另一种方法: -
正如我们所知,两个相似的帧可以在其中进行翻译: -
使用两幅图像的互相关,图像越高,它就越高。
答案 1 :(得分:1)
您是否尝试通过计算直方图并将它们相互比较来获得任何结果(例如,使用EMD)?
视频中的一个重大变化会显示为直方图中的一个重大变化
我记得读过一篇论文,作者会通过检测直方图中的大跳跃来检测切割的场景。
编辑:这不是我的想法,但它看起来不错。 This paper介绍了几种技术及其相对表现 John S. Boreczky和Lawrence A. Rowe,“视频镜头边界检测技术的比较”,图像和视频数据库的存储和检索(SPIE),1996年。答案 2 :(得分:0)
这是基于使用MATLAB Computer Vision System工具箱进行边缘检测的场景变化检测的example。
答案 3 :(得分:0)
您可以尝试以下两种方法:
直接计算Mat数据的差异(使用OpenCV的代码):
cv::Mat diff;
cv::absdiff(imgA, imgB, diff);
计算两幅图像的特征向量的差异。例如,您可以先为每个图像计算RGB / HSV颜色直方图(24d向量,如果每个通道使用8个区间),然后计算这两个直方图向量的相关性。
答案 4 :(得分:0)
计算相邻帧的RGB直方图的卡方距离是稳健方法之一。您可以在here中看到此方法的实现和用法。