我想将一个应用程序(可能是网页)的屏幕快照与先前获取的屏幕快照进行比较,以确定该应用程序是否正确显示了自己。我不希望进行完全匹配比较,因为方面可能略有不同(对于Web应用程序,取决于浏览器,某些元素可能位于稍有不同的位置)。它应该衡量屏幕截图的相似程度。
是否有已经执行此操作的库/工具?您将如何实施?
我想将一个应用程序(可能是网页)的屏幕快照与先前获取的屏幕快照进行比较,以确定该应用程序是否正确显示了自己。我不希望进行完全匹配比较,因为方面可能略有不同(对于Web应用程序,取决于浏览器,某些元素可能位于稍有不同的位置)。它应该衡量屏幕截图的相似程度。
是否有已经执行此操作的库/工具?您将如何实施?
Answers:
这完全取决于您希望算法的智能程度。
例如,这是一些问题:
我见过的最简单的算法就是对每个图像执行以下步骤:
编辑一个结合缩放算法是一个比例10个像素降低到一个时候会使用一个函数,所有的10个像素,并将其组合的颜色到一个做到这一点。可以使用平均,均值算法或双三次样条曲线等更复杂的算法来完成。
然后计算两个图像之间逐像素的平均距离。
要在数据库中查找可能的匹配项,请将像素颜色存储为数据库中的各个列,对一堆像素进行索引(但不是全部,除非您使用非常小的图像),然后执行针对每个像素使用范围的查询像素值,即 小图像中像素在要查找的图像的-5到+5之间的每个图像。
这很容易实现,并且运行起来相当快,但是当然不能处理大多数高级差异。为此,您需要更高级的算法。
测量这种情况的“经典”方法是将图像分解为一定数量的标准部分(例如10x10网格),然后计算每个单元格内部的RGB值直方图并比较相应的直方图。首选这种类型的算法,因为它既简单,又不影响缩放和(小!)转换。
像MPEG这样的视频编码算法不计算视频的每个帧之间的差异,以便它们仅可以编码增量吗?您可能会研究视频编码算法如何计算那些帧差异。
查看此开源图像搜索应用程序http://www.semanticmetadata.net/lire/。它描述了几种图像相似度算法,其中三种来自MPEG-7标准:ScalableColor,ColorLayout,EdgeHistogram和Auto Color Correlogram。
您将需要模式识别。为了确定两个图像之间的细微差异,Hopfield网络工作得很好并且很容易实现。我不知道任何可用的实现。
我想知道(我真的只是想把想法扔掉),是否可以通过从另一个图像中减去一个图像,然后将所得图像压缩为gif jpeg,并将文件大小设为相似度。
如果您有两个相同的图像,则会得到一个白色框,该框的压缩效果非常好。图像差异越大,代表的图像就越复杂,因此可压缩性越差。
可能不是理想的测试,并且可能比必要的测试慢得多,但是它可能是快速而肮脏的实现。
您可能会看一下开放源代码工具findimagedupes的代码,尽管它似乎是用perl编写的,所以我不能说它的解析是多么容易...
阅读我喜欢的findimagedupes页面,我发现有相同算法的C ++实现。大概这将更容易理解。
看来您也可以使用gqview。
好吧,不要直接回答您的问题,但是我已经看到了这种情况。微软最近启动了一个名为PhotoSynth的工具,该工具的作用非常相似,可以确定大量图片(可能具有不同的长宽比)中的重叠区域。
我想知道他们的博客上是否有任何可用的库或代码段。