这是我想做的:

我定期用网络摄像头拍照。就像时间流逝一样。然而,如果没有什么真正的改变,也就是说,图片看起来几乎相同,我不想存储最新的快照。

我想有某种方法可以量化这种差异,我必须根据经验确定一个阈值。

我追求的是简单而不是完美。 我用的是python。


当前回答

你可以计算这两个图像的直方图,然后计算Bhattacharyya系数,这是一个非常快速的算法,我已经用它来检测板球视频中的镜头变化(在C中使用openCV)

其他回答

如何计算这两幅图像的曼哈顿距离呢?得到n*n个值。然后你可以做一些事情,比如行平均,把值减少到n个,然后再用一个函数得到一个值。

一种更有原则的方法是使用全局描述符来比较图像,比如GIST或CENTRIST。这里描述的哈希函数也提供了类似的解决方案。

给出的大多数答案都不涉及照明水平。

在进行比较之前,我首先将图像归一化到标准的光照水平。

I have been having a lot of luck with jpg images taken with the same camera on a tripod by (1) simplifying greatly (like going from 3000 pixels wide to 100 pixels wide or even fewer) (2) flattening each jpg array into a single vector (3) pairwise correlating sequential images with a simple correlate algorithm to get correlation coefficient (4) squaring correlation coefficient to get r-square (i.e fraction of variability in one image explained by variation in the next) (5) generally in my application if r-square < 0.9, I say the two images are different and something happened in between.

这是强大的和快速的在我的实现(Mathematica 7)

这是值得玩转的部分,你感兴趣的图像,并通过裁剪所有的图像到那个小区域,否则一个远离相机但重要的变化将被错过。

我不知道如何使用Python,但我确信它也有相关性,不是吗?

我认为你可以简单地计算两幅图像亮度之间的欧几里得距离(即平方根(像素对像素的差异平方和)),如果这低于某个经验阈值,就认为它们相等。你最好包装一个C函数。