【问题标题】:Identify images with same content in Java在 Java 中识别具有相同内容的图像
【发布时间】:2013-02-20 09:30:16
【问题描述】:

前段时间,为了回答this question,我花了一些时间寻找确定两个图像是否相同的方法。我现在面临一个稍微不同的问题:我手头有大约两千张图像,其中一些具有相同的内容,但是彼此的缩放/旋转版本(旋转总是 90° 的倍数),以及问题不同的压缩和图像格式(主要是 jpg,一些 png,仅此而已)。缩放比例不超过大约 2:1。我想做的是消除重复,同时保留最高质量的实例。由于 Java 是我唯一精通的语言,所以我需要使用 Java。

The answers 到另一个问题提供了许多有用的链接,但看起来它们中的任何一个都不能在缩放/旋转时识别重复。

This question along with the answers 建议首先将所有图像缩放到非常小的尺寸(比如 32*32 或 16*16),然后基本上进行一些散列,并基于散列进行比较。这对我来说听起来很聪明,可以在比较之前对图像进行预排序,在排序之后这将是一个 O(n) 问题。但是,鉴于图像可能会旋转,我不知道如何处理它;一种选择是手动浏览所有图像并决定旋转,因为它们所描绘的具有明确的方向(人眼可以很容易地决定“向上”应该是哪个方向)。如果可能的话,我想避免这种情况。

是否有既定的方法/算法(链接提到 SSIM)来处理此类问题,或者你们中的任何人都可以提出比上述更好的方法吗?也许有人知道适合该任务的Java库(在链接的问题中提到了OpenCV的Java包装器,然后是ImageJ,imgsclr)?任何帮助表示赞赏。

【问题讨论】:

    标签: java image comparison


    【解决方案1】:

    我认为这个问题的一般答案需要一种生成局部不变特征的无监督机器学习方法——基本上,这是一种寻找不随缩放或旋转而变化的散列的奇特方法——然后运行聚类算法。以下是一些可能相关的论文:

    【讨论】:

    • 干杯,我会看看那些 - 听起来不错!
    • 看完这份资料后,我想再给你几票;做我想做的事绰绰有余!
    【解决方案2】:

    我认为 dHash 是您需要的。 您只需要改进 dHash 以考虑旋转,这意味着 2000 张图像将被视为 8000 张图像。

    这几天我写了一个纯java库。您可以使用目录路径(包括子目录)来提供它,它会列出列表中的重复图像以及您要删除的绝对路径。或者,您也可以使用它来查找目录中的所有唯一图像。

    它内部使用了awt api,所以不能用于Android。由于 imageIO 无法读取大量新类型的图像,因此我使用的是内部使用的 12 个猴子 jar。

    https://github.com/srch07/Duplicate-Image-Finder-API

    可以从https://github.com/srch07/Duplicate-Image-Finder-API/blob/master/archives/duplicate_image_finder_1.0.jar下载带有内部捆绑依赖项的Jar

    该api也可以在不同大小的图像中查找重复。

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 2010-10-15
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多