确定两张几乎相同的照片之间的差异

时间:2009-05-05 06:11:09

标签: image image-processing comparison diff

这是一个相当广泛的问题;有哪些工具/库可以拍摄两张不相同但非常相似的照片,并确定它们之间的具体差异?

一个例子就是在我的女朋友完成清洁之后和周末结交朋友,喝酒,玩摇滚乐队之前,在星期五拍摄我的沙发照片。两天后,我拍了第二张沙发照片;照明是相同的,沙发没有移动毫米,我在固定的位置使用三脚架。

我可以使用哪些工具生成图像的差异,或者差异的第三个热图图像? .NET有什么工具吗?

7 个答案:

答案 0 :(得分:5)

这在很大程度上取决于图像格式和压缩。但是,在一天结束时,你可能需要两个栅格并逐个像素地进行比较。

查看Perceptual Image Difference Utility

答案 1 :(得分:2)

最明显的方法是看到每个微小的,通常几乎不可察觉的差异,就是对像素数据进行异或。如果照明甚至略有不同,那么可能太多了。差分(减去)像素数据可能更符合您的要求,具体取决于差异的微妙程度。

答案 2 :(得分:2)

一个地方就是使用丰富的图像处理库,例如IM。您可以使用IMlab工具以交互方式涉及其操作员,直接从C或C ++调用它,或使用其非常体面的Lua绑定从Lua驱动它。它支持对位图的各种操作,以及可扩展的文件格式库。

即使您没有刻意移动任何内容,您也可能希望使用SIFT之类的算法来获得帧之间良好的子像素质量对齐。除非您希望将相机视为固定并检测沙发的运动。

答案 3 :(得分:2)

我使用我公司制作的工具包(DotImage)编写了这个免费的.NET应用程序。它有一个非常简单的算法,但如果您想使用它,代码是开源的 - 如果您不想购买DotImage的副本,您可以将算法调整为.NET Image类。

http://www.atalasoft.com/cs/blogs/31appsin31days/archive/2008/05/13/image-difference-utility.aspx

答案 4 :(得分:1)

这是一个有趣的问题。我不能把你推荐给任何特定的库,但你要问的过程基本上是运动补偿的最小情况。这就是MPEG(MP4,DIVX,无论如何)视频能够如此极好地压缩视频的方式;您可以查看MPEG以获取有关这些运动补偿算法实现方式的一些信息。

要记住的另一件事; JPEG压缩是基于块的压缩; MPEG带来的好处之一就是实际进行块比较。如果您的大部分图像(比如背景)从一个图像到下一个图像是相同的,那么这些块将保持不变。这是减少需要比较的数据量的快速方法。

答案 5 :(得分:1)

在CodeProject上查看Andrew Kirillov的article。他使用AForge.NET计算机视觉库编写了一个C#应用程序来检测运动。在AForge.NET网站上,运动检测有两个discussion帧差异。

答案 6 :(得分:0)

只需使用.net映像类,创建一个新的位图()x 2并查看R& G&如果您想在确定差异时,还可以查看每个像素的B值,也可以查看A(Alpha /透明度)值。

另外一个注意事项,使用getPixel(y,x)方法可能会非常慢,还有另一种方法来获取整个图像(不那么优雅),并且如果我记得它被称为getBitmap或者自己每次通过它类似的东西,看看成像/位图类&阅读一些他们真正满足你需要的东西。并不难以使用,除非你必须这样做,否则不要去第三方。