计算机科学理论:图像相似度

3
所以我正在尝试比较不同的图像,想知道是否有人能指点我一些基本度量标准,使我能够对一组图像进行比较。假设我有两个图像A和B,我想尽可能多地获取每个图像的数据,这样我以后才能编程比较它们。例如“一般颜色”,“一般形状”等都很好。如果您可以帮助我找到特定的属性和算法来计算它们,那就太好了!谢谢!编辑:最终目标是让计算机告诉我两张图片的“相似程度”。如果两张图片是一样的,但在其中一个中模糊了脸,它们应该被认为是相似的。如果两张图片完全不同,计算机应该能够告诉出它们之间的差异。

它们必须完全相同还是您想要计算它们之间的“距离”?(请注意,“Metric”表示距离,需要两个参数,而“general color”是限定词,需要一个参数)。 - ruslik
无论您选择使用什么算法,请做好准备,结果可能会让人失望。目前,人类大脑在这项任务上比任何计算机都更有效率,因此您不可避免地会发现很多误报和漏报。 - biziclop
4个回答

5
你所说的内容太过笼统和不具体。
图像信息被规范化为
你似乎在寻找的是基本特征提取,然后比较这些特征。可以提取许多特征,但根据图片之间的差异,许多特征可能是无关紧要的。
图像有空间域和频率域描述符,每个都可能在这里有用。我可能能列出100多个描述符,但在你的情况下,只需一个就足够或者没有用。
预处理也很重要,也许你可以将图像转换为灰度图像,然后进行比较。 这个领域非常广泛,所以你需要更具体一些。

(更新)

你正在寻找的是数百甚至数千篇科学文章的主题。但好吧,也许一个简单的方法可以解决问题。
假设这里的问题不是识别对象,并且没有涉及到变换、平移、缩放或旋转,我们只处理两个图像,它们相同但一个可能添加了更多噪声:
1)图像域(空间域):逐个比较像素并将差的平方相加。通过宽度 * 高度进行归一化 - 只需除以像素数。这可能是相似性的有用度量。
2)频率域:将图像转换为频率域图像(使用图像处理工具,如OpenCV中的FTT),其也将是2D的。执行与上述相同的平方差,但可能要限制频率。然后通过像素数进行归一化。这在噪声和平移以及小的旋转上表现更好,但对于缩放不太有效。

谢谢Aliostad;我写得这么笼统,是因为我现在实在不太确定该寻找什么。我已经编辑了问题,以更好地解释我的最终目标。 - djs22
@djs22:这取决于您想要捕捉哪些修改。移位?裁剪?镜像?缩放?有损重新压缩?伽马校正?亮度变化? - ruslik
@ruslik:我知道这很大胆,但答案就是一切。最重要的是要看看是否有人修改了实际图像内容,例如颜色、裁剪等。压缩/镜像不会改变内容,因此对我来说无关紧要。 - djs22
@djs22:那么你需要强大的人工智能算法。也许你正在寻找分形压缩 :) - ruslik

1

SURF是比较图像的一个很好的候选算法

维基百科文章

一个实际的例子(在Mathematica中),识别两个图像中对应点的月球图像(旋转,着色和模糊):

enter image description here


1

你也可以计算这两个图像的直方图柱之间的差异总和。但这也不是万能的解决方法...


这需要两张图片。问题是关于从图像中可以计算出哪些信息,以后可以用来进行比较。 - ruslik
预先计算图像的直方图并将其存储为256字节数组难吗?(OP没有提及图像签名存储要求) - Agnius Vasiliauskas
此外,它也无法捕捉到裁剪、有损重新压缩或色度/亮度变化。 - ruslik
@ruslik, 我认为目前不存在任何签名方法可以捕捉所有可能的图像转换,这是非常自然的。 - Agnius Vasiliauskas

1

我建议看一下OpenCV。该软件包提供了上述大部分(如果不是全部)的技术。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接