Algorithm 如何衡量两幅图像之间的相似性?
我想将一个应用程序(可能是网页)的屏幕截图与之前拍摄的屏幕截图进行比较,以确定应用程序是否正确显示自己。我不想进行精确的匹配比较,因为方面可能略有不同(对于Web应用程序,根据浏览器的不同,某些元素可能位于稍微不同的位置)。它应该给出屏幕截图的相似程度Algorithm 如何衡量两幅图像之间的相似性?,algorithm,language-agnostic,image,image-processing,Algorithm,Language Agnostic,Image,Image Processing,我想将一个应用程序(可能是网页)的屏幕截图与之前拍摄的屏幕截图进行比较,以确定应用程序是否正确显示自己。我不想进行精确的匹配比较,因为方面可能略有不同(对于Web应用程序,根据浏览器的不同,某些元素可能位于稍微不同的位置)。它应该给出屏幕截图的相似程度 是否有一个库/工具已经做到了这一点?您将如何实施它?好吧,我不想直接回答您的问题,但我看到了这种情况。微软最近推出了一个名为的工具,它的功能非常类似于确定大量图片中的重叠区域(可能具有不同的纵横比) 我想知道他们的博客上是否有可用的库或代码片段。
是否有一个库/工具已经做到了这一点?您将如何实施它?好吧,我不想直接回答您的问题,但我看到了这种情况。微软最近推出了一个名为的工具,它的功能非常类似于确定大量图片中的重叠区域(可能具有不同的纵横比) 我想知道他们的博客上是否有可用的库或代码片段。你需要这些。要确定两个图像之间的微小差异,可以很好地工作,并且很容易实现。不过,我不知道有什么可用的实现方法。我想知道(我真的只是想把这个想法抛在脑后)是否可以通过从一幅图像中减去另一幅图像,然后将生成的图像压缩为gif的jpeg格式,并将文件大小作为相似性的衡量标准来得到某种东西 如果你有两个相同的图像,你会得到一个白色的框,它会压缩得很好。图像差异越大,表示起来就越复杂,因此压缩性就越小
可能不是一个理想的测试,可能比必要的测试慢得多,但它可能是一个快速而肮脏的实现。您可能会看到开源工具的代码,尽管它似乎是用perl编写的,所以我不能说解析有多容易 阅读我喜欢的FindImageDups页面,我发现有一个。这大概更容易理解
您似乎也可以使用。来扩展Vaibhav的注释,是一个开源的“自动标题器”,应该对这个问题有一些了解。好的,一个真正的基本使用方法可以检查每一个像素的颜色,并将其与第二张图像上相应的像素颜色进行比较——但这可能是一个非常非常缓慢的解决方案。这完全取决于你有多聪明希望算法是正确的 例如,以下是一些问题:
- 裁剪图像与未裁剪图像
- 添加文本的图像与不添加文本的图像
- 镜像图像
这很容易实现,运行速度也相当快,但当然不会处理最高级的差异。为此,您需要更先进的算法。测量这一点的“经典”方法是将图像分成一些标准数量的部分(例如10x10网格),然后计算每个单元格内RGB值的直方图,并比较相应的直方图。这种类型的算法是首选的,因为它既简单,又对缩放和(小!)平移不变性。使用归一化颜色直方图。(阅读应用程序部分),它们通常用于图像检索/匹配系统,是匹配图像的标准方法,非常可靠、相对快速且易于实现 基本上,颜色直方图将捕获图像的颜色分布。然后将其与另一幅图像进行比较,以查看颜色分布是否匹配 这种类型的匹配对缩放(直方图归一化后)和旋转/移位/移动等具有很强的适应性 避免逐像素比较,因为如果图像稍微旋转/移动,则可能导致报告的差异较大
直方图可以直接生成(假设您可以访问像素值),但如果您不喜欢,该库是做这类工作的一个很好的资源。是一个powerpoint演示文稿,向您展示如何使用OpenCV创建直方图。像MPEG这样的视频编码算法难道不计算视频每帧之间的差异,以便只编码增量吗?您可以研究视频编码算法如何计算这些帧差异
看看这个开源图像搜索应用程序。它描述了几种图像相似性算法,其中三种来自MPEG-7标准:ScalableColor、ColorLayout、EdgeHistogram和Auto Color Correlogram。如果这是您偶尔会做的事情,不需要自动化,您可以在支持图层的图像编辑器中完成,例如Photoshop或Paint Shop Pro(也可能是GIMP或Paint.Net,