前段时间,为了回答这个问题,我花了一些时间寻找确定两个图像是否相同的方法。我现在面临一个稍微不同的问题:我手头有大约两千张图像,其中一些具有相同的内容,但是彼此的缩放/旋转版本(旋转总是 90° 的倍数),以及问题不同的压缩和图像格式(主要是 jpg,一些 png,仅此而已)。缩放比例不超过大约 2:1。我想做的是消除重复,同时保留最高质量的实例。由于Java是我相当精通的唯一语言,因此我需要使用Java。
不同问题的答案提供了许多有用的链接,但看起来它们中的任何一个都不能在缩放/旋转时识别重复项。
这个问题连同答案建议首先将所有图像缩放到非常小的尺寸(比如 32*32 或 16*16),然后基本上进行一些散列,并基于散列进行比较。这对我来说听起来很聪明,可以在比较之前对图像进行预排序,在排序之后这将是一个 O(n) 问题。但是,鉴于图像可能会旋转,我不知道如何处理它;一种选择是手动浏览所有图像并决定旋转,因为它们所描绘的内容具有明确的方向(人眼可以很容易地决定应该“向上”的方向)。如果可能的话,我想避免这种情况。
是否有既定的方法/算法(链接提到 SSIM)来处理此类问题,或者你们中的任何人都可以提出比上述更好的方法吗?也许有人知道适合该任务的 Java 库(在链接的问题中提到了 OpenCV 的 Java 包装器,然后是 ImageJ、imgsclr)?任何帮助表示赞赏。