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

Image 确定两张几乎相同的照片之间的差异,image,image-processing,comparison,diff,Image,Image Processing,Comparison,Diff,这是一个相当广泛的问题;有哪些工具/库可以拍摄两张不完全相同但极为相似的照片,并确定它们之间的具体差异 一个例子是在周五我女朋友打扫完房间后,在一个长周末和朋友们聚在一起、喝酒、玩摇滚乐队之前,给我的沙发拍张照片。两天后,我给沙发拍了第二张照片;照明是一样的,沙发没有移动一毫米,我在固定位置使用三脚架 我可以使用什么工具来生成差异图像,或者生成差异的第三个热图图像?是否有用于.NET的工具?这在很大程度上取决于图像格式和压缩。但是,在一天结束的时候,您可能需要使用两个光栅并逐像素进行比较 看看这

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

一个例子是在周五我女朋友打扫完房间后,在一个长周末和朋友们聚在一起、喝酒、玩摇滚乐队之前,给我的沙发拍张照片。两天后,我给沙发拍了第二张照片;照明是一样的,沙发没有移动一毫米,我在固定位置使用三脚架


我可以使用什么工具来生成差异图像,或者生成差异的第三个热图图像?是否有用于.NET的工具?

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


看看这个问题。

这是一个有趣的问题。我无法向您推荐任何特定的库,但您所询问的过程基本上是运动补偿的最小情况。这就是MPEG(MP4,DIVX,随便什么)视频非常好地压缩视频的方式;您可以查看MPEG,以获取有关这些运动补偿算法实现方式的一些信息


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

最明显的方法是对像素数据进行异或运算,以查看每个微小的、通常几乎无法察觉的差异。不过,如果灯光稍有不同,可能就太多了。差异(减去)像素数据可能更符合您的要求,这取决于差异的细微程度。

一个起点是使用丰富的图像处理库,例如。您可以与操作员交互地使用该工具,直接从C或C++调用它,或者使用其真正的适当的LUA绑定来驱动它从Lua。它支持位图上的各种操作,以及可扩展的文件格式库


即使您没有故意移动任何对象,也可能希望使用算法,例如在帧之间获得良好的亚像素质量对齐。除非你想把摄像机当作固定的,并检测沙发的运动。

看看安德鲁·基里洛夫在CodeProject上的作品。他利用计算机视觉库编写了一个C#应用程序来检测运动。在AForge.NET网站上,有两帧差用于运动检测。

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


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


还有一点需要注意的是,使用getPixel(y,x)方法可能会非常慢,还有另一种方法可以获得整个图像(不那么优雅),如果我记得它被称为getBitmap或类似的东西,请查看imaging/bitmap类并阅读一些Tute,它们确实是您所需要的并且使用起来并不困难,除非你必须去,否则不要去第三方。

我肯定要玩这个游戏;这可能是在我的技能水平内,我可以从零开始开发的少数几种方法之一。如果您想在自己编写代码之前看到这些方法的实际应用,请查看任何分层光栅图形编辑器的图层合成模式。绘画.NET是我正在考虑的,但它是一个基本的二进制像素运算,所以所有的实现都应该是相同的。感谢链接,我一定会玩它,看看它是否是我正在做的事情的一个好的跳转点。你甚至可以从一个前图像副本和一个后图像副本组合一个短剪辑。用MPEG压缩,并分析结果…;-)这正是我既害怕又希望得到的答案;我不是C或C++或Lua开发者——但这看起来是一个有趣的项目,让我的脚/躯干/头/鼻子湿漉漉的。我可能会在我的头,但我想这就是为什么我提到了浮潜如果你潜水,你会想看看它的配套图书馆CD和IUP。CD提供了在位图(或屏幕)上绘制的通用画布,IUP提供了一个可移植的UI框架。链接位于IMLab页面。在www.Lua.org的官方邮件列表上有很多Lua帮助,还有一个用户对用户的wiki,或者在这里标记为“Lua”,当你需要时,它可以作为非常重要的通气管ps:如果你需要更多的资源/帮助,请发电子邮件给我,我在这门课程上花了两年的时间:)