Ant*_*bry 89 language-agnostic algorithm image image-processing
我想比较一个应用程序(可能是一个网页)的屏幕截图与之前拍摄的屏幕截图,以确定应用程序是否正确显示自己.我不想进行完全匹配比较,因为方面可能略有不同(在Web应用程序的情况下,取决于浏览器,某些元素可能位于稍微不同的位置).它应该衡量屏幕截图的相似程度.
是否有图书馆/工具已经做到了?你会如何实现它?
ang*_*son 68
这完全取决于您希望算法的智能程度.
例如,以下是一些问题:
我见过的最简单,最简单的算法就是对每个图像执行以下步骤:
编辑一个结合缩放算法是一个缩放10个像素时下降到一个会使用一个函数,所有的10个像素的颜色和它们组合成一个做到这一点.可以使用平均,平均值或更复杂的算法(如双三次样条)等算法来完成.
然后计算两个图像之间的逐个像素的平均距离.
要在数据库中查找可能的匹配项,请将像素颜色存储为数据库中的单个列,索引其中一组(但不是全部,除非您使用非常小的图像),并执行使用每个列的范围的查询像素值,即.每个图像,其中小图像中的像素位于要查找的图像的-5到+5之间.
这很容易实现,并且运行起来相当快,但当然不会处理大多数高级差异.为此,您需要更高级的算法.
Lou*_*ndy 31
测量这种情况的"经典"方法是将图像分解为一些规范数量的部分(例如10x10网格),然后计算每个单元格内RGB值的直方图并比较相应的直方图.这种类型的算法是优选的,因为它的简单性和它对缩放和(小!)转换的不变性.
Mar*_*k B 14
像MPEG这样的视频编码算法不会计算视频每帧之间的差异,因此它们只能对delta进行编码吗?您可以研究视频编码算法如何计算这些帧差异.
看看这个开源图像搜索应用程序http://www.semanticmetadata.net/lire/.它描述了几种图像相似度算法,其中三种来自MPEG-7标准:ScalableColor,ColorLayout,EdgeHistogram和Auto Color Correlogram.
小智 13
您可以使用纯数学方法O(n^2),但只有在您确定没有偏移或类似的情况下它才有用.(虽然如果你有一些具有均匀着色的物体,它仍然可以很好地工作.)
无论如何,这个想法是计算两个矩阵的归一化点积.
C = sum(Pij*Qij)^2/(sum(Pij^2)*sum(Qij^2)).
这个公式实际上是矩阵之间角度的"余弦"(wierd).相似性越大(比如说Pij=Qij),C就会为1,如果它们完全不同,就让每一个i,j Qij = 1(避免零分割)Pij = 255,然后对于大小nxn,越大n,我们就越接近于零得到.(通过粗略计算:) C=1/n^2.
如何衡量两幅图像之间的相似性,完全取决于你想测量,例如什么:对比度,亮度,情态,噪声......然后选择最合适的相似性度量有你.您可以选择MAD(平均绝对差值),MSD(均方差),它们有助于测量亮度......还有可用的CR(相关系数),它可以很好地表示两个图像之间的相关性.你也可以从如基于直方图相似措施选择SDH(差分图像直方图的标准偏差)或类似的多模态相似的措施MI(互信息)或NMI(归一化互信息).
由于这种相似性测量的成本很高,因此建议在对其应用这些测量之前缩小图像.