4

我使用 ruby​​ 的图像库rmagick来比较两个图像,以检测它们是否实际上是相同的图像(避免重复)。

我通常这样做的方式是使用差异方法:

require 'rmagick'

img1.difference(img2)
#=> [238.738932291668, 0.001389172567175018, 0.0184313725490196]

上面的例子是两个图像的输出,这肯定是相同的。这对我来说效果很好,直到我偶然发现一个新场景,这种方法不能很好地处理 - 如果图像相同(甚至相同大小),但其中一个已被裁剪,例如边框的 10px . 现在突然之间,即使这两张图片在人眼看来完全一样,但计算机会认为它们非常不同,因为其中一张图片被裁剪了一点点。

无论如何我可以处理这种情况,所以我仍然会检测到它是相同的图像,即使其中一个被裁剪了一点?

4

1 回答 1

1

虽然您的示例图片可能看起来与人类非常相似,但原始图像数据看起来却非常不同。

您需要一些更复杂的图像处理算法,它不比较原始数据,但对变换、缩放或旋转等操作是不变的。

一般来说,我会建议你使用像OpenCV这样的计算机视觉库;它也有红宝石绑定。您可能会在文档的这一部分中查看所谓的图像时刻。归一化中心矩 nu_ij 应该对平移和缩放是不变的;如果您计算这两个图像的这些值并比较它们,您应该得到一个稍微裁剪的图像的几乎相同的值。

于 2015-09-18T16:58:23.727 回答