我想将一个应用程序(可能是网页)的屏幕快照与先前获取的屏幕快照进行比较,以确定该应用程序是否正确显示了自己。 我不希望进行完全匹配比较,因为方面可能略有不同(对于Web应用程序,取决于浏览器,某些元素可能位于稍有不同的位置)。 它应该衡量屏幕截图的相似程度。

是否已经有一个库/工具? 您将如何实施?

===============>>#1 票数:68 已采纳

这完全取决于您希望算法的智能程度。

例如,这是一些问题:

  • 裁剪的图像与未裁剪的图像
  • 带有文字的图像与没有文字的图像
  • 镜像图像

我见过的最简单最简单的算法就是对每个图像执行以下步骤:

  1. 缩放到较小的尺寸(例如64x64或32x32),而不考虑宽高比,请使用组合缩放算法而不是最近的像素
  2. 缩放颜色范围,以使最暗的为黑色,最亮的为白色
  3. 旋转并翻转图像,以使最大的颜色在左上角,然后右上角变暗,左下角变暗(当然要尽可能)

编辑 组合缩放算法是一种将10像素缩小到1的算法 ,该函数将使用所有这10个像素的颜色并将它们合并为一个的函数。 可以使用平均,均值或更复杂的算法(例如三次三次样条)来完成。

然后计算两个图像之间逐像素的平均距离。

要在数据库中查找可能的匹配项,请将像素颜色存储为数据库中的各个列,对它们进行索引(但不是全部,除非使用很小的图像),然后进行查询以对每个像素使用范围像素值,即 小图像中像素在要查找的图像的-5到+5之间的每个图像。

这很容易实现,并且运行起来相当快,但是当然不能处理大多数高级差异。 为此,您需要更高级的算法。

===============>>#2 票数:31

衡量这种情况的“经典”方法是将图像分解为一定数量的标准部分(例如10x10网格),然后计算每个单元格内部的RGB值直方图并比较相应的直方图。 首选这种类型的算法,因为它简单易行,并且缩放和(small!)转换不变。

===============>>#3 票数:25

使用规格化的颜色直方图。 (在此处阅读有关应用程序的部分),它们通常用于图像检索/匹配系统,并且是一种非常可靠,相对快速且易于实现的匹配图像的标准方法。

本质上,颜色直方图将捕获图像的颜色分布。 然后可以将其与另一张图像进行比较,以查看颜色分布是否匹配。

这种匹配非常适合缩放(一旦对直方图进行归一化),旋转/移位/移动等。

避免逐像素比较,因为图像稍微旋转/移动可能会导致报告较大差异。

直方图很容易生成(假设您可以访问像素值),但是如果您不喜欢它,则OpenCV库是进行此类操作的理想资源。 是一个PowerPoint演示文稿,向您展示如何使用OpenCV创建直方图。

===============>>#4 票数:14

像MPEG这样的视频编码算法不计算视频的每个帧之间的差异,以便它们可以对增量进行编码吗? 您可能会研究视频编码算法如何计算那些帧差异。

查看此开源图像搜索应用程序http://www.semanticmetadata.net/lire/ 它描述了几种图像相似度算法,其中三种来自MPEG-7标准:ScalableColor,ColorLayout,EdgeHistogram和Auto Color Correlogram。

===============>>#5 票数:13

您可以使用O(n^2)的纯数学方法,但是仅当您确定没有偏移量或类似的东西时,它才有用。 (尽管如果您有一些具有均匀颜色的对象,它仍然可以很好地工作。)

无论如何,这个想法是计算两个矩阵的归一化点积。 C = sum(Pij*Qij)^2/(sum(Pij^2)*sum(Qij^2))

该公式实际上是矩阵之间的角度(余弦)的“余弦”。 相似度越大(让我们说Pij=Qij ),C将等于1,如果它们完全不同,则对于每个i,j Qij = 1 (避免零除),让Pij = 255 ,然后对于大小nxnn越大,我们越接近零。 (通过粗略计算: C=1/n^2 )。

