代码之家  ›  专栏  ›  技术社区  ›  STW

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

  •  6
  • STW  · 技术社区  · 15 年前

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

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

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

    7 回复  |  直到 12 年前
        1
  •  5
  •   dirkgently    15 年前

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

    看一看 Perceptual Image Difference Utility .

        2
  •  2
  •   bsneeze    15 年前

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

        3
  •  2
  •   RBerteig Keith Adler    15 年前

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

    即使您没有故意移动任何对象,也可能希望使用以下算法: SIFT 以在帧之间获得良好的亚像素质量对齐。除非你 希望 将摄像机视为固定的,并检测沙发的运动。

        4
  •  2
  •   Lou Franco    15 年前

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

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

        5
  •  1
  •   Paul Sonier    15 年前

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

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

        6
  •  1
  •   Jeff Youel    15 年前

    看看Andrew Kirillov的 article 关于代码项目。他使用 AForge.NET discussion 用于运动检测的两帧差的最大值。

        7
  •  0
  •   Erx_VB.NExT.Coder    15 年前

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

    另外需要注意的是,使用getPixel(y,x)方法可能会非常慢,还有另一种方法可以获得整个图像(不太优雅),如果我记得它被称为getBitmap或类似的东西,请查看imaging/bitmap类&读一些图坦卡蒙的书,它们真的是你所需要的全部&使用起来不是很难,除非你不得不,否则不要去第三方。