===============>>#6 票数:8

您将需要模式识别 为了确定两个图像之间的细微差异, Hopfield网络工作得很好并且很容易实现。 我不知道任何可用的实现。

===============>>#7 票数:7

可以在这里找到红宝石溶液

从自述文件:

Phashion是围绕pHash库(“感知哈希”)的Ruby包装,可检测重复的和几乎重复的多媒体文件

===============>>#8 票数:5

如何测量两个图像之间的相似性完全取决于您要测量的内容,例如:对比度,亮度,模态,噪声...,然后选择最适合您的相似性度量。 您可以选择适合测量亮度的MAD (平均绝对差), MSD (均方差)...还有可用的CR (相关系数),可以很好地表示两个图像之间的相关性。 您还可以从基于直方图的相似性度量(例如SDH (差异图像直方图的标准差))或多模态相似性度量(如MI (互信息)或NMI (归一化互信息))中进行选择。

由于这种相似性度量会花费大量时间,因此建议在对这些度量应用这些度量之前先缩小图像。

===============>>#9 票数:4

我想知道(我真的只是想把想法扔掉),是否可以通过从另一张图片中减去一张图片,然后将生成的图片压缩为gif jpeg,并将文件大小设为相似度。

如果您有两个相同的图像,则会得到一个白色框,该框的压缩效果非常好。 图像差异越大,代表的图像就越复杂,因此可压缩性越差。

可能不是理想的测试,并且可能比必要的测试慢得多,但是它可能是快速而肮脏的实现。

===============>>#10 票数:3

您可能会看一下开放源代码工具findimagedupes的代码,尽管它似乎是用perl编写的,所以我不能说它的解析是多么容易...

阅读我喜欢的findimagedupes页面,我发现有相同算法C ++实现 大概这将更容易理解。

看来您也可以使用gqview

===============>>#11 票数:2

有用于基于内容的图像检索的软件,该软件可以(部分地)满足您的需求。 从项目站点链接了所有参考文献和说明,还有一本简短的教科书(Kindle): LIRE

===============>>#12 票数:2

好吧,不要直接回答您的问题,但是我已经看到了这种情况。 微软最近启动了一个名为PhotoSynth的工具,该工具的作用非常相似,可以确定大量图片(可能具有不同的长宽比)中的重叠区域。

我想知道他们的博客上是否有任何可用的库或代码片段。

===============>>#13 票数:2

为了进一步说明Vaibhav的观点hugin是一个开放源代码的“自动缝合器”,应该对此问题有所了解。

===============>>#14 票数:0

如果您偶尔需要这样做并且不需要自动化,则可以在支持图层的图像编辑器中进行,例如Photoshop或Paint Shop Pro(也可能是GIMP或Paint.Net,但是我我不确定那些)。 打开两个屏幕截图,然后将其中一个作为图层放在另一个之上。 将图层混合模式更改为“差异”,两者之间的所有相同内容都会变为黑色。 您可以四处移动顶层,以最大程度地减少对齐差异。

===============>>#15 票数:0

好吧,真正使用的基本方法可以遍历每个像素颜色,并将其与第二个图像上的相应像素颜色进行比较-但这可能是一个非常慢的解决方案。

===============>>#16 票数:0

在本教程之后,您可以使用Siamese Network查看两个图像是相似还是相异。 本教程将相似的图像聚类,而您可以使用L2距离来测量两个图像的相似性。

===============>>#17 票数:0

“超越比较”对图像进行逐像素比较,例如,

在此处输入图片说明

  ask by Antoine Aubry translate from so

未解决问题?本站智能推荐:

7回复

测量图像中痕迹的平均厚度

这是问题所在:我有许多由不同厚度的痕迹组成的二进制图像。 下面有两张图片来说明问题: 第一张图片 - 大小:711 x 643 px 第二张图片 - 尺寸:930 x 951像素 我需要的是测量图像中痕迹的平均厚度(以像素为单位)。 事实上,图像中痕迹的平均厚度是一种有
6回复

在图像中定位桥状结构的端点

如何在图像中找到桥状结构的端点? 以下是一般概括。 我有一组看起来像你在左栏上看到的图像,如上图所示。 我想要检测/定位的实际上是上图中右侧列显示的两个端点。 这就像找到“桥梁”的“两端点”一样。 我已经应用了一些基本的形态学操作; 但是,要么我做错了,要么那些基本的形
2回复

在二维数组中旋转像素数据x度(PseudoCode或Python3)

对于学校项目,我们的信息学老师希望我们重新发明轮子。 我们给出了一个数组,表示图像的像素,包含在另一个脚本中定义的颜色对象。 它们代表一组4个整数,红色,绿色,蓝色和Alpha值的值为0到255。 现在我们必须对此数组进行图像处理的标准操作。 我们被明确告知,使用互联网和问题网站就像堆栈
2回复

消除文档图像中的噪音

我正在开发一个自动处理扫描发票的项目。 为了获得更好的OCR引擎效果,我想首先从图像中去除噪声。 除了划痕,我还想删除打印后添加到文档中的任何内容。 许多发票例如被勾掉了,有时它会使发票的某些部分对OCR不可读。 例如,看看这个图像。 第二项的描述是不可读的,我想删除那样的“噪音”
3回复

找到使图像在列表中唯一的像素,你可以改善蛮力吗?

假设我有一个字符串列表,其中每个字符串都是 正好4个字符长 在列表中是唯一的。 对于这些字符串中的每一个,我想识别字符串中字符的位置,使字符串唯一。 所以对于三个字符串的列表 对于第一个字符串,我想识别第四个位置d中的字符,因为d没有出现在任何其他字符串的
4回复

以编程方式获取图像中使用的颜色数量

题: 给定PNG格式的图像,以编程方式获得图像中使用的颜色数量的最简单方法是什么? 限制条件: 该解决方案将集成到在Linux下运行的shell脚本中,因此适合这种环境的任何解决方案都可以。 请注意,“图像文件的色彩容量”不一定与“使用的色彩”相对应。 示例
1回复

如何以编程方式对图像是“个人”的可能性进行评分?

问题:我想以编程方式查找“个人”性质的图像文件。 与其他图像文件相比,这些文件通常倾向于共享(或缺乏)什么特征? 到目前为止,我只是在使用: (file.size > 750000 && file.size < 750000000) // bytes
1回复

比较两个图像/匹配复杂的手势

任何人都可以对匹配复杂模式的思考过程提出一些建议。 例如,如果我向用户显示高音谱号,然后他们绘制了图案。 我需要生成一个数字,表示线与源的距离有多近。 在我的示例中,我只想忽略最终产品的速度,暂停或其他基于时间的元素。 我一直在绞尽脑汁,“谷歌”,但没有看到任何有帮助的例子。
3回复

如何获得两个图像之间的矩形区域?

我觉得我有一个非常典型的图像比较问题,我的谷歌没有揭示答案。 我想每X秒发送一次桌面静止图像。 目前,如果新旧图像相差甚至一个像素,我们会发送新图像。 通常只有非常小的变化,如时钟或图标,如果我可以将更改的部分发送到服务器并更新图像(减少带宽),那将是很好的。 我设想的计划是获得
1回复

两个图像的图像合成

我正在尝试解决用Java合成两个图像的问题。 该程序将获取第一张图像的一部分,并将其粘贴到第二张图像上。 目的是使两个图像之间的边界不太明显。 边界的选择必须使边界处的两个图像之间的差异很小。 我的任务: 编写一种方法来选择两个图像之间的边界。 该方法将接收输入图像的重叠